From 0e1de58d9960ec7d5082166d93fa291e4499fd74 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Tue, 5 Jul 2016 11:50:43 +0200 Subject: [PATCH] [PL] adapted to extrapolator --- ProcessLib/SecondaryVariable.h | 60 ++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/ProcessLib/SecondaryVariable.h b/ProcessLib/SecondaryVariable.h index bf99e2e4c3f..bf8c23dc0bc 100644 --- a/ProcessLib/SecondaryVariable.h +++ b/ProcessLib/SecondaryVariable.h @@ -13,8 +13,12 @@ #include "BaseLib/ConfigTree.h" #include "BaseLib/uniqueInsert.h" #include "NumLib/Extrapolation/Extrapolator.h" +#include "NumLib/Extrapolation/ExtrapolatableElementCollection.h" -namespace NumLib { class LocalToGlobalIndexMap; } +namespace NumLib +{ +class LocalToGlobalIndexMap; +} namespace ProcessLib { @@ -159,41 +163,39 @@ private: //! Creates an object that computes a secondary variable via extrapolation //! of integration point values. -template<typename PropertyEnum, typename LocalAssembler> -SecondaryVariableFunctions -makeExtrapolator(PropertyEnum const property, - NumLib::Extrapolator<PropertyEnum, LocalAssembler>& - extrapolator, - typename NumLib::Extrapolator<PropertyEnum, - LocalAssembler>::LocalAssemblers const& local_assemblers) +template <typename LocalAssemblerCollection, + typename IntegrationPointValuesMethod> +SecondaryVariableFunctions makeExtrapolator( + NumLib::Extrapolator& extrapolator, + LocalAssemblerCollection const& local_assemblers, + IntegrationPointValuesMethod integration_point_values_method) { - static_assert(std::is_base_of< - NumLib::Extrapolatable<PropertyEnum>, LocalAssembler>::value, - "The passed local assembler type (i.e. the local assembler interface) must" - " derive from NumLib::Extrapolatable<>."); - - auto const eval_field = [property, &extrapolator, &local_assemblers]( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, - std::unique_ptr<GlobalVector>& /*result_cache*/ - ) -> GlobalVector const& - { - extrapolator.extrapolate(local_assemblers, property); + auto const eval_field = [&extrapolator, &local_assemblers, + integration_point_values_method]( + 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); return extrapolator.getNodalValues(); }; - auto const eval_residuals = [property, &extrapolator, &local_assemblers]( - GlobalVector const& /*x*/, - NumLib::LocalToGlobalIndexMap const& /*dof_table*/, - std::unique_ptr<GlobalVector>& /*result_cache*/ - ) -> GlobalVector const& - { - extrapolator.calculateResiduals(local_assemblers, property); + auto const eval_residuals = [&extrapolator, &local_assemblers, + integration_point_values_method]( + 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); return extrapolator.getElementResiduals(); }; - return { eval_field, eval_residuals }; + return {eval_field, eval_residuals}; } -} // namespace ProcessLib +} // namespace ProcessLib #endif // PROCESSLIB_SECONDARY_VARIABLE_H -- GitLab