diff --git a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp index 29186c17eb953c2c1e430a1e69e88e7c5af870e0..d1743048401d83fffa44cb7fec3da4d2f17d4b6a 100644 --- a/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp +++ b/MaterialLib/PorousMedium/CreatePorousMediaProperties.cpp @@ -52,7 +52,8 @@ PorousMediaProperties createPorousMediaProperties( //! \ogs_file_param{material__porous_medium__porous_medium__porosity} porous_medium_config.getConfigSubtree("porosity"); porosity_models.emplace_back( - MaterialLib::PorousMedium::createPorosityModel(porosity_config)); + MaterialLib::PorousMedium::createPorosityModel(porosity_config, + parameters)); // Configuration for the intrinsic permeability (only one scalar per // element, i.e., the isotropic case is handled at the moment) diff --git a/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h b/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h deleted file mode 100644 index 404050a0fe5d18ae8dbac5dd571bd6fec2e60e7b..0000000000000000000000000000000000000000 --- a/MaterialLib/PorousMedium/Porosity/ConstantPorosity.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * \copyright - * Copyright (c) 2012-2017, OpenGeoSys Community (http://www.opengeosys.org) - * Distributed under a Modified BSD License. - * See accompanying file LICENSE.txt or - * http://www.opengeosys.org/project/license - * - * \file ConstantPorosity.h - * - * Created on August 16, 2016, 1:03 PM - */ - -#pragma once - -#include "Porosity.h" - -namespace MaterialLib -{ -namespace PorousMedium -{ -class ConstantPorosity final : public Porosity -{ -public: - explicit ConstantPorosity(const double value) : _value(value) {} - - /** - * Get property value. - * @param variable A variable with any double type value. - * @param temperature Temperature with any double type value. - */ - double getValue(const double variable, const double temperature) const override - { - (void)variable; - (void)temperature; - return _value; - } - -private: - const double _value; -}; - -} // end of namespace -} // end of namespace diff --git a/MaterialLib/PorousMedium/Porosity/Porosity.h b/MaterialLib/PorousMedium/Porosity/Porosity.h index f5908591c2b512d6b2d1c3f4cd495dbe84cf486b..5cee091f196be00af0c828456b84199c2f3e4ab6 100644 --- a/MaterialLib/PorousMedium/Porosity/Porosity.h +++ b/MaterialLib/PorousMedium/Porosity/Porosity.h @@ -14,6 +14,8 @@ #include <string> +#include "ProcessLib/Parameter/Parameter.h" + namespace MaterialLib { namespace PorousMedium @@ -21,16 +23,32 @@ namespace PorousMedium class Porosity { public: + explicit Porosity( + ProcessLib::Parameter<double> const& parameter) + : _parameter(parameter) + { + } virtual ~Porosity() = default; /** * Get property value. - * @param variable A variable that can be saturation, or an invariant - * of stress or strain. - * @param temperature Temperature. + * @param t point in time + * @param pos spatial position + * @param variable A variable with any double type value. + * @param temperature Temperature with any double type value. */ - virtual double getValue(const double variable, - const double temperature) const = 0; + virtual double getValue(const double t, + ProcessLib::SpatialPosition const& pos, + const double variable, + const double temperature) const + { + (void)variable; + (void)temperature; + return _parameter(t, pos)[0]; + } + +private: + ProcessLib::Parameter<double> const& _parameter; }; } // end of namespace diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp index 887b3bac1aa5507010835dc3c5b7c6ea24999097..6a64ce14b7d38207f1123fa17212ed81e34b354e 100644 --- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp +++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.cpp @@ -15,25 +15,33 @@ #include "BaseLib/Error.h" #include "BaseLib/ConfigTree.h" +#include "ProcessLib/Utils/ProcessUtils.h" + #include "Porosity.h" -#include "ConstantPorosity.h" namespace MaterialLib { namespace PorousMedium { -std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config) +std::unique_ptr<Porosity> createPorosityModel(BaseLib::ConfigTree const& config, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters) { //! \ogs_file_param{material__porous_medium__porosity__type} auto const type = config.getConfigParameter<std::string>("type"); if (type == "Constant") - return std::make_unique<ConstantPorosity>( - //! \ogs_file_param{material__porous_medium__porosity__Constant__value} - config.getConfigParameter<double>("value")); + { + auto const& constant_porosity = ProcessLib::findParameter<double>( + config, + //! \ogs_file_param_special{material__porous_medium__porosity__porosity_parameter} + "porosity_parameter", parameters, 1); + + return std::make_unique<Porosity>(constant_porosity); + } OGS_FATAL("The porosity type %s is unavailable.\n", - "The available type is \n\tConstant.", type.data()); + "The available type is Constant.", + type.data()); } } // end namespace diff --git a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h index 8aad3e08036150cc363af11e91a02435a16a7c45..ff0700b64d23fe799aa3b6acb845ce68463cf310 100644 --- a/MaterialLib/PorousMedium/Porosity/createPorosityModel.h +++ b/MaterialLib/PorousMedium/Porosity/createPorosityModel.h @@ -13,6 +13,7 @@ #pragma once #include <memory> +#include "ProcessLib/Parameter/Parameter.h" namespace BaseLib { @@ -26,10 +27,13 @@ namespace PorousMedium class Porosity; /** Create a porosity model - * @param config ConfigTree object has a tag of `<porosity>` + * @param config ConfigTree object has a tag of `<porosity>` that describes + * the porosity relationsship and contains the name of the parameter + * @param parameters a vector containing the available parameters */ std::unique_ptr<Porosity> createPorosityModel( - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp index 03cc750ca533810f69bee42171bfa78584b7414c..1e9530be7ce13508d97a703e3f2a4ad77518b6f9 100644 --- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp +++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.cpp @@ -33,7 +33,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>, BaseLib::ConfigTree> createTwoPhaseFlowMaterialProperties( BaseLib::ConfigTree const& config, - MeshLib::PropertyVector<int> const& material_ids) + MeshLib::PropertyVector<int> const& material_ids, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters) { DBUG("Reading material properties of two-phase flow process."); @@ -87,7 +88,8 @@ createTwoPhaseFlowMaterialProperties( //! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__porosity} auto const& porosity_conf = conf.getConfigSubtree("porosity"); - auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf); + auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf, + parameters); porosity_models.emplace_back(std::move(n)); //! \ogs_file_param{material__twophase_flow__material_property__porous_medium__porous_medium__storage} diff --git a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h index 7ef73b85722fd5370d8cb1174fbc7f53b53c2e8c..f20105e29243e13dae9c22f685b85289038285fa 100644 --- a/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h +++ b/MaterialLib/TwoPhaseModels/CreateTwoPhaseFlowMaterialProperties.h @@ -31,7 +31,8 @@ std::tuple<std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties>, BaseLib::ConfigTree> createTwoPhaseFlowMaterialProperties( BaseLib::ConfigTree const& config, - MeshLib::PropertyVector<int> const& material_ids); + MeshLib::PropertyVector<int> const& material_ids, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp index 16487e0c6b4f3e44c457db0f2a96785f285c2c73..aea1ec6a53006fd632eea6b4d04d3cdc027e5ffc 100644 --- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp +++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp @@ -126,11 +126,12 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability( } double TwoPhaseFlowWithPPMaterialProperties::getPorosity( - const int material_id, const double /*t*/, - const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, + const int material_id, const double t, + const ProcessLib::SpatialPosition& pos, const double /*p*/, const double T, const double porosity_variable) const { - return _porosity_models[material_id]->getValue(porosity_variable, T); + return _porosity_models[material_id]->getValue(t, pos, porosity_variable, + T); } double TwoPhaseFlowWithPPMaterialProperties::getSaturation( diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h index 0ef541b0c6d5a2e8bb9ba9c0e33e33a6555ab63b..65ed5b0a8aadcc57b705287953ace5ad0926b613 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h +++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h @@ -181,7 +181,7 @@ public: // porosity model auto const porosity = _process_data.porous_media_properties.getPorosity(t, pos) - .getValue(0.0, C_int_pt); + .getValue(t, pos, 0.0, C_int_pt); auto const retardation_factor = _process_data.retardation_factor(t, pos)[0]; diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h index a237c8d51a025283d5ec63789de44132c0a1e035..0bf467662fd0e6b40ab6da8647b0ae89a2121b21 100644 --- a/ProcessLib/HT/HTFEM.h +++ b/ProcessLib/HT/HTFEM.h @@ -195,7 +195,7 @@ public: // porosity model auto const porosity = _process_data.porous_media_properties.getPorosity(t, pos) - .getValue(0.0, T_int_pt); + .getValue(t, pos, 0.0, T_int_pt); double const thermal_conductivity = thermal_conductivity_solid * (1 - porosity) + diff --git a/ProcessLib/HeatConduction/HeatConductionFEM-impl.h b/ProcessLib/HeatConduction/HeatConductionFEM-impl.h index f3bafbc7c1ccb7ad84e7747635e55f01fe733515..8c95e5647dfc24e54f7dedfd79acea13e4a5eed4 100644 --- a/ProcessLib/HeatConduction/HeatConductionFEM-impl.h +++ b/ProcessLib/HeatConduction/HeatConductionFEM-impl.h @@ -74,7 +74,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: // Porosity of porous media. double const n = liquid_flow_properties.getPorosity( - material_id, porosity_variable, T); + material_id, t, pos, porosity_variable, T); // Effective specific heat capacity. double const effective_cp = (1.0 - n) * cp_s * rho_s + n * cp_f * rho_f; diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp index 8fb0f1397bc76eab02b28cf3b92e38d910a0d942..c55cba5e82f988da009f50ac1afd8d51bf7590d5 100644 --- a/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp +++ b/ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.cpp @@ -80,8 +80,8 @@ createLiquidFlowMaterialProperties( auto const& porosity_config = //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__porous_medium__porous_medium__porosity} porous_medium_config.getConfigSubtree("porosity"); - auto n = - MaterialLib::PorousMedium::createPorosityModel(porosity_config); + auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_config, + parameters); porosity_models.emplace_back(std::move(n)); auto const& storage_config = diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h index a683ad2528b6869ee4c8e94644eb07743df67291..dc5f33e87a23d9e1dd559d999822bc0c0e6db5a6 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h +++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h @@ -231,8 +231,8 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: auto const solid_thermal_expansion = _material_properties.getSolidThermalExpansion(t, pos); auto const biot_constant = _material_properties.getBiotConstant(t, pos); - auto const porosity = - _material_properties.getPorosity(material_id, porosity_variable, T); + auto const porosity = _material_properties.getPorosity( + material_id, t, pos, porosity_variable, T); const double eff_thermal_expansion = 3.0 * (biot_constant - porosity) * solid_thermal_expansion - porosity * _material_properties.getdLiquidDensity_dT(p, T) / rho; diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp index be8dabcb684f031ae37efb534c4f1badef7297ed..e8f54f5dc47fe1f4de600382d8276a3dcc2179f4 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp @@ -96,7 +96,7 @@ double LiquidFlowMaterialProperties::getThermalConductivity( } double LiquidFlowMaterialProperties::getMassCoefficient( - const int material_id, const double /*t*/, const SpatialPosition& /*pos*/, + const int material_id, const double t, const SpatialPosition& pos, const double p, const double T, const double porosity_variable, const double storage_variable) const { @@ -111,7 +111,7 @@ double LiquidFlowMaterialProperties::getMassCoefficient( assert(rho > 0.); const double porosity = - _porosity_models[material_id]->getValue(porosity_variable, T); + _porosity_models[material_id]->getValue(t, pos, porosity_variable, T); const double storage = _storage_models[material_id]->getValue(storage_variable); return porosity * drho_dp / rho + storage; diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h index 0230ec5b632b5cec2ecc12a25fa39847953aa88c..59f2d71871713e9136c6f2c5099d935362e0ec3d 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h +++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h @@ -121,10 +121,12 @@ public: double getThermalConductivity(const double p, const double T) const; - double getPorosity(const int material_id, const double porosity_variable, - const double T) const + double getPorosity(const int material_id, const double t, + const SpatialPosition& pos, + const double porosity_variable, const double T) const { - return _porosity_models[material_id]->getValue(porosity_variable, T); + return _porosity_models[material_id]->getValue(t, pos, + porosity_variable, T); } double getSolidThermalExpansion(const double t, diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp index 25be75902cf072db887ae044df11b4aef9d6f92a..032e078c64363303273c13830642e544a4056e85 100644 --- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp +++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp @@ -56,7 +56,8 @@ PorousMediaProperties createPorousMediaProperties( //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__porosity} porous_medium_config.getConfigSubtree("porosity"); porosity_models.emplace_back( - MaterialLib::PorousMedium::createPorosityModel(porosity_config)); + MaterialLib::PorousMedium::createPorosityModel(porosity_config, + parameters)); // Configuration for the intrinsic permeability auto const& permeability_config = diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h index 88c6c3f7bfe0256f4f70b4b06ed11e95e0026f06..fc42d20c110e6b673a68af06886771241c390c27 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h @@ -134,7 +134,7 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( // porosity model auto const porosity = _process_data.porous_media_properties.getPorosity(t, pos).getValue( - 0.0, C_int_pt); + t, pos, 0.0, C_int_pt); auto const retardation_factor = _process_data.retardation_factor(t, pos)[0]; diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp index da3485782c507565f231676c2075874dc2770ab8..291851eef743f74b8536cff159fe39c1378c90b2 100644 --- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp +++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp @@ -36,7 +36,8 @@ std::unique_ptr<RichardsFlowMaterialProperties> createRichardsFlowMaterialProperties( BaseLib::ConfigTree const& config, boost::optional<MeshLib::PropertyVector<int> const&> - material_ids) + material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters) { DBUG("Reading material properties of Richards flow process."); @@ -77,7 +78,8 @@ createRichardsFlowMaterialProperties( //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__porosity} auto const& porosity_conf = conf.getConfigSubtree("porosity"); - auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf); + auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf, + parameters); porosity_models.emplace_back(std::move(n)); //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__porous_medium__porous_medium__storage} diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h index f069f286f291ef3991ff6ce24f78bffffdcfec16..e71981aa06bf0e1ce8d455c09e9ce0a522fc163f 100644 --- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h +++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.h @@ -23,7 +23,8 @@ std::unique_ptr<RichardsFlowMaterialProperties> createRichardsFlowMaterialProperties( BaseLib::ConfigTree const& config, boost::optional<MeshLib::PropertyVector<int> const&> - material_ids); + material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp index bdcde323b286a701d5cb58b6b8bea000dddebe38..ab7b1e4dbaeab0f872b0ef728ee49b67a800a7f7 100644 --- a/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp +++ b/ProcessLib/RichardsFlow/CreateRichardsFlowProcess.cpp @@ -89,7 +89,8 @@ std::unique_ptr<Process> createRichardsFlowProcess( INFO("The Richards flow is in homogeneous porous media."); } std::unique_ptr<RichardsFlowMaterialProperties> material = - createRichardsFlowMaterialProperties(mat_config, material_ids); + createRichardsFlowMaterialProperties(mat_config, material_ids, + parameters); RichardsFlowProcessData process_data{std::move(material), specific_body_force, has_gravity, mass_lumping, temperature}; diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp index 3c5f64280b7077a777ff0e79ce5d5f4f8fb7d809..e9c8b6e613e22e69a75258fa397b78d38f50d5c4 100644 --- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp +++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp @@ -92,11 +92,12 @@ Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability( } double RichardsFlowMaterialProperties::getPorosity( - const int material_id, const double /*t*/, - const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, + const int material_id, const double t, + const ProcessLib::SpatialPosition& pos, const double /*p*/, const double T, const double porosity_variable) const { - return _porosity_models[material_id]->getValue(porosity_variable, T); + return _porosity_models[material_id]->getValue(t, pos, porosity_variable, + T); } double RichardsFlowMaterialProperties::getStorage( diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp index aed184925974c88a4304bbd429b9ddaf78f57a14..34e15ad44fd85e91a1256b8467dd3bc9581500d2 100644 --- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp +++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.cpp @@ -38,13 +38,14 @@ namespace ThermalTwoPhaseFlowWithPP std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties> createThermalTwoPhaseFlowWithPPMaterialProperties( BaseLib::ConfigTree const& config, - MeshLib::PropertyVector<int> const& material_ids) + MeshLib::PropertyVector<int> const& material_ids, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters) { DBUG( "Reading material properties of nonisothermal two-phase flow process."); auto two_phase_model_tuple = MaterialLib::TwoPhaseFlowWithPP::createTwoPhaseFlowMaterialProperties( - config, material_ids); + config, material_ids, parameters); auto two_phase_material_model = std::move(std::get<0>(two_phase_model_tuple)); auto const& fluid_config = std::get<1>(two_phase_model_tuple); diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h index 70b22ed38a85101f0460f5b697cc28fa1cb642df..8b9680ba4191994aab53966136c216447008dd68 100644 --- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h +++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPMaterialProperties.h @@ -30,7 +30,8 @@ namespace ThermalTwoPhaseFlowWithPP std::unique_ptr<ThermalTwoPhaseFlowWithPPMaterialProperties> createThermalTwoPhaseFlowWithPPMaterialProperties( BaseLib::ConfigTree const& config, - MeshLib::PropertyVector<int> const& material_ids); + MeshLib::PropertyVector<int> const& material_ids, + std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp index 12e3471ac896714910eae9e2dfc47d7da13073d0..e8dd8ca61c0f783175347118e97f0cd1f1f2e12e 100644 --- a/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp +++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/CreateThermalTwoPhaseFlowWithPPProcess.cpp @@ -108,8 +108,8 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess( INFO("The twophase flow is in heterogeneous porous media."); auto const& mat_ids = mesh.getProperties().getPropertyVector<int>("MaterialIDs"); - material = createThermalTwoPhaseFlowWithPPMaterialProperties(mat_config, - *mat_ids); + material = createThermalTwoPhaseFlowWithPPMaterialProperties( + mat_config, *mat_ids, parameters); } else { @@ -119,7 +119,7 @@ std::unique_ptr<Process> createThermalTwoPhaseFlowWithPPProcess( dummy_property.createNewPropertyVector<int>( "MaterialIDs", MeshLib::MeshItemType::Cell, 1); material = createThermalTwoPhaseFlowWithPPMaterialProperties( - mat_config, *dummy_property_vector); + mat_config, *dummy_property_vector, parameters); } ThermalTwoPhaseFlowWithPPProcessData process_data{specific_body_force, diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp index 5332806a6b5eebe0a689e659922e789de70b24a0..1dbd72700e24eeefa988f6221fb91c838594d705 100644 --- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp +++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.cpp @@ -32,7 +32,8 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> createTwoPhaseFlowWithPPMaterialProperties( BaseLib::ConfigTree const& config, boost::optional<MeshLib::PropertyVector<int> const&> - material_ids) + material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters) { DBUG("Reading material properties of two-phase flow process."); @@ -86,7 +87,8 @@ createTwoPhaseFlowWithPPMaterialProperties( //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PP__material_property__porous_medium__porous_medium__porosity} auto const& porosity_conf = conf.getConfigSubtree("porosity"); - auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf); + auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf, + parameters); porosity_models.emplace_back(std::move(n)); //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PP__material_property__porous_medium__porous_medium__storage} diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h index a00d066f3821d76ed6be1b24b27bb04c612a01e3..f4ad3c875dece2dfd3e2c28d765b8d8bec084f05 100644 --- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h +++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPMaterialProperties.h @@ -24,7 +24,8 @@ std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> createTwoPhaseFlowWithPPMaterialProperties( BaseLib::ConfigTree const& config, boost::optional<MeshLib::PropertyVector<int> const&> - material_ids); + material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp index 71be4b9be07ba06602bfc1e7277321b0d456f3de..bf626795982f2cef21f626aad16d6853fb9d58bd 100644 --- a/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp +++ b/ProcessLib/TwoPhaseFlowWithPP/CreateTwoPhaseFlowWithPPProcess.cpp @@ -86,8 +86,9 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPPProcess( { INFO("The twophase flow is in homogeneous porous media."); } - std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> - material = createTwoPhaseFlowWithPPMaterialProperties(mat_config, material_ids); + std::unique_ptr<TwoPhaseFlowWithPPMaterialProperties> material = + createTwoPhaseFlowWithPPMaterialProperties(mat_config, material_ids, + parameters); TwoPhaseFlowWithPPProcessData process_data{ specific_body_force, has_gravity, mass_lumping, temperature, std::move(material)}; diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp index 369eec2abc51f0987acacd492b435a1d5c34c7b0..457d78de5204086004ae9707f9f5c7bb3269ad2f 100644 --- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp +++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp @@ -129,11 +129,11 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability( } double TwoPhaseFlowWithPPMaterialProperties::getPorosity( - const int material_id, const double /*t*/, - const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, + const int material_id, const double t, + const ProcessLib::SpatialPosition& pos, const double /*p*/, const double T, const double porosity_variable) const { - return _porosity_models[material_id]->getValue(porosity_variable, T); + return _porosity_models[material_id]->getValue(t, pos, porosity_variable, T); } double TwoPhaseFlowWithPPMaterialProperties::getNonwetRelativePermeability( diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp index db054cb6b85ea8b27f667502be5dc0e632e4e0e4..c28e8116b701f0339e4d73c0fd40e8fbecfb9928 100644 --- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp +++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp @@ -31,7 +31,8 @@ namespace TwoPhaseFlowWithPrho std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties> createTwoPhaseFlowPrhoMaterialProperties( BaseLib::ConfigTree const& config, - boost::optional<MeshLib::PropertyVector<int> const&> material_ids) + boost::optional<MeshLib::PropertyVector<int> const&> material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters) { DBUG("Reading material properties of two-phase flow process."); @@ -86,7 +87,8 @@ createTwoPhaseFlowPrhoMaterialProperties( //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property__porous_medium__porous_medium__porosity} auto const& porosity_conf = conf.getConfigSubtree("porosity"); - auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf); + auto n = MaterialLib::PorousMedium::createPorosityModel(porosity_conf, + parameters); _porosity_models.emplace_back(std::move(n)); //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property__porous_medium__porous_medium__storage} diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h index 738a99ce5a40cb9f2fde8db82428d4299c24903f..7f759abf083e9bb4bd1b0ef3c728bb60a02d8a18 100644 --- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h +++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h @@ -23,7 +23,8 @@ namespace TwoPhaseFlowWithPrho std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties> createTwoPhaseFlowPrhoMaterialProperties( BaseLib::ConfigTree const& config, - boost::optional<MeshLib::PropertyVector<int> const&> material_ids); + boost::optional<MeshLib::PropertyVector<int> const&> material_ids, + std::vector<std::unique_ptr<ParameterBase>> const& parameters); } // end namespace } // end namespace diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp index 3c3bb6a3016b655ce33412c92fd1aed5e066a84c..5beb4b9496475d631ebd0ace6b91d2beefab7d4b 100644 --- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp +++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp @@ -97,7 +97,8 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess( } std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties> material = - createTwoPhaseFlowPrhoMaterialProperties(mat_config, material_ids); + createTwoPhaseFlowPrhoMaterialProperties(mat_config, material_ids, + parameters); TwoPhaseFlowWithPrhoProcessData process_data{ specific_body_force, has_gravity, mass_lumping, diff_coeff_b, diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp index 687acf6062d0e6b7ea9f204554bbdf2308b20f67..2f635f90521d01b82974e24ac0c45e8680817a63 100644 --- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp +++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp @@ -134,11 +134,12 @@ Eigen::MatrixXd const& TwoPhaseFlowWithPrhoMaterialProperties::getPermeability( } double TwoPhaseFlowWithPrhoMaterialProperties::getPorosity( - const int material_id, const double /*t*/, - const ProcessLib::SpatialPosition& /*pos*/, const double /*p*/, + const int material_id, const double t, + const ProcessLib::SpatialPosition& pos, const double /*p*/, const double T, const double porosity_variable) const { - return _porosity_models[material_id]->getValue(porosity_variable, T); + return _porosity_models[material_id]->getValue(t, pos, porosity_variable, + T); } double TwoPhaseFlowWithPrhoMaterialProperties::getNonwetRelativePermeability(