diff --git a/ProcessLib/CachedSecondaryVariable.cpp b/ProcessLib/CachedSecondaryVariable.cpp index 052405d37cc28a378868e0932fc87448949b2c05..127fe51a605172869486433d706f284e161589ef 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 884316472f7da4784da29fa71c48ddda53a3ab2d..dcc659f1a68821bb72edc40ff52cf2ed69fc1916 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 82020a384e3361a22acf8eed09bd3cee2ee338d2..9a456d918e547dffdf0632d2bca74337d6c3ef16 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 83ab3aa8e478d3d3e457c4e5c2298c8ffa899628..5b32bb993db64fe97dbba421eb10bcefc14f41b8 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 99b7681352e798240d1321e49214d09b1f0d1cc7..f03c6322e70f6c65c874ff21f603f7b5ac53e8bb 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(); };