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