From 5fd7928ac420c4e8d6e4e7d0d6ab73724d37565c Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Sat, 9 Mar 2019 16:13:36 +0100
Subject: [PATCH] Extract parameters and their fcts to ParameterLib.

Just move and rename the namespace.
---
 .../ConstantParameter.cpp                     |   5 +-
 .../ConstantParameter.h                       |   6 +-
 .../CoordinateSystem.cpp                      |   4 +-
 .../CoordinateSystem.h                        |   8 +-
 .../CurveScaledParameter.cpp                  |   6 +-
 .../CurveScaledParameter.h                    |  14 +-
 .../FunctionParameter.cpp                     |   8 +-
 .../FunctionParameter.h                       |  13 +-
 .../GroupBasedParameter.cpp                   |  10 +-
 .../GroupBasedParameter.h                     |  26 ++--
 .../MeshElementParameter.cpp                  |  10 +-
 .../MeshElementParameter.h                    |  11 +-
 .../MeshNodeParameter.cpp                     |  10 +-
 .../MeshNodeParameter.h                       |  11 +-
 .../Parameter => ParameterLib}/Parameter.cpp  |   5 +-
 .../Parameter => ParameterLib}/Parameter.h    |  21 ++-
 .../SpatialPosition.h                         |   4 +-
 ParameterLib/Utils.cpp                        |  33 +++++
 ParameterLib/Utils.h                          | 127 ++++++++++++++++++
 ProcessLib/Utils/ProcessUtils.cpp             |  23 +---
 ProcessLib/Utils/ProcessUtils.h               | 117 ++--------------
 .../Parameter.cpp}                            |  31 +++--
 22 files changed, 272 insertions(+), 231 deletions(-)
 rename {ProcessLib/Parameter => ParameterLib}/ConstantParameter.cpp (96%)
 rename {ProcessLib/Parameter => ParameterLib}/ConstantParameter.h (96%)
 rename {ProcessLib/Parameter => ParameterLib}/CoordinateSystem.cpp (98%)
 rename {ProcessLib/Parameter => ParameterLib}/CoordinateSystem.h (95%)
 rename {ProcessLib/Parameter => ParameterLib}/CurveScaledParameter.cpp (94%)
 rename {ProcessLib/Parameter => ParameterLib}/CurveScaledParameter.h (86%)
 rename {ProcessLib/Parameter => ParameterLib}/FunctionParameter.cpp (83%)
 rename {ProcessLib/Parameter => ParameterLib}/FunctionParameter.h (92%)
 rename {ProcessLib/Parameter => ParameterLib}/GroupBasedParameter.cpp (92%)
 rename {ProcessLib/Parameter => ParameterLib}/GroupBasedParameter.h (82%)
 rename {ProcessLib/Parameter => ParameterLib}/MeshElementParameter.cpp (89%)
 rename {ProcessLib/Parameter => ParameterLib}/MeshElementParameter.h (92%)
 rename {ProcessLib/Parameter => ParameterLib}/MeshNodeParameter.cpp (88%)
 rename {ProcessLib/Parameter => ParameterLib}/MeshNodeParameter.h (92%)
 rename {ProcessLib/Parameter => ParameterLib}/Parameter.cpp (98%)
 rename {ProcessLib/Parameter => ParameterLib}/Parameter.h (94%)
 rename {ProcessLib/Parameter => ParameterLib}/SpatialPosition.h (97%)
 create mode 100644 ParameterLib/Utils.cpp
 create mode 100644 ParameterLib/Utils.h
 rename Tests/{ProcessLib/TestParameter.cpp => ParameterLib/Parameter.cpp} (90%)

diff --git a/ProcessLib/Parameter/ConstantParameter.cpp b/ParameterLib/ConstantParameter.cpp
similarity index 96%
rename from ProcessLib/Parameter/ConstantParameter.cpp
rename to ParameterLib/ConstantParameter.cpp
index 5ccaab1592a..8a296d70523 100644
--- a/ProcessLib/Parameter/ConstantParameter.cpp
+++ b/ParameterLib/ConstantParameter.cpp
@@ -8,11 +8,10 @@
  */
 
 #include "ConstantParameter.h"
-#include <logog/include/logog.hpp>
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/Error.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createConstantParameter(
     std::string const& name, BaseLib::ConfigTree const& config)
