From ab1f227df408c3003c12cc30c4612f9c8480edbb Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Wed, 6 Dec 2017 14:20:43 +0100
Subject: [PATCH] [PL] LIE/HM: Separate FractureProperty for HM.

---
 ProcessLib/LIE/Common/FractureProperty.h                    | 6 ++++++
 .../LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp      | 4 ++--
 ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h   | 5 ++---
 .../HydroMechanicsLocalAssemblerFracture-impl.h             | 6 +++---
 4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/ProcessLib/LIE/Common/FractureProperty.h b/ProcessLib/LIE/Common/FractureProperty.h
index 5762392a594..4d4181f113d 100644
--- a/ProcessLib/LIE/Common/FractureProperty.h
+++ b/ProcessLib/LIE/Common/FractureProperty.h
@@ -36,6 +36,12 @@ struct FractureProperty
     Eigen::MatrixXd R;
     /// Initial aperture
     ProcessLib::Parameter<double> const* aperture0 = nullptr;
+
+    virtual ~FractureProperty() = default;
+};
+
+struct FracturePropertyHM : public FractureProperty
+{
     ProcessLib::Parameter<double> const* specific_storage = nullptr;
     ProcessLib::Parameter<double> const* biot_coefficient = nullptr;
 };
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
index eb08b52f095..4b0421a9e09 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -257,7 +257,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     }
 
     // Fracture properties
-    std::unique_ptr<FractureProperty> frac_prop = nullptr;
+    std::unique_ptr<FracturePropertyHM> frac_prop = nullptr;
     auto opt_fracture_properties_config =
         //! \ogs_file_param{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties}
         config.getConfigSubtreeOptional("fracture_properties");
@@ -265,7 +265,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     {
         auto& fracture_properties_config = *opt_fracture_properties_config;
 
-        frac_prop = std::make_unique<ProcessLib::LIE::FractureProperty>();
+        frac_prop = std::make_unique<ProcessLib::LIE::FracturePropertyHM>();
         frac_prop->mat_id =
             //! \ogs_file_param{prj__processes__process__HYDRO_MECHANICS_WITH_LIE__fracture_properties__material_id}
             fracture_properties_config.getConfigParameter<int>("material_id");
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
index 27c46ee08c6..7290c324466 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcessData.h
@@ -49,7 +49,7 @@ struct HydroMechanicsProcessData
             specific_body_force_,
         std::unique_ptr<MaterialLib::Fracture::FractureModelBase<GlobalDim>>&&
             fracture_model,
-        std::unique_ptr<FractureProperty>&& fracture_prop,
+        std::unique_ptr<FracturePropertyHM>&& fracture_prop,
         Parameter<double> const& initial_effective_stress_,
         Parameter<double> const& initial_fracture_effective_stress_,
         bool const deactivate_matrix_in_flow_)
@@ -113,8 +113,7 @@ struct HydroMechanicsProcessData
     Eigen::Matrix<double, GlobalDim, 1> const specific_body_force;
     std::unique_ptr<MaterialLib::Fracture::FractureModelBase<GlobalDim>>
         fracture_model;
-    std::unique_ptr<FractureProperty> fracture_property;
-
+    std::unique_ptr<FracturePropertyHM> fracture_property;
     Parameter<double> const& initial_effective_stress;
     Parameter<double> const& initial_fracture_effective_stress;
 
diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
index 6a009bdb979..303878dca3d 100644
--- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
+++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerFracture-impl.h
@@ -61,7 +61,7 @@ HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
                           IntegrationMethod, GlobalDim>(e, is_axially_symmetric,
                                                         integration_method);
 
-    auto const& frac_prop = *_process_data.fracture_property.get();
+    auto const& frac_prop = *_process_data.fracture_property;
 
     SpatialPosition x_position;
     x_position.setElementID(e.getID());
@@ -164,7 +164,7 @@ void HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
         Eigen::Ref<Eigen::MatrixXd>
             J_gp)
 {
-    FractureProperty const& frac_prop = *_process_data.fracture_property;
+    auto const& frac_prop = *_process_data.fracture_property;
     auto const& R = frac_prop.R;
     double const& dt = _process_data.dt;
 
@@ -326,7 +326,7 @@ void HydroMechanicsLocalAssemblerFracture<ShapeFunctionDisplacement,
     auto const nodal_p = local_x.segment(pressure_index, pressure_size);
     auto const nodal_g = local_x.segment(displacement_index, displacement_size);
 
-    FractureProperty const& frac_prop = *_process_data.fracture_property;
+    auto const& frac_prop = *_process_data.fracture_property;
     auto const& R = frac_prop.R;
     // the index of a normal (normal to a fracture plane) component
     // in a displacement vector
-- 
GitLab