diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index d3d46f9b44269b2af7d50493a89857026d2a860f..e1815115ba087dc573fc271ac26ef4d0c2ccdb50 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -35,6 +35,7 @@
 #include "ProcessLib/UncoupledProcessesTimeLoop.h"
 
 #include "ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.h"
+#include "ProcessLib/HC/CreateHCProcess.h"
 #include "ProcessLib/HT/CreateHTProcess.h"
 #include "ProcessLib/HeatConduction/CreateHeatConductionProcess.h"
 #include "ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h"
@@ -383,6 +384,13 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config,
                 _process_variables, _parameters, integration_order,
                 process_config);
         }
+        else if (type == "HC")
+        {
+            process = ProcessLib::HC::createHCProcess(
+                *_mesh_vec[0], std::move(jacobian_assembler),
+                _process_variables, _parameters, integration_order,
+                process_config);
+        }
         else if (type == "SMALL_DEFORMATION")
         {
             //! \ogs_file_param{prj__processes__process__SMALL_DEFORMATION__dimension}
diff --git a/ProcessLib/CMakeLists.txt b/ProcessLib/CMakeLists.txt
index befb3595358128e00fdeb2e5732c9ab60572756e..9e66da45efbff37523ee5ed9ee8eb168d9287b73 100644
--- a/ProcessLib/CMakeLists.txt
+++ b/ProcessLib/CMakeLists.txt
@@ -45,6 +45,9 @@ APPEND_SOURCE_FILES(SOURCES HeatConduction)
 add_subdirectory(RichardsFlow)
 APPEND_SOURCE_FILES(SOURCES RichardsFlow)
 
+add_subdirectory(HC)
+APPEND_SOURCE_FILES(SOURCES HC)
+
 add_subdirectory(HT)
 APPEND_SOURCE_FILES(SOURCES HT)
 
diff --git a/ProcessLib/HC/CreateHCProcess.cpp b/ProcessLib/HC/CreateHCProcess.cpp
index 383c897063b367b99e823daf258468544115dcc3..078fcfee26c17ef17f6b8435fde6be75f3e6a831 100644
--- a/ProcessLib/HC/CreateHCProcess.cpp
+++ b/ProcessLib/HC/CreateHCProcess.cpp
@@ -63,13 +63,6 @@ std::unique_ptr<Process> createHCProcess(
     auto viscosity_model =
         MaterialLib::Fluid::createViscosityModel(viscosity_conf);
 
-    // Parameter for the density of the solid.
-    auto& density_solid = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HC__density_solid}
-        "density_solid", parameters, 1);
-    DBUG("Use \'%s\' as density_solid parameter.", density_solid.name.c_str());
-
     //! \ogs_file_param{prj__processes__process__HC__fluid__density}
     auto const& fluid_density_conf = fluid_config.getConfigSubtree("density");
     auto fluid_density =
@@ -83,56 +76,44 @@ std::unique_ptr<Process> createHCProcess(
     DBUG("Use \'%s\' as fluid_reference_density parameter.",
          fluid_reference_density.name.c_str());
 
-    // Parameter for the specific heat capacity of the solid.
-    auto& specific_heat_capacity_solid = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HC__specific_heat_capacity_solid}
-        "specific_heat_capacity_solid", parameters, 1);
-    DBUG("Use \'%s\' as specific_heat_capacity_solid parameter.",
-         specific_heat_capacity_solid.name.c_str());
-
-    // Parameter for the specific heat capacity of the fluid.
-    auto& specific_heat_capacity_fluid = findParameter<double>(
+    // Parameter for the longitudinal solute dispersivity.
+    auto const& molecular_diffusion_coefficient = findParameter<double>(
         config,
-        //! \ogs_file_param_special{prj__processes__process__HC__specific_heat_capacity_fluid}
-        "specific_heat_capacity_fluid", parameters, 1);
-    DBUG("Use \'%s\' as specific_heat_capacity_fluid parameter.",
-         specific_heat_capacity_fluid.name.c_str());
-
-    // Parameter for the thermal conductivity of the solid (only one scalar per
-    // element, i.e., the isotropic case is handled at the moment)
-    auto& thermal_dispersivity_longitudinal = findParameter<double>(
+        //!
+        //\ogs_file_param_special{prj__processes__process__HC__molecular_diffusion_coefficient
+        "molecular_diffusion_coefficient", parameters, 1);
+    DBUG("Use \'%s\' as molecular diffusion coefficient parameter.",
+         molecular_diffusion_coefficient.name.c_str());
+
+    // Parameter for the longitudinal solute dispersivity.
+    auto const& solute_dispersivity_longitudinal = findParameter<double>(
         config,
-        //! \ogs_file_param_special{prj__processes__process__HC__thermal_dispersivity_longitudinal}
-        "thermal_dispersivity_longitudinal", parameters, 1);
-    DBUG("Use \'%s\' as thermal_dispersivity_longitudinal parameter.",
-         thermal_dispersivity_longitudinal.name.c_str());
-
-    // Parameter for the thermal conductivity of the solid (only one scalar per
-    // element, i.e., the isotropic case is handled at the moment)
-    auto& thermal_dispersivity_transversal = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HC__thermal_dispersivity_transversal}
-        "thermal_dispersivity_transversal", parameters, 1);
-    DBUG("Use \'%s\' as thermal_dispersivity_transversal parameter.",
-         thermal_dispersivity_transversal.name.c_str());
-
-    // Parameter for the thermal conductivity of the solid (only one scalar per
-    // element, i.e., the isotropic case is handled at the moment)
-    auto& thermal_conductivity_solid = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HC__thermal_conductivity_solid}
-        "thermal_conductivity_solid", parameters, 1);
-    DBUG("Use \'%s\' as thermal_conductivity_solid parameter.",
-         thermal_conductivity_solid.name.c_str());
-
-    // Parameter for the thermal conductivity of the fluid.
-    auto& thermal_conductivity_fluid = findParameter<double>(
+        //!
+        //\ogs_file_param_special{prj__processes__process__HC__solute_dispersivity_longitudinal
+        "solute_dispersivity_longitudinal", parameters, 1);
+    DBUG("Use \'%s\' as longitudinal solute dispersivity parameter.",
+         solute_dispersivity_longitudinal.name.c_str());
+
+    // Parameter for the transverse solute dispersivity.
+    auto const& solute_dispersivity_transverse = findParameter<double>(
         config,
-        //! \ogs_file_param_special{prj__processes__process__HC__thermal_conductivity_fluid}
-        "thermal_conductivity_fluid", parameters, 1);
-    DBUG("Use \'%s\' as thermal_conductivity_fluid parameter.",
-         thermal_conductivity_fluid.name.c_str());
+        //!
+        //\ogs_file_param_special{prj__processes__process__HC__solute_dispersivity_transverse
+        "solute_dispersivity_transverse", parameters, 1);
+    DBUG("Use \'%s\' as transverse solute dispersivity parameter.",
+         solute_dispersivity_transverse.name.c_str());
+
+    // Parameter for the retardation factor.
+    auto const& retardation_factor =
+        findParameter<double>(config,
+        //! \ogs_file_param_special{prj__processes__process__HC__retardation_factor}
+        "retardation_factor", parameters, 1);
+
+    // Parameter for the decay rate.
+    auto const& decay_rate =
+        findParameter<double>(config,
+        //! \ogs_file_param_special{prj__processes__process__HC__decay_rate}
+        "decay_rate", parameters, 1);
 
     // Specific body force parameter.
     Eigen::Vector3d specific_body_force;
@@ -147,22 +128,20 @@ std::unique_ptr<Process> createHCProcess(
     HCProcessData process_data{
         std::move(porous_media_properties),
         std::move(viscosity_model),
-        density_solid,
         fluid_reference_density,
         std::move(fluid_density),
-        thermal_dispersivity_longitudinal,
-        thermal_dispersivity_transversal,
-        specific_heat_capacity_solid,
-        specific_heat_capacity_fluid,
-        thermal_conductivity_solid,
-        thermal_conductivity_fluid,
+        molecular_diffusion_coefficient,
+        solute_dispersivity_longitudinal,
+        solute_dispersivity_transverse,
+        retardation_factor,
+        decay_rate,
         specific_body_force,
         has_gravity};
 
     SecondaryVariableCollection secondary_variables;
 
     NumLib::NamedFunctionCaller named_function_caller(
-        {"HC_temperature_pressure"});
+        {"HC_concentration_pressure"});
 
     ProcessLib::parseSecondaryVariables(config, secondary_variables,
                                         named_function_caller);
diff --git a/ProcessLib/HC/HCFEM.h b/ProcessLib/HC/HCFEM.h
index ede8a2e9c5a837816b00b7bf306fd868ef6b2dfe..6464581e7b970f369f8873392f6cd684aa01edbb 100644
--- a/ProcessLib/HC/HCFEM.h
+++ b/ProcessLib/HC/HCFEM.h
@@ -27,7 +27,7 @@ namespace ProcessLib
 {
 namespace HC
 {
-template < typename NodalRowVectorType, typename GlobalDimNodalMatrixType>
+template <typename NodalRowVectorType, typename GlobalDimNodalMatrixType>
 struct IntegrationPointData final
 {
     IntegrationPointData(NodalRowVectorType const& N_,
@@ -148,70 +148,59 @@ public:
 
         MaterialLib::Fluid::FluidProperty::ArrayType vars;
 
-        for (std::size_t ip(0); ip < n_integration_points; ip++)
+        auto KCC = local_K.template block<num_nodes, num_nodes>(0, 0);
+        auto MCC = local_M.template block<num_nodes, num_nodes>(0, 0);
+        auto Kpp =
+            local_K.template block<num_nodes, num_nodes>(num_nodes, num_nodes);
+        auto Mpp =
+            local_M.template block<num_nodes, num_nodes>(num_nodes, num_nodes);
+        auto Bp = local_b.template block<num_nodes, 1>(num_nodes, 0);
+
+        for (std::size_t ip(0); ip < n_integration_points; ++ip)
         {
             pos.setIntegrationPoint(ip);
 
-            auto const fluid_reference_density =
-                _process_data.fluid_reference_density(t, pos)[0];
-
-            auto const density_solid = _process_data.density_solid(t, pos)[0];
             // \todo the argument to getValue() has to be changed for non
             // constant storage model
             auto const specific_storage =
                 _process_data.porous_media_properties.getSpecificStorage(t, pos)
                     .getValue(0.0);
 
-            auto const thermal_conductivity_solid =
-                _process_data.thermal_conductivity_solid(t, pos)[0];
-            auto const thermal_conductivity_fluid =
-                _process_data.thermal_conductivity_fluid(t, pos)[0];
-
             auto const& ip_data = _ip_data[ip];
             auto const& N = ip_data.N;
             auto const& dNdx = ip_data.dNdx;
             auto const& w = ip_data.integration_weight;
 
-            double T_int_pt = 0.0;
+            double C_int_pt = 0.0;
             double p_int_pt = 0.0;
-            // Order matters: First T, then P!
-            NumLib::shapeFunctionInterpolate(local_x, N, T_int_pt, p_int_pt);
+            // Order matters: First C, then p!
+            NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt);
 
             // \todo the first argument has to be changed for non constant
             // porosity model
             auto const porosity =
                 _process_data.porous_media_properties.getPorosity(t, pos)
-                    .getValue(0.0, T_int_pt);
-
-            double const thermal_conductivity =
-                thermal_conductivity_solid * (1 - porosity) +
-                 thermal_conductivity_fluid * porosity;
-
-            auto const specific_heat_capacity_solid =
-                _process_data.specific_heat_capacity_solid(t, pos)[0];
-            auto const specific_heat_capacity_fluid =
-                _process_data.specific_heat_capacity_fluid(t, pos)[0];
-
-            auto const thermal_dispersivity_longitudinal =
-                _process_data.thermal_dispersivity_longitudinal(t, pos)[0];
-            auto const thermal_dispersivity_transversal =
-                _process_data.thermal_dispersivity_transversal(t, pos)[0];
-
-            auto Ktt = local_K.template block<num_nodes, num_nodes>(0, 0);
-            auto Mtt = local_M.template block<num_nodes, num_nodes>(0, 0);
-            auto Kpp = local_K.template block<num_nodes, num_nodes>(num_nodes,
-                                                                    num_nodes);
-            auto Mpp = local_M.template block<num_nodes, num_nodes>(num_nodes,
-                                                                    num_nodes);
-            auto Bp = local_b.template block<num_nodes, 1>(num_nodes, 0);
+                    .getValue(0.0, C_int_pt);
+
+            auto const retardation_factor =
+                _process_data.retardation_factor(t, pos)[0];
+
+
+            auto const& solute_dispersivity_transverse =
+                _process_data.solute_dispersivity_transverse(t, pos)[0];
+            auto const& solute_dispersivity_longitudinal =
+                _process_data.solute_dispersivity_longitudinal(t, pos)[0];
 
             // Use the fluid density model to compute the density
             vars[static_cast<int>(
-                MaterialLib::Fluid::PropertyVariableType::T)] = T_int_pt;
+                MaterialLib::Fluid::PropertyVariableType::C)] = C_int_pt;
             vars[static_cast<int>(
                 MaterialLib::Fluid::PropertyVariableType::p)] = p_int_pt;
-            auto const density_water_T =
+            auto const density_water =
                 _process_data.fluid_density->getValue(vars);
+            auto const& decay_rate = _process_data.decay_rate(t, pos)[0];
+            auto const& molecular_diffusion_coefficient =
+                _process_data.molecular_diffusion_coefficient(t, pos)[0];
 
             auto const& K =
                 _process_data.porous_media_properties.getIntrinsicPermeability(
@@ -223,44 +212,42 @@ public:
             GlobalDimMatrixType const K_over_mu = K / mu;
 
             GlobalDimVectorType const velocity =
-                -perm_over_visc * (dNdx * p_nodal_values - density_water_T * b);
+                -perm_over_visc * (dNdx * p_nodal_values - density_water * b);
 
             double const velocity_magnitude = velocity.norm();
             GlobalDimMatrixType const& I(
                 GlobalDimMatrixType::Identity(GlobalDim, GlobalDim));
-            GlobalDimMatrixType thermal_dispersivity =
-                fluid_reference_density * specific_heat_capacity_fluid *
-                (thermal_dispersivity_transversal * velocity_magnitude *
-                     I +
-                 (thermal_dispersivity_longitudinal -
-                  thermal_dispersivity_transversal) /
-                     velocity_magnitude * velocity * velocity.transpose());
-
-            auto const hydrodynamic_thermodispersion =
-                thermal_conductivity * I + thermal_dispersivity;
-
-            double const heat_capacity =
-                density_solid * specific_heat_capacity_solid * (1 - porosity) +
-                fluid_reference_density * specific_heat_capacity_fluid * porosity;
+            GlobalDimMatrixType const hydrodynamic_dispersion =
+                velocity_magnitude != 0.0
+                    ? GlobalDimMatrixType(
+                          (porosity * molecular_diffusion_coefficient +
+                           solute_dispersivity_transverse *
+                               velocity_magnitude) *
+                              I +
+                          (solute_dispersivity_longitudinal -
+                           solute_dispersivity_transverse) /
+                              velocity_magnitude * velocity *
+                              velocity.transpose())
+                    : GlobalDimMatrixType(
+                          (porosity * molecular_diffusion_coefficient +
+                           solute_dispersivity_transverse *
+                               velocity_magnitude) *
+                          I);
 
             // matrix assembly
-            Ktt.noalias() +=
-                (dNdx.transpose() * hydrodynamic_thermodispersion * dNdx +
-                 N.transpose() * velocity.transpose() * dNdx *
-                     fluid_reference_density * specific_heat_capacity_fluid) *
+            KCC.noalias() +=
+                (dNdx.transpose() * hydrodynamic_dispersion * dNdx +
+                 N.transpose() * velocity.transpose() * dNdx +
+                 N.transpose() * decay_rate * porosity * retardation_factor *
+                     N) *
                 w;
+            MCC.noalias() +=
+                w * N.transpose() * porosity * retardation_factor * N;
             Kpp.noalias() += w * dNdx.transpose() * perm_over_visc * dNdx;
-            Mtt.noalias() += w * N.transpose() * heat_capacity * N;
             Mpp.noalias() += w * N.transpose() * specific_storage * N;
-            Bp += w * density_water_T * dNdx.transpose() * perm_over_visc * b;
+            Bp += w * density_water * dNdx.transpose() * perm_over_visc * b;
             /* with Oberbeck-Boussing assumption density difference only exists
              * in buoyancy effects */
-
-            // velocity computed for output.
-            for (unsigned d = 0; d < GlobalDim; ++d)
-            {
-                _darcy_velocities[d][ip] = velocity[d];
-            }
         }
     }
 
diff --git a/ProcessLib/HC/HCProcess.cpp b/ProcessLib/HC/HCProcess.cpp
index 9323747685e334ae10af00b2712b168d2bc8a8cd..cb84dc12efb98e9b73314e6a59775b9f5947d1bf 100644
--- a/ProcessLib/HC/HCProcess.cpp
+++ b/ProcessLib/HC/HCProcess.cpp
@@ -67,13 +67,13 @@ void HCProcess::initializeConcreteProcess(
     }
 }
 
-void HCProcess::assembleConcreteProcess(const double t,
-                                        GlobalVector const& x,
-                                        GlobalMatrix& M,
-                                        GlobalMatrix& K,
-                                        GlobalVector& b,
-                                        StaggeredCouplingTerm const&
-                                        coupling_term)
+void HCProcess::assembleConcreteProcess(
+    const double t,
+    GlobalVector const& x,
+    GlobalMatrix& M,
+    GlobalMatrix& K,
+    GlobalVector& b,
+    StaggeredCouplingTerm const& coupling_term)
 {
     DBUG("Assemble HCProcess.");
 
diff --git a/ProcessLib/HC/HCProcess.h b/ProcessLib/HC/HCProcess.h
index 2a6dbd3e01c8e35d4732d13f8d34c974b73132f0..4e72ad050a5fd968e384a7658c997293ac3d2ddc 100644
--- a/ProcessLib/HC/HCProcess.h
+++ b/ProcessLib/HC/HCProcess.h
@@ -63,11 +63,9 @@ private:
         MeshLib::Mesh const& mesh,
         unsigned const integration_order) override;
 
-    void assembleConcreteProcess(const double t, GlobalVector const& x,
-                                 GlobalMatrix& M, GlobalMatrix& K,
-                                 GlobalVector& b,
-                                 StaggeredCouplingTerm const& coupling_term
-                                ) override;
+    void assembleConcreteProcess(
+        const double t, GlobalVector const& x, GlobalMatrix& M, GlobalMatrix& K,
+        GlobalVector& b, StaggeredCouplingTerm const& coupling_term) override;
 
     void assembleWithJacobianConcreteProcess(
         const double t, GlobalVector const& x, GlobalVector const& xdot,
diff --git a/ProcessLib/HC/HCProcessData.h b/ProcessLib/HC/HCProcessData.h
index 09efb4039ce898e1b7a79a945a04bf421da44872..d92119210ffdc97b2eb6dc550b8e4c0c714159ee 100644
--- a/ProcessLib/HC/HCProcessData.h
+++ b/ProcessLib/HC/HCProcessData.h
@@ -34,28 +34,24 @@ struct HCProcessData
     HCProcessData(
         PorousMediaProperties&& porous_media_properties_,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& viscosity_model_,
-        ProcessLib::Parameter<double> const& density_solid_,
         ProcessLib::Parameter<double> const& fluid_reference_density_,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_density_,
-        ProcessLib::Parameter<double> const& thermal_dispersivity_longitudinal_,
-        ProcessLib::Parameter<double> const& thermal_dispersivity_transversal_,
-        ProcessLib::Parameter<double> const& specific_heat_capacity_solid_,
-        ProcessLib::Parameter<double> const& specific_heat_capacity_fluid_,
-        ProcessLib::Parameter<double> const& thermal_conductivity_solid_,
-        ProcessLib::Parameter<double> const& thermal_conductivity_fluid_,
+        ProcessLib::Parameter<double> const& molecular_diffusion_coefficient_,
+        ProcessLib::Parameter<double> const& solute_dispersivity_longitudinal_,
+        ProcessLib::Parameter<double> const& solute_dispersivity_transverse_,
+        ProcessLib::Parameter<double> const& retardation_factor_,
+        ProcessLib::Parameter<double> const& decay_rate_,
         Eigen::Vector3d const& specific_body_force_,
         bool const has_gravity_)
         : porous_media_properties(std::move(porous_media_properties_)),
           viscosity_model(std::move(viscosity_model_)),
-          density_solid(density_solid_),
           fluid_reference_density(fluid_reference_density_),
           fluid_density(std::move(fluid_density_)),
-          specific_heat_capacity_solid(specific_heat_capacity_solid_),
-          specific_heat_capacity_fluid(specific_heat_capacity_fluid_),
-          thermal_dispersivity_longitudinal(thermal_dispersivity_longitudinal_),
-          thermal_dispersivity_transversal(thermal_dispersivity_transversal_),
-          thermal_conductivity_solid(thermal_conductivity_solid_),
-          thermal_conductivity_fluid(thermal_conductivity_fluid_),
+          molecular_diffusion_coefficient(molecular_diffusion_coefficient_),
+          solute_dispersivity_longitudinal(solute_dispersivity_longitudinal_),
+          solute_dispersivity_transverse(solute_dispersivity_transverse_),
+          retardation_factor(retardation_factor_),
+          decay_rate(decay_rate_),
           specific_body_force(specific_body_force_),
           has_gravity(has_gravity_)
     {
@@ -64,17 +60,15 @@ struct HCProcessData
     HCProcessData(HCProcessData&& other)
         : porous_media_properties(std::move(other.porous_media_properties)),
           viscosity_model(other.viscosity_model.release()),
-          density_solid(other.density_solid),
           fluid_reference_density(other.fluid_reference_density),
           fluid_density(other.fluid_density.release()),
-          specific_heat_capacity_solid(other.specific_heat_capacity_solid),
-          specific_heat_capacity_fluid(other.specific_heat_capacity_fluid),
-          thermal_dispersivity_longitudinal(
-              other.thermal_dispersivity_longitudinal),
-          thermal_dispersivity_transversal(
-              other.thermal_dispersivity_transversal),
-          thermal_conductivity_solid(other.thermal_conductivity_solid),
-          thermal_conductivity_fluid(other.thermal_conductivity_fluid),
+          molecular_diffusion_coefficient(
+              other.molecular_diffusion_coefficient),
+          solute_dispersivity_longitudinal(
+              other.solute_dispersivity_longitudinal),
+          solute_dispersivity_transverse(other.solute_dispersivity_transverse),
+          retardation_factor(other.retardation_factor),
+          decay_rate(other.decay_rate),
           specific_body_force(other.specific_body_force),
           has_gravity(other.has_gravity)
     {
@@ -91,15 +85,13 @@ struct HCProcessData
 
     PorousMediaProperties porous_media_properties;
     std::unique_ptr<MaterialLib::Fluid::FluidProperty> viscosity_model;
-    Parameter<double> const& density_solid;
     Parameter<double> const& fluid_reference_density;
     std::unique_ptr<MaterialLib::Fluid::FluidProperty> fluid_density;
-    Parameter<double> const& specific_heat_capacity_solid;
-    Parameter<double> const& specific_heat_capacity_fluid;
-    Parameter<double> const& thermal_dispersivity_longitudinal;
-    Parameter<double> const& thermal_dispersivity_transversal;
-    Parameter<double> const& thermal_conductivity_solid;
-    Parameter<double> const& thermal_conductivity_fluid;
+    Parameter<double> const& molecular_diffusion_coefficient;
+    Parameter<double> const& solute_dispersivity_longitudinal;
+    Parameter<double> const& solute_dispersivity_transverse;
+    Parameter<double> const& retardation_factor;
+    Parameter<double> const& decay_rate;
     Eigen::Vector3d const specific_body_force;
     bool const has_gravity;
 };