From eb9d70917e75c84cabc5dfd012f21209f27144a7 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Fri, 18 Nov 2016 10:09:21 +0100
Subject: [PATCH] [PL] added time to secondary varaibles

---
 ProcessLib/CachedSecondaryVariable.cpp       |  8 +++-
 ProcessLib/CachedSecondaryVariable.h         |  1 +
 ProcessLib/GlobalVectorFromNamedFunction.cpp |  1 +
 ProcessLib/GlobalVectorFromNamedFunction.h   |  2 +-
 ProcessLib/SecondaryVariable.h               | 41 ++++++++++++--------
 5 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/ProcessLib/CachedSecondaryVariable.cpp b/ProcessLib/CachedSecondaryVariable.cpp
index 052405d37cc..127fe51a605 100644
--- a/ProcessLib/CachedSecondaryVariable.cpp
+++ b/ProcessLib/CachedSecondaryVariable.cpp
@@ -32,11 +32,12 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
 {
     // TODO copied from makeExtrapolator()
     auto const eval_residuals = [this](
+        const double t,
         GlobalVector const& x,
         NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
-        _extrapolator.calculateResiduals(1, *_extrapolatables, x, dof_table);
+        _extrapolator.calculateResiduals(1, *_extrapolatables, t, x, dof_table);
         return _extrapolator.getElementResiduals();
     };
     return {1, BaseLib::easyBind(&CachedSecondaryVariable::evalField, this),
@@ -44,6 +45,7 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
 }
 
 GlobalVector const& CachedSecondaryVariable::evalField(
+    const double t,
     GlobalVector const& x,
     NumLib::LocalToGlobalIndexMap const& dof_table,
     std::unique_ptr<GlobalVector>& /*result_cache*/
@@ -62,8 +64,10 @@ GlobalVector const& CachedSecondaryVariable::evalFieldNoArgs() const
         return _cached_nodal_values;
     }
     DBUG("Recomputing %s.", _internal_variable_name.c_str());
+    // TODO fix
+    const double t = 0.0;
     _extrapolator.extrapolate(
-        1, *_extrapolatables, *_current_solution, *_dof_table);
+        1, *_extrapolatables, t, *_current_solution, *_dof_table);
     auto const& nodal_values = _extrapolator.getNodalValues();
     MathLib::LinAlg::copy(nodal_values, _cached_nodal_values);
     _needs_recomputation = false;
