6#include <boost/algorithm/string/predicate.hpp>
20 int const geometry_dimension,
22 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
25 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
33 if (property_type ==
"Constant")
37 if (property_type ==
"Curve")
41 if (property_type ==
"Linear")
46 if (property_type ==
"Exponential")
50 if (property_type ==
"Function")
55 if (property_type ==
"Parameter")
60 if (boost::iequals(property_type,
"AverageMolarMass"))
65 if (boost::iequals(property_type,
"ClausiusClapeyron"))
70 if (boost::iequals(property_type,
"CubicLawPermeability"))
75 if (boost::iequals(property_type,
"Dupuit"))
80 if (boost::iequals(property_type,
81 "EffectiveThermalConductivityPorosityMixing"))
84 geometry_dimension, config, local_coordinate_system);
87 if (boost::iequals(property_type,
"IdealGasLaw"))
92 if (boost::iequals(property_type,
"PengRobinson"))
97 if (boost::iequals(property_type,
"IdealGasLawBinaryMixture"))
102 if (boost::iequals(property_type,
"StrainDependentPermeability"))
105 geometry_dimension, config, parameters, local_coordinate_system);
108 if (boost::iequals(property_type,
"GasPressureDependentPermeability"))
111 geometry_dimension, config, parameters, local_coordinate_system);
114 if (boost::iequals(property_type,
"EmbeddedFracturePermeability"))
120 if (boost::iequals(property_type,
121 "OrthotropicEmbeddedFracturePermeability"))
124 geometry_dimension, config, parameters);
127 if (boost::iequals(property_type,
128 "PermeabilityMohrCoulombFailureIndexModel"))
131 geometry_dimension, config, parameters, local_coordinate_system);
134 if (boost::iequals(property_type,
"KozenyCarman"))
139 if (boost::iequals(property_type,
"VermaPruess"))
144 if (boost::iequals(property_type,
"PermeabilityOrthotropicPowerLaw"))
147 local_coordinate_system);
150 if (boost::iequals(property_type,
"PorosityFromMassBalance"))
155 if (boost::iequals(property_type,
"TransportPorosityFromMassBalance"))
160 if (boost::iequals(property_type,
"SaturationBrooksCorey"))
165 if (boost::iequals(property_type,
"RelPermBrooksCorey"))
170 if (boost::iequals(property_type,
"RelPermBrooksCoreyNonwettingPhase"))
175 if (boost::iequals(property_type,
"SaturationLiakopoulos"))
180 if (boost::iequals(property_type,
"RelPermLiakopoulos"))
185 if (boost::iequals(property_type,
"SaturationExponential"))
189 if (boost::iequals(property_type,
"SaturationVanGenuchten"))
193 if (boost::iequals(property_type,
"SaturationLuMcCartney"))
198 if (boost::iequals(property_type,
199 "SaturationVanGenuchtenWithVolumetricStrain"))
204 if (boost::iequals(property_type,
"CapillaryPressureVanGenuchten"))
209 if (boost::iequals(property_type,
210 "CapillaryPressureRegularizedVanGenuchten"))
215 if (boost::iequals(property_type,
"RelativePermeabilityVanGenuchten"))
220 if (boost::iequals(property_type,
221 "RelativePermeabilityNonWettingPhaseVanGenuchtenMualem"))
226 if (boost::iequals(property_type,
"RelativePermeabilityUdell"))
231 if (boost::iequals(property_type,
232 "RelativePermeabilityUdellNonwettingPhase"))
237 if (boost::iequals(property_type,
238 "RelativePermeabilityGeneralizedPowerNonwettingPhase"))
243 if (boost::iequals(property_type,
"RelativePermeabilityGeneralizedPower"))
248 if (boost::iequals(property_type,
"SaturationDependentSwelling"))
251 local_coordinate_system);
254 if (boost::iequals(property_type,
"Sigmoid"))
259 if (boost::iequals(property_type,
"SpecificHeatCapacityWithLatentHeat"))
264 if (boost::iequals(property_type,
"BishopsPowerLaw"))
269 if (boost::iequals(property_type,
"BishopsSaturationCutoff"))
274 if (boost::iequals(property_type,
"LinearSaturationSwellingStress"))
279 if (boost::iequals(property_type,
"SaturationWeightedThermalConductivity"))
285 if (boost::iequals(property_type,
"WaterDensityIAPWSIF97Region1"))
290 if (boost::iequals(property_type,
291 "WaterSaturationTemperatureIAPWSIF97Region4"))
296 if (boost::iequals(property_type,
"WaterEnthalpyIAPWSIF97Region1"))
301 if (boost::iequals(property_type,
"WaterLiquidDensityIAPWSIF97Region4"))
306 if (boost::iequals(property_type,
"WaterVapourDensityIAPWSIF97Region4"))
311 if (boost::iequals(property_type,
"WaterLiquidEnthalpyIAPWSIF97Region4"))
316 if (boost::iequals(property_type,
"WaterVapourEnthalpyIAPWSIF97Region4"))
321 if (boost::iequals(property_type,
"WaterTemperatureIAPWSIF97Region1"))
326 if (boost::iequals(property_type,
"WaterVapourDensity"))
331 if (boost::iequals(property_type,
"VapourDiffusionFEBEX"))
336 if (boost::iequals(property_type,
"VapourDiffusionDeVries"))
341 if (boost::iequals(property_type,
"VapourDiffusionPMQ"))
346 if (boost::iequals(property_type,
"LinearWaterVapourLatentHeat"))
351 if (boost::iequals(property_type,
352 "WaterVapourLatentHeatWithCriticalTemperature"))
357 if (boost::iequals(property_type,
"TemperatureDependentDiffusion"))
362 if (boost::iequals(property_type,
"VolumeFractionAverage"))
367 if (boost::iequals(property_type,
"WaterViscosityIAPWS"))
372 if (boost::iequals(property_type,
"LiquidViscosityVogels"))
377 if (boost::iequals(property_type,
"WaterThermalConductivityIAPWS"))
383 OGS_FATAL(
"The specified component property type '{:s}' was not recognized",
391 int const geometry_dimension,
392 std::optional<BaseLib::ConfigTree>
const& config,
393 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
395 std::map<std::string,
396 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
405 auto const& property_configs = config->getConfigSubtreeList(
"property");
406 if (property_configs.empty())
411 auto properties = std::make_unique<PropertyArray>();
413 for (
auto property_config : property_configs)
416 auto const property_name =
418 property_config.getConfigParameter<std::string>(
"name");
421 createProperty(geometry_dimension, property_config, parameters,
422 local_coordinate_system, curves);
T peekConfigParameter(std::string const ¶m) const
std::unique_ptr< Property > createWaterEnthalpyIAPWSIF97Region1(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterDensityIAPWSIF97Region1(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterViscosityIAPWS(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 > createPengRobinson(BaseLib::ConfigTree const &config)
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< Property > createWaterLiquidEnthalpyIAPWSIF97Region4(BaseLib::ConfigTree const &config)
std::unique_ptr< SaturationLuMcCartney > createSaturationLuMcCartney(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< PropertyArray > createProperties(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
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< Function > createFunction(BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
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 > createWaterTemperatureIAPWSIF97Region1(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 > createLiquidViscosityVogels(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterVapourLatentHeatWithCriticalTemperature(BaseLib::ConfigTree const &config)
std::unique_ptr< SaturationVanGenuchtenWithVolumetricStrain > createSaturationVanGenuchtenWithVolumetricStrain(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< Property > createWaterSaturationTemperatureIAPWSIF97Region4(BaseLib::ConfigTree const &config)
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 > createCubicLawPermeability(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
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< SpecificHeatCapacityWithLatentHeat > createSpecificHeatCapacityWithLatentHeat(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 > createWaterLiquidDensityIAPWSIF97Region4(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createCapillaryPressureRegularizedVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< RelPermGeneralizedPower > createRelPermGeneralizedPower(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterThermalConductivityIAPWS(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterVapourEnthalpyIAPWSIF97Region4(BaseLib::ConfigTree const &config)
std::unique_ptr< Sigmoid > createSigmoid(BaseLib::ConfigTree const &config)
Create a Sigmoid property from XML configuration.
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< VolumeFractionAverage > createVolumeFractionAverage(BaseLib::ConfigTree const &config)
std::unique_ptr< RelPermGeneralizedPowerNonwettingPhase > createRelPermGeneralizedPowerNonwettingPhase(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterVapourDensity(BaseLib::ConfigTree const &config)
std::unique_ptr< IdealGasLaw > createIdealGasLaw(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createSaturationWeightedThermalConductivity(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > ¶meters)
std::unique_ptr< RelPermVanGenuchten > createRelPermVanGenuchten(BaseLib::ConfigTree const &config)
std::unique_ptr< Exponential > createExponential(BaseLib::ConfigTree const &config)
std::unique_ptr< Property > createWaterVapourDensityIAPWSIF97Region4(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 > createVapourDiffusionDeVries(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 > > ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
A local coordinate system used for tensor transformations.