From e403e11eeae3d37b34220582ce5f611e35edc603 Mon Sep 17 00:00:00 2001
From: Florian Zill <florian.zill@ufz.de>
Date: Thu, 15 Aug 2019 17:03:37 +0200
Subject: [PATCH] [ML/SM] extended interface to get bulk modulus

allows to fetch the bulk modulus inside a process
without specifying a material model.
Solid Materials without own implementation will
cause an OGS_FATAL.
---
 MaterialLib/SolidModels/Ehlers.h                 | 6 ++++++
 MaterialLib/SolidModels/LinearElasticIsotropic.h | 8 ++++++++
 MaterialLib/SolidModels/Lubby2.h                 | 6 ++++++
 MaterialLib/SolidModels/MechanicsBase.h          | 7 +++++++
 4 files changed, 27 insertions(+)

diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h
index 6e808c634c3..801c5b14927 100644
--- a/MaterialLib/SolidModels/Ehlers.h
+++ b/MaterialLib/SolidModels/Ehlers.h
@@ -330,6 +330,12 @@ public:
         return MaterialProperties(t, x, _mp);
     }
 
+    double getBulkModulus(double const t,
+                          ParameterLib::SpatialPosition const& x) const override
+    {
+        return _mp.K(t, x)[0];
+    }
+
     DamageProperties evaluatedDamageProperties(
         double const t, ParameterLib::SpatialPosition const& x) const
     {
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h
index d0034a22a97..a1c03ec5cbb 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h
@@ -104,6 +104,14 @@ public:
 
     MaterialProperties getMaterialProperties() const { return _mp; }
 
+    double getBulkModulus(double const t,
+                          ParameterLib::SpatialPosition const& x) const override
+    {
+        return _mp.bulk_modulus(t, x);
+    }
+
+
+
 protected:
     MaterialProperties _mp;
 };
diff --git a/MaterialLib/SolidModels/Lubby2.h b/MaterialLib/SolidModels/Lubby2.h
index 9c88c65cc3a..b9823818d6b 100644
--- a/MaterialLib/SolidModels/Lubby2.h
+++ b/MaterialLib/SolidModels/Lubby2.h
@@ -155,6 +155,12 @@ public:
             new MaterialStateVariables};
     }
 
+    double getBulkModulus(double const t,
+                          ParameterLib::SpatialPosition const& x) const override
+    {
+        return _mp.KM0(t, x)[0];
+    }
+
 public:
     static int const KelvinVectorSize =
         MathLib::KelvinVector::KelvinVectorDimensions<DisplacementDim>::value;
diff --git a/MaterialLib/SolidModels/MechanicsBase.h b/MaterialLib/SolidModels/MechanicsBase.h
index d83b79681be..abfddd31c64 100644
--- a/MaterialLib/SolidModels/MechanicsBase.h
+++ b/MaterialLib/SolidModels/MechanicsBase.h
@@ -148,6 +148,13 @@ struct MechanicsBase
         return ConstitutiveModel::Invalid;
     }
 
+    virtual double getBulkModulus(double const /*t*/,
+                                  ParameterLib::SpatialPosition const& /*x*/) const
+    {
+        OGS_FATAL(
+            "getBulkModulus is not yet implemented for this Solid Material.");
+    }
+
     /// Get temperature related coefficient for the global assembly if there is
     /// one.
     virtual double getTemperatureRelatedCoefficient(
-- 
GitLab