RockGassmann::RockGassmann(const Fluid * fluid, const DryRock * dryrock) : Rock() { // Deep copy of dryrock and fluid: fluid_ = fluid->Clone(); dryrock_ = dryrock->Clone(); ComputeSeismicAndElasticParams(); }
void RockDEM::SetPorosity(double porosity) { // the following assumes inclusions are fluids double poro_old = 1.0 - inclusion_concentration_[0]; double new_volume_fraction_fluid = porosity; double new_volume_fraction_solid = 1.0 - new_volume_fraction_fluid; inclusion_concentration_[0] = new_volume_fraction_solid; for (size_t i = 1; i < inclusion_concentration_.size(); ++i) inclusion_concentration_[i] = (porosity * inclusion_concentration_[i]) / poro_old; ComputeSeismicAndElasticParams(); }
RockDEM::RockDEM(const Solid * solid, const std::vector<Fluid*> & fluid, const std::vector<double> & inclusion_spectrum, const std::vector<double> & inclusion_concentration, const std::vector<double> & u) : Rock() { u_ = u; // u contains independent samples used in quantiles of (inclusion_spectrum,inclusion_concentration), u.back() is for porosity. // Deep copy of solid and fluid: solid_ = solid->Clone(); Clone(fluid); inclusion_spectrum_ = inclusion_spectrum; inclusion_concentration_ = inclusion_concentration; ComputeSeismicAndElasticParams(); }
void RockGassmann::SetPorosity(double porosity) { dryrock_->SetTotalPorosity(porosity); ComputeSeismicAndElasticParams(); }