15#include <boost/algorithm/string/predicate.hpp>
29 int const geometry_dimension,
31 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
34 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
42 if (property_type ==
"Constant")
46 if (property_type ==
"Curve")
50 if (property_type ==
"Linear")
55 if (property_type ==
"Exponential")
59 if (property_type ==
"Function")
64 if (property_type ==
"Parameter")
69 if (boost::iequals(property_type,
"AverageMolarMass"))
74 if (boost::iequals(property_type,
"ClausiusClapeyron"))
79 if (boost::iequals(property_type,
"Dupuit"))
84 if (boost::iequals(property_type,
85 "EffectiveThermalConductivityPorosityMixing"))
88 geometry_dimension, config, local_coordinate_system);
91 if (boost::iequals(property_type,
"IdealGasLaw"))
96 if (boost::iequals(property_type,
"IdealGasLawBinaryMixture"))
101 if (boost::iequals(property_type,
"StrainDependentPermeability"))
104 geometry_dimension, config, parameters, local_coordinate_system);
107 if (boost::iequals(property_type,
"GasPressureDependentPermeability"))
110 geometry_dimension, config, parameters, local_coordinate_system);
113 if (boost::iequals(property_type,
"EmbeddedFracturePermeability"))
119 if (boost::iequals(property_type,
120 "OrthotropicEmbeddedFracturePermeability"))
123 geometry_dimension, config, parameters);
126 if (boost::iequals(property_type,
127 "PermeabilityMohrCoulombFailureIndexModel"))
130 geometry_dimension, config, parameters, local_coordinate_system);
133 if (boost::iequals(property_type,
"KozenyCarman"))
138 if (boost::iequals(property_type,
"VermaPruess"))
143 if (boost::iequals(property_type,
"PermeabilityOrthotropicPowerLaw"))
146 local_coordinate_system);
149 if (boost::iequals(property_type,
"PorosityFromMassBalance"))
154 if (boost::iequals(property_type,
"TransportPorosityFromMassBalance"))
159 if (boost::iequals(property_type,
"SaturationBrooksCorey"))
164 if (boost::iequals(property_type,
"RelPermBrooksCorey"))
169 if (boost::iequals(property_type,
"RelPermBrooksCoreyNonwettingPhase"))
174 if (boost::iequals(property_type,
"SaturationLiakopoulos"))
179 if (boost::iequals(property_type,
"RelPermLiakopoulos"))
184 if (boost::iequals(property_type,
"SaturationExponential"))
188 if (boost::iequals(property_type,
"SaturationVanGenuchten"))
193 if (boost::iequals(property_type,
"CapillaryPressureVanGenuchten"))
198 if (boost::iequals(property_type,
199 "CapillaryPressureRegularizedVanGenuchten"))
204 if (boost::iequals(property_type,
"RelativePermeabilityVanGenuchten"))
209 if (boost::iequals(property_type,
210 "RelativePermeabilityNonWettingPhaseVanGenuchtenMualem"))
215 if (boost::iequals(property_type,
"RelativePermeabilityUdell"))
220 if (boost::iequals(property_type,
221 "RelativePermeabilityUdellNonwettingPhase"))
226 if (boost::iequals(property_type,
"SaturationDependentThermalConductivity"))
231 if (boost::iequals(property_type,
"SaturationDependentSwelling"))
234 local_coordinate_system);
237 if (boost::iequals(property_type,
"BishopsPowerLaw"))
242 if (boost::iequals(property_type,
"BishopsSaturationCutoff"))
247 if (boost::iequals(property_type,
"LinearSaturationSwellingStress"))
252 if (boost::iequals(property_type,
"SoilThermalConductivitySomerton"))
255 geometry_dimension, config, parameters, local_coordinate_system);
258 if (boost::iequals(property_type,
"WaterVapourDensity"))
263 if (boost::iequals(property_type,
"VapourDiffusionFEBEX"))
268 if (boost::iequals(property_type,
"VapourDiffusionPMQ"))
273 if (boost::iequals(property_type,
"LinearWaterVapourLatentHeat"))
278 if (boost::iequals(property_type,
279 "WaterVapourLatentHeatWithCriticalTemperature"))
284 if (boost::iequals(property_type,
"TemperatureDependentDiffusion"))
290 OGS_FATAL(
"The specified component property type '{:s}' was not recognized",
298 int const geometry_dimension,
299 std::optional<BaseLib::ConfigTree>
const& config,
300 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
302 std::map<std::string,
303 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
312 auto const& property_configs = config->getConfigSubtreeList(
"property");
313 if (property_configs.empty())
318 auto properties = std::make_unique<PropertyArray>();
320 for (
auto property_config : property_configs)
323 auto const property_name =
325 property_config.getConfigParameter<std::string>(
"name");
329 local_coordinate_system, curves);
T peekConfigParameter(std::string const ¶m) const
std::unique_ptr< Function > createFunction(BaseLib::ConfigTree const &config)
std::unique_ptr< IdealGasLawBinaryMixture > createIdealGasLawBinaryMixture(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createOrthotropicEmbeddedFracturePermeability(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< Property > createPermeabilityOrthotropicPowerLaw(BaseLib::ConfigTree const &config, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< Property > createLinearSaturationSwellingStress(BaseLib::ConfigTree const &config)
std::unique_ptr< TransportPorosityFromMassBalance > createTransportPorosityFromMassBalance(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
PropertyType convertStringToProperty(std::string const &string)
std::unique_ptr< SaturationDependentSwelling > createSaturationDependentSwelling(BaseLib::ConfigTree const &config, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< ClausiusClapeyron > createClausiusClapeyron(BaseLib::ConfigTree const &config)
std::unique_ptr< BishopsPowerLaw > createBishopsPowerLaw(BaseLib::ConfigTree const &config)
std::unique_ptr< PorosityFromMassBalance > createPorosityFromMassBalance(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< Parameter > createParameterProperty(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< SaturationLiakopoulos > createSaturationLiakopoulos(BaseLib::ConfigTree const &config)
std::unique_ptr< SaturationBrooksCorey > createSaturationBrooksCorey(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createVapourDiffusionFEBEX(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createCapillaryPressureVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< BishopsSaturationCutoff > createBishopsSaturationCutoff(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createPermeabilityMohrCoulombFailureIndexModel(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< Property > createWaterVapourLatentHeatWithCriticalTemperature(BaseLib::ConfigTree const &config)
std::unique_ptr< SaturationDependentThermalConductivity > createSaturationDependentThermalConductivity(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createGasPressureDependentPermeability(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< Property > createStrainDependentPermeability(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< RelPermUdellNonwettingPhase > createRelPermUdellNonwettingPhase(BaseLib::ConfigTree const &config)
std::unique_ptr< Curve > createCurve(BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< SaturationVanGenuchten > createSaturationVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createEffectiveThermalConductivityPorosityMixing(int const geometry_dimension, BaseLib::ConfigTree const &config, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< Property > createTemperatureDependentDiffusion(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< RelPermBrooksCorey > createRelPermBrooksCorey(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createRelPermNonWettingPhaseVanGenuchtenMualem(BaseLib::ConfigTree const &config)
std::unique_ptr< AverageMolarMass > createAverageMolarMass(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createCapillaryPressureRegularizedVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< PropertyArray > createProperties(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< Property > createSoilThermalConductivitySomerton(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system)
std::unique_ptr< RelPermUdell > createRelPermUdell(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createKozenyCarmanModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< Property > createWaterVapourDensity(BaseLib::ConfigTree const &config)
std::unique_ptr< IdealGasLaw > createIdealGasLaw(BaseLib::ConfigTree const &config)
std::unique_ptr< RelPermVanGenuchten > createRelPermVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< Exponential > createExponential(BaseLib::ConfigTree const &config)
std::unique_ptr< Constant > createConstant(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createEmbeddedFracturePermeability(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< DupuitPermeability > createDupuitPermeability(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< Property > createVapourDiffusionPMQ(BaseLib::ConfigTree const &config)
std::unique_ptr< RelPermLiakopoulos > createRelPermLiakopoulos(BaseLib::ConfigTree const &config)
std::unique_ptr< RelPermBrooksCoreyNonwettingPhase > createRelPermBrooksCoreyNonwettingPhase(BaseLib::ConfigTree const &config)
std::unique_ptr< Linear > createLinear(BaseLib::ConfigTree const &config)
std::unique_ptr< SaturationExponential > createSaturationExponential(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createLinearWaterVapourLatentHeat(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createVermaPruessModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
std::unique_ptr< MaterialPropertyLib::Property > createProperty(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)