Ejemplo n.º 1
0
void
DryRockDEM::ComputeElasticParams() {

  std::vector<double> dryrock_inc_rho, dryrock_inc_k, dryrock_inc_mu;
  std::vector<double> total_porosity(dryrock_inc_.size()), mineral_moduli_k(dryrock_inc_.size());

  dryrock_inc_rho.resize(dryrock_inc_.size());
  dryrock_inc_k.resize(dryrock_inc_.size());
  dryrock_inc_mu.resize(dryrock_inc_.size());


  for (size_t i = 0; i < dryrock_inc_.size(); ++i) {
    dryrock_inc_[i]->GetElasticParams(dryrock_inc_k[i], dryrock_inc_mu[i], dryrock_inc_rho[i]);
    total_porosity[i]   = dryrock_inc_[i]->GetTotalPorosity();
    mineral_moduli_k[i] = dryrock_inc_[i]->GetMineralModuliK();
  }

  double dryrock_rho, dryrock_k, dryrock_mu, dryrock_poro, dryrock_mineral_moduli_k;
  dryrock_->GetElasticParams(dryrock_k, dryrock_mu, dryrock_rho);
  dryrock_poro             = dryrock_->GetTotalPorosity();
  dryrock_mineral_moduli_k = dryrock_->GetMineralModuliK();

  { //Calculation of effective density if inclusion_concentration_ is filled with inclusions AND host.
    std::vector<double> dryrock_host_inc_rho(dryrock_inc_.size() + 1);
    dryrock_host_inc_rho[0] = dryrock_rho;
    std::copy(dryrock_inc_rho.begin(), dryrock_inc_rho.end(), dryrock_host_inc_rho.begin() + 1);
    rho_  = DEMTools::CalcEffectiveDensity(dryrock_host_inc_rho, inclusion_concentration_);
  }

  { //Calculation of effective total porosity if inclusion_concentration_ is filled with inclusions AND host.
    std::vector<double> dryrock_host_inc_poro(dryrock_inc_.size() + 1);
    dryrock_host_inc_poro[0] = dryrock_poro;
    std::copy(total_porosity.begin(), total_porosity.end(), dryrock_host_inc_poro.begin() + 1);
    total_porosity_  = DEMTools::CalcEffectivePorosity(dryrock_host_inc_poro, inclusion_concentration_);
  }

  { //Calculation of effective mineral moduli k if inclusion_concentration_ is filled with inclusions AND host.
    std::vector<double> dryrock_host_inc_moduli_k(dryrock_inc_.size() + 1);
    dryrock_host_inc_moduli_k[0] = dryrock_mineral_moduli_k;
    std::copy(mineral_moduli_k.begin(), mineral_moduli_k.end(), dryrock_host_inc_moduli_k.begin() + 1);
    mineral_moduli_k_  = DEMTools::CalcEffectiveElasticModuliUsingHill(dryrock_host_inc_moduli_k, inclusion_concentration_);
  }

  //remove host from inclusion vector
  std::vector<double> inc_conc(dryrock_inc_.size());
  std::copy(inclusion_concentration_.begin()+1, inclusion_concentration_.end(), inc_conc.begin());

  DEMTools::CalcEffectiveBulkAndShearModulus(dryrock_inc_k,
                                             dryrock_inc_mu,
                                             inclusion_spectrum_,
                                             inc_conc,
                                             dryrock_k,
                                             dryrock_mu,
                                             k_,
                                             mu_);
}
Ejemplo n.º 2
0
void
RockDEM::ComputeSeismicAndElasticParams() {
  std::vector<double> fluid_rho, fluid_k, fluid_mu;

  fluid_rho.resize(fluid_.size());
  fluid_k.resize(fluid_.size());
  fluid_mu.resize(fluid_.size(), 0.0);

  for (size_t i = 0; i < fluid_.size(); ++i)
    fluid_[i]->GetElasticParams(fluid_k[i], fluid_rho[i]);


  double solid_rho, solid_k, solid_mu;
  solid_->GetElasticParams(solid_k, solid_mu, solid_rho);

  { //Calculation of effective density if inclusion_concentration_ is filled with inclusions AND host.
    std::vector<double> fluid_host_inc_rho(fluid_.size() + 1);
    fluid_host_inc_rho[0] = solid_rho;
    std::copy(fluid_rho.begin(), fluid_rho.end(), fluid_host_inc_rho.begin() + 1);
    rho_  = DEMTools::CalcEffectiveDensity(fluid_host_inc_rho, inclusion_concentration_);
  }

  //remove host from inclusion vector
  std::vector<double> inc_conc(fluid_.size());
  std::copy(inclusion_concentration_.begin() + 1, inclusion_concentration_.end(), inc_conc.begin());

  DEMTools::CalcEffectiveBulkAndShearModulus(fluid_k,
                                             fluid_mu,
                                             inclusion_spectrum_,
                                             inc_conc,
                                             solid_k,
                                             solid_mu,
                                             k_,
                                             mu_);

  DEMTools::CalcSeismicParamsFromElasticParams(k_, mu_, rho_, vp_, vs_);
}