From 0607dc6ab37e83116a1078ba1c9ee815ec709089 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Fri, 24 Jul 2020 08:36:23 +0200
Subject: [PATCH] [PL/HeatConduction] Use MPL for density.

---
 .../CreateHeatConductionProcess.cpp               | 15 +++------------
 ProcessLib/HeatConduction/HeatConductionFEM.h     | 13 ++++++++++---
 .../HeatConduction/HeatConductionProcessData.h    |  8 --------
 3 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
index 58eaa2fdee1..7a56153a0cb 100644
--- a/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/CreateHeatConductionProcess.cpp
@@ -15,7 +15,6 @@
 #include "MaterialLib/MPL/CheckMaterialSpatialDistributionMap.h"
 #include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h"
 #include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
-#include "ParameterLib/Utils.h"
 #include "ProcessLib/Output/CreateSecondaryVariables.h"
 #include "ProcessLib/Utils/ProcessUtils.h"
 
@@ -29,7 +28,8 @@ void checkMPLProperties(
 {
     std::array const required_medium_properties = {
         MaterialPropertyLib::PropertyType::thermal_conductivity,
-        MaterialPropertyLib::PropertyType::heat_capacity};
+        MaterialPropertyLib::PropertyType::heat_capacity,
+        MaterialPropertyLib::PropertyType::density};
     std::array<MaterialPropertyLib::PropertyType, 0> const empty{};
 
     MaterialPropertyLib::checkMaterialSpatialDistributionMap(
@@ -71,20 +71,11 @@ std::unique_ptr<Process> createHeatConductionProcess(
     checkMPLProperties(mesh, *media_map);
     DBUG("Media properties verified.");
 
-    // density parameter.
-    auto& density = ParameterLib::findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HEAT_CONDUCTION__density}
-        "density", parameters, 1, &mesh);
-
-    DBUG("Use '{:s}' as density parameter.", density.name);
-
     auto const mass_lumping =
         //! \ogs_file_param{prj__processes__process__HEAT_CONDUCTION__mass_lumping}
         config.getConfigParameter<bool>("mass_lumping", false);
 
-    HeatConductionProcessData process_data{std::move(media_map), density,
-                                           mass_lumping};
+    HeatConductionProcessData process_data{std::move(media_map), mass_lumping};
 
     SecondaryVariableCollection secondary_variables;
 
diff --git a/ProcessLib/HeatConduction/HeatConductionFEM.h b/ProcessLib/HeatConduction/HeatConductionFEM.h
index 3b329edd883..dc676f52149 100644
--- a/ProcessLib/HeatConduction/HeatConductionFEM.h
+++ b/ProcessLib/HeatConduction/HeatConductionFEM.h
@@ -20,7 +20,6 @@
 #include "NumLib/Extrapolation/ExtrapolatableElement.h"
 #include "NumLib/Fem/FiniteElement/TemplateIsoparametric.h"
 #include "NumLib/Fem/ShapeMatrixPolicy.h"
-#include "ParameterLib/Parameter.h"
 #include "ProcessLib/LocalAssemblerInterface.h"
 #include "ProcessLib/LocalAssemblerTraits.h"
 #include "ProcessLib/Utils/InitShapeMatrices.h"
@@ -140,7 +139,11 @@ public:
                     .property(
                         MaterialPropertyLib::PropertyType::heat_capacity)
                     .template value<double>(vars, pos, t, dt);
-            auto const density = _process_data.density(t, pos)[0];
+            auto const density =
+                medium
+                    .property(
+                        MaterialPropertyLib::PropertyType::density)
+                    .template value<double>(vars, pos, t, dt);
 
             local_K.noalias() += sm.dNdx.transpose() * k * sm.dNdx * sm.detJ *
                                  wp.getWeight() * sm.integralMeasure;
@@ -217,7 +220,11 @@ public:
                     .property(
                         MaterialPropertyLib::PropertyType::heat_capacity)
                     .template value<double>(vars, pos, t, dt);
-            auto const density = _process_data.density(t, pos)[0];
+            auto const density =
+                medium
+                    .property(
+                        MaterialPropertyLib::PropertyType::density)
+                    .template value<double>(vars, pos, t, dt);
 
             laplace.noalias() += sm.dNdx.transpose() * k * sm.dNdx * w;
             storage.noalias() +=
diff --git a/ProcessLib/HeatConduction/HeatConductionProcessData.h b/ProcessLib/HeatConduction/HeatConductionProcessData.h
index ca659475331..2caa26b65db 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcessData.h
+++ b/ProcessLib/HeatConduction/HeatConductionProcessData.h
@@ -13,12 +13,6 @@
 #include <memory>
 #include "MaterialLib/MPL/MaterialSpatialDistributionMap.h"
 
-namespace ParameterLib
-{
-template <typename T>
-struct Parameter;
-}
-
 namespace ProcessLib::HeatConduction
 {
 struct HeatConductionProcessData
@@ -26,8 +20,6 @@ struct HeatConductionProcessData
     std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>
         media_map;
 
-    ParameterLib::Parameter<double> const& density;
-
     /// If set mass lumping will be applied to the equation.
     bool const mass_lumping;
 };
-- 
GitLab