From ff8da7c24a3086a40839155b935973e524955abb Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Fri, 23 Jun 2017 16:33:01 +0200
Subject: [PATCH] [MatL] LinearElastic: Split implementation.

Move it from header to impl, which is only included
in the cpp.
---
 .../SolidModels/LinearElasticIsotropic-impl.h | 55 +++++++++++++++++++
 .../SolidModels/LinearElasticIsotropic.cpp    |  1 +
 .../SolidModels/LinearElasticIsotropic.h      | 19 +------
 3 files changed, 57 insertions(+), 18 deletions(-)
 create mode 100644 MaterialLib/SolidModels/LinearElasticIsotropic-impl.h

diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h b/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h
new file mode 100644
index 00000000000..9c9d8376076
--- /dev/null
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h
@@ -0,0 +1,55 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2017, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "LinearElasticIsotropic.h"
+
+namespace MaterialLib
+{
+namespace Solids
+{
+template <int DisplacementDim>
+boost::optional<
+    std::tuple<typename LinearElasticIsotropic<DisplacementDim>::KelvinVector,
+               std::unique_ptr<typename MechanicsBase<
+                   DisplacementDim>::MaterialStateVariables>,
+               typename LinearElasticIsotropic<DisplacementDim>::KelvinMatrix>>
+LinearElasticIsotropic<DisplacementDim>::integrateStress(
+    double const t,
+    ProcessLib::SpatialPosition const& x,
+    double const /*dt*/,
+    KelvinVector const& eps_prev,
+    KelvinVector const& eps,
+    KelvinVector const& sigma_prev,
+    typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
+        material_state_variables)
+{
+    KelvinMatrix C = KelvinMatrix::Zero();
+
+    C.template topLeftCorner<3, 3>().setConstant(_mp.lambda(t, x));
+    C.noalias() += 2 * _mp.mu(t, x) * KelvinMatrix::Identity();
+
+    KelvinVector sigma = sigma_prev + C * (eps - eps_prev);
+
+    return {std::make_tuple(
+        sigma,
+        std::unique_ptr<
+            typename MechanicsBase<DisplacementDim>::MaterialStateVariables>{
+            new MaterialStateVariables{
+                static_cast<MaterialStateVariables const&>(
+                    material_state_variables)}},
+        C)};
+}
+
+extern template class LinearElasticIsotropic<2>;
+extern template class LinearElasticIsotropic<3>;
+
+}  // namespace Solids
+}  // namespace MaterialLib
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
index 60298622ca7..b34da125ec1 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "LinearElasticIsotropic.h"
+#include "LinearElasticIsotropic-impl.h"
 
 namespace MaterialLib
 {
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h
index ec3814459f9..afa40e8a627 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h
@@ -99,24 +99,7 @@ public:
         KelvinVector const& eps,
         KelvinVector const& sigma_prev,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
-            material_state_variables) override
-    {
-        KelvinMatrix C = KelvinMatrix::Zero();
-
-        C.template topLeftCorner<3, 3>().setConstant(_mp.lambda(t, x));
-        C.noalias() += 2 * _mp.mu(t, x) * KelvinMatrix::Identity();
-
-        KelvinVector sigma = sigma_prev + C * (eps - eps_prev);
-
-        return {
-            std::make_tuple(sigma,
-                            std::unique_ptr<typename MechanicsBase<
-                                DisplacementDim>::MaterialStateVariables>{
-                                new MaterialStateVariables{
-                                    static_cast<MaterialStateVariables const&>(
-                                        material_state_variables)}},
-                            C)};
-    }
+            material_state_variables) override;
 
 private:
     MaterialProperties _mp;
-- 
GitLab