From 14e559cc00f08382e4448abf74882e82a46a19ea Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Mon, 6 May 2019 12:07:55 +0200
Subject: [PATCH] [PL/HT] Use MPL for solid rho, c_s, and lambda_s.

---
 ProcessLib/HT/CreateHTProcess.cpp    | 27 --------------------
 ProcessLib/HT/HTFEM.h                | 37 +++++++++++++++++++---------
 ProcessLib/HT/HTMaterialProperties.h | 11 +--------
 ProcessLib/HT/MonolithicHTFEM.h      |  6 ++---
 ProcessLib/HT/StaggeredHTFEM-impl.h  |  4 +--
 5 files changed, 31 insertions(+), 54 deletions(-)

diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp
index 20602e81b21..69c8a75f39e 100644
--- a/ProcessLib/HT/CreateHTProcess.cpp
+++ b/ProcessLib/HT/CreateHTProcess.cpp
@@ -79,30 +79,6 @@ std::unique_ptr<Process> createHTProcess(
     const int _heat_transport_process_id = 0;
     const int _hydraulic_process_id = 1;
 
-    // Parameter for the density of the solid.
-    auto& density_solid = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HT__density_solid}
-        "density_solid", parameters, 1);
-    DBUG("Use '%s' as density_solid parameter.", density_solid.name.c_str());
-
-    // Parameter for the specific heat capacity of the solid.
-    auto& specific_heat_capacity_solid = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HT__specific_heat_capacity_solid}
-        "specific_heat_capacity_solid", parameters, 1);
-    DBUG("Use '%s' as specific_heat_capacity_solid parameter.",
-         specific_heat_capacity_solid.name.c_str());
-
-    // Parameter for the thermal conductivity of the solid (only one scalar per
-    // element, i.e., the isotropic case is handled at the moment)
-    auto& thermal_conductivity_solid = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HT__thermal_conductivity_solid}
-        "thermal_conductivity_solid", parameters, 1);
-    DBUG("Use '%s' as thermal_conductivity_solid parameter.",
-         thermal_conductivity_solid.name.c_str());
-
     // Specific body force parameter.
     Eigen::VectorXd specific_body_force;
     std::vector<double> const b =
