From 2c8c47d53aeab6164ea930ad7140bde7f9d198f9 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Mon, 24 Oct 2022 14:55:28 +0200
Subject: [PATCH] [PL] Moved the constitutive setting to a new directory

---
 .../ThermoRichardsMechanics/CMakeLists.txt    |   4 +-
 .../Constitutive/EqU.cpp                      |  36 ----
 .../Constitutive/EqU.h                        |  50 -----
 .../Constitutive/SolidCompressibility.cpp     |  29 ---
 .../Base.h                                    |   0
 .../Biot.cpp                                  |   0
 .../Biot.h                                    |   0
 .../Bishops.cpp                               |   0
 .../Bishops.h                                 |   1 +
 .../DarcyLaw.cpp                              |   0
 .../DarcyLaw.h                                |   3 +-
 .../ElasticTangentStiffnessData.h             |  22 ++
 .../EqP.cpp                                   |   0
 .../EqP.h                                     |   2 +-
 .../EqT.cpp                                   |   0
 .../EqT.h                                     |   0
 .../FluidThermalExpansion.cpp                 |   0
 .../FluidThermalExpansion.h                   |   0
 .../Gravity.cpp                               |  12 +-
 .../Gravity.h                                 |   4 +-
 .../LiquidDensity.cpp                         |   0
 .../LiquidDensity.h                           |   0
 .../LiquidViscosity.cpp                       |   0
 .../LiquidViscosity.h                         |   2 +-
 .../MaterialState.h                           |  17 +-
 .../ConstitutiveCommon/PermeabilityData.h     |  24 +++
 .../Porosity.cpp                              |   0
 .../Porosity.h                                |   0
 .../Saturation.cpp                            |   0
 .../Saturation.h                              |   0
 .../SolidCompressibility.h                    |  20 +-
 .../SolidDensity.cpp                          |   0
 .../SolidDensity.h                            |   0
 .../SolidThermalExpansion.cpp                 |   0
 .../SolidThermalExpansion.h                   |   0
 .../Swelling.cpp                              |   0
 .../Swelling.h                                |   3 +-
 .../TRMHeatStorageAndFlux.cpp                 |   0
 .../TRMHeatStorageAndFlux.h                   |   2 +-
 .../TRMStorage.cpp                            |   0
 .../TRMStorage.h                              |   0
 .../TRMVaporDiffusion.cpp                     |   0
 .../TRMVaporDiffusion.h                       |   0
 .../ThermoOsmosis.cpp                         |   0
 .../ThermoOsmosis.h                           |   0
 .../ConstitutiveOriginal/ConstitutiveData.h   | 104 ++++++++++
 .../ConstitutiveOriginal/ConstitutiveModels.h |  70 +++++++
 .../ConstitutiveSetting.cpp                   |  13 +-
 .../ConstitutiveSetting.h                     |  63 ++++++
 .../ElasticTangentStiffnessModel.cpp}         |   6 +-
 .../ElasticTangentStiffnessModel.h}           |  20 +-
 .../PermeabilityModel.cpp}                    |   6 +-
 .../PermeabilityModel.h}                      |  17 +-
 .../SolidMechanics.cpp                        |  18 +-
 .../SolidMechanics.h                          |  23 ++-
 .../ConstitutiveOriginal/TraitsBase.h         |  20 ++
 .../ConstitutiveSetting.h                     | 189 ------------------
 57 files changed, 391 insertions(+), 389 deletions(-)
 delete mode 100644 ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp
 delete mode 100644 ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h
 delete mode 100644 ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Base.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Biot.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Biot.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Bishops.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Bishops.h (97%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/DarcyLaw.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/DarcyLaw.h (96%)
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/EqP.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/EqP.h (98%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/EqT.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/EqT.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/FluidThermalExpansion.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/FluidThermalExpansion.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Gravity.cpp (68%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Gravity.h (87%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/LiquidDensity.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/LiquidDensity.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/LiquidViscosity.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/LiquidViscosity.h (93%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/MaterialState.h (58%)
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Porosity.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Porosity.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Saturation.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Saturation.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/SolidCompressibility.h (62%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/SolidDensity.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/SolidDensity.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/SolidThermalExpansion.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/SolidThermalExpansion.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Swelling.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/Swelling.h (96%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMHeatStorageAndFlux.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMHeatStorageAndFlux.h (98%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMStorage.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMStorage.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMVaporDiffusion.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/TRMVaporDiffusion.h (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/ThermoOsmosis.cpp (100%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveCommon}/ThermoOsmosis.h (100%)
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h
 rename ProcessLib/ThermoRichardsMechanics/{ => ConstitutiveOriginal}/ConstitutiveSetting.cpp (94%)
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive/ElasticTangentStiffness.cpp => ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp} (89%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive/ElasticTangentStiffness.h => ConstitutiveOriginal/ElasticTangentStiffnessModel.h} (61%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive/Permeability.cpp => ConstitutiveOriginal/PermeabilityModel.cpp} (96%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive/Permeability.h => ConstitutiveOriginal/PermeabilityModel.h} (78%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveOriginal}/SolidMechanics.cpp (82%)
 rename ProcessLib/ThermoRichardsMechanics/{Constitutive => ConstitutiveOriginal}/SolidMechanics.h (72%)
 create mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h
 delete mode 100644 ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h

diff --git a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
index cb894af0679..a76b69a84f6 100644
--- a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
+++ b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
@@ -1,5 +1,7 @@
 get_source_files(SOURCES)
-append_source_files(SOURCES Constitutive)
+
+append_source_files(SOURCES ConstitutiveCommon)
+append_source_files(SOURCES ConstitutiveOriginal)
 
 ogs_add_library(ThermoRichardsMechanics ${SOURCES})
 target_link_libraries(
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp
deleted file mode 100644
index c000147075b..00000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#include "EqU.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-void EqUModel<DisplacementDim>::eval(
-    CapillaryPressureData<DisplacementDim> const& p_cap_data,
-    SaturationDataDeriv const& dS_L_data,
-    BiotData const& biot_data,
-    BishopsData const& bishops_data,
-    LiquidDensityData const& rho_L_data,
-    PorosityData const& poro_data,
-    EqUData<DisplacementDim>& out) const
-{
-    out.J_up_X_BTI2N =
-        -biot_data.alpha *
-        (bishops_data.chi_S_L +
-         bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap);
-
-    out.J_up_HT_V_N =
-        poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b_;
-}
-
-template struct EqUModel<2>;
-template struct EqUModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h
deleted file mode 100644
index 05c1e8df127..00000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, 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 "LiquidDensity.h"
-#include "Porosity.h"
-#include "Saturation.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-struct EqUData
-{
-    GlobalDimVector<DisplacementDim> J_up_HT_V_N = DVnan<DisplacementDim>();
-    double J_up_X_BTI2N = nan;
-};
-
-template <int DisplacementDim>
-struct EqUModel
-{
-    explicit EqUModel(
-        Eigen::Vector<double, DisplacementDim> const& specific_body_force)
-        : b_(specific_body_force)
-    {
-    }
-
-    void eval(CapillaryPressureData<DisplacementDim> const& p_cap_data,
-              SaturationDataDeriv const& dS_L_data,
-              BiotData const& biot_data,
-              BishopsData const& bishops_data,
-              LiquidDensityData const& rho_L_data,
-              PorosityData const& poro_data,
-              EqUData<DisplacementDim>& out) const;
-
-private:
-    /// Gravity vector (specific body force).
-    Eigen::Vector<double, DisplacementDim> const b_;
-};
-
-extern template struct EqUModel<2>;
-extern template struct EqUModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp
deleted file mode 100644
index aa93d1ad61e..00000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#include "SolidCompressibility.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-void SolidCompressibilityModel<DisplacementDim>::eval(
-    const SpaceTimeData& x_t,
-    const BiotData& biot_data,
-    const ElasticTangentStiffnessData<DisplacementDim>& C_el_data,
-    SolidCompressibilityData& out) const
-{
-    out.beta_SR = (1 - biot_data.alpha) /
-                  solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el);
-}
-
-template struct SolidCompressibilityModel<2>;
-template struct SolidCompressibilityModel<3>;
-
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
similarity index 97%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
index da4dd9bef04..fc93022afe8 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
@@ -10,6 +10,7 @@
 
 #pragma once
 
+#include "Base.h"
 #include "Saturation.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
index 1fc24f14182..9f584b208ae 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
@@ -11,7 +11,8 @@
 #pragma once
 
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "LiquidViscosity.h"
+#include "PermeabilityData.h"
 #include "ThermoOsmosis.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h
new file mode 100644
index 00000000000..ed360ae83d1
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h
@@ -0,0 +1,22 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "Base.h"
+
+namespace ProcessLib::ThermoRichardsMechanics
+{
+template <int DisplacementDim>
+struct ElasticTangentStiffnessData
+{
+    KelvinMatrix<DisplacementDim> C_el;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
similarity index 98%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
index 67bde1b24e3..e52e1b14268 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
@@ -13,7 +13,7 @@
 #include "Biot.h"
 #include "FluidThermalExpansion.h"
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "PermeabilityData.h"
 #include "Saturation.h"
 #include "TRMStorage.h"
 #include "TRMVaporDiffusion.h"
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
similarity index 68%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
index a1b8db53098..cad9183ab6c 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
@@ -14,10 +14,9 @@ namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
 void GravityModel<DisplacementDim>::eval(
-    PorosityData const& poro_data,
-    SolidDensityData const& rho_S_data,
-    LiquidDensityData const& rho_L_data,
-    SaturationData const& S_L_data,
+    PorosityData const& poro_data, SolidDensityData const& rho_S_data,
+    LiquidDensityData const& rho_L_data, SaturationData const& S_L_data,
+    SaturationDataDeriv const& dS_L_data,
     GravityData<DisplacementDim>& out) const
 {
     auto const rho_SR = rho_S_data.rho_SR;
@@ -28,6 +27,11 @@ void GravityModel<DisplacementDim>::eval(
 
     double const rho = rho_SR * (1 - phi) + S_L * phi * rho_LR;
     out.volumetric_body_force = rho * b;
+
+    // There is no minus in the Jacobian block, because volumetric_body_force is
+    // subtracted from the residual vector.
+    out.J_up_HT_V_N =
+        poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b;
 }
 
 template struct GravityModel<2>;
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
similarity index 87%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
index 0f17831fb92..5100d4803d5 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
@@ -19,7 +19,8 @@ namespace ProcessLib::ThermoRichardsMechanics
 template <int DisplacementDim>
 struct GravityData
 {
-    Eigen::Vector<double, DisplacementDim> volumetric_body_force;
+    GlobalDimVector<DisplacementDim> volumetric_body_force;
+    GlobalDimVector<DisplacementDim> J_up_HT_V_N;
 };
 
 template <int DisplacementDim>
@@ -35,6 +36,7 @@ struct GravityModel
               SolidDensityData const& rho_S_data,
               LiquidDensityData const& rho_L_data,
               SaturationData const& S_L_data,
+              SaturationDataDeriv const& dS_L_data,
               GravityData<DisplacementDim>& out) const;
 
 private:
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
similarity index 93%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
index 6ccdcd370ac..ac31025f2ab 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
@@ -10,7 +10,7 @@
 
 #pragma once
 
-#include "ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h"
+#include "Base.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
 {
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
similarity index 58%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
index a09fd202f1c..2cb6cdfceb7 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
@@ -15,20 +15,19 @@
 namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
-struct MaterialStateData
+class MaterialStateData
 {
-    explicit MaterialStateData(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
-        : material_state_variables(
-              solid_material.createMaterialStateVariables())
+    using MSV = typename MaterialLib::Solids::MechanicsBase<
+        DisplacementDim>::MaterialStateVariables;
+
+public:
+    explicit MaterialStateData(std::unique_ptr<MSV>&& material_state_variables)
+        : material_state_variables(std::move(material_state_variables))
     {
     }
 
     void pushBackState() { material_state_variables->pushBackState(); }
 
-    std::unique_ptr<typename MaterialLib::Solids::MechanicsBase<
-        DisplacementDim>::MaterialStateVariables>
-        material_state_variables;
+    std::unique_ptr<MSV> material_state_variables;
 };
 }  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h
new file mode 100644
index 00000000000..b43cf3bed32
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h
@@ -0,0 +1,24 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "Base.h"
+
+namespace ProcessLib::ThermoRichardsMechanics
+{
+template <int DisplacementDim>
+struct PermeabilityData
+{
+    double k_rel;
+    double dk_rel_dS_L;
+    GlobalDimMatrix<DisplacementDim> Ki_over_mu;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
similarity index 62%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
index 692ef81ac4c..ea0331b1a8c 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
@@ -11,7 +11,7 @@
 #pragma once
 
 #include "Biot.h"
-#include "ElasticTangentStiffness.h"
+#include "ElasticTangentStiffnessData.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
 {
@@ -20,12 +20,10 @@ struct SolidCompressibilityData
     double beta_SR;
 };
 
-template <int DisplacementDim>
+template <int DisplacementDim, typename SolidMaterial>
 struct SolidCompressibilityModel
 {
-    explicit SolidCompressibilityModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+    explicit SolidCompressibilityModel(SolidMaterial const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -33,12 +31,14 @@ struct SolidCompressibilityModel
     void eval(SpaceTimeData const& x_t,
               BiotData const& biot_data,
               ElasticTangentStiffnessData<DisplacementDim> const& C_el_data,
-              SolidCompressibilityData& out) const;
+              SolidCompressibilityData& out) const
+    {
+        out.beta_SR =
+            (1 - biot_data.alpha) /
+            solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el);
+    }
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidMaterial const& solid_material_;
 };
-
-extern template struct SolidCompressibilityModel<2>;
-extern template struct SolidCompressibilityModel<3>;
 }  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
index 54091d39898..ca44e96e572 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
@@ -10,8 +10,7 @@
 
 #pragma once
 
-#include "ElasticTangentStiffness.h"
-#include "MathLib/KelvinVector.h"
+#include "ElasticTangentStiffnessData.h"
 #include "Saturation.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
similarity index 98%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
index f2f92242bca..e9c29b2f4ab 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
@@ -12,7 +12,7 @@
 
 #include "DarcyLaw.h"
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "PermeabilityData.h"
 #include "Porosity.h"
 #include "SolidDensity.h"
 
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h
new file mode 100644
index 00000000000..12b3a841d77
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h
@@ -0,0 +1,104 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "ProcessLib/Reflection/ReflectionData.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+/// Data whose state must be tracked by the TRM process.
+template <int DisplacementDim>
+struct StatefulData
+{
+    SaturationData S_L_data;
+    PorosityData poro_data;
+    TransportPorosityData transport_poro_data;
+    StrainData<DisplacementDim> eps_data;
+    SwellingDataStateful<DisplacementDim> swelling_data;
+    SolidMechanicsDataStateful<DisplacementDim> s_mech_data;
+
+    static auto reflect()
+    {
+        using Self = StatefulData<DisplacementDim>;
+
+        return Reflection::reflectWithoutName(&Self::S_L_data,
+                                              &Self::poro_data,
+                                              &Self::transport_poro_data,
+                                              &Self::eps_data,
+                                              &Self::swelling_data,
+                                              &Self::s_mech_data);
+    }
+};
+
+/// Data that is needed for output purposes, but not directly for the assembly.
+template <int DisplacementDim>
+struct OutputData
+{
+    DarcyLawData<DisplacementDim> darcy_data;
+    LiquidDensityData rho_L_data;
+    LiquidViscosityData mu_L_data;
+    SolidDensityData rho_S_data;
+
+    static auto reflect()
+    {
+        using Self = OutputData<DisplacementDim>;
+
+        return Reflection::reflectWithoutName(&Self::darcy_data,
+                                              &Self::rho_L_data,
+                                              &Self::mu_L_data,
+                                              &Self::rho_S_data);
+    }
+};
+
+/// Data that is needed for the equation system assembly.
+template <int DisplacementDim>
+struct ConstitutiveData
+{
+    SolidMechanicsDataStateless<DisplacementDim> s_mech_data;
+    GravityData<DisplacementDim> grav_data;
+    TRMHeatStorageAndFluxData<DisplacementDim> heat_data;
+    TRMVaporDiffusionData<DisplacementDim> vap_data;
+    TRMStorageData storage_data;
+    EqPData<DisplacementDim> eq_p_data;
+    EqTData<DisplacementDim> eq_T_data;
+    ThermoOsmosisData<DisplacementDim> th_osmosis_data;
+};
+
+/// Data that stores intermediate values, which are not needed outside the
+/// constitutive setting.
+template <int DisplacementDim>
+struct ConstitutiveTempData
+{
+    SwellingDataStateless<DisplacementDim> swelling_data;
+    ElasticTangentStiffnessData<DisplacementDim> C_el_data;
+    BiotData biot_data;
+    SolidCompressibilityData solid_compressibility_data;
+    SaturationDataDeriv dS_L_data;
+    BishopsData bishops_data;
+    // TODO why not usual state tracking for that?
+    BishopsData bishops_data_prev;
+    SolidThermalExpansionData<DisplacementDim> s_therm_exp_data;
+    PermeabilityData<DisplacementDim> perm_data;
+    FluidThermalExpansionData f_therm_exp_data;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h
new file mode 100644
index 00000000000..1b3676853c5
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h
@@ -0,0 +1,70 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "ElasticTangentStiffnessModel.h"
+#include "PermeabilityModel.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+/// Constitutive models used for assembly.
+template <int DisplacementDim>
+struct ConstitutiveModels
+{
+    template <typename TRMProcessData>
+    explicit ConstitutiveModels(
+        TRMProcessData const& process_data,
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
+        : elastic_tangent_stiffness_model(solid_material),
+          solid_compressibility_model(solid_material),
+          s_mech_model(solid_material),
+          grav_model(process_data.specific_body_force),
+          darcy_model(process_data.specific_body_force),
+          eq_p_model(process_data.specific_body_force)
+    {
+    }
+
+    ElasticTangentStiffnessModel<DisplacementDim>
+        elastic_tangent_stiffness_model;
+    BiotModel biot_model;
+    SolidCompressibilityModel<DisplacementDim,
+                              SolidConstitutiveRelation<DisplacementDim>>
+        solid_compressibility_model;
+    SaturationModel<DisplacementDim> S_L_model;
+    BishopsModel bishops_model;
+    PorosityModel<DisplacementDim> poro_model;
+    SwellingModel<DisplacementDim> swelling_model;
+    SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model;
+    SolidMechanicsModel<DisplacementDim> s_mech_model;
+    LiquidDensityModel<DisplacementDim> rho_L_model;
+    SolidDensityModel<DisplacementDim> rho_S_model;
+    GravityModel<DisplacementDim> grav_model;
+    LiquidViscosityModel<DisplacementDim> mu_L_model;
+    PermeabilityModel<DisplacementDim> perm_model;
+    DarcyLawModel<DisplacementDim> darcy_model;
+    TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model;
+    TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model;
+    FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model;
+    TRMStorageModel<DisplacementDim> storage_model;
+    EqPModel<DisplacementDim> eq_p_model;
+    EqTModel<DisplacementDim> eq_T_model;
+    ThermoOsmosisModel<DisplacementDim> th_osmosis_model;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
similarity index 94%
rename from ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
index 3439ae15cc3..34ccac3a66f 100644
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
@@ -10,7 +10,7 @@
 
 #include "ConstitutiveSetting.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void ConstitutiveSetting<DisplacementDim>::eval(
@@ -43,7 +43,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
     auto& darcy_data = out.darcy_data;
     auto& f_therm_exp_data = tmp.f_therm_exp_data;
 
-    auto& swelling_data = cd.swelling_data;
+    auto& swelling_data = tmp.swelling_data;
     auto& s_mech_data = cd.s_mech_data;
     auto& grav_data = cd.grav_data;
     auto& heat_data = cd.heat_data;
@@ -100,7 +100,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
 
     models.s_mech_model.eval(
         x_t, s_therm_exp_data, swelling_data, T_data, p_cap_data, biot_data,
-        bishops_data, state.eps_data,
+        bishops_data, dS_L_data, state.eps_data,
         prev_state.eps_data /* TODO why is eps stateful? */, mat_state,
         prev_state.s_mech_data, state.s_mech_data, s_mech_data);
 
@@ -118,10 +118,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
     models.rho_S_model.eval(x_t, media_data, poro_data, T_data, rho_S_data);
 
     models.grav_model.eval(poro_data, rho_S_data, rho_L_data, S_L_data,
-                           grav_data);
-
-    models.eq_u_model.eval(p_cap_data, dS_L_data, biot_data, bishops_data,
-                           rho_L_data, poro_data, cd.eq_u_data);
+                           dS_L_data, grav_data);
 
     models.mu_L_model.eval(x_t, media_data, T_data, mu_L_data);
 
@@ -166,4 +163,4 @@ void ConstitutiveSetting<DisplacementDim>::eval(
 template struct ConstitutiveSetting<2>;
 template struct ConstitutiveSetting<3>;
 
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h
new file mode 100644
index 00000000000..1d1db6c1fb6
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h
@@ -0,0 +1,63 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "ConstitutiveData.h"
+#include "ConstitutiveModels.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+template <int DisplacementDim>
+struct ConstitutiveSetting
+{
+    /// Evaluate the constitutive setting.
+    void eval(ConstitutiveModels<DisplacementDim>& models, double const t,
+              double const dt, ParameterLib::SpatialPosition const& x_position,
+              MaterialPropertyLib::Medium& medium,
+              TemperatureData<DisplacementDim> const& T_data,
+              CapillaryPressureData<DisplacementDim> const& p_cap_data,
+              KelvinVector<DisplacementDim> const& eps_arg,
+              KelvinVector<DisplacementDim> const& eps_prev_arg,
+              StatefulData<DisplacementDim>& state,
+              StatefulData<DisplacementDim> const& prev_state,
+              MaterialStateData<DisplacementDim>& mat_state,
+              ConstitutiveTempData<DisplacementDim>& tmp,
+              OutputData<DisplacementDim>& out,
+              ConstitutiveData<DisplacementDim>& cd);
+
+    static KelvinVector<DisplacementDim> const& totalStress(
+        ConstitutiveData<DisplacementDim> const& cd,
+        StatefulData<DisplacementDim> const& /*state*/)
+    {
+        return cd.s_mech_data.sigma_total;
+    }
+    static KelvinVector<DisplacementDim>& totalStress(
+        ConstitutiveData<DisplacementDim>& cd,
+        StatefulData<DisplacementDim>& /*state*/)
+    {
+        return cd.s_mech_data.sigma_total;
+    }
+
+    static KelvinVector<DisplacementDim> const& statefulStress(
+        StatefulData<DisplacementDim> const& state)
+    {
+        return state.s_mech_data.sigma_eff;
+    }
+    static KelvinVector<DisplacementDim>& statefulStress(
+        StatefulData<DisplacementDim>& state)
+    {
+        return state.s_mech_data.sigma_eff;
+    }
+};
+
+extern template struct ConstitutiveSetting<2>;
+extern template struct ConstitutiveSetting<3>;
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
similarity index 89%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
index cc330a575c7..a7f462c1ea8 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
@@ -8,11 +8,11 @@
  *
  */
 
-#include "ElasticTangentStiffness.h"
+#include "ElasticTangentStiffnessModel.h"
 
 #include "MaterialLib/MPL/Utils/FormEigenTensor.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void ElasticTangentStiffnessModel<DisplacementDim>::eval(
@@ -51,4 +51,4 @@ void ElasticTangentStiffnessModel<DisplacementDim>::eval(
 
 template struct ElasticTangentStiffnessModel<2>;
 template struct ElasticTangentStiffnessModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
similarity index 61%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
index fe749935a61..bcfd26de1e5 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
@@ -10,23 +10,17 @@
 
 #pragma once
 
-#include "Base.h"
-#include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h"
+#include "TraitsBase.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
-template <int DisplacementDim>
-struct ElasticTangentStiffnessData
-{
-    KelvinMatrix<DisplacementDim> C_el;
-};
-
 template <int DisplacementDim>
 struct ElasticTangentStiffnessModel
 {
     explicit ElasticTangentStiffnessModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -36,9 +30,9 @@ struct ElasticTangentStiffnessModel
               ElasticTangentStiffnessData<DisplacementDim>& out) const;
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidConstitutiveRelation<DisplacementDim> const& solid_material_;
 };
 
 extern template struct ElasticTangentStiffnessModel<2>;
 extern template struct ElasticTangentStiffnessModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
index 03f4229158d..4c17578ddb4 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
@@ -8,11 +8,11 @@
  *
  */
 
-#include "Permeability.h"
+#include "PermeabilityModel.h"
 
 #include "MaterialLib/MPL/Utils/FormEigenTensor.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void PermeabilityModel<DisplacementDim>::eval(
@@ -106,4 +106,4 @@ void PermeabilityModel<DisplacementDim>::eval(
 
 template struct PermeabilityModel<2>;
 template struct PermeabilityModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
similarity index 78%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
index ae3eb3c5b52..7e5364f9243 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
@@ -10,20 +10,13 @@
 
 #pragma once
 
-#include "LiquidViscosity.h"
-#include "Porosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h"
 #include "SolidMechanics.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
-template <int DisplacementDim>
-struct PermeabilityData
-{
-    double k_rel;
-    double dk_rel_dS_L;
-    GlobalDimMatrix<DisplacementDim> Ki_over_mu;
-};
-
 template <int DisplacementDim>
 struct PermeabilityModel
 {
@@ -46,4 +39,4 @@ struct PermeabilityModel
 
 extern template struct PermeabilityModel<2>;
 extern template struct PermeabilityModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
similarity index 82%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
index 5a966d944fd..9574cd3ccef 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
@@ -10,7 +10,7 @@
 
 #include "SolidMechanics.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void SolidMechanicsModel<DisplacementDim>::eval(
@@ -21,6 +21,7 @@ void SolidMechanicsModel<DisplacementDim>::eval(
     CapillaryPressureData<DisplacementDim> const& p_cap_data,
     BiotData const& biot_data,
     BishopsData const& bishops_data,
+    SaturationDataDeriv const& dS_L_data,
     StrainData<DisplacementDim> const& eps_data,
     StrainData<DisplacementDim> const& eps_prev_data,
     MaterialStateData<DisplacementDim>& mat_state,
@@ -41,6 +42,7 @@ void SolidMechanicsModel<DisplacementDim>::eval(
 
     variables.mechanical_strain.emplace<KelvinVector<DisplacementDim>>(
         current_state.eps_m);
+    variables.temperature = T_data.T;
 
     MPL::VariableArray variables_prev;
     variables_prev.stress.emplace<KelvinVector<DisplacementDim>>(
@@ -64,14 +66,22 @@ void SolidMechanicsModel<DisplacementDim>::eval(
     auto const& identity2 = MathLib::KelvinVector::Invariants<
         MathLib::KelvinVector::kelvin_vector_dimensions(
             DisplacementDim)>::identity2;
-    out.sigma_total =
+    out.sigma_total.noalias() =
         current_state.sigma_eff +
         biot_data.alpha * bishops_data.chi_S_L * p_cap_data.p_cap * identity2;
 
-    out.J_uT_BT_K_N =  // TODO is this thermal stress?
+    out.J_uT_BT_K_N.noalias() =  // TODO is this thermal stress?
         -out.stiffness_tensor *
         s_therm_exp_data.solid_linear_thermal_expansivity_vector;
 
+    double const J_up_X_BTI2N =
+        -biot_data.alpha *
+        (bishops_data.chi_S_L +
+         bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap);
+
+    out.J_up_BT_K_N.noalias() =
+        swelling_data.J_up_BT_K_N + J_up_X_BTI2N * identity2;
+
     out.equivalent_plastic_strain =
         mat_state.material_state_variables->getEquivalentPlasticStrain();
 }
@@ -79,4 +89,4 @@ void SolidMechanicsModel<DisplacementDim>::eval(
 template struct SolidMechanicsModel<2>;
 template struct SolidMechanicsModel<3>;
 
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
similarity index 72%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
index ec591359a8b..f5d26f293a8 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
@@ -10,14 +10,14 @@
 
 #pragma once
 
-#include "Biot.h"
-#include "Bishops.h"
-#include "MaterialLib/SolidModels/MechanicsBase.h"
-#include "MaterialState.h"
-#include "SolidThermalExpansion.h"
-#include "Swelling.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h"
+#include "TraitsBase.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 struct SolidMechanicsDataStateful
@@ -42,6 +42,7 @@ struct SolidMechanicsDataStateless
     KelvinVector<DisplacementDim> sigma_total = KVnan<DisplacementDim>();
     KelvinMatrix<DisplacementDim> stiffness_tensor = KMnan<DisplacementDim>();
     KelvinVector<DisplacementDim> J_uT_BT_K_N = KVnan<DisplacementDim>();
+    KelvinVector<DisplacementDim> J_up_BT_K_N = KVnan<DisplacementDim>();
     double equivalent_plastic_strain = nan;
 };
 
@@ -49,8 +50,7 @@ template <int DisplacementDim>
 struct SolidMechanicsModel
 {
     explicit SolidMechanicsModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -63,6 +63,7 @@ struct SolidMechanicsModel
         CapillaryPressureData<DisplacementDim> const& p_cap_data,
         BiotData const& biot_data,
         BishopsData const& bishops_data,
+        SaturationDataDeriv const& dS_L_data,
         StrainData<DisplacementDim> const& eps_data,
         StrainData<DisplacementDim> const& eps_prev_data,
         MaterialStateData<DisplacementDim>& mat_state,
@@ -71,9 +72,9 @@ struct SolidMechanicsModel
         SolidMechanicsDataStateless<DisplacementDim>& out) const;
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidConstitutiveRelation<DisplacementDim> const& solid_material_;
 };
 
 extern template struct SolidMechanicsModel<2>;
 extern template struct SolidMechanicsModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h
new file mode 100644
index 00000000000..661dfc907f4
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h
@@ -0,0 +1,20 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, 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 "MaterialLib/SolidModels/MechanicsBase.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+template <int DisplacementDim>
+using SolidConstitutiveRelation =
+    MaterialLib::Solids::MechanicsBase<DisplacementDim>;
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h
deleted file mode 100644
index 2df2974fdba..00000000000
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, 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 <limits>
-
-#include "Constitutive/DarcyLaw.h"
-#include "Constitutive/EqP.h"
-#include "Constitutive/EqT.h"
-#include "Constitutive/EqU.h"
-#include "Constitutive/FluidThermalExpansion.h"
-#include "Constitutive/Gravity.h"
-#include "Constitutive/MaterialState.h"
-#include "Constitutive/Porosity.h"
-#include "Constitutive/Saturation.h"
-#include "Constitutive/SolidMechanics.h"
-#include "Constitutive/TRMHeatStorageAndFlux.h"
-#include "Constitutive/TRMStorage.h"
-#include "Constitutive/TRMVaporDiffusion.h"
-#include "Constitutive/ThermoOsmosis.h"
-#include "ThermoRichardsMechanicsProcessData.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-
-/// Data whose state must be tracked by the TRM process.
-template <int DisplacementDim>
-struct StatefulData
-{
-    SaturationData S_L_data;
-    PorosityData poro_data;
-    TransportPorosityData transport_poro_data;
-    StrainData<DisplacementDim> eps_data;
-    SwellingDataStateful<DisplacementDim> swelling_data;
-    SolidMechanicsDataStateful<DisplacementDim> s_mech_data;
-
-    static auto reflect()
-    {
-        using Self = StatefulData<DisplacementDim>;
-
-        return ProcessLib::Reflection::reflectWithoutName(
-            &Self::S_L_data,
-            &Self::poro_data,
-            &Self::transport_poro_data,
-            &Self::eps_data,
-            &Self::swelling_data,
-            &Self::s_mech_data);
-    }
-};
-
-/// Data that is needed for output purposes, but not directly for the assembly.
-template <int DisplacementDim>
-struct OutputData
-{
-    DarcyLawData<DisplacementDim> darcy_data;
-    LiquidDensityData rho_L_data;
-    LiquidViscosityData mu_L_data;
-    SolidDensityData rho_S_data;
-
-    static auto reflect()
-    {
-        using Self = OutputData<DisplacementDim>;
-
-        return ProcessLib::Reflection::reflectWithoutName(&Self::darcy_data,
-                                                          &Self::rho_L_data,
-                                                          &Self::mu_L_data,
-                                                          &Self::rho_S_data);
-    }
-};
-
-/// Data that is needed for the equation system assembly.
-template <int DisplacementDim>
-struct ConstitutiveData
-{
-    SwellingDataStateless<DisplacementDim> swelling_data;
-    SolidMechanicsDataStateless<DisplacementDim> s_mech_data;
-    GravityData<DisplacementDim> grav_data;
-    TRMHeatStorageAndFluxData<DisplacementDim> heat_data;
-    TRMVaporDiffusionData<DisplacementDim> vap_data;
-    TRMStorageData storage_data;
-    EqUData<DisplacementDim> eq_u_data;
-    EqPData<DisplacementDim> eq_p_data;
-    EqTData<DisplacementDim> eq_T_data;
-    ThermoOsmosisData<DisplacementDim> th_osmosis_data;
-};
-
-/// Data that stores intermediate values, which are not needed outside the
-/// constitutive setting.
-template <int DisplacementDim>
-struct ConstitutiveTempData
-{
-    ElasticTangentStiffnessData<DisplacementDim> C_el_data;
-    BiotData biot_data;
-    SolidCompressibilityData solid_compressibility_data;
-    SaturationDataDeriv dS_L_data;
-    BishopsData bishops_data;
-    // TODO why not usual state tracking for that?
-    BishopsData bishops_data_prev;
-    SolidThermalExpansionData<DisplacementDim> s_therm_exp_data;
-    PermeabilityData<DisplacementDim> perm_data;
-    FluidThermalExpansionData f_therm_exp_data;
-};
-
-/// Constitutive models used for assembly.
-template <int DisplacementDim>
-struct ConstitutiveModels
-{
-    explicit ConstitutiveModels(
-        ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data,
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
-        : elastic_tangent_stiffness_model(solid_material),
-          solid_compressibility_model(solid_material),
-          s_mech_model(solid_material),
-          grav_model(process_data.specific_body_force),
-          darcy_model(process_data.specific_body_force),
-          eq_u_model(process_data.specific_body_force),
-          eq_p_model(process_data.specific_body_force)
-    {
-    }
-
-    ElasticTangentStiffnessModel<DisplacementDim>
-        elastic_tangent_stiffness_model;
-    BiotModel biot_model;
-    SolidCompressibilityModel<DisplacementDim> solid_compressibility_model;
-    SaturationModel<DisplacementDim> S_L_model;
-    BishopsModel bishops_model;
-    PorosityModel<DisplacementDim> poro_model;
-    SwellingModel<DisplacementDim> swelling_model;
-    SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model;
-    SolidMechanicsModel<DisplacementDim> s_mech_model;
-    LiquidDensityModel<DisplacementDim> rho_L_model;
-    SolidDensityModel<DisplacementDim> rho_S_model;
-    GravityModel<DisplacementDim> grav_model;
-    LiquidViscosityModel<DisplacementDim> mu_L_model;
-    PermeabilityModel<DisplacementDim> perm_model;
-    DarcyLawModel<DisplacementDim> darcy_model;
-    TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model;
-    TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model;
-    FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model;
-    TRMStorageModel<DisplacementDim> storage_model;
-    EqUModel<DisplacementDim> eq_u_model;
-    EqPModel<DisplacementDim> eq_p_model;
-    EqTModel<DisplacementDim> eq_T_model;
-    ThermoOsmosisModel<DisplacementDim> th_osmosis_model;
-};
-
-template <int DisplacementDim>
-struct ConstitutiveSetting
-{
-    explicit ConstitutiveSetting(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material,
-        ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data)
-        : process_data_(process_data), solid_material_(solid_material)
-    {
-    }
-
-    /// Evaluate the constitutive setting.
-    void eval(ConstitutiveModels<DisplacementDim>& models, double const t,
-              double const dt, ParameterLib::SpatialPosition const& x_position,
-              MaterialPropertyLib::Medium& medium,
-              TemperatureData<DisplacementDim> const& T_data,
-              CapillaryPressureData<DisplacementDim> const& p_cap_data,
-              KelvinVector<DisplacementDim> const& eps_arg,
-              KelvinVector<DisplacementDim> const& eps_prev_arg,
-              StatefulData<DisplacementDim>& state,
-              StatefulData<DisplacementDim> const& prev_state,
-              MaterialStateData<DisplacementDim>& mat_state,
-              ConstitutiveTempData<DisplacementDim>& tmp,
-              OutputData<DisplacementDim>& out,
-              ConstitutiveData<DisplacementDim>& cd);
-
-private:
-    ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data_;
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
-};
-
-extern template struct ConstitutiveSetting<2>;
-extern template struct ConstitutiveSetting<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
-- 
GitLab