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"))
194 if (boost::iequals(property_type,
195 "SaturationVanGenuchtenWithVolumetricStrain"))
200 if (boost::iequals(property_type,
"CapillaryPressureVanGenuchten"))
205 if (boost::iequals(property_type,
206 "CapillaryPressureRegularizedVanGenuchten"))
211 if (boost::iequals(property_type,
"RelativePermeabilityVanGenuchten"))
216 if (boost::iequals(property_type,
217 "RelativePermeabilityNonWettingPhaseVanGenuchtenMualem"))
222 if (boost::iequals(property_type,
"RelativePermeabilityUdell"))
227 if (boost::iequals(property_type,
228 "RelativePermeabilityUdellNonwettingPhase"))
233 if (boost::iequals(property_type,
234 "RelativePermeabilityGeneralizedPowerNonwettingPhase"))
239 if (boost::iequals(property_type,
"RelativePermeabilityGeneralizedPower"))
244 if (boost::iequals(property_type,
"SaturationDependentSwelling"))
247 local_coordinate_system);
250 if (boost::iequals(property_type,
"TemperatureDependentFraction"))
255 if (boost::iequals(property_type,
"SpecificHeatCapacityWithLatentHeat"))
260 if (boost::iequals(property_type,
"BishopsPowerLaw"))
265 if (boost::iequals(property_type,
"BishopsSaturationCutoff"))
270 if (boost::iequals(property_type,
"LinearSaturationSwellingStress"))
275 if (boost::iequals(property_type,
"SaturationWeightedThermalConductivity"))
281 if (boost::iequals(property_type,
"WaterDensityIAPWSIF97Region1"))
286 if (boost::iequals(property_type,
287 "WaterSaturationTemperatureIAPWSIF97Region4"))
292 if (boost::iequals(property_type,
"WaterEnthalpyIAPWSIF97Region1"))
297 if (boost::iequals(property_type,
"WaterLiquidDensityIAPWSIF97Region4"))
302 if (boost::iequals(property_type,
"WaterVapourDensityIAPWSIF97Region4"))
307 if (boost::iequals(property_type,
"WaterLiquidEnthalpyIAPWSIF97Region4"))
312 if (boost::iequals(property_type,
"WaterVapourEnthalpyIAPWSIF97Region4"))
317 if (boost::iequals(property_type,
"WaterTemperatureIAPWSIF97Region1"))
322 if (boost::iequals(property_type,
"WaterVapourDensity"))
327 if (boost::iequals(property_type,
"VapourDiffusionFEBEX"))
332 if (boost::iequals(property_type,
"VapourDiffusionDeVries"))
337 if (boost::iequals(property_type,
"VapourDiffusionPMQ"))
342 if (boost::iequals(property_type,
"LinearWaterVapourLatentHeat"))
347 if (boost::iequals(property_type,
348 "WaterVapourLatentHeatWithCriticalTemperature"))
353 if (boost::iequals(property_type,
"TemperatureDependentDiffusion"))
358 if (boost::iequals(property_type,
"VolumeFractionAverage"))
363 if (boost::iequals(property_type,
"WaterViscosityIAPWS"))
368 if (boost::iequals(property_type,
"LiquidViscosityVogels"))
373 if (boost::iequals(property_type,
"WaterThermalConductivityIAPWS"))
379 OGS_FATAL(
"The specified component property type '{:s}' was not recognized",
387 int const geometry_dimension,
388 std::optional<BaseLib::ConfigTree>
const& config,
389 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
391 std::map<std::string,
392 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
401 auto const& property_configs = config->getConfigSubtreeList(
"property");
402 if (property_configs.empty())
407 auto properties = std::make_unique<PropertyArray>();
409 for (
auto property_config : property_configs)
412 auto const property_name =
414 property_config.getConfigParameter<std::string>(
"name");
417 createProperty(geometry_dimension, property_config, parameters,
418 local_coordinate_system, curves);
T peekConfigParameter(std::string const ¶m) const
std::unique_ptr< Property > createWaterEnthalpyIAPWSIF97Region1(BaseLib::ConfigTree const &config)
std::unique_ptr< TemperatureDependentFraction > createTemperatureDependentFraction(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< 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< 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.