diff --git a/ProcessLib/CachedSecondaryVariable.cpp b/ProcessLib/CachedSecondaryVariable.cpp index 3b29c6f9abb6907010db53fde690decb4ff81bb6..9627506a13f04796c3a1bedee5e0b459565d91a7 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 0c6b5335f6e8c1353cf7cc7343582033baa71d47..884316472f7da4784da29fa71c48ddda53a3ab2d 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 de54dec8710a2c0378523a65a3ec576553e3ce02..0fb68a55dc9b3141f2b845a8da9545e968cffbab 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};