From 39469da1ab9a81a85dd6ffcec7ca095ab2bc4867 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Tue, 9 Mar 2021 22:43:06 +0100
Subject: [PATCH] Use std::optional replacing boost::optional.

---
 Applications/ApplicationsLib/ProjectData.cpp  | 11 +++----
 Applications/ApplicationsLib/ProjectData.h    |  8 ++---
 Applications/FileIO/AsciiRasterInterface.cpp  |  2 +-
 Applications/FileIO/AsciiRasterInterface.h    |  2 +-
 .../FileIO/GocadIO/GocadSGridReader.cpp       |  8 ++---
 .../FileIO/GocadIO/GocadSGridReader.h         |  2 +-
 BaseLib/Algorithm.h                           |  2 +-
 BaseLib/ConfigTree-impl.h                     | 13 ++++----
 BaseLib/ConfigTree.cpp                        | 10 +++---
 BaseLib/ConfigTree.h                          | 20 ++++++------
 ChemistryLib/Common/CreateReactionRate.cpp    |  6 ++--
 ChemistryLib/Common/CreateReactionRate.h      |  2 +-
 .../CreateEquilibriumReactants.cpp            |  2 +-
 .../CreateEquilibriumReactants.h              |  2 +-
 .../PhreeqcIOData/CreateKineticReactant.cpp   |  2 +-
 .../PhreeqcIOData/CreateKineticReactant.h     |  2 +-
 ChemistryLib/PhreeqcIOData/CreateSurface.cpp  |  2 +-
 ChemistryLib/PhreeqcIOData/CreateSurface.h    |  2 +-
 .../PhreeqcIOData/CreateUserPunch.cpp         |  3 +-
 ChemistryLib/PhreeqcIOData/CreateUserPunch.h  |  2 +-
 .../CreateEquilibriumReactants.cpp            |  3 +-
 .../CreateEquilibriumReactants.h              |  2 +-
 .../CreateKineticReactant.cpp                 |  3 +-
 .../PhreeqcKernelData/CreateKineticReactant.h |  2 +-
 GeoLib/SurfaceGrid.cpp                        | 16 +++++-----
 GeoLib/SurfaceGrid.h                          |  4 +--
 MaterialLib/MPL/CreateComponent.cpp           |  2 +-
 MaterialLib/MPL/CreateComponent.h             |  2 +-
 MaterialLib/MPL/CreatePhase.cpp               |  2 +-
 MaterialLib/MPL/CreatePhase.h                 |  2 +-
 MaterialLib/MPL/CreateProperty.cpp            |  2 +-
 MaterialLib/MPL/CreateProperty.h              |  2 +-
 .../CreateConstitutiveRelation.cpp            |  8 ++---
 .../SolidModels/CreateConstitutiveRelation.h  |  6 ++--
 .../CreateLinearElasticOrthotropic.cpp        |  6 ++--
 .../CreateLinearElasticOrthotropic.h          |  6 ++--
 .../SolidModels/LinearElasticOrthotropic.h    |  4 +--
 .../SolidModels/MFront/CreateMFront.cpp       |  6 ++--
 MaterialLib/SolidModels/MFront/CreateMFront.h |  6 ++--
 MaterialLib/SolidModels/MFront/MFront.cpp     |  2 +-
 MaterialLib/SolidModels/MFront/MFront.h       |  2 +-
 MeshGeoToolsLib/CreateSearchLength.cpp        |  2 +-
 MeshLib/Elements/Element.cpp                  | 10 +++---
 MeshLib/Elements/Element.h                    |  2 +-
 .../IO/MPI_IO/NodePartitionedMeshReader.cpp   |  6 ++--
 MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h |  2 +-
 MeshLib/IO/MPI_IO/PropertyVectorMetaData.h    | 14 ++++----
 MeshLib/Mesh.cpp                              |  3 +-
 NumLib/NewtonRaphson.h                        |  2 +-
 .../ODESolver/ConvergenceCriterionDeltaX.cpp  |  4 +--
 NumLib/ODESolver/ConvergenceCriterionDeltaX.h |  8 ++---
 .../ConvergenceCriterionResidual.cpp          |  4 +--
 .../ODESolver/ConvergenceCriterionResidual.h  |  8 ++---
 ParameterLib/GroupBasedParameter.h            |  4 +--
 ParameterLib/Parameter.cpp                    |  4 +--
 ParameterLib/Parameter.h                      |  6 ++--
 ParameterLib/SpatialPosition.h                | 32 +++++++++----------
 .../BoundaryConditionConfig.h                 |  4 +--
 ProcessLib/CreateJacobianAssembler.cpp        |  2 +-
 ProcessLib/CreateJacobianAssembler.h          |  2 +-
 .../CreateHydroMechanicsProcess.cpp           |  6 ++--
 .../CreateHydroMechanicsProcess.h             |  6 ++--
 .../CreateHydroMechanicsProcess.cpp           |  6 ++--
 .../CreateHydroMechanicsProcess.h             |  2 +-
 .../CreateSmallDeformationProcess.cpp         |  6 ++--
 .../CreateSmallDeformationProcess.h           |  2 +-
 .../PhaseField/CreatePhaseFieldProcess.cpp    |  6 ++--
 .../PhaseField/CreatePhaseFieldProcess.h      |  6 ++--
 .../CreateRichardsMechanicsProcess.cpp        |  6 ++--
 .../CreateRichardsMechanicsProcess.h          |  6 ++--
 .../CreateSmallDeformationProcess.cpp         |  6 ++--
 .../CreateSmallDeformationProcess.h           |  6 ++--
 .../CreateSmallDeformationNonlocalProcess.cpp |  6 ++--
 .../CreateSmallDeformationNonlocalProcess.h   |  6 ++--
 ProcessLib/SourceTerms/SourceTermConfig.h     |  4 +--
 .../CreateThermoHydroMechanicsProcess.cpp     |  6 ++--
 .../CreateThermoHydroMechanicsProcess.h       |  6 ++--
 ...reateThermoMechanicalPhaseFieldProcess.cpp |  6 ++--
 .../CreateThermoMechanicalPhaseFieldProcess.h |  6 ++--
 .../CreateThermoMechanicsProcess.cpp          |  6 ++--
 .../CreateThermoMechanicsProcess.h            |  6 ++--
 .../CreateThermoRichardsMechanicsProcess.cpp  |  6 ++--
 .../CreateThermoRichardsMechanicsProcess.h    |  6 ++--
 ...eateTwoPhaseFlowPrhoMaterialProperties.cpp |  2 +-
 ...CreateTwoPhaseFlowPrhoMaterialProperties.h |  2 +-
 .../CreateTwoPhaseFlowWithPrhoProcess.cpp     |  2 +-
 ...TwoPhaseFlowWithPrhoMaterialProperties.cpp |  2 +-
 .../TwoPhaseFlowWithPrhoMaterialProperties.h  |  4 +--
 Tests/MeshLib/ConvertToLinearMesh.cpp         |  4 +--
 89 files changed, 224 insertions(+), 230 deletions(-)

diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 94e50b868ec..2c5e86d18f4 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -209,8 +209,8 @@ std::vector<std::unique_ptr<MeshLib::Mesh>> readMeshes(
     return meshes;
 }
 
