From 53a892f4ce2f133e4d00534d33ad4329e5c0ccb2 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Thu, 5 Dec 2019 18:05:46 +0100
Subject: [PATCH] [MatL] Use std::optional in SolidModels.

---
 MaterialLib/SolidModels/CreepBGRa.cpp              |  8 ++++----
 MaterialLib/SolidModels/CreepBGRa.h                |  8 ++++----
 MaterialLib/SolidModels/Ehlers.cpp                 |  8 ++++----
 MaterialLib/SolidModels/Ehlers.h                   |  2 +-
 MaterialLib/SolidModels/LinearElasticIsotropic.cpp |  9 ++++-----
 MaterialLib/SolidModels/LinearElasticIsotropic.h   |  2 +-
 .../SolidModels/LinearElasticOrthotropic.cpp       |  2 +-
 MaterialLib/SolidModels/LinearElasticOrthotropic.h |  2 +-
 MaterialLib/SolidModels/Lubby2.cpp                 |  8 ++++----
 MaterialLib/SolidModels/Lubby2.h                   |  8 ++++----
 MaterialLib/SolidModels/MFront/MFront.cpp          | 14 ++++++--------
 MaterialLib/SolidModels/MFront/MFront.h            |  8 ++++----
 MaterialLib/SolidModels/MechanicsBase.h            |  6 +++---
 Tests/MaterialLib/MFront.cpp                       |  4 ++--
 14 files changed, 43 insertions(+), 46 deletions(-)

diff --git a/MaterialLib/SolidModels/CreepBGRa.cpp b/MaterialLib/SolidModels/CreepBGRa.cpp
index 2443ddcfe58..0d309746ee4 100644
--- a/MaterialLib/SolidModels/CreepBGRa.cpp
+++ b/MaterialLib/SolidModels/CreepBGRa.cpp
@@ -29,10 +29,10 @@ double getCreepConstantCoefficient(const double A, const double n,
 }
 
 template <int DisplacementDim>