@@ -164,10 +140,7 @@ std::unique_ptr<Process> createHTProcess(
 
     std::unique_ptr<HTMaterialProperties> material_properties =
         std::make_unique<HTMaterialProperties>(
-            density_solid,
             std::move(media_map),
-            specific_heat_capacity_solid,
-            thermal_conductivity_solid,
             has_fluid_thermal_expansion,
             *solid_thermal_expansion,
             *biot_constant,
diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h
index ac841d3c302..55bc5c39575 100644
--- a/ProcessLib/HT/HTFEM.h
+++ b/ProcessLib/HT/HTFEM.h
@@ -209,39 +209,52 @@ protected:
             IntegrationPointData<NodalRowVectorType, GlobalDimNodalMatrixType>>>
         _ip_data;
 
-    double getHeatEnergyCoefficient(const double t,
-                                    const ParameterLib::SpatialPosition& pos,
-                                    const double porosity,
-                                    const double fluid_density,
-                                    const double specific_heat_capacity_fluid)
+    double getHeatEnergyCoefficient(
+        MaterialPropertyLib::VariableArray const& vars,
+        const double porosity,
+        const double fluid_density,
+        const double specific_heat_capacity_fluid)
     {
+        auto const& medium =
+            *_material_properties.media_map->getMedium(this->_element.getID());
+        auto const& solid_phase = medium.phase("Solid");
+
         auto const specific_heat_capacity_solid =
-            _material_properties.specific_heat_capacity_solid(t, pos)[0];
+            solid_phase
+                .property(
+                    MaterialPropertyLib::PropertyType::specific_heat_capacity)
+                .template value<double>(vars);
 
         auto const solid_density =
-            _material_properties.density_solid(t, pos)[0];
+            solid_phase.property(MaterialPropertyLib::PropertyType::density)
+                .template value<double>(vars);
 
         return solid_density * specific_heat_capacity_solid * (1 - porosity) +
                fluid_density * specific_heat_capacity_fluid * porosity;
     }
 
     GlobalDimMatrixType getThermalConductivityDispersivity(
-        const double t, const ParameterLib::SpatialPosition& pos,
+        MaterialPropertyLib::VariableArray const& vars,
         const double porosity, const double fluid_density,
         const double specific_heat_capacity_fluid,
         const GlobalDimVectorType& velocity, const GlobalDimMatrixType& I)
     {
-        auto const thermal_conductivity_solid =
-            _material_properties.thermal_conductivity_solid(t, pos)[0];
-
         auto const& medium =
             *_material_properties.media_map->getMedium(_element.getID());
+        auto const& solid_phase = medium.phase("Solid");
         auto const& liquid_phase = medium.phase("AqueousLiquid");
+
+        auto const thermal_conductivity_solid =
+            solid_phase
+                .property(
+                    MaterialPropertyLib::PropertyType::thermal_conductivity)
+                .template value<double>(vars);
+
         auto const thermal_conductivity_fluid =
             liquid_phase
                 .property(
                     MaterialPropertyLib::PropertyType::thermal_conductivity)
-                .template value<double>();
+                .template value<double>(vars);
 
         double const thermal_conductivity =
             thermal_conductivity_solid * (1 - porosity) +
diff --git a/ProcessLib/HT/HTMaterialProperties.h b/ProcessLib/HT/HTMaterialProperties.h
index bab6e5e08b7..d0bf9d40b9f 100644
--- a/ProcessLib/HT/HTMaterialProperties.h
+++ b/ProcessLib/HT/HTMaterialProperties.h
@@ -24,20 +24,14 @@ namespace HT
 struct HTMaterialProperties final
 {
     HTMaterialProperties(
-        ParameterLib::Parameter<double> const& density_solid_,
         std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&&
             media_map_,
-        ParameterLib::Parameter<double> const& specific_heat_capacity_solid_,
-        ParameterLib::Parameter<double> const& thermal_conductivity_solid_,
         bool const has_fluid_thermal_expansion_,
         ParameterLib::Parameter<double> const& solid_thermal_expansion_,
         ParameterLib::Parameter<double> const& biot_constant_,
         Eigen::VectorXd specific_body_force_,
         bool const has_gravity_)
-        : density_solid(density_solid_),
-          media_map(std::move(media_map_)),
-          specific_heat_capacity_solid(specific_heat_capacity_solid_),
-          thermal_conductivity_solid(thermal_conductivity_solid_),
+        : media_map(std::move(media_map_)),
           has_fluid_thermal_expansion(has_fluid_thermal_expansion_),
           solid_thermal_expansion(solid_thermal_expansion_),
           biot_constant(biot_constant_),
@@ -51,11 +45,8 @@ struct HTMaterialProperties final
     void operator=(HTMaterialProperties&&) = delete;
     void operator=(HTMaterialProperties const&) = delete;
 
-    ParameterLib::Parameter<double> const& density_solid;
     std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
         media_map;
-    ParameterLib::Parameter<double> const& specific_heat_capacity_solid;
-    ParameterLib::Parameter<double> const& thermal_conductivity_solid;
 
     bool const has_fluid_thermal_expansion;
     ParameterLib::Parameter<double> const& solid_thermal_expansion;
diff --git a/ProcessLib/HT/MonolithicHTFEM.h b/ProcessLib/HT/MonolithicHTFEM.h
index 3b6c268c23d..ebdb438de12 100644
--- a/ProcessLib/HT/MonolithicHTFEM.h
+++ b/ProcessLib/HT/MonolithicHTFEM.h
@@ -176,8 +176,8 @@ public:
             // matrix assembly
             GlobalDimMatrixType const thermal_conductivity_dispersivity =
                 this->getThermalConductivityDispersivity(
-                    t, pos, porosity, fluid_density,
-                    specific_heat_capacity_fluid, velocity, I);
+                    vars, porosity, fluid_density, specific_heat_capacity_fluid,
+                    velocity, I);
             Ktt.noalias() +=
                 (dNdx.transpose() * thermal_conductivity_dispersivity * dNdx +
                  N.transpose() * velocity.transpose() * dNdx * fluid_density *
@@ -186,7 +186,7 @@ public:
             Kpp.noalias() += w * dNdx.transpose() * K_over_mu * dNdx;
             Mtt.noalias() +=
                 w *
-                this->getHeatEnergyCoefficient(t, pos, porosity, fluid_density,
+                this->getHeatEnergyCoefficient(vars, porosity, fluid_density,
                                                specific_heat_capacity_fluid) *
                 N.transpose() * N;
             Mpp.noalias() += w * N.transpose() * specific_storage * N;
diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h
index 63c3024ae54..dcdd08d1b95 100644
--- a/ProcessLib/HT/StaggeredHTFEM-impl.h
+++ b/ProcessLib/HT/StaggeredHTFEM-impl.h
@@ -252,7 +252,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
         // Assemble mass matrix
         local_M.noalias() +=
             w *
-            this->getHeatEnergyCoefficient(t, pos, porosity, fluid_density,
+            this->getHeatEnergyCoefficient(vars, porosity, fluid_density,
                                            specific_heat_capacity_fluid) *
             N.transpose() * N;
 
@@ -276,7 +276,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>::
 
         GlobalDimMatrixType const thermal_conductivity_dispersivity =
             this->getThermalConductivityDispersivity(
-                t, pos, porosity, fluid_density, specific_heat_capacity_fluid,
+                vars, porosity, fluid_density, specific_heat_capacity_fluid,
                 velocity, I);
 
         local_K.noalias() +=
-- 
GitLab