-boost::optional<ParameterLib::CoordinateSystem> parseLocalCoordinateSystem(
-    boost::optional<BaseLib::ConfigTree> const& config,
+std::optional<ParameterLib::CoordinateSystem> parseLocalCoordinateSystem(
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     if (!config)
@@ -436,7 +436,7 @@ std::vector<std::string> ProjectData::parseParameters(
 }
 
 void ProjectData::parseMedia(
-    boost::optional<BaseLib::ConfigTree> const& media_config)
+    std::optional<BaseLib::ConfigTree> const& media_config)
 {
     if (!media_config)
     {
@@ -516,7 +516,7 @@ void ProjectData::parseMedia(
 
 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
 ProjectData::parseChemicalSolverInterface(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::string const& output_directory)
 {
     if (!config)
@@ -1123,8 +1123,7 @@ void ProjectData::parseNonlinearSolvers(BaseLib::ConfigTree const& config)
     }
 }
 
-void ProjectData::parseCurves(
-    boost::optional<BaseLib::ConfigTree> const& config)
+void ProjectData::parseCurves(std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h
index 9a10ed39a0d..3382051ecdc 100644
--- a/Applications/ApplicationsLib/ProjectData.h
+++ b/Applications/ApplicationsLib/ProjectData.h
@@ -94,7 +94,7 @@ private:
         BaseLib::ConfigTree const& parameters_config);
 
     /// Parses media configuration and saves them in an object.
-    void parseMedia(boost::optional<BaseLib::ConfigTree> const& media_config);
+    void parseMedia(std::optional<BaseLib::ConfigTree> const& media_config);
 
     /// Parses the processes configuration and creates new processes for each
     /// process entry passing the corresponding subtree to the process
@@ -113,11 +113,11 @@ private:
 
     void parseNonlinearSolvers(BaseLib::ConfigTree const& config);
 
-    void parseCurves(boost::optional<BaseLib::ConfigTree> const& config);
+    void parseCurves(std::optional<BaseLib::ConfigTree> const& config);
 
     std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
     parseChemicalSolverInterface(
-        boost::optional<BaseLib::ConfigTree> const& config,
+        std::optional<BaseLib::ConfigTree> const& config,
         const std::string& output_directory);
 
     std::vector<std::unique_ptr<MeshLib::Mesh>> _mesh_vec;
@@ -127,7 +127,7 @@ private:
     /// Buffer for each parameter config passed to the process.
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> _parameters;
 
-    boost::optional<ParameterLib::CoordinateSystem> _local_coordinate_system;
+    std::optional<ParameterLib::CoordinateSystem> _local_coordinate_system;
 
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> _media;
 
diff --git a/Applications/FileIO/AsciiRasterInterface.cpp b/Applications/FileIO/AsciiRasterInterface.cpp
index 3ec7d32af03..ea001828e8c 100644
--- a/Applications/FileIO/AsciiRasterInterface.cpp
+++ b/Applications/FileIO/AsciiRasterInterface.cpp
@@ -282,7 +282,7 @@ static bool allRastersExist(std::vector<std::string> const& raster_paths)
     return true;
 }
 
-boost::optional<std::vector<GeoLib::Raster const*>> readRasters(
+std::optional<std::vector<GeoLib::Raster const*>> readRasters(
     std::vector<std::string> const& raster_paths)
 {
     if (!allRastersExist(raster_paths))
diff --git a/Applications/FileIO/AsciiRasterInterface.h b/Applications/FileIO/AsciiRasterInterface.h
index 31e53f1a503..4420d88c894 100644
--- a/Applications/FileIO/AsciiRasterInterface.h
+++ b/Applications/FileIO/AsciiRasterInterface.h
@@ -53,6 +53,6 @@ private:
 
 /// Reads a vector of rasters given by file names. On error nothing is returned,
 /// otherwise the returned vector contains pointers to the read rasters.
-boost::optional<std::vector<GeoLib::Raster const*>> readRasters(
+std::optional<std::vector<GeoLib::Raster const*>> readRasters(
     std::vector<std::string> const& raster_paths);
 } // end namespace FileIO
diff --git a/Applications/FileIO/GocadIO/GocadSGridReader.cpp b/Applications/FileIO/GocadIO/GocadSGridReader.cpp
index af78fa944e8..90a9df3ae6e 100644
--- a/Applications/FileIO/GocadIO/GocadSGridReader.cpp
+++ b/Applications/FileIO/GocadIO/GocadSGridReader.cpp
@@ -198,7 +198,7 @@ void GocadSGridReader::addGocadPropertiesToMesh(MeshLib::Mesh& mesh) const
     std::vector<std::string> const& prop_names(getPropertyNames());
     for (auto const& name : prop_names)
     {
-        boost::optional<Gocad::Property const&> prop(getProperty(name));
+        std::optional<Gocad::Property const&> prop(getProperty(name));
         if (!prop)
         {
             continue;
@@ -730,7 +730,7 @@ void GocadSGridReader::modifyElement(MeshLib::Element* hex,
     }
 }
 
-boost::optional<Gocad::Property const&> GocadSGridReader::getProperty(
+std::optional<Gocad::Property const&> GocadSGridReader::getProperty(
     std::string const& name) const
 {
     auto const it(std::find_if(_property_meta_data_vecs.begin(),
@@ -740,9 +740,9 @@ boost::optional<Gocad::Property const&> GocadSGridReader::getProperty(
                                }));
     if (it == _property_meta_data_vecs.end())
     {
-        return boost::optional<Gocad::Property const&>();
+        return std::optional<Gocad::Property const&>();
     }
-    return boost::optional<Gocad::Property const&>(*it);
+    return std::optional<Gocad::Property const&>(*it);
 }
 
 std::vector<std::string> GocadSGridReader::getPropertyNames() const
diff --git a/Applications/FileIO/GocadIO/GocadSGridReader.h b/Applications/FileIO/GocadIO/GocadSGridReader.h
index 3e2715450c8..111f8a92073 100644
--- a/Applications/FileIO/GocadIO/GocadSGridReader.h
+++ b/Applications/FileIO/GocadIO/GocadSGridReader.h
@@ -83,7 +83,7 @@ private:
         std::vector<MeshLib::Node*>& face_set_nodes,
         std::vector<MeshLib::Element*>& face_set_elements) const;
 
-    boost::optional<Gocad::Property const&> getProperty(
+    std::optional<Gocad::Property const&> getProperty(
         std::string const& name) const;
     void addGocadPropertiesToMesh(MeshLib::Mesh& mesh) const;
 
diff --git a/BaseLib/Algorithm.h b/BaseLib/Algorithm.h
index e1fa9f96252..861dda11917 100644
--- a/BaseLib/Algorithm.h
+++ b/BaseLib/Algorithm.h
@@ -270,7 +270,7 @@ bool containsIf(Container const& container, Predicate&& predicate)
 }
 
 template <typename Container>
-boost::optional<typename Container::value_type> findFirstNotEqualElement(
+std::optional<typename Container::value_type> findFirstNotEqualElement(
     Container const& container, typename Container::value_type const& element)
 {
     auto const it =
diff --git a/BaseLib/ConfigTree-impl.h b/BaseLib/ConfigTree-impl.h
index 25ce1ac4912..54f4e610efd 100644
--- a/BaseLib/ConfigTree-impl.h
+++ b/BaseLib/ConfigTree-impl.h
@@ -62,7 +62,7 @@ getConfigParameter(std::string const& param, T const& default_value) const
 }
 
 template <typename T>
-boost::optional<T> ConfigTree::getConfigParameterOptional(
+std::optional<T> ConfigTree::getConfigParameterOptional(
     std::string const& param) const
 {
     checkUnique(param);
@@ -71,7 +71,7 @@ boost::optional<T> ConfigTree::getConfigParameterOptional(
 }
 
 template <typename T>
-boost::optional<T> ConfigTree::getConfigParameterOptionalImpl(
+std::optional<T> ConfigTree::getConfigParameterOptionalImpl(
     std::string const& param, T* /*unused*/) const
 {
     if (auto p = getConfigSubtreeOptional(param))
@@ -83,7 +83,7 @@ boost::optional<T> ConfigTree::getConfigParameterOptionalImpl(
 }
 
 template <typename T>
-boost::optional<std::vector<T>> ConfigTree::getConfigParameterOptionalImpl(
+std::optional<std::vector<T>> ConfigTree::getConfigParameterOptionalImpl(
     std::string const& param, std::vector<T>* /*unused*/) const
 {
     if (auto p = getConfigSubtreeOptional(param))
@@ -214,10 +214,9 @@ T ConfigTree::getConfigAttribute(std::string const& attr,
     return default_value;
 }
 
-template<typename T>
-boost::optional<T>
-ConfigTree::
-getConfigAttributeOptional(std::string const& attr) const
+template <typename T>
+std::optional<T> ConfigTree::getConfigAttributeOptional(
+    std::string const& attr) const
 {
     checkUniqueAttr(attr);
     auto& ct = markVisited<T>(attr, Attr::ATTR, true);
diff --git a/BaseLib/ConfigTree.cpp b/BaseLib/ConfigTree.cpp
index f6fd22d1a44..dda172e81cb 100644
--- a/BaseLib/ConfigTree.cpp
+++ b/BaseLib/ConfigTree.cpp
@@ -120,9 +120,8 @@ getConfigParameter(std::string const& root) const
     return ct;
 }
 
-boost::optional<ConfigTree>
-ConfigTree::
-getConfigParameterOptional(std::string const& root) const
+std::optional<ConfigTree> ConfigTree::getConfigParameterOptional(
+    std::string const& root) const
 {
     auto ct = getConfigSubtreeOptional(root);
     if (ct && ct->hasChildren())
@@ -156,9 +155,8 @@ getConfigSubtree(std::string const& root) const
     error("Key <" + root + "> has not been found.");
 }
 
-boost::optional<ConfigTree>
-ConfigTree::
-getConfigSubtreeOptional(std::string const& root) const
+std::optional<ConfigTree> ConfigTree::getConfigSubtreeOptional(
+    std::string const& root) const
 {
     checkUnique(root);
 
diff --git a/BaseLib/ConfigTree.h b/BaseLib/ConfigTree.h
index 8b763d53c58..493798de209 100644
--- a/BaseLib/ConfigTree.h
+++ b/BaseLib/ConfigTree.h
@@ -308,8 +308,8 @@ public:
      *
      * \pre \c param must not have been read before from this ConfigTree.
      */
-    template<typename T> boost::optional<T>
-    getConfigParameterOptional(std::string const& param) const;
+    template <typename T>
+    std::optional<T> getConfigParameterOptional(std::string const& param) const;
 
     /*! Fetches all parameters with name \c param from the current level of the tree.
      *
@@ -347,7 +347,7 @@ public:
      *
      * \pre \c param must not have been read before from this ConfigTree.
      */
-    boost::optional<ConfigTree> getConfigParameterOptional(
+    std::optional<ConfigTree> getConfigParameterOptional(
         std::string const& root) const;
 
     /*! Fetches all parameters with name \c param from the current level of the tree.
@@ -398,8 +398,8 @@ public:
      *
      * \pre \c attr must not have been read before from the current parameter.
      */
-    template<typename T> boost::optional<T>
-    getConfigAttributeOptional(std::string const& attr) const;
+    template <typename T>
+    std::optional<T> getConfigAttributeOptional(std::string const& attr) const;
 
     //!\}
 
@@ -454,8 +454,8 @@ public:
      *
      * \pre \c root must not have been read before from this ConfigTree.
      */
-    boost::optional<ConfigTree>
-    getConfigSubtreeOptional(std::string const& root) const;
+    std::optional<ConfigTree> getConfigSubtreeOptional(
+        std::string const& root) const;
 
     /*! Get all subtrees that have a root \c root from the current level of the tree.
      *
@@ -520,12 +520,12 @@ public:
 private:
     //! Default implementation of reading a value of type T.
     template <typename T>
-    boost::optional<T> getConfigParameterOptionalImpl(std::string const& param,
-                                                      T* /*unused*/) const;
+    std::optional<T> getConfigParameterOptionalImpl(std::string const& param,
+                                                    T* /*unused*/) const;
 
     //! Implementation of reading a vector of values of type T.
     template <typename T>
-    boost::optional<std::vector<T>> getConfigParameterOptionalImpl(
+    std::optional<std::vector<T>> getConfigParameterOptionalImpl(
         std::string const& param, std::vector<T>* /*unused*/) const;
 
     struct CountType
diff --git a/ChemistryLib/Common/CreateReactionRate.cpp b/ChemistryLib/Common/CreateReactionRate.cpp
index cd1baec444a..a32b049b129 100644
--- a/ChemistryLib/Common/CreateReactionRate.cpp
+++ b/ChemistryLib/Common/CreateReactionRate.cpp
@@ -18,7 +18,7 @@ namespace ChemistryLib
 {
 template <typename ReactionRate>
 std::vector<ReactionRate> createReactionRates(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
@@ -56,9 +56,9 @@ std::vector<ReactionRate> createReactionRates(
 
 template std::vector<PhreeqcIOData::ReactionRate>
 createReactionRates<PhreeqcIOData::ReactionRate>(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 
 template std::vector<PhreeqcKernelData::ReactionRate>
 createReactionRates<PhreeqcKernelData::ReactionRate>(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/Common/CreateReactionRate.h b/ChemistryLib/Common/CreateReactionRate.h
index c38211d87a7..4b590cf88ca 100644
--- a/ChemistryLib/Common/CreateReactionRate.h
+++ b/ChemistryLib/Common/CreateReactionRate.h
@@ -22,5 +22,5 @@ namespace ChemistryLib
 {
 template <typename ReactionRate>
 std::vector<ReactionRate> createReactionRates(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
index 8455a6f23a9..e4f90c513a4 100644
--- a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
@@ -20,7 +20,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<EquilibriumReactant> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
index c90e3f0a562..beb4567e53d 100644
--- a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
+++ b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
@@ -33,6 +33,6 @@ namespace PhreeqcIOData
 struct EquilibriumReactant;
 
 std::vector<EquilibriumReactant> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
index 8ab72618334..3e1efb03e2e 100644
--- a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
@@ -20,7 +20,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<KineticReactant> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
index ae953e8eb03..e1a1ffaaba8 100644
--- a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
+++ b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
@@ -33,6 +33,6 @@ namespace PhreeqcIOData
 struct KineticReactant;
 
 std::vector<KineticReactant> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateSurface.cpp b/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
index 4d92b2c167a..320ce8718fb 100644
--- a/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
@@ -18,7 +18,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<SurfaceSite> createSurface(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateSurface.h b/ChemistryLib/PhreeqcIOData/CreateSurface.h
index bf591dd8e73..aa09e67c7d0 100644
--- a/ChemistryLib/PhreeqcIOData/CreateSurface.h
+++ b/ChemistryLib/PhreeqcIOData/CreateSurface.h
@@ -25,6 +25,6 @@ namespace PhreeqcIOData
 struct SurfaceSite;
 
 std::vector<SurfaceSite> createSurface(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp b/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
index 37a3a146891..d67764f5d42 100644
--- a/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
@@ -19,8 +19,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::unique_ptr<UserPunch> createUserPunch(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateUserPunch.h b/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
index 4ae80827778..337e80b4a78 100644
--- a/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
+++ b/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
@@ -30,7 +30,7 @@ namespace PhreeqcIOData
 struct UserPunch;
 
 std::unique_ptr<UserPunch> createUserPunch(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
index be017ff526c..4e395334b3f 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
+++ b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
@@ -21,8 +21,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<EquilibriumReactants> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
index 25fc42fb055..ff9b224b709 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
+++ b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
@@ -30,7 +30,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<EquilibriumReactants> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
index 979813c43d6..9e62e56b735 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
+++ b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
@@ -21,8 +21,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<Kinetics> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
index 34742f30c57..12da8a28813 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
+++ b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
@@ -30,7 +30,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<Kinetics> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }
 }  // namespace ChemistryLib
diff --git a/GeoLib/SurfaceGrid.cpp b/GeoLib/SurfaceGrid.cpp
index 3f66c58e6ad..253283426b8 100644
--- a/GeoLib/SurfaceGrid.cpp
+++ b/GeoLib/SurfaceGrid.cpp
@@ -140,19 +140,19 @@ void SurfaceGrid::sortTrianglesInGridCells(Surface const*const sfc)
 bool SurfaceGrid::sortTriangleInGridCells(Triangle const*const triangle)
 {
     // compute grid coordinates for each triangle point
-    boost::optional<std::array<std::size_t, 3> const> c_p0(
+    std::optional<std::array<std::size_t, 3> const> c_p0(
         getGridCellCoordinates(*(triangle->getPoint(0))));
     if (!c_p0)
     {
         return false;
     }
-    boost::optional<std::array<std::size_t, 3> const> c_p1(
+    std::optional<std::array<std::size_t, 3> const> c_p1(
         getGridCellCoordinates(*(triangle->getPoint(1))));
     if (!c_p1)
     {
         return false;
     }
-    boost::optional<std::array<std::size_t, 3> const> c_p2(
+    std::optional<std::array<std::size_t, 3> const> c_p2(
         getGridCellCoordinates(*(triangle->getPoint(2))));
     if (!c_p2)
     {
@@ -181,8 +181,8 @@ bool SurfaceGrid::sortTriangleInGridCells(Triangle const*const triangle)
     return true;
 }
 
-boost::optional<std::array<std::size_t, 3>>
-SurfaceGrid::getGridCellCoordinates(MathLib::Point3d const& p) const
+std::optional<std::array<std::size_t, 3>> SurfaceGrid::getGridCellCoordinates(
+    MathLib::Point3d const& p) const
 {
     std::array<std::size_t, 3> coords{{
         static_cast<std::size_t>((p[0]-_min_pnt[0]) * _inverse_step_sizes[0]),
@@ -196,15 +196,15 @@ SurfaceGrid::getGridCellCoordinates(MathLib::Point3d const& p) const
             "({:d},{:d},{:d})",
             coords[0], coords[1], coords[2], _n_steps[0], _n_steps[1],
             _n_steps[2]);
-        return boost::optional<std::array<std::size_t, 3>>();
+        return std::optional<std::array<std::size_t, 3>>();
     }
-    return boost::optional<std::array<std::size_t, 3>>(coords);
+    return std::optional<std::array<std::size_t, 3>>(coords);
 }
 
 bool SurfaceGrid::isPointInSurface(MathLib::Point3d const& pnt,
                                    double eps) const
 {
-    boost::optional<std::array<std::size_t, 3>> optional_c(
+    std::optional<std::array<std::size_t, 3>> optional_c(
         getGridCellCoordinates(pnt));
     if (!optional_c) {
         return false;
diff --git a/GeoLib/SurfaceGrid.h b/GeoLib/SurfaceGrid.h
index b8cf35468dc..b6de0983ab4 100644
--- a/GeoLib/SurfaceGrid.h
+++ b/GeoLib/SurfaceGrid.h
@@ -36,8 +36,8 @@ public:
 private:
     void sortTrianglesInGridCells(GeoLib::Surface const* const sfc);
     bool sortTriangleInGridCells(GeoLib::Triangle const*const triangle);
-    boost::optional<std::array<std::size_t,3>>
-        getGridCellCoordinates(MathLib::Point3d const& p) const;
+    std::optional<std::array<std::size_t, 3>> getGridCellCoordinates(
+        MathLib::Point3d const& p) const;
     std::array<double,3> _step_sizes{};
     std::array<double,3> _inverse_step_sizes{};
     std::array<std::size_t,3> _n_steps;
diff --git a/MaterialLib/MPL/CreateComponent.cpp b/MaterialLib/MPL/CreateComponent.cpp
index 905c39f94da..8037602afa5 100644
--- a/MaterialLib/MPL/CreateComponent.cpp
+++ b/MaterialLib/MPL/CreateComponent.cpp
@@ -73,7 +73,7 @@ namespace MaterialPropertyLib
 {
 std::vector<std::unique_ptr<Component>> createComponents(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateComponent.h b/MaterialLib/MPL/CreateComponent.h
index 3387454de2c..ad47396c493 100644
--- a/MaterialLib/MPL/CreateComponent.h
+++ b/MaterialLib/MPL/CreateComponent.h
@@ -45,7 +45,7 @@ namespace MaterialPropertyLib
 /// without predefined properties is created.
 std::vector<std::unique_ptr<Component>> createComponents(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreatePhase.cpp b/MaterialLib/MPL/CreatePhase.cpp
index 18b48f8fbe0..42e9585846a 100644
--- a/MaterialLib/MPL/CreatePhase.cpp
+++ b/MaterialLib/MPL/CreatePhase.cpp
@@ -91,7 +91,7 @@ namespace MaterialPropertyLib
 {
 std::vector<std::unique_ptr<Phase>> createPhases(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreatePhase.h b/MaterialLib/MPL/CreatePhase.h
index d931e3bbd07..5b50e129c89 100644
--- a/MaterialLib/MPL/CreatePhase.h
+++ b/MaterialLib/MPL/CreatePhase.h
@@ -49,7 +49,7 @@ namespace MaterialPropertyLib
 /// weighted by mole fraction.
 std::vector<std::unique_ptr<Phase>> createPhases(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateProperty.cpp b/MaterialLib/MPL/CreateProperty.cpp
index 45a02994c7e..8f46529d23b 100644
--- a/MaterialLib/MPL/CreateProperty.cpp
+++ b/MaterialLib/MPL/CreateProperty.cpp
@@ -231,7 +231,7 @@ namespace MaterialPropertyLib
 {
 std::unique_ptr<PropertyArray> createProperties(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateProperty.h b/MaterialLib/MPL/CreateProperty.h
index 32fe4d8c990..28b0f79bc8d 100644
--- a/MaterialLib/MPL/CreateProperty.h
+++ b/MaterialLib/MPL/CreateProperty.h
@@ -48,7 +48,7 @@ using PropertyArray =
 /// properties array.
 std::unique_ptr<PropertyArray> createProperties(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
index 72fd437531a..147571c3f6a 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
@@ -35,7 +35,7 @@ template <int DisplacementDim>
 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
 createConstitutiveRelation(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -91,7 +91,7 @@ std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -135,14 +135,14 @@ createConstitutiveRelations(
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.h b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
index 3f5c51964ed..926906b5d2e 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.h
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
@@ -39,7 +39,7 @@ std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
@@ -47,7 +47,7 @@ extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
@@ -55,7 +55,7 @@ extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
index e6dc469ebdd..b551da47f00 100644
--- a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
+++ b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
@@ -19,7 +19,7 @@ template <int DisplacementDim>
 std::unique_ptr<LinearElasticOrthotropic<DisplacementDim>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking)
 {
@@ -59,14 +59,14 @@ createLinearElasticOrthotropic(
 template std::unique_ptr<LinearElasticOrthotropic<2>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 template std::unique_ptr<LinearElasticOrthotropic<3>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
index b6add0e1e63..f80822e3e76 100644
--- a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
+++ b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
@@ -20,21 +20,21 @@ template <int DisplacementDim>
 std::unique_ptr<LinearElasticOrthotropic<DisplacementDim>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 extern template std::unique_ptr<LinearElasticOrthotropic<2>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 extern template std::unique_ptr<LinearElasticOrthotropic<3>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/LinearElasticOrthotropic.h b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
index 818ff8a91d9..dd721fc0a10 100644
--- a/MaterialLib/SolidModels/LinearElasticOrthotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
@@ -132,7 +132,7 @@ public:
 
     LinearElasticOrthotropic(
         MaterialProperties material_properties,
-        boost::optional<ParameterLib::CoordinateSystem> const&
+        std::optional<ParameterLib::CoordinateSystem> const&
             local_coordinate_system)
         : _mp(std::move(material_properties)),
           _local_coordinate_system(local_coordinate_system)
@@ -188,7 +188,7 @@ public:
 
 protected:
     MaterialProperties _mp;
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         _local_coordinate_system;
 };
 
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.cpp b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
index 4ef0a294407..2ada8d1e6a7 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.cpp
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
@@ -55,7 +55,7 @@ namespace MFront
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -208,12 +208,12 @@ namespace MFront
 {
 template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.h b/MaterialLib/SolidModels/MFront/CreateMFront.h
index e4bf97f7c39..5dadcc2617a 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.h
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.h
@@ -25,18 +25,18 @@ namespace MFront
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
 extern template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 extern template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
diff --git a/MaterialLib/SolidModels/MFront/MFront.cpp b/MaterialLib/SolidModels/MFront/MFront.cpp
index 6126463b2de..f5fb7f716e9 100644
--- a/MaterialLib/SolidModels/MFront/MFront.cpp
+++ b/MaterialLib/SolidModels/MFront/MFront.cpp
@@ -172,7 +172,7 @@ template <int DisplacementDim>
 MFront<DisplacementDim>::MFront(
     mgis::behaviour::Behaviour&& behaviour,
     std::vector<ParameterLib::Parameter<double> const*>&& material_properties,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system)
     : _behaviour(std::move(behaviour)),
       equivalent_plastic_strain_offset_(
diff --git a/MaterialLib/SolidModels/MFront/MFront.h b/MaterialLib/SolidModels/MFront/MFront.h
index 0af729a8542..12e5cf9f482 100644
--- a/MaterialLib/SolidModels/MFront/MFront.h
+++ b/MaterialLib/SolidModels/MFront/MFront.h
@@ -74,7 +74,7 @@ public:
     MFront(mgis::behaviour::Behaviour&& behaviour,
            std::vector<ParameterLib::Parameter<double> const*>&&
                material_properties,
-           boost::optional<ParameterLib::CoordinateSystem> const&
+           std::optional<ParameterLib::CoordinateSystem> const&
                local_coordinate_system);
 
     std::unique_ptr<
diff --git a/MeshGeoToolsLib/CreateSearchLength.cpp b/MeshGeoToolsLib/CreateSearchLength.cpp
index 2d181183dd1..6115a1bf82c 100644
--- a/MeshGeoToolsLib/CreateSearchLength.cpp
+++ b/MeshGeoToolsLib/CreateSearchLength.cpp
@@ -20,7 +20,7 @@ namespace MeshGeoToolsLib
 std::unique_ptr<MeshGeoToolsLib::SearchLength> createSearchLengthAlgorithm(
     BaseLib::ConfigTree const& external_config, MeshLib::Mesh const& mesh)
 {
-    boost::optional<BaseLib::ConfigTree> config =
+    std::optional<BaseLib::ConfigTree> config =
         //! \ogs_file_param{prj__search_length_algorithm}
         external_config.getConfigSubtreeOptional("search_length_algorithm");
 
diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp
index 347829b5e7b..f73cfa6ce95 100644
--- a/MeshLib/Elements/Element.cpp
+++ b/MeshLib/Elements/Element.cpp
@@ -45,16 +45,16 @@ void Element::setNeighbor(Element* neighbor, unsigned const face_id)
     this->_neighbors[face_id] = neighbor;
 }
 
-boost::optional<unsigned> Element::addNeighbor(Element* e)
+std::optional<unsigned> Element::addNeighbor(Element* e)
 {
     if (e == this || e == nullptr || e->getDimension() != this->getDimension())
     {
-        return boost::optional<unsigned>();
+        return std::optional<unsigned>();
     }
 
     if (areNeighbors(this, e))
     {
-        return boost::optional<unsigned>();
+        return std::optional<unsigned>();
     }
 
     Node* face_nodes[3];
@@ -74,13 +74,13 @@ boost::optional<unsigned> Element::addNeighbor(Element* e)
                 if ((++count)>=dim)
                 {
                     _neighbors[ this->identifyFace(face_nodes) ] = e;
-                    return boost::optional<unsigned>(e->identifyFace(face_nodes));
+                    return std::optional<unsigned>(e->identifyFace(face_nodes));
                 }
             }
         }
     }
 
-    return boost::optional<unsigned>();
+    return std::optional<unsigned>();
 }
 
 const Element* Element::getNeighbor(unsigned i) const
diff --git a/MeshLib/Elements/Element.h b/MeshLib/Elements/Element.h
index 43c1120096e..17d3ce7bbdd 100644
--- a/MeshLib/Elements/Element.h
+++ b/MeshLib/Elements/Element.h
@@ -42,7 +42,7 @@ public:
      * neighbour-list and the face id of the neighbour connected to this element
      * is returned. Otherwise the maximum value of the value type is returned.
      */
-    boost::optional<unsigned> addNeighbor(Element* e);
+    std::optional<unsigned> addNeighbor(Element* e);
 
     /// Returns the length, area or volume of a 1D, 2D or 3D element
     double getContent() const { return _content; }
diff --git a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
index 814edeca256..da59dafdb82 100644
--- a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
+++ b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
@@ -227,7 +227,7 @@ void NodePartitionedMeshReader::readProperties(
     }
     std::size_t number_of_properties = 0;
     is.read(reinterpret_cast<char*>(&number_of_properties), sizeof(std::size_t));
-    std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> vec_pvmd(
+    std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> vec_pvmd(
         number_of_properties);
     for (std::size_t i(0); i < number_of_properties; ++i)
     {
@@ -250,7 +250,7 @@ void NodePartitionedMeshReader::readProperties(
         static_cast<long>(_mpi_rank *
                           sizeof(MeshLib::IO::PropertyVectorPartitionMetaData));
     is.seekg(offset);
-    boost::optional<MeshLib::IO::PropertyVectorPartitionMetaData> pvpmd(
+    std::optional<MeshLib::IO::PropertyVectorPartitionMetaData> pvpmd(
         MeshLib::IO::readPropertyVectorPartitionMetaData(is));
     bool pvpmd_read_ok = static_cast<bool>(pvpmd);
     bool all_pvpmd_read_ok;
@@ -284,7 +284,7 @@ void NodePartitionedMeshReader::readProperties(
 }
 
 void NodePartitionedMeshReader::readDomainSpecificPartOfPropertyVectors(
-    std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> const&
+    std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> const&
         vec_pvmd,
     MeshLib::IO::PropertyVectorPartitionMetaData const& pvpmd,
     MeshLib::MeshItemType t,
diff --git a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
index 0ff34d4b005..4a011385151 100644
--- a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
+++ b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
@@ -174,7 +174,7 @@ private:
                               MeshLib::Properties& p) const;
 
     void readDomainSpecificPartOfPropertyVectors(
-        std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> const&
+        std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> const&
             vec_pvmd,
         MeshLib::IO::PropertyVectorPartitionMetaData const& pvpmd,
         MeshLib::MeshItemType t,
diff --git a/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h b/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
index c8b09769abc..4518ecaeadc 100644
--- a/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
+++ b/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
@@ -78,14 +78,14 @@ inline void writePropertyVectorMetaData(PropertyVectorMetaData const& pvmd)
         pvmd.number_of_tuples);
 }
 
-inline boost::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
+inline std::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
     std::istream& is)
 {
     // read the size of the name of the PropertyVector
     std::string::size_type s = 0;
     if (!is.read(reinterpret_cast<char*>(&s), sizeof(std::string::size_type)))
     {
-        return boost::optional<PropertyVectorMetaData>();
+        return std::optional<PropertyVectorMetaData>();
     }
 
     PropertyVectorMetaData pvmd;
@@ -110,7 +110,7 @@ inline boost::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
     if(!is.read(reinterpret_cast<char*>(&pvmd.number_of_tuples),
             sizeof(unsigned long)))
         return boost::none;
-    return boost::optional<PropertyVectorMetaData>(pvmd);
+    return std::optional<PropertyVectorMetaData>(pvmd);
 }
 
 struct PropertyVectorPartitionMetaData
@@ -132,20 +132,20 @@ inline void writePropertyVectorPartitionMetaData(
              sizeof(unsigned long));
 }
 
-inline boost::optional<PropertyVectorPartitionMetaData>
+inline std::optional<PropertyVectorPartitionMetaData>
 readPropertyVectorPartitionMetaData(std::istream& is)
 {
     PropertyVectorPartitionMetaData pvpmd;
     if (!is.read(reinterpret_cast<char*>(&pvpmd.offset), sizeof(unsigned long)))
     {
-        return boost::optional<PropertyVectorPartitionMetaData>();
+        return std::optional<PropertyVectorPartitionMetaData>();
     }
     if (!is.read(reinterpret_cast<char*>(&pvpmd.number_of_tuples),
                  sizeof(unsigned long)))
     {
-        return boost::optional<PropertyVectorPartitionMetaData>();
+        return std::optional<PropertyVectorPartitionMetaData>();
     }
-    return boost::optional<PropertyVectorPartitionMetaData>(pvpmd);
+    return std::optional<PropertyVectorPartitionMetaData>(pvpmd);
 }
 }  // namespace IO
 }  // namespace MeshLib
diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp
index 186dadc899c..141d02ea317 100644
--- a/MeshLib/Mesh.cpp
+++ b/MeshLib/Mesh.cpp
@@ -215,7 +215,8 @@ void Mesh::setElementNeighbors()
 
         for (auto neighbor = neighbors.begin(); neighbor != neighbors_new_end; ++neighbor)
         {
-            boost::optional<unsigned> const opposite_face_id = element->addNeighbor(*neighbor);
+            std::optional<unsigned> const opposite_face_id =
+                element->addNeighbor(*neighbor);
             if (opposite_face_id)
             {
                 (*neighbor)->setNeighbor(element, *opposite_face_id);
diff --git a/NumLib/NewtonRaphson.h b/NumLib/NewtonRaphson.h
index aa3930e30ec..82a21983b1f 100644
--- a/NumLib/NewtonRaphson.h
+++ b/NumLib/NewtonRaphson.h
@@ -54,7 +54,7 @@ public:
 
     /// Returns true and the iteration number if succeeded, otherwise false and
     /// an undefined value for the number of iterations.
-    boost::optional<int> solve(JacobianMatrix& jacobian) const
+    std::optional<int> solve(JacobianMatrix& jacobian) const
     {
         int iteration = 0;
         ResidualVector increment;
diff --git a/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp b/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
index 04cddf642b8..24074d10e6a 100644
--- a/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
+++ b/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
@@ -17,8 +17,8 @@
 namespace NumLib
 {
 ConvergenceCriterionDeltaX::ConvergenceCriterionDeltaX(
-    boost::optional<double>&& absolute_tolerance,
-    boost::optional<double>&& relative_tolerance,
+    std::optional<double>&& absolute_tolerance,
+    std::optional<double>&& relative_tolerance,
     const MathLib::VecNormType norm_type)
     : ConvergenceCriterion(norm_type),
       _abstol(std::move(absolute_tolerance)),
diff --git a/NumLib/ODESolver/ConvergenceCriterionDeltaX.h b/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
index 28038b96f60..63169f1c2f8 100644
--- a/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
+++ b/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
@@ -25,8 +25,8 @@ namespace NumLib
 class ConvergenceCriterionDeltaX final : public ConvergenceCriterion
 {
 public:
-    ConvergenceCriterionDeltaX(boost::optional<double>&& absolute_tolerance,
-                               boost::optional<double>&& relative_tolerance,
+    ConvergenceCriterionDeltaX(std::optional<double>&& absolute_tolerance,
+                               std::optional<double>&& relative_tolerance,
                                const MathLib::VecNormType norm_type);
 
     bool hasDeltaXCheck() const override { return true; }
@@ -38,8 +38,8 @@ public:
 
     void reset() override { this->_satisfied = true; }
 private:
-    const boost::optional<double> _abstol;
-    const boost::optional<double> _reltol;
+    const std::optional<double> _abstol;
+    const std::optional<double> _reltol;
 };
 
 std::unique_ptr<ConvergenceCriterionDeltaX> createConvergenceCriterionDeltaX(
diff --git a/NumLib/ODESolver/ConvergenceCriterionResidual.cpp b/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
index 8e3b9c7ce9f..08de36c59ab 100644
--- a/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
+++ b/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
@@ -17,8 +17,8 @@
 namespace NumLib
 {
 ConvergenceCriterionResidual::ConvergenceCriterionResidual(
-    boost::optional<double>&& absolute_tolerance,
-    boost::optional<double>&& relative_tolerance,
+    std::optional<double>&& absolute_tolerance,
+    std::optional<double>&& relative_tolerance,
     const MathLib::VecNormType norm_type)
     : ConvergenceCriterion(norm_type),
       _abstol(std::move(absolute_tolerance)),
diff --git a/NumLib/ODESolver/ConvergenceCriterionResidual.h b/NumLib/ODESolver/ConvergenceCriterionResidual.h
index 56cd3feb67e..0572681c970 100644
--- a/NumLib/ODESolver/ConvergenceCriterionResidual.h
+++ b/NumLib/ODESolver/ConvergenceCriterionResidual.h
@@ -25,8 +25,8 @@ namespace NumLib
 class ConvergenceCriterionResidual final : public ConvergenceCriterion
 {
 public:
-    ConvergenceCriterionResidual(boost::optional<double>&& absolute_tolerance,
-                                 boost::optional<double>&& relative_tolerance,
+    ConvergenceCriterionResidual(std::optional<double>&& absolute_tolerance,
+                                 std::optional<double>&& relative_tolerance,
                                  const MathLib::VecNormType norm_type);
 
     bool hasDeltaXCheck() const override { return true; }
@@ -39,8 +39,8 @@ public:
     void checkResidual(const GlobalVector& residual) override;
 
 private:
-    const boost::optional<double> _abstol;
-    const boost::optional<double> _reltol;
+    const std::optional<double> _abstol;
+    const std::optional<double> _reltol;
     double _residual_norm_0;
 };
 
diff --git a/ParameterLib/GroupBasedParameter.h b/ParameterLib/GroupBasedParameter.h
index e19ef525c5c..f18a1d820c5 100644
--- a/ParameterLib/GroupBasedParameter.h
+++ b/ParameterLib/GroupBasedParameter.h
@@ -84,14 +84,14 @@ private:
     {
     };
 
-    static boost::optional<std::size_t> getMeshItemID(
+    static std::optional<std::size_t> getMeshItemID(
         SpatialPosition const& pos,
         type<MeshLib::MeshItemType::Cell> /*unused*/)
     {
         return pos.getElementID();
     }
 
-    static boost::optional<std::size_t> getMeshItemID(
+    static std::optional<std::size_t> getMeshItemID(
         SpatialPosition const& pos,
         type<MeshLib::MeshItemType::Node> /*unused*/)
     {
diff --git a/ParameterLib/Parameter.cpp b/ParameterLib/Parameter.cpp
index 67ce634e577..0cc7332faaa 100644
--- a/ParameterLib/Parameter.cpp
+++ b/ParameterLib/Parameter.cpp
@@ -95,8 +95,8 @@ std::unique_ptr<ParameterBase> createParameter(
     OGS_FATAL("Cannot construct a parameter of given type '{:s}'.", type);
 }
 
-boost::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
-                                                 MeshLib::Mesh const& mesh)
+std::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
+                                               MeshLib::Mesh const& mesh)
 {
     // Arbitrary domain of definition.
     if (parameter.mesh() == nullptr)
diff --git a/ParameterLib/Parameter.h b/ParameterLib/Parameter.h
index b7234fea699..7262b1231ad 100644
--- a/ParameterLib/Parameter.h
+++ b/ParameterLib/Parameter.h
@@ -124,7 +124,7 @@ protected:
     }
 
 protected:
-    boost::optional<CoordinateSystem> _coordinate_system;
+    std::optional<CoordinateSystem> _coordinate_system;
 
     /// A mesh on which the parameter is defined. Some parameters might be
     /// mesh-independent.
@@ -204,7 +204,7 @@ std::unique_ptr<ParameterBase> createParameter(
 //! to the given mesh.
 //! \returns nothing if the parameter can be used on the given mesh, or an error
 //! string otherwise.
-boost::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
-                                                 MeshLib::Mesh const& mesh);
+std::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
+                                               MeshLib::Mesh const& mesh);
 
 }  // namespace ParameterLib
diff --git a/ParameterLib/SpatialPosition.h b/ParameterLib/SpatialPosition.h
index 44aa5ddaddf..8bae9ff0199 100644
--- a/ParameterLib/SpatialPosition.h
+++ b/ParameterLib/SpatialPosition.h
@@ -28,10 +28,10 @@ public:
     SpatialPosition() = default;
 
     SpatialPosition(
-        boost::optional<std::size_t> const& node_id,
-        boost::optional<std::size_t> const& element_id,
-        boost::optional<unsigned> const& integration_point,
-        boost::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
+        std::optional<std::size_t> const& node_id,
+        std::optional<std::size_t> const& element_id,
+        std::optional<unsigned> const& integration_point,
+        std::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
         : _node_id(node_id),
           _element_id(element_id),
           _integration_point(integration_point),
@@ -39,13 +39,13 @@ public:
     {
     }
 
-    boost::optional<std::size_t> getNodeID() const { return _node_id; }
-    boost::optional<std::size_t> getElementID() const { return _element_id; }
-    boost::optional<unsigned> getIntegrationPoint() const
+    std::optional<std::size_t> getNodeID() const { return _node_id; }
+    std::optional<std::size_t> getElementID() const { return _element_id; }
+    std::optional<unsigned> getIntegrationPoint() const
     {
         return _integration_point;
     }
-    boost::optional<MathLib::TemplatePoint<double, 3>> const& getCoordinates()
+    std::optional<MathLib::TemplatePoint<double, 3>> const& getCoordinates()
         const
     {
         return _coordinates;
@@ -75,10 +75,10 @@ public:
     }
 
     void setAll(
-        boost::optional<std::size_t> const& node_id,
-        boost::optional<std::size_t> const& element_id,
-        boost::optional<unsigned> const& integration_point,
-        boost::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
+        std::optional<std::size_t> const& node_id,
+        std::optional<std::size_t> const& element_id,
+        std::optional<unsigned> const& integration_point,
+        std::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
     {
         _node_id = node_id;
         _element_id = element_id;
@@ -95,10 +95,10 @@ public:
     }
 
 private:
-    boost::optional<std::size_t> _node_id;
-    boost::optional<std::size_t> _element_id;
-    boost::optional<unsigned> _integration_point;
-    boost::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
+    std::optional<std::size_t> _node_id;
+    std::optional<std::size_t> _element_id;
+    std::optional<unsigned> _integration_point;
+    std::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
 };
 
 }  // namespace ParameterLib
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
index 6360e0791a2..4147e918186 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
@@ -19,7 +19,7 @@ struct BoundaryConditionConfig final
 {
     BoundaryConditionConfig(BaseLib::ConfigTree&& config_,
                             MeshLib::Mesh const& mesh_,
-                            boost::optional<int> const component_id_)
+                            std::optional<int> const component_id_)
         : config(std::move(config_)),
           boundary_mesh(mesh_),
           component_id(component_id_)
@@ -30,7 +30,7 @@ struct BoundaryConditionConfig final
 
     BaseLib::ConfigTree config;
     MeshLib::Mesh const& boundary_mesh;
-    boost::optional<int> const component_id;
+    std::optional<int> const component_id;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/CreateJacobianAssembler.cpp b/ProcessLib/CreateJacobianAssembler.cpp
index 5cd909ab85a..4dd325d39bf 100644
--- a/ProcessLib/CreateJacobianAssembler.cpp
+++ b/ProcessLib/CreateJacobianAssembler.cpp
@@ -18,7 +18,7 @@
 namespace ProcessLib
 {
 std::unique_ptr<AbstractJacobianAssembler> createJacobianAssembler(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/ProcessLib/CreateJacobianAssembler.h b/ProcessLib/CreateJacobianAssembler.h
index 9026e23b76a..55ed5d9bef3 100644
--- a/ProcessLib/CreateJacobianAssembler.h
+++ b/ProcessLib/CreateJacobianAssembler.h
@@ -17,5 +17,5 @@ namespace ProcessLib
 class AbstractJacobianAssembler;
 
 std::unique_ptr<AbstractJacobianAssembler> createJacobianAssembler(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // ProcessLib
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
index e11ec76d43f..015f083991f 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -35,7 +35,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -197,7 +197,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -209,7 +209,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
index 3f01a2e64c6..d6b89f4d074 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -50,7 +50,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -62,7 +62,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -74,7 +74,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
index 150cb134295..f799b842a7f 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -35,7 +35,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -357,7 +357,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -367,7 +367,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
index 6f82d702dda..9703343e8cf 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -47,7 +47,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
index 1154e9a4eba..89b644f2b78 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -34,7 +34,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -200,7 +200,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -211,7 +211,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
index a8759460136..0b332c29fac 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
@@ -47,7 +47,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
index 98c4f8d0a72..dc4ce24bf4d 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -215,7 +215,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -226,7 +226,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
index 079a2371295..94148eeae9e 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -56,7 +56,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -67,7 +67,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
index 98dc9068282..91b50a3c999 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
@@ -59,7 +59,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -219,7 +219,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -231,7 +231,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
index 75efe7de8b9..985cade3a00 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
@@ -54,7 +54,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -66,7 +66,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -78,7 +78,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
index c8fb2d2d88e..bd724f9eac0 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -31,7 +31,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -132,7 +132,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -143,7 +143,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
index 2d04591a65e..92669851db3 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -56,7 +56,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -67,7 +67,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
index e80230eb01d..75510a4d2d8 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
@@ -31,7 +31,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -128,7 +128,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -139,7 +139,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
index 8e478af95c5..bc6f5f4f7a1 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -57,7 +57,7 @@ createSmallDeformationNonlocalProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -69,7 +69,7 @@ createSmallDeformationNonlocalProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SourceTerms/SourceTermConfig.h b/ProcessLib/SourceTerms/SourceTermConfig.h
index 6b24d1ef2b7..88abce3bbb9 100644
--- a/ProcessLib/SourceTerms/SourceTermConfig.h
+++ b/ProcessLib/SourceTerms/SourceTermConfig.h
@@ -19,7 +19,7 @@ struct SourceTermConfig final
 {
     SourceTermConfig(BaseLib::ConfigTree&& config_,
                      MeshLib::Mesh const& mesh_,
-                     boost::optional<int> const component_id_)
+                     std::optional<int> const component_id_)
         : config(std::move(config_)), mesh(mesh_), component_id(component_id_)
     {
     }
@@ -33,7 +33,7 @@ struct SourceTermConfig final
 
     BaseLib::ConfigTree config;
     MeshLib::Mesh const& mesh;
-    boost::optional<int> const component_id;
+    std::optional<int> const component_id;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
index 0cf615647a2..918f079d730 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
@@ -34,7 +34,7 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -182,7 +182,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -194,7 +194,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
index ea0a44a43e0..a1491853e8c 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
@@ -53,7 +53,7 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -64,7 +64,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -75,7 +75,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
index fb8fd5db6c7..0c20e9b7b4b 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -250,7 +250,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -261,7 +261,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
index 37ee8f5f39a..961fe10a7ac 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -57,7 +57,7 @@ createThermoMechanicalPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -69,7 +69,7 @@ createThermoMechanicalPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
index b7a2b1a3499..b1b94a700ab 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
@@ -48,7 +48,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -193,7 +193,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -205,7 +205,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
index 6eb48ea7b5d..e5df4802247 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
@@ -51,7 +51,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -61,7 +61,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -71,7 +71,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
diff --git a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
index a2c6ea7b445..a5b1f2c019d 100644
--- a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
@@ -75,7 +75,7 @@ std::unique_ptr<Process> createThermoRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -201,7 +201,7 @@ template std::unique_ptr<Process> createThermoRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -213,7 +213,7 @@ template std::unique_ptr<Process> createThermoRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
index a953378f162..9e96c7650dc 100644
--- a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
+++ b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
@@ -54,7 +54,7 @@ std::unique_ptr<Process> createThermoRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -67,7 +67,7 @@ createThermoRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -80,7 +80,7 @@ createThermoRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
index 8ed3d7990ae..cf706395dcd 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
@@ -32,7 +32,7 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&>
+    std::optional<MeshLib::PropertyVector<int> const&>
         material_ids,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
index 9fb78440a4d..0eb82dd0fca 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
@@ -24,7 +24,7 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&>
+    std::optional<MeshLib::PropertyVector<int> const&>
         material_ids,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
         parameters);
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
index d81a8219d55..36e4361c1b6 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
@@ -84,7 +84,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property}
     auto const& mat_config = config.getConfigSubtree("material_property");
 
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids;
+    std::optional<MeshLib::PropertyVector<int> const&> material_ids;
     if (mesh.getProperties().existsPropertyVector<int>("MaterialIDs"))
     {
         INFO("The twophase flow is in heterogeneous porous media.");
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
index b15d56a9cf0..ab5119e383f 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
@@ -33,7 +33,7 @@ namespace ProcessLib
 namespace TwoPhaseFlowWithPrho
 {
 TwoPhaseFlowWithPrhoMaterialProperties::TwoPhaseFlowWithPrhoMaterialProperties(
-    boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
+    std::optional<MeshLib::PropertyVector<int> const&> const material_ids,
     std::unique_ptr<MaterialLib::Fluid::FluidProperty>
         liquid_density,
     std::unique_ptr<MaterialLib::Fluid::FluidProperty>
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
index 87305bac2b4..0b06035bcf1 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
@@ -37,7 +37,7 @@ public:
     using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType;
 
     TwoPhaseFlowWithPrhoMaterialProperties(
-        boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
+        std::optional<MeshLib::PropertyVector<int> const&> const material_ids,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>
             liquid_density,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>
@@ -112,7 +112,7 @@ protected:
     /** Use two phase models for different material zones.
     *  Material IDs must be given as mesh element properties.
     */
-    boost::optional<MeshLib::PropertyVector<int> const&> const _material_ids;
+    std::optional<MeshLib::PropertyVector<int> const&> const _material_ids;
 
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
         _intrinsic_permeability_models;
diff --git a/Tests/MeshLib/ConvertToLinearMesh.cpp b/Tests/MeshLib/ConvertToLinearMesh.cpp
index d6bd1997a4f..1eee0f70742 100644
--- a/Tests/MeshLib/ConvertToLinearMesh.cpp
+++ b/Tests/MeshLib/ConvertToLinearMesh.cpp
@@ -73,7 +73,7 @@ std::variant<std::vector<std::size_t>, std::string> compareNodes(
 // Two elements are equal if their corresponding node coordinates are equal up
 // to a (shift) permutation.
 // Returns a string in case of error containing a descriptive message.
-boost::optional<std::string> equal(Element const& a, Element const& b)
+std::optional<std::string> equal(Element const& a, Element const& b)
 {
     if (typeid(a) != typeid(b))  // => (a.nodes.size == b.nodes.size)
     {
@@ -126,7 +126,7 @@ std::vector<std::size_t> generateRandomPermutationVector(std::size_t const size)
 
 // Test the inverse permutation for being the inverse: p^-1(p(.)) = Id.
 // In case of failure an error message is returned.
-boost::optional<std::string> inversePermutationIdentityTest(
+std::optional<std::string> inversePermutationIdentityTest(
     std::vector<std::size_t> const& permutation,
     std::vector<std::size_t> const& inverse_permutation)
 {
-- 
GitLab