@@ -62,4 +61,4 @@ std::unique_ptr<ParameterBase> createConstantParameter(
     return std::make_unique<ConstantParameter<double>>(name, values);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/ConstantParameter.h b/ParameterLib/ConstantParameter.h
similarity index 96%
rename from ProcessLib/Parameter/ConstantParameter.h
rename to ParameterLib/ConstantParameter.h
index 920322fa539..ab42c80c341 100644
--- a/ProcessLib/Parameter/ConstantParameter.h
+++ b/ParameterLib/ConstantParameter.h
@@ -9,11 +9,9 @@
 
 #pragma once
 
-#include <utility>
-
 #include "Parameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// Single, constant value parameter.
 template <typename T>
@@ -76,4 +74,4 @@ private:
 std::unique_ptr<ParameterBase> createConstantParameter(
     std::string const& name, BaseLib::ConfigTree const& config);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CoordinateSystem.cpp b/ParameterLib/CoordinateSystem.cpp
similarity index 98%
rename from ProcessLib/Parameter/CoordinateSystem.cpp
rename to ParameterLib/CoordinateSystem.cpp
index 5b14e428e71..3e16da75c72 100644
--- a/ProcessLib/Parameter/CoordinateSystem.cpp
+++ b/ParameterLib/CoordinateSystem.cpp
@@ -14,7 +14,7 @@
 
 #include "Parameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 CoordinateSystem::CoordinateSystem(Parameter<double> const& e0,
                                    Parameter<double> const& e1)
@@ -116,4 +116,4 @@ Eigen::Matrix<double, 3, 3> CoordinateSystem::transformation<3>(
 #endif  // NDEBUG
     return t;
 }
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CoordinateSystem.h b/ParameterLib/CoordinateSystem.h
similarity index 95%
rename from ProcessLib/Parameter/CoordinateSystem.h
rename to ParameterLib/CoordinateSystem.h
index 0469cbd4e64..91fe860b9bb 100644
--- a/ProcessLib/Parameter/CoordinateSystem.h
+++ b/ParameterLib/CoordinateSystem.h
@@ -14,14 +14,14 @@
 #include <array>
 #include <vector>
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
 struct Parameter;
 class SpatialPosition;
-}
+}  // namespace ParameterLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 struct CoordinateSystem final
 {
@@ -65,4 +65,4 @@ private:
     std::array<Parameter<double> const*, 3> _base;
 };
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CurveScaledParameter.cpp b/ParameterLib/CurveScaledParameter.cpp
similarity index 94%
rename from ProcessLib/Parameter/CurveScaledParameter.cpp
rename to ParameterLib/CurveScaledParameter.cpp
index 0f941c7d7fd..44335e00116 100644
--- a/ProcessLib/Parameter/CurveScaledParameter.cpp
+++ b/ParameterLib/CurveScaledParameter.cpp
@@ -8,9 +8,9 @@
  */
 
 #include "CurveScaledParameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createCurveScaledParameter(
     std::string const& name,
@@ -42,4 +42,4 @@ std::unique_ptr<ParameterBase> createCurveScaledParameter(
         name, *curve_it->second, referenced_parameter_name);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/CurveScaledParameter.h b/ParameterLib/CurveScaledParameter.h
similarity index 86%
rename from ProcessLib/Parameter/CurveScaledParameter.h
rename to ParameterLib/CurveScaledParameter.h
index 04ed950db4d..e9504e59db9 100644
--- a/ProcessLib/Parameter/CurveScaledParameter.h
+++ b/ParameterLib/CurveScaledParameter.h
@@ -13,12 +13,13 @@
 #include <utility>
 #include "MathLib/InterpolationAlgorithms/PiecewiseLinearInterpolation.h"
 #include "Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 template <typename T>
