OGS
CreateTwoPhaseFlowPrhoMaterialProperties.cpp
Go to the documentation of this file.
1 
12 
13 #include "BaseLib/Algorithm.h"
14 #include "BaseLib/Logging.h"
23 #include "MeshLib/Mesh.h"
24 #include "MeshLib/PropertyVector.h"
25 #include "ParameterLib/Parameter.h"
28 
29 namespace ProcessLib
30 {
31 namespace TwoPhaseFlowWithPrho
32 {
33 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
35  BaseLib::ConfigTree const& config,
36  MeshLib::PropertyVector<int> const* const material_ids,
37  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
38 {
39  DBUG("Reading material properties of two-phase flow process.");
40 
42  auto const& fluid_config = config.getConfigSubtree("fluid");
43 
44  // Get fluid properties
46  auto const& rho_conf = fluid_config.getConfigSubtree("liquid_density");
47  auto _liquid_density =
50  auto const& rho_gas_conf = fluid_config.getConfigSubtree("gas_density");
51  auto _gas_density =
54  auto const& mu_conf = fluid_config.getConfigSubtree("liquid_viscosity");
55  auto _viscosity = MaterialLib::Fluid::createViscosityModel(mu_conf);
57  auto const& mu_gas_conf = fluid_config.getConfigSubtree("gas_viscosity");
58  auto _gas_viscosity = MaterialLib::Fluid::createViscosityModel(mu_gas_conf);
59 
60  // Get porous properties
61  std::vector<int> mat_ids;
62  std::vector<int> mat_krel_ids;
63  std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
64  _intrinsic_permeability_models;
65  std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
66  _porosity_models;
67  std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
68  _storage_models;
69  std::vector<
70  std::unique_ptr<MaterialLib::PorousMedium::CapillaryPressureSaturation>>
71  _capillary_pressure_models;
72  std::vector<
73  std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>
74  _relative_permeability_models;
75 
77  auto const& poro_config = config.getConfigSubtree("porous_medium");
79  for (auto const& conf : poro_config.getConfigSubtreeList("porous_medium"))
80  {
82  auto const id = conf.getConfigAttributeOptional<int>("id");
83  mat_ids.push_back(*id);
84 
86  auto const& permeability_conf = conf.getConfigSubtree("permeability");
87  _intrinsic_permeability_models.emplace_back(
89  permeability_conf, parameters));
90 
92  auto const& porosity_conf = conf.getConfigSubtree("porosity");
94  parameters);
95  _porosity_models.emplace_back(std::move(n));
96 
98  auto const& storage_conf = conf.getConfigSubtree("storage");
100  _storage_models.emplace_back(std::move(beta));
101 
102  auto const& capillary_pressure_conf =
104  conf.getConfigSubtree("capillary_pressure");
106  capillary_pressure_conf);
107  _capillary_pressure_models.emplace_back(std::move(pc));
108 
109  auto const& krel_config =
111  conf.getConfigSubtree("relative_permeability");
112  for (
113  auto const& krel_conf :
115  krel_config.getConfigSubtreeList("relative_permeability"))
116  {
117  auto const krel_id =
119  krel_conf.getConfigAttributeOptional<int>("id");
120  mat_krel_ids.push_back(*krel_id);
121  auto krel_n =
123  krel_conf);
124  _relative_permeability_models.emplace_back(std::move(krel_n));
125  }
126  BaseLib::reorderVector(_relative_permeability_models, mat_krel_ids);
127  }
128 
129  BaseLib::reorderVector(_intrinsic_permeability_models, mat_ids);
130  BaseLib::reorderVector(_porosity_models, mat_ids);
131  BaseLib::reorderVector(_storage_models, mat_ids);
132 
133  return std::make_unique<TwoPhaseFlowWithPrhoMaterialProperties>(
134  material_ids, std::move(_liquid_density), std::move(_viscosity),
135  std::move(_gas_density), std::move(_gas_viscosity),
136  std::move(_intrinsic_permeability_models), std::move(_porosity_models),
137  std::move(_storage_models), std::move(_capillary_pressure_models),
138  std::move(_relative_permeability_models));
139 }
140 
141 } // namespace TwoPhaseFlowWithPrho
142 } // namespace ProcessLib
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27
Definition of the Mesh class.
Definition of the PiecewiseLinearInterpolation class.
ConfigTree getConfigSubtree(std::string const &root) const
Definition: ConfigTree.cpp:146
std::optional< T > getConfigAttributeOptional(std::string const &attr) const
void reorderVector(std::vector< ValueType > &v, std::vector< IndexType > const &order)
Definition: Algorithm.h:232
std::unique_ptr< FluidProperty > createFluidDensityModel(BaseLib::ConfigTree const &config)
std::unique_ptr< FluidProperty > createViscosityModel(BaseLib::ConfigTree const &config)
std::unique_ptr< RelativePermeability > createRelativePermeabilityModel(BaseLib::ConfigTree const &config)
std::unique_ptr< CapillaryPressureSaturation > createCapillaryPressureModel(BaseLib::ConfigTree const &config)
std::unique_ptr< Permeability > createPermeabilityModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters)
std::unique_ptr< Porosity > createPorosityModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters)
std::unique_ptr< Storage > createStorageModel(BaseLib::ConfigTree const &config)
std::unique_ptr< TwoPhaseFlowWithPrhoMaterialProperties > createTwoPhaseFlowPrhoMaterialProperties(BaseLib::ConfigTree const &config, MeshLib::PropertyVector< int > const *const material_ids, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters)