diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index de1917a035adebcb96819811c3c5769b99ef94b5..d5349c55aca85d1b4dd98b3c1d8d030d4f1ed6e0 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -780,7 +780,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config, name, *_mesh_vec[0], std::move(jacobian_assembler), _process_variables, _parameters, _local_coordinate_system, integration_order, - process_config); + process_config, _media); break; case 3: process = ProcessLib::ThermoHydroMechanics:: @@ -788,7 +788,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config, name, *_mesh_vec[0], std::move(jacobian_assembler), _process_variables, _parameters, _local_coordinate_system, integration_order, - process_config); + process_config, _media); break; default: OGS_FATAL( diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp index 443f72b20c600a1308a33d293cc89730366a97ac..d29c4946f528a1f2cda791447fc8f5688d266f4b 100644 --- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp +++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp @@ -12,6 +12,9 @@ #include <cassert> +#include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h" +#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" + #include "MaterialLib/SolidModels/CreateConstitutiveRelation.h" #include "MaterialLib/SolidModels/MechanicsBase.h" #include "ParameterLib/Utils.h" @@ -27,15 +30,14 @@ namespace ThermoHydroMechanics { template <int DisplacementDim> std::unique_ptr<Process> createThermoHydroMechanicsProcess( - std::string name, - MeshLib::Mesh& mesh, + std::string name, MeshLib::Mesh& mesh, std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler, std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, - unsigned const integration_order, - BaseLib::ConfigTree const& config) + unsigned const integration_order, BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media) { //! \ogs_file_param{prj__processes__process__type} config.checkConfigParameter("type", "THERMO_HYDRO_MECHANICS"); @@ -262,8 +264,12 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess( std::copy_n(b.data(), b.size(), specific_body_force.data()); } + auto media_map = + MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh); + ThermoHydroMechanicsProcessData<DisplacementDim> process_data{ materialIDs(mesh), + std::move(media_map), std::move(solid_constitutive_relations), intrinsic_permeability, specific_storage, @@ -305,7 +311,8 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>( boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, unsigned const integration_order, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media); template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>( std::string name, @@ -316,7 +323,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>( boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, unsigned const integration_order, - BaseLib::ConfigTree const& config); - + BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media); } // namespace ThermoHydroMechanics } // namespace ProcessLib diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h index 99641a62eb6d2aad89d9575a9174e16fc3c49f6a..cf2468cf6ed5ba304650a7af018286edfc244403 100644 --- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h +++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h @@ -11,6 +11,7 @@ #pragma once #include <boost/optional.hpp> +#include <map> #include <memory> #include <vector> @@ -18,10 +19,17 @@ namespace BaseLib { class ConfigTree; } + +namespace MaterialPropertyLib +{ +class Medium; +} + namespace MeshLib { class Mesh; } + namespace ParameterLib { struct CoordinateSystem; @@ -48,18 +56,18 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess( boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, unsigned const integration_order, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media); extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>( - std::string name, - MeshLib::Mesh& mesh, + std::string name, MeshLib::Mesh& mesh, std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler, std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, - unsigned const integration_order, - BaseLib::ConfigTree const& config); + unsigned const integration_order, BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media); extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>( std::string name, @@ -70,6 +78,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>( boost::optional<ParameterLib::CoordinateSystem> const& local_coordinate_system, unsigned const integration_order, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> const& media); } // namespace ThermoHydroMechanics } // namespace ProcessLib diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h index a9bbc59e9df7d6430d1f657b0b63da5e70fe0b76..1112297ef80c257e355db1cdc1fe31a9709df865 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h @@ -17,6 +17,8 @@ #include <Eigen/Dense> +#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" + namespace MaterialLib { namespace Solids @@ -34,6 +36,9 @@ struct ThermoHydroMechanicsProcessData { MeshLib::PropertyVector<int> const* const material_ids = nullptr; + std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> + media_map = nullptr; + /// The constitutive relation for the mechanical part. /// \note Linear elasticity is the only supported one in the moment. std::map<