-struct CurveScaledParameter final : public Parameter<T> {
+struct CurveScaledParameter final : public Parameter<T>
+{
     CurveScaledParameter(std::string const& name_,
                          MathLib::PiecewiseLinearInterpolation const& curve,
                          std::string referenced_parameter_name)
@@ -30,8 +31,7 @@ struct CurveScaledParameter final : public Parameter<T> {
 
     bool isTimeDependent() const override { return true; }
     void initialize(
-        std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const&
-            parameters) override
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters) override
     {
         _parameter =
             &findParameter<T>(_referenced_parameter_name, parameters, 0);
@@ -44,7 +44,7 @@ struct CurveScaledParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const t,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         // No local coordinate transformation here, which might happen twice
         // otherwise.
@@ -77,4 +77,4 @@ std::unique_ptr<ParameterBase> createCurveScaledParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/FunctionParameter.cpp b/ParameterLib/FunctionParameter.cpp
similarity index 83%
rename from ProcessLib/Parameter/FunctionParameter.cpp
rename to ParameterLib/FunctionParameter.cpp
index 2a943202e54..e27062cae04 100644
--- a/ProcessLib/Parameter/FunctionParameter.cpp
+++ b/ParameterLib/FunctionParameter.cpp
@@ -12,7 +12,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createFunctionParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -30,8 +30,8 @@ std::unique_ptr<ParameterBase> createFunctionParameter(
         vec_expressions.emplace_back(expression_str);
     }
 
-    return std::make_unique<FunctionParameter<double>>(
-        name, mesh, vec_expressions);
+    return std::make_unique<FunctionParameter<double>>(name, mesh,
+                                                       vec_expressions);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/FunctionParameter.h b/ParameterLib/FunctionParameter.h
similarity index 92%
rename from ProcessLib/Parameter/FunctionParameter.h
rename to ParameterLib/FunctionParameter.h
index e0e65af6078..a919b6a5489 100644
--- a/ProcessLib/Parameter/FunctionParameter.h
+++ b/ParameterLib/FunctionParameter.h
@@ -18,11 +18,10 @@
 #include "MeshLib/Node.h"
 
 #include "Parameter.h"
-#include "ProcessLib/Utils/ProcessUtils.h"
+#include "Utils.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
-
 /// A parameter class evaluating functions defined by
 /// user-provided mathematical expressions.
 ///
@@ -55,14 +54,14 @@ struct FunctionParameter final : public Parameter<T>
         _symbol_table.create_variable("z");
 
         _vec_expression.resize(_vec_expression_str.size());
-        for (unsigned i=0; i<_vec_expression_str.size(); i++)
+        for (unsigned i = 0; i < _vec_expression_str.size(); i++)
         {
             _vec_expression[i].register_symbol_table(_symbol_table);
             parser_t parser;
             if (!parser.compile(_vec_expression_str[i], _vec_expression[i]))
             {
                 OGS_FATAL("Error: %s\tExpression: %s\n", parser.error().c_str(),
-                    _vec_expression_str[i].c_str());
+                          _vec_expression_str[i].c_str());
             }
         }
     }
@@ -75,7 +74,7 @@ struct FunctionParameter final : public Parameter<T>
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         std::vector<T> cache(getNumberOfComponents());
         auto& x = _symbol_table.get_variable("x")->ref();
@@ -120,4 +119,4 @@ std::unique_ptr<ParameterBase> createFunctionParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/GroupBasedParameter.cpp b/ParameterLib/GroupBasedParameter.cpp
similarity index 92%
rename from ProcessLib/Parameter/GroupBasedParameter.cpp
rename to ParameterLib/GroupBasedParameter.cpp
index e939846c857..b6d4a3f7247 100644
--- a/ProcessLib/Parameter/GroupBasedParameter.cpp
+++ b/ParameterLib/GroupBasedParameter.cpp
@@ -13,7 +13,7 @@
 #include "BaseLib/Error.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createGroupBasedParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -24,7 +24,8 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
 
     // get a property vector of group IDs
     //! \ogs_file_param{prj__parameters__parameter__Group__group_id_property}
-    std::string const group_id_property_name = config.getConfigParameter<std::string>("group_id_property");
+    std::string const group_id_property_name =
+        config.getConfigParameter<std::string>("group_id_property");
     DBUG("Using group_id_property %s", group_id_property_name.c_str());
 
     auto const& group_id_property =
@@ -67,7 +68,8 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     unsigned n_values = vec_index_values.front().second.size();
     for (auto p : vec_index_values)
     {
-        auto itr = std::find(group_id_property->begin(), group_id_property->end(), p.first);
+        auto itr = std::find(group_id_property->begin(),
+                             group_id_property->end(), p.first);
         if (itr == group_id_property->end())
         {
             OGS_FATAL(
@@ -111,4 +113,4 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     OGS_FATAL("Mesh item type of the specified property is not supported.");
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/GroupBasedParameter.h b/ParameterLib/GroupBasedParameter.h
similarity index 82%
rename from ProcessLib/Parameter/GroupBasedParameter.h
rename to ParameterLib/GroupBasedParameter.h
index a34c57eb563..71d9d979cdf 100644
--- a/ProcessLib/Parameter/GroupBasedParameter.h
+++ b/ParameterLib/GroupBasedParameter.h
@@ -16,21 +16,18 @@
 
 #include "Parameter.h"
 
-
 namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
-
 /// A parameter class looking for values from indices in a property vector.
 /// This class can be used for material ID dependent parameters.
 template <typename T, MeshLib::MeshItemType MeshItemType>
-struct GroupBasedParameter final
-    : public Parameter<T>
+struct GroupBasedParameter final : public Parameter<T>
 {
     /**
      * Constructing from a property vector of index and corresponding values
@@ -61,7 +58,7 @@ struct GroupBasedParameter final
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const item_id = getMeshItemID(pos, type<MeshItemType>());
         assert(item_id);
@@ -81,16 +78,19 @@ struct GroupBasedParameter final
     }
 
 private:
-    template <MeshLib::MeshItemType ITEM_TYPE> struct type {};
+    template <MeshLib::MeshItemType ITEM_TYPE>
+    struct type
+    {
+    };
 
-    static boost::optional<std::size_t>
-    getMeshItemID(SpatialPosition const& pos, type<MeshLib::MeshItemType::Cell>)
+    static boost::optional<std::size_t> getMeshItemID(
+        SpatialPosition const& pos, type<MeshLib::MeshItemType::Cell>)
     {
         return pos.getElementID();
     }
 
-    static boost::optional<std::size_t>
-    getMeshItemID(SpatialPosition const& pos, type<MeshLib::MeshItemType::Node>)
+    static boost::optional<std::size_t> getMeshItemID(
+        SpatialPosition const& pos, type<MeshLib::MeshItemType::Node>)
     {
         return pos.getNodeID();
     }
@@ -104,4 +104,4 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter(
     BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshElementParameter.cpp b/ParameterLib/MeshElementParameter.cpp
similarity index 89%
rename from ProcessLib/Parameter/MeshElementParameter.cpp
rename to ParameterLib/MeshElementParameter.cpp
index 8c707397d76..0968906ca77 100644
--- a/ProcessLib/Parameter/MeshElementParameter.cpp
+++ b/ParameterLib/MeshElementParameter.cpp
@@ -11,7 +11,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createMeshElementParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -20,14 +20,16 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
     //! \ogs_file_param{prj__parameters__parameter__type}
     config.checkConfigParameter("type", "MeshElement");
     //! \ogs_file_param{prj__parameters__parameter__MeshElement__field_name}
-    auto const field_name = config.getConfigParameter<std::string>("field_name");
+    auto const field_name =
+        config.getConfigParameter<std::string>("field_name");
     DBUG("Using field_name %s", field_name.c_str());
 
     // TODO other data types than only double
     auto const& property =
         mesh.getProperties().getPropertyVector<double>(field_name);
 
-    if (property->getMeshItemType() != MeshLib::MeshItemType::Cell) {
+    if (property->getMeshItemType() != MeshLib::MeshItemType::Cell)
+    {
         OGS_FATAL("The mesh property `%s' is not an element property.",
                   field_name.c_str());
     }
@@ -36,4 +38,4 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
                                                           *property);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshElementParameter.h b/ParameterLib/MeshElementParameter.h
similarity index 92%
rename from ProcessLib/Parameter/MeshElementParameter.h
rename to ParameterLib/MeshElementParameter.h
index ac86c05b6e8..a94ab3f1fd0 100644
--- a/ProcessLib/Parameter/MeshElementParameter.h
+++ b/ParameterLib/MeshElementParameter.h
@@ -15,13 +15,14 @@ namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// A parameter represented by a mesh property vector.
 template <typename T>
-struct MeshElementParameter final : public Parameter<T> {
+struct MeshElementParameter final : public Parameter<T>
+{
     MeshElementParameter(std::string const& name_,
                          MeshLib::Mesh const& mesh,
                          MeshLib::PropertyVector<T> const& property)
@@ -37,7 +38,7 @@ struct MeshElementParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const e = pos.getElementID();
         if (!e)
@@ -90,4 +91,4 @@ std::unique_ptr<ParameterBase> createMeshElementParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshNodeParameter.cpp b/ParameterLib/MeshNodeParameter.cpp
similarity index 88%
rename from ProcessLib/Parameter/MeshNodeParameter.cpp
rename to ParameterLib/MeshNodeParameter.cpp
index 11b9ecbabe2..6f360a068c8 100644
--- a/ProcessLib/Parameter/MeshNodeParameter.cpp
+++ b/ParameterLib/MeshNodeParameter.cpp
@@ -11,7 +11,7 @@
 #include "BaseLib/ConfigTree.h"
 #include "MeshLib/Mesh.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createMeshNodeParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
@@ -20,14 +20,16 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     //! \ogs_file_param{prj__parameters__parameter__type}
     config.checkConfigParameter("type", "MeshNode");
     //! \ogs_file_param{prj__parameters__parameter__MeshNode__field_name}
-    auto const field_name = config.getConfigParameter<std::string>("field_name");
+    auto const field_name =
+        config.getConfigParameter<std::string>("field_name");
     DBUG("Using field_name %s", field_name.c_str());
 
     // TODO other data types than only double
     auto const& property =
         mesh.getProperties().getPropertyVector<double>(field_name);
 
-    if (property->getMeshItemType() != MeshLib::MeshItemType::Node) {
+    if (property->getMeshItemType() != MeshLib::MeshItemType::Node)
+    {
         OGS_FATAL("The mesh property `%s' is not a nodal property.",
                   field_name.c_str());
     }
@@ -35,4 +37,4 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     return std::make_unique<MeshNodeParameter<double>>(name, mesh, *property);
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/MeshNodeParameter.h b/ParameterLib/MeshNodeParameter.h
similarity index 92%
rename from ProcessLib/Parameter/MeshNodeParameter.h
rename to ParameterLib/MeshNodeParameter.h
index 5f5286d9899..7bfd7c4e1ad 100644
--- a/ProcessLib/Parameter/MeshNodeParameter.h
+++ b/ParameterLib/MeshNodeParameter.h
@@ -19,13 +19,14 @@ namespace MeshLib
 {
 template <typename T>
 class PropertyVector;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// A parameter represented by a mesh property vector.
 template <typename T>
-struct MeshNodeParameter final : public Parameter<T> {
+struct MeshNodeParameter final : public Parameter<T>
+{
     MeshNodeParameter(std::string const& name_,
                       MeshLib::Mesh const& mesh,
                       MeshLib::PropertyVector<T> const& property)
@@ -41,7 +42,7 @@ struct MeshNodeParameter final : public Parameter<T> {
     }
 
     std::vector<T> operator()(double const /*t*/,
-                                     SpatialPosition const& pos) const override
+                              SpatialPosition const& pos) const override
     {
         auto const n = pos.getNodeID();
         if (!n)
@@ -94,4 +95,4 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter(
     std::string const& name, BaseLib::ConfigTree const& config,
     MeshLib::Mesh const& mesh);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/Parameter.cpp b/ParameterLib/Parameter.cpp
similarity index 98%
rename from ProcessLib/Parameter/Parameter.cpp
rename to ParameterLib/Parameter.cpp
index 2cddcff1c57..c535765cbc9 100644
--- a/ProcessLib/Parameter/Parameter.cpp
+++ b/ParameterLib/Parameter.cpp
@@ -18,7 +18,7 @@
 #include "MeshElementParameter.h"
 #include "MeshNodeParameter.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 std::unique_ptr<ParameterBase> createParameter(
     BaseLib::ConfigTree const& config,
@@ -27,7 +27,6 @@ std::unique_ptr<ParameterBase> createParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves)
 {
-
     //! \ogs_file_param{prj__parameters__parameter__name}
     auto const name = config.getConfigParameter<std::string>("name");
     //! \ogs_file_param{prj__parameters__parameter__type}
@@ -85,4 +84,4 @@ std::unique_ptr<ParameterBase> createParameter(
     OGS_FATAL("Cannot construct a parameter of given type '%s'.", type.c_str());
 }
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/Parameter.h b/ParameterLib/Parameter.h
similarity index 94%
rename from ProcessLib/Parameter/Parameter.h
rename to ParameterLib/Parameter.h
index e359ed8f414..6a6ec97860f 100644
--- a/ProcessLib/Parameter/Parameter.h
+++ b/ParameterLib/Parameter.h
@@ -27,19 +27,19 @@
 namespace BaseLib
 {
 class ConfigTree;
-}  // BaseLib
+}  // namespace BaseLib
 
 namespace MathLib
 {
 class PiecewiseLinearInterpolation;
-}  // MathLib
+}  // namespace MathLib
 
 namespace MeshLib
 {
 class Mesh;
-}  // MeshLib
+}  // namespace MeshLib
 
-namespace ProcessLib
+namespace ParameterLib
 {
 /// Base class for all parameters, not an interface class. This avoids using of
 /// void* when storing parameters and convenient destruction.
@@ -64,8 +64,7 @@ struct ParameterBase
     /// Parameters might depend on each other; this method allows to set up the
     /// dependencies between parameters after they have been constructed.
     virtual void initialize(
-        std::vector<
-            std::unique_ptr<ProcessLib::ParameterBase>> const& /*parameters*/)
+        std::vector<std::unique_ptr<ParameterBase>> const& /*parameters*/)
     {
     }
 
@@ -144,13 +143,13 @@ struct Parameter : public ParameterBase
 
     ~Parameter() override = default;
 
-    //! Returns the number of components this Parameter has at every position and
-    //! point in time.
+    //! Returns the number of components this Parameter has at every position
+    //! and point in time.
     virtual int getNumberOfComponents() const = 0;
 
     //! Returns the parameter value at the given time and position.
-    virtual std::vector<T> operator()(
-        double const t, SpatialPosition const& pos) const = 0;
+    virtual std::vector<T> operator()(double const t,
+                                      SpatialPosition const& pos) const = 0;
 
     //! Returns a matrix of values for all nodes of the given element.
     //
@@ -198,4 +197,4 @@ std::unique_ptr<ParameterBase> createParameter(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
         curves);
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ProcessLib/Parameter/SpatialPosition.h b/ParameterLib/SpatialPosition.h
similarity index 97%
rename from ProcessLib/Parameter/SpatialPosition.h
rename to ParameterLib/SpatialPosition.h
index 30a87e09733..e1d98fea266 100644
--- a/ProcessLib/Parameter/SpatialPosition.h
+++ b/ParameterLib/SpatialPosition.h
@@ -12,7 +12,7 @@
 #include <boost/optional.hpp>
 #include "MathLib/TemplatePoint.h"
 
-namespace ProcessLib
+namespace ParameterLib
 {
 //! Represents a position in space which can be either one of
 //! a node, an element, an integration point or a cartesian coordinates triple.
@@ -86,4 +86,4 @@ private:
     boost::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
 };
 
-}  // namespace ProcessLib
+}  // namespace ParameterLib
diff --git a/ParameterLib/Utils.cpp b/ParameterLib/Utils.cpp
new file mode 100644
index 00000000000..b903042c552
--- /dev/null
+++ b/ParameterLib/Utils.cpp
@@ -0,0 +1,33 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2019, 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 "Utils.h"
+
+namespace ParameterLib
+{
+ParameterBase* findParameterByName(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+{
+    // Find corresponding parameter by name.
+    auto const it = std::find_if(
+        parameters.cbegin(), parameters.cend(),
+        [&parameter_name](std::unique_ptr<ParameterBase> const& p) {
+            return p->name == parameter_name;
+        });
+
+    if (it == parameters.end())
+    {
+        return nullptr;
+    }
+
+    DBUG("Found parameter `%s'.", (*it)->name.c_str());
+    return it->get();
+}
+}  // namespace ParameterLib
diff --git a/ParameterLib/Utils.h b/ParameterLib/Utils.h
new file mode 100644
index 00000000000..fd191cdb83e
--- /dev/null
+++ b/ParameterLib/Utils.h
@@ -0,0 +1,127 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2019, 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 <vector>
+#include "BaseLib/ConfigTree.h"
+#include "BaseLib/Error.h"
+
+#include "Parameter.h"
+
+namespace ParameterLib
+{
+/// Find an optional parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+ParameterBase* findParameterByName(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
+
+/// Find an optional parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+/// \param num_components the number of components of the parameters or zero if
+/// any number is acceptable
+///
+/// \see The documentation of the other findParameter() function.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>* findParameterOptional(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    // Find corresponding parameter by name.
+    ParameterBase* parameter_ptr =
+        findParameterByName(parameter_name, parameters);
+    if (parameter_ptr == nullptr)
+    {
+        return nullptr;
+    }
+
+    // Check the type correctness of the found parameter.
+    auto* const parameter =
+        dynamic_cast<Parameter<ParameterDataType>*>(parameter_ptr);
+    if (!parameter)
+    {
+        OGS_FATAL("The read parameter `%s' is of incompatible type.",
+                  parameter_name.c_str());
+    }
+
+    if (num_components != 0 &&
+        parameter->getNumberOfComponents() != num_components)
+    {
+        OGS_FATAL(
+            "The read parameter `%s' has the wrong number of components (%lu "
+            "instead of %u).",
+            parameter_name.c_str(), parameter->getNumberOfComponents(),
+            num_components);
+    }
+
+    return parameter;
+}
+
+/// Find a parameter of specific type for a given name.
+///
+/// \tparam ParameterDataType the data type of the parameter
+/// \param parameter_name name of the requested parameter
+/// \param parameters list of parameters in which it will be searched
+/// \param num_components the number of components of the parameters or zero if
+/// any number is acceptable
+///
+/// \see The documentation of the other findParameter() function.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>& findParameter(
+    std::string const& parameter_name,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    auto* parameter = findParameterOptional<ParameterDataType>(
+        parameter_name, parameters, num_components);
+
+    if (!parameter)
+    {
+        OGS_FATAL(
+            "Could not find parameter `%s' in the provided parameters list.",
+            parameter_name.c_str());
+    }
+    return *parameter;
+}
+
+/// Find a parameter of specific type for a name given in the process
+/// configuration under the tag.
+/// The parameter must have the specified number of components.
+/// In the process config a parameter is referenced by a name. For example it
+/// will be looking for a parameter named "K" in the list of parameters
+/// when the tag is "hydraulic_conductivity":
+/// \code
+///     <process>
+///         ...
+///         <hydraulic_conductivity>K</hydraulic_conductivity>
+///     </process>
+/// \endcode
+/// and return a reference to that parameter. Additionally it checks for the
+/// type of the found parameter.
+template <typename ParameterDataType>
+Parameter<ParameterDataType>& findParameter(
+    BaseLib::ConfigTree const& process_config, std::string const& tag,
+    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
+    int const num_components)
+{
+    // Find parameter name in process config.
+    //! \ogs_file_special
+    auto const name = process_config.getConfigParameter<std::string>(tag);
+
+    return findParameter<ParameterDataType>(name, parameters, num_components);
+}
+}  // namespace ParameterLib
diff --git a/ProcessLib/Utils/ProcessUtils.cpp b/ProcessLib/Utils/ProcessUtils.cpp
index 0ae4befd5ed..8faaae6b87a 100644
--- a/ProcessLib/Utils/ProcessUtils.cpp
+++ b/ProcessLib/Utils/ProcessUtils.cpp
@@ -8,7 +8,8 @@
  */
 
 #include "ProcessUtils.h"
-#include <iterator>
+
+#include "BaseLib/ConfigTree.h"
 #include "ProcessLib/ProcessVariable.h"
 
 namespace
@@ -105,24 +106,4 @@ std::vector<std::reference_wrapper<ProcessVariable>> findProcessVariables(
 
     return vars;
 }
-
-ParameterBase* findParameterByName(
-    std::string const& parameter_name,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters)
-{
-    // Find corresponding parameter by name.
-    auto const it = std::find_if(
-        parameters.cbegin(), parameters.cend(),
-        [&parameter_name](std::unique_ptr<ParameterBase> const& p) {
-            return p->name == parameter_name;
-        });
-
-    if (it == parameters.end())
-    {
-        return nullptr;
-    }
-
-    DBUG("Found parameter `%s'.", (*it)->name.c_str());
-    return it->get();
-}
 }  // namespace ProcessLib
diff --git a/ProcessLib/Utils/ProcessUtils.h b/ProcessLib/Utils/ProcessUtils.h
index b381837f4c3..d98b43aa7ef 100644
--- a/ProcessLib/Utils/ProcessUtils.h
+++ b/ProcessLib/Utils/ProcessUtils.h
@@ -9,15 +9,20 @@
 
 #pragma once
 
+#include <string>
 #include <vector>
-#include "BaseLib/ConfigTree.h"
-#include "BaseLib/Error.h"
-#include "ProcessLib/Parameter/Parameter.h"
 
+namespace BaseLib
+{
+class ConfigTree;
+}
 namespace ProcessLib
 {
 class ProcessVariable;
+}
 
+namespace ProcessLib
+{
 /// Find process variables in \c variables whose names match the settings under
 /// the given \c tag_names in the \c process_config.
 ///
@@ -47,110 +52,4 @@ std::vector<std::reference_wrapper<ProcessVariable>> findProcessVariables(
     BaseLib::ConfigTree const& pv_config,
     std::string const& tag);
 
-/// Find an optional parameter of specific type for a given name.
-///
-/// \tparam ParameterDataType the data type of the parameter
-/// \param parameter_name name of the requested parameter
-/// \param parameters list of parameters in which it will be searched
-ParameterBase* findParameterByName(
-    std::string const& parameter_name,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters);
-
-/// Find an optional parameter of specific type for a given name.
-///
-/// \tparam ParameterDataType the data type of the parameter
-/// \param parameter_name name of the requested parameter
-/// \param parameters list of parameters in which it will be searched
-/// \param num_components the number of components of the parameters or zero if
-/// any number is acceptable
-///
-/// \see The documentation of the other findParameter() function.
-template <typename ParameterDataType>
-Parameter<ParameterDataType>* findParameterOptional(
-    std::string const& parameter_name,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-    int const num_components)
-{
-    // Find corresponding parameter by name.
-    ParameterBase* parameter_ptr =
-        findParameterByName(parameter_name, parameters);
-    if (parameter_ptr == nullptr)
-    {
-        return nullptr;
-    }
-
-    // Check the type correctness of the found parameter.
-    auto* const parameter =
-        dynamic_cast<Parameter<ParameterDataType>*>(parameter_ptr);
-    if (!parameter) {
-        OGS_FATAL("The read parameter `%s' is of incompatible type.",
-                  parameter_name.c_str());
-    }
-
-    if (num_components != 0 &&
-        parameter->getNumberOfComponents() != num_components)
-    {
-        OGS_FATAL(
-            "The read parameter `%s' has the wrong number of components (%lu "
-            "instead of %u).",
-            parameter_name.c_str(), parameter->getNumberOfComponents(),
-            num_components);
-    }
-
-    return parameter;
-}
-
-/// Find a parameter of specific type for a given name.
-///
-/// \tparam ParameterDataType the data type of the parameter
-/// \param parameter_name name of the requested parameter
-/// \param parameters list of parameters in which it will be searched
-/// \param num_components the number of components of the parameters or zero if
-/// any number is acceptable
-///
-/// \see The documentation of the other findParameter() function.
-template <typename ParameterDataType>
-Parameter<ParameterDataType>& findParameter(
-    std::string const& parameter_name,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-    int const num_components)
-{
-    auto* parameter = findParameterOptional<ParameterDataType>(
-        parameter_name, parameters, num_components);
-
-    if (!parameter)
-    {
-        OGS_FATAL(
-            "Could not find parameter `%s' in the provided parameters list.",
-            parameter_name.c_str());
-    }
-    return *parameter;
-}
-
-/// Find a parameter of specific type for a name given in the process
-/// configuration under the tag.
-/// The parameter must have the specified number of components.
-/// In the process config a parameter is referenced by a name. For example it
-/// will be looking for a parameter named "K" in the list of parameters
-/// when the tag is "hydraulic_conductivity":
-/// \code
-///     <process>
-///         ...
-///         <hydraulic_conductivity>K</hydraulic_conductivity>
-///     </process>
-/// \endcode
-/// and return a reference to that parameter. Additionally it checks for the
-/// type of the found parameter.
-template <typename ParameterDataType>
-Parameter<ParameterDataType>& findParameter(
-    BaseLib::ConfigTree const& process_config, std::string const& tag,
-    std::vector<std::unique_ptr<ParameterBase>> const& parameters,
-    int const num_components)
-{
-    // Find parameter name in process config.
-    //! \ogs_file_special
-    auto const name = process_config.getConfigParameter<std::string>(tag);
-
-    return findParameter<ParameterDataType>(name, parameters, num_components);
-}
 }  // namespace ProcessLib