diff --git a/ProcessLib/CachedSecondaryVariable.h b/ProcessLib/CachedSecondaryVariable.h
index 884316472f7..dcc659f1a68 100644
--- a/ProcessLib/CachedSecondaryVariable.h
+++ b/ProcessLib/CachedSecondaryVariable.h
@@ -69,6 +69,7 @@ private:
 
     //! Computes the secondary Variable.
     GlobalVector const& evalField(
+        const double t,
         GlobalVector const& x,
         NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector>& /*result_cache*/
diff --git a/ProcessLib/GlobalVectorFromNamedFunction.cpp b/ProcessLib/GlobalVectorFromNamedFunction.cpp
index 82020a384e3..9a456d918e5 100644
--- a/ProcessLib/GlobalVectorFromNamedFunction.cpp
+++ b/ProcessLib/GlobalVectorFromNamedFunction.cpp
@@ -28,6 +28,7 @@ GlobalVectorFromNamedFunction::GlobalVectorFromNamedFunction(
 }
 
 GlobalVector const& GlobalVectorFromNamedFunction::call(
+    const double /*t*/,
     GlobalVector const& x,
     NumLib::LocalToGlobalIndexMap const& dof_table,
     std::unique_ptr<GlobalVector>& result)
diff --git a/ProcessLib/GlobalVectorFromNamedFunction.h b/ProcessLib/GlobalVectorFromNamedFunction.h
index 83ab3aa8e47..5b32bb993db 100644
--- a/ProcessLib/GlobalVectorFromNamedFunction.h
+++ b/ProcessLib/GlobalVectorFromNamedFunction.h
@@ -42,7 +42,7 @@ public:
     //! The signature of this method matches
     //! SecondaryVariableFunctions::Function, i.e., this method can be used to
     //! compute a secondary variable.
-    GlobalVector const& call(GlobalVector const& x,
+    GlobalVector const& call(const double t, GlobalVector const& x,
                              NumLib::LocalToGlobalIndexMap const& dof_table,
                              std::unique_ptr<GlobalVector>& result);
 
diff --git a/ProcessLib/SecondaryVariable.h b/ProcessLib/SecondaryVariable.h
index 99b7681352e..f03c6322e70 100644
--- a/ProcessLib/SecondaryVariable.h
+++ b/ProcessLib/SecondaryVariable.h
@@ -37,6 +37,7 @@ struct SecondaryVariableFunctions final
      * is stored somewhere else.
      */
     using Function = std::function<GlobalVector const&(
+        const double t,
         GlobalVector const& x,
         NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector>& result_cache)>;
@@ -51,19 +52,21 @@ struct SecondaryVariableFunctions final
           eval_residuals(std::forward<F2>(eval_residuals_))
     {
         // Used to detect nasty implicit conversions.
-        static_assert(std::is_same<GlobalVector const&,
-            typename std::result_of<F1(
-                GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
-                std::unique_ptr<GlobalVector>&
-                )>::type>::value,
+        static_assert(
+            std::is_same<GlobalVector const&,
+                         typename std::result_of<F1(
+                             double const, GlobalVector const&,
+                             NumLib::LocalToGlobalIndexMap const&,
+                             std::unique_ptr<GlobalVector>&)>::type>::value,
             "The function eval_field_ does not return a const reference"
             " to a GlobalVector");
 
-        static_assert(std::is_same<GlobalVector const&,
-            typename std::result_of<F2(
-                GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
-                std::unique_ptr<GlobalVector>&
-            )>::type>::value,
+        static_assert(
+            std::is_same<GlobalVector const&,
+                         typename std::result_of<F2(
+                             double const, GlobalVector const&,
+                             NumLib::LocalToGlobalIndexMap const&,
+                             std::unique_ptr<GlobalVector>&)>::type>::value,
             "The function eval_residuals_ does not return a const reference"
             " to a GlobalVector");
     }
@@ -75,11 +78,12 @@ struct SecondaryVariableFunctions final
           eval_field(std::forward<F1>(eval_field_))
     {
         // Used to detect nasty implicit conversions.
-        static_assert(std::is_same<GlobalVector const&,
-            typename std::result_of<F1(
-                GlobalVector const&, NumLib::LocalToGlobalIndexMap const&,
-                std::unique_ptr<GlobalVector>&
-                )>::type>::value,
+        static_assert(
+            std::is_same<GlobalVector const&,
+                         typename std::result_of<F1(
+                             double const, GlobalVector const&,
+                             NumLib::LocalToGlobalIndexMap const&,
+                             std::unique_ptr<GlobalVector>&)>::type>::value,
             "The function eval_field_ does not return a const reference"
             " to a GlobalVector");
     }
@@ -158,26 +162,29 @@ SecondaryVariableFunctions makeExtrapolator(
 {
     auto const eval_field = [num_components, &extrapolator, &local_assemblers,
                              integration_point_values_method](
+        const double t,
         GlobalVector const& x,
         NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
         auto const extrapolatables = NumLib::makeExtrapolatable(
             local_assemblers, integration_point_values_method);
-        extrapolator.extrapolate(num_components, extrapolatables, x, dof_table);
+        extrapolator.extrapolate(num_components, extrapolatables, t, x,
+                                 dof_table);
         return extrapolator.getNodalValues();
     };
 
     auto const eval_residuals = [num_components, &extrapolator,
                                  &local_assemblers,
                                  integration_point_values_method](
+        const double t,
         GlobalVector const& x,
         NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
         auto const extrapolatables = NumLib::makeExtrapolatable(
             local_assemblers, integration_point_values_method);
-        extrapolator.calculateResiduals(num_components, extrapolatables, x,
+        extrapolator.calculateResiduals(num_components, extrapolatables, t, x,
                                         dof_table);
         return extrapolator.getElementResiduals();
     };
-- 
GitLab