From 9e07ba740567f24895f27d346ccb572ba208188c Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Mon, 17 Jul 2017 15:41:43 +0200 Subject: [PATCH] [PL] pass further extrapolator args --- ProcessLib/CachedSecondaryVariable.cpp | 15 +++++++++------ ProcessLib/CachedSecondaryVariable.h | 7 +++++-- ProcessLib/SecondaryVariable.h | 12 ++++++------ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ProcessLib/CachedSecondaryVariable.cpp b/ProcessLib/CachedSecondaryVariable.cpp index 3b29c6f9abb..9627506a13f 100644 --- a/ProcessLib/CachedSecondaryVariable.cpp +++ b/ProcessLib/CachedSecondaryVariable.cpp @@ -32,11 +32,11 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator() { // TODO copied from makeExtrapolator() auto const eval_residuals = [this]( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, + GlobalVector const& x, + NumLib::LocalToGlobalIndexMap const& dof_table, std::unique_ptr<GlobalVector> & /*result_cache*/ ) -> GlobalVector const& { - _extrapolator.calculateResiduals(*_extrapolatables); + _extrapolator.calculateResiduals(*_extrapolatables, x, dof_table); return _extrapolator.getElementResiduals(); }; return {BaseLib::easyBind(&CachedSecondaryVariable::evalField, this), @@ -44,11 +44,13 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator() } GlobalVector const& CachedSecondaryVariable::evalField( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, + GlobalVector const& x, + NumLib::LocalToGlobalIndexMap const& dof_table, std::unique_ptr<GlobalVector>& /*result_cache*/ ) const { + // _current_solution = &x; + // _dof_table = &dof_table; return evalFieldNoArgs(); } @@ -60,7 +62,8 @@ GlobalVector const& CachedSecondaryVariable::evalFieldNoArgs() const return _cached_nodal_values; } DBUG("Recomputing %s.", _internal_variable_name.c_str()); - _extrapolator.extrapolate(*_extrapolatables); + _extrapolator.extrapolate( + *_extrapolatables, *_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 0c6b5335f6e..884316472f7 100644 --- a/ProcessLib/CachedSecondaryVariable.h +++ b/ProcessLib/CachedSecondaryVariable.h @@ -69,8 +69,8 @@ private: //! Computes the secondary Variable. GlobalVector const& evalField( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, + GlobalVector const& x, + NumLib::LocalToGlobalIndexMap const& dof_table, std::unique_ptr<GlobalVector>& /*result_cache*/ ) const; @@ -85,6 +85,9 @@ private: std::unique_ptr<NumLib::ExtrapolatableElementCollection> _extrapolatables; SecondaryVariableContext const& _context; std::string const _internal_variable_name; + + GlobalVector const* _current_solution = nullptr; + NumLib::LocalToGlobalIndexMap const* _dof_table = nullptr; }; } // namespace ProcessLib diff --git a/ProcessLib/SecondaryVariable.h b/ProcessLib/SecondaryVariable.h index de54dec8710..0fb68a55dc9 100644 --- a/ProcessLib/SecondaryVariable.h +++ b/ProcessLib/SecondaryVariable.h @@ -155,25 +155,25 @@ SecondaryVariableFunctions makeExtrapolator( { auto const eval_field = [&extrapolator, &local_assemblers, integration_point_values_method]( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, + 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(extrapolatables); + extrapolator.extrapolate(extrapolatables, x, dof_table); return extrapolator.getNodalValues(); }; auto const eval_residuals = [&extrapolator, &local_assemblers, integration_point_values_method]( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, + 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(extrapolatables); + extrapolator.calculateResiduals(extrapolatables, x, dof_table); return extrapolator.getElementResiduals(); }; return {eval_field, eval_residuals}; -- GitLab