diff --git a/Tests/ProcessLib/TestParameter.cpp b/Tests/ParameterLib/Parameter.cpp
similarity index 90%
rename from Tests/ProcessLib/TestParameter.cpp
rename to Tests/ParameterLib/Parameter.cpp
index 05cd6e05659..d9492fcc63f 100644
--- a/Tests/ProcessLib/TestParameter.cpp
+++ b/Tests/ParameterLib/Parameter.cpp
@@ -23,10 +23,10 @@
 #include "MeshLib/Node.h"
 #include "MeshLib/PropertyVector.h"
 
-#include "ProcessLib/Parameter/GroupBasedParameter.h"
-#include "ProcessLib/Parameter/CurveScaledParameter.h"
+#include "ParameterLib/CurveScaledParameter.h"
+#include "ParameterLib/GroupBasedParameter.h"
 
-using namespace ProcessLib;
+using namespace ParameterLib;
 
 std::unique_ptr<Parameter<double>> constructParameterFromString(
     std::string const& xml,
@@ -43,7 +43,7 @@ std::unique_ptr<Parameter<double>> constructParameterFromString(
         static_cast<Parameter<double>*>(parameter_base.release()));
 }
 
-struct ProcessLibParameter : public ::testing::Test
+struct ParameterLibParameter : public ::testing::Test
 {
     void SetUp() override
     {
@@ -53,7 +53,7 @@ struct ProcessLibParameter : public ::testing::Test
     std::vector<std::unique_ptr<MeshLib::Mesh>> meshes;
 };
 
-TEST_F(ProcessLibParameter, GroupBasedParameterElement)
+TEST_F(ParameterLibParameter, GroupBasedParameterElement)
 {
     std::vector<int> mat_ids({0, 1, 2, 3});
     MeshLib::addPropertyToMesh(*meshes[0], "MaterialIDs",
@@ -69,7 +69,7 @@ TEST_F(ProcessLibParameter, GroupBasedParameterElement)
         meshes);
 
     double t = 0;
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     x.setElementID(0);
     ASSERT_EQ(0.0, (*parameter)(t, x)[0]);
     x.setElementID(1);
@@ -78,10 +78,9 @@ TEST_F(ProcessLibParameter, GroupBasedParameterElement)
     ASSERT_ANY_THROW((*parameter)(t, x));
     x.setElementID(3);
     ASSERT_EQ(300.0, (*parameter)(t, x)[0]);
-
 }
 
-TEST_F(ProcessLibParameter, GroupBasedParameterNode)
+TEST_F(ParameterLibParameter, GroupBasedParameterNode)
 {
     std::vector<int> group_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "PointGroupIDs",
@@ -97,7 +96,7 @@ TEST_F(ProcessLibParameter, GroupBasedParameterNode)
         meshes);
 
     double t = 0;
-    ProcessLib::SpatialPosition x;
+    ParameterLib::SpatialPosition x;
     x.setNodeID(0);
     ASSERT_EQ(0.0, (*parameter)(t, x)[0]);
     x.setNodeID(1);
@@ -150,7 +149,7 @@ bool testNodalValuesOfElement(
 }
 
 // For all elements all nodes have a constant value.
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_constant)
 {
     auto const parameter = constructParameterFromString(
         "<name>parameter</name>"
@@ -160,7 +159,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
 
     double const t = 0;
     auto expected_value = [](MeshLib::Element* const /*e*/,
-                              std::size_t const /*local_node_id*/) {
+                             std::size_t const /*local_node_id*/) {
         return 42.23;
     };
 
@@ -168,7 +167,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_constant)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_node)
 {
     std::vector<double> node_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "NodeIDs",
@@ -184,7 +183,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
 
     // For all elements all nodes have the value of the node id.
     auto expected_value = [](MeshLib::Element* const e,
-                              std::size_t const local_node_id) {
+                             std::size_t const local_node_id) {
         return static_cast<double>(e->getNode(local_node_id)->getID());
     };
 
@@ -192,7 +191,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_node)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_element)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_element)
 {
     std::vector<double> element_ids({0, 1, 2, 3});
     MeshLib::addPropertyToMesh(*meshes[0], "ElementIDs",
@@ -216,7 +215,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_element)
                                          expected_value, *parameter, t));
 }
 
-TEST_F(ProcessLibParameter, GetNodalValuesOnElement_curveScaledNode)
+TEST_F(ParameterLibParameter, GetNodalValuesOnElement_curveScaledNode)
 {
     std::vector<double> node_ids({0, 1, 2, 3, 4});
     MeshLib::addPropertyToMesh(*meshes[0], "NodeIDs",
@@ -249,7 +248,7 @@ TEST_F(ProcessLibParameter, GetNodalValuesOnElement_curveScaledNode)
 
     // For all elements all nodes have the value of the node id times the time.
     auto expected_value = [&t](MeshLib::Element* const e,
-                              std::size_t const local_node_id) {
+                               std::size_t const local_node_id) {
         return static_cast<double>(e->getNode(local_node_id)->getID()) * t;
     };
 
-- 
GitLab