-boost::optional<std::tuple<typename CreepBGRa<DisplacementDim>::KelvinVector,
-                           std::unique_ptr<typename MechanicsBase<
-                               DisplacementDim>::MaterialStateVariables>,
-                           typename CreepBGRa<DisplacementDim>::KelvinMatrix>>
+std::optional<std::tuple<typename CreepBGRa<DisplacementDim>::KelvinVector,
+                         std::unique_ptr<typename MechanicsBase<
+                             DisplacementDim>::MaterialStateVariables>,
+                         typename CreepBGRa<DisplacementDim>::KelvinMatrix>>
 CreepBGRa<DisplacementDim>::integrateStress(
     double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/CreepBGRa.h b/MaterialLib/SolidModels/CreepBGRa.h
index a2f5a9767af..7dcbb8b3c00 100644
--- a/MaterialLib/SolidModels/CreepBGRa.h
+++ b/MaterialLib/SolidModels/CreepBGRa.h
@@ -73,10 +73,10 @@ public:
     {
     }
 
-    boost::optional<std::tuple<KelvinVector,
-                               std::unique_ptr<typename MechanicsBase<
-                                   DisplacementDim>::MaterialStateVariables>,
-                               KelvinMatrix>>
+    std::optional<std::tuple<KelvinVector,
+                             std::unique_ptr<typename MechanicsBase<
+                                 DisplacementDim>::MaterialStateVariables>,
+                             KelvinMatrix>>
     integrateStress(
         double const t, ParameterLib::SpatialPosition const& x, double const dt,
         KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp
index 89951196bc0..ca0e5873ceb 100644
--- a/MaterialLib/SolidModels/Ehlers.cpp
+++ b/MaterialLib/SolidModels/Ehlers.cpp
@@ -502,10 +502,10 @@ double SolidEhlers<DisplacementDim>::computeFreeEnergyDensity(
 }
 
 template <int DisplacementDim>
-boost::optional<std::tuple<typename SolidEhlers<DisplacementDim>::KelvinVector,
-                           std::unique_ptr<typename MechanicsBase<
-                               DisplacementDim>::MaterialStateVariables>,
-                           typename SolidEhlers<DisplacementDim>::KelvinMatrix>>
+std::optional<std::tuple<typename SolidEhlers<DisplacementDim>::KelvinVector,
+                         std::unique_ptr<typename MechanicsBase<
+                             DisplacementDim>::MaterialStateVariables>,
+                         typename SolidEhlers<DisplacementDim>::KelvinMatrix>>
 SolidEhlers<DisplacementDim>::integrateStress(
     double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h
index 801c5b14927..772cdd9addf 100644
--- a/MaterialLib/SolidModels/Ehlers.h
+++ b/MaterialLib/SolidModels/Ehlers.h
@@ -309,7 +309,7 @@ public:
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
             material_state_variables) const override;
 
-    boost::optional<std::tuple<KelvinVector,
+    std::optional<std::tuple<KelvinVector,
                                std::unique_ptr<typename MechanicsBase<
                                    DisplacementDim>::MaterialStateVariables>,
                                KelvinMatrix>>
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
index 29c3748c0fa..56afd3e4b07 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp
@@ -14,11 +14,10 @@ namespace MaterialLib
 namespace Solids
 {
 template <int DisplacementDim>
-boost::optional<
-    std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
-               std::unique_ptr<typename MechanicsBase<
-                   DisplacementDim>::MaterialStateVariables>,
-               typename MechanicsBase<DisplacementDim>::KelvinMatrix>>
+std::optional<std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
+                         std::unique_ptr<typename MechanicsBase<
+                             DisplacementDim>::MaterialStateVariables>,
+                         typename MechanicsBase<DisplacementDim>::KelvinMatrix>>
 LinearElasticIsotropic<DisplacementDim>::integrateStress(
     double const t, ParameterLib::SpatialPosition const& x, double const /*dt*/,
     KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h
index adb693226de..4b12e18c78e 100644
--- a/MaterialLib/SolidModels/LinearElasticIsotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h
@@ -85,7 +85,7 @@ public:
         return eps.dot(sigma) / 2;
     }
 
-    boost::optional<
+    std::optional<
         std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
                    std::unique_ptr<typename MechanicsBase<
                        DisplacementDim>::MaterialStateVariables>,
diff --git a/MaterialLib/SolidModels/LinearElasticOrthotropic.cpp b/MaterialLib/SolidModels/LinearElasticOrthotropic.cpp
index cb3c54c4131..a44e6ae2a39 100644
--- a/MaterialLib/SolidModels/LinearElasticOrthotropic.cpp
+++ b/MaterialLib/SolidModels/LinearElasticOrthotropic.cpp
@@ -16,7 +16,7 @@ namespace MaterialLib
 namespace Solids
 {
 template <int DisplacementDim>
-boost::optional<
+std::optional<
     std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
                std::unique_ptr<typename MechanicsBase<
                    DisplacementDim>::MaterialStateVariables>,
diff --git a/MaterialLib/SolidModels/LinearElasticOrthotropic.h b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
index ec06f133362..812d10b6ebf 100644
--- a/MaterialLib/SolidModels/LinearElasticOrthotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
@@ -152,7 +152,7 @@ public:
         return eps.dot(sigma) / 2;
     }
 
-    boost::optional<
+    std::optional<
         std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
                    std::unique_ptr<typename MechanicsBase<
                        DisplacementDim>::MaterialStateVariables>,
diff --git a/MaterialLib/SolidModels/Lubby2.cpp b/MaterialLib/SolidModels/Lubby2.cpp
index 68a33b4e0c3..ffdc97bfa8b 100644
--- a/MaterialLib/SolidModels/Lubby2.cpp
+++ b/MaterialLib/SolidModels/Lubby2.cpp
@@ -67,10 +67,10 @@ MathLib::KelvinVector::KelvinMatrixType<DisplacementDim> tangentStiffnessA(
 };
 
 template <int DisplacementDim>
-boost::optional<std::tuple<typename Lubby2<DisplacementDim>::KelvinVector,
-                           std::unique_ptr<typename MechanicsBase<
-                               DisplacementDim>::MaterialStateVariables>,
-                           typename Lubby2<DisplacementDim>::KelvinMatrix>>
+std::optional<std::tuple<typename Lubby2<DisplacementDim>::KelvinVector,
+                         std::unique_ptr<typename MechanicsBase<
+                             DisplacementDim>::MaterialStateVariables>,
+                         typename Lubby2<DisplacementDim>::KelvinMatrix>>
 Lubby2<DisplacementDim>::integrateStress(
     double const t, ParameterLib::SpatialPosition const& x, double const dt,
     KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/Lubby2.h b/MaterialLib/SolidModels/Lubby2.h
index c9a74fc5fb3..65cc281663e 100644
--- a/MaterialLib/SolidModels/Lubby2.h
+++ b/MaterialLib/SolidModels/Lubby2.h
@@ -229,10 +229,10 @@ public:
                eps_K.dot(sigma - eta_K * (eps_K - eps_K_prev) / dt) / 2;
     }
 
-    boost::optional<std::tuple<KelvinVector,
-                               std::unique_ptr<typename MechanicsBase<
-                                   DisplacementDim>::MaterialStateVariables>,
-                               KelvinMatrix>>
+    std::optional<std::tuple<KelvinVector,
+                             std::unique_ptr<typename MechanicsBase<
+                                 DisplacementDim>::MaterialStateVariables>,
+                             KelvinMatrix>>
     integrateStress(
         double const t, ParameterLib::SpatialPosition const& x, double const dt,
         KelvinVector const& eps_prev, KelvinVector const& eps,
diff --git a/MaterialLib/SolidModels/MFront/MFront.cpp b/MaterialLib/SolidModels/MFront/MFront.cpp
index b80e6fa879d..f74b48a5957 100644
--- a/MaterialLib/SolidModels/MFront/MFront.cpp
+++ b/MaterialLib/SolidModels/MFront/MFront.cpp
@@ -246,10 +246,10 @@ MFront<DisplacementDim>::createMaterialStateVariables() const
 }
 
 template <int DisplacementDim>
-boost::optional<std::tuple<typename MFront<DisplacementDim>::KelvinVector,
-                           std::unique_ptr<typename MechanicsBase<
-                               DisplacementDim>::MaterialStateVariables>,
-                           typename MFront<DisplacementDim>::KelvinMatrix>>
+std::optional<std::tuple<typename MFront<DisplacementDim>::KelvinVector,
+                         std::unique_ptr<typename MechanicsBase<
+                             DisplacementDim>::MaterialStateVariables>,
+                         typename MFront<DisplacementDim>::KelvinMatrix>>
 MFront<DisplacementDim>::integrateStress(
     double const t,
     ParameterLib::SpatialPosition const& x,
@@ -335,14 +335,12 @@ MFront<DisplacementDim>::integrateStress(
     KelvinMatrix C =
         MFrontToOGS(Eigen::Map<KelvinMatrix>(behaviour_data.K.data()));
 
-    return boost::make_optional(
+    return std::make_optional(
         std::make_tuple<typename MFront<DisplacementDim>::KelvinVector,
                         std::unique_ptr<typename MechanicsBase<
                             DisplacementDim>::MaterialStateVariables>,
                         typename MFront<DisplacementDim>::KelvinMatrix>(
-            std::move(sigma),
-            std::move(state),
-            std::move(C)));
+            std::move(sigma), std::move(state), std::move(C)));
 }
 
 template <int DisplacementDim>
diff --git a/MaterialLib/SolidModels/MFront/MFront.h b/MaterialLib/SolidModels/MFront/MFront.h
index d57ef00d640..d2b3a6487b4 100644
--- a/MaterialLib/SolidModels/MFront/MFront.h
+++ b/MaterialLib/SolidModels/MFront/MFront.h
@@ -72,10 +72,10 @@ public:
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables>
     createMaterialStateVariables() const override;
 
-    boost::optional<std::tuple<KelvinVector,
-                               std::unique_ptr<typename MechanicsBase<
-                                   DisplacementDim>::MaterialStateVariables>,
-                               KelvinMatrix>>
+    std::optional<std::tuple<KelvinVector,
+                             std::unique_ptr<typename MechanicsBase<
+                                 DisplacementDim>::MaterialStateVariables>,
+                             KelvinMatrix>>
     integrateStress(
         double const t,
         ParameterLib::SpatialPosition const& x,
diff --git a/MaterialLib/SolidModels/MechanicsBase.h b/MaterialLib/SolidModels/MechanicsBase.h
index 61497d560c1..5a79df80b30 100644
--- a/MaterialLib/SolidModels/MechanicsBase.h
+++ b/MaterialLib/SolidModels/MechanicsBase.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include <boost/optional.hpp>
+#include <optional>
 #include <functional>
 #include <memory>
 #include <tuple>
@@ -77,7 +77,7 @@ struct MechanicsBase
     /// constitutive relation compute function.
     /// Returns nothing in case of errors in the computation if Newton
     /// iterations did not converge, for example.
-    boost::optional<std::tuple<
+    std::optional<std::tuple<
         KelvinVector, std::unique_ptr<MaterialStateVariables>, KelvinMatrix>>
     integrateStress(double const t,
                     ParameterLib::SpatialPosition const& x,
@@ -108,7 +108,7 @@ struct MechanicsBase
     /// wrapper function.
     /// Returns nothing in case of errors in the computation if Newton
     /// iterations did not converge, for example.
-    virtual boost::optional<std::tuple<
+    virtual std::optional<std::tuple<
         KelvinVector, std::unique_ptr<MaterialStateVariables>, KelvinMatrix>>
     integrateStress(double const t,
                     ParameterLib::SpatialPosition const& x,
diff --git a/Tests/MaterialLib/MFront.cpp b/Tests/MaterialLib/MFront.cpp
index 4c92ea5b52a..e1d545af7ac 100644
--- a/Tests/MaterialLib/MFront.cpp
+++ b/Tests/MaterialLib/MFront.cpp
@@ -158,7 +158,7 @@ TYPED_TEST(MaterialLib_SolidModelsMFront2, IntegrateZeroDisplacement)
         this->t, this->x, this->dt, this->eps_prev, this->eps, this->sigma_prev,
         *state, this->T);
 
-    ASSERT_TRUE(solution != boost::none);
+    ASSERT_TRUE(solution != std::nullopt);
     state = std::move(std::get<1>(*solution));
     ASSERT_TRUE(state != nullptr);
     state.reset(nullptr);
@@ -174,7 +174,7 @@ TYPED_TEST(MaterialLib_SolidModelsMFront3, IntegrateZeroDisplacement)
         this->t, this->x, this->dt, this->eps_prev, this->eps, this->sigma_prev,
         *state, this->T);
 
-    ASSERT_TRUE(solution != boost::none);
+    ASSERT_TRUE(solution != std::nullopt);
     state = std::move(std::get<1>(*solution));
     ASSERT_TRUE(state != nullptr);
     state.reset(nullptr);
-- 
GitLab