Skip to content
Snippets Groups Projects
Commit 0e1de58d authored by Christoph Lehmann's avatar Christoph Lehmann
Browse files

[PL] adapted to extrapolator

parent 3ddbff70
No related branches found
No related tags found
No related merge requests found
...@@ -13,8 +13,12 @@ ...@@ -13,8 +13,12 @@
#include "BaseLib/ConfigTree.h" #include "BaseLib/ConfigTree.h"
#include "BaseLib/uniqueInsert.h" #include "BaseLib/uniqueInsert.h"
#include "NumLib/Extrapolation/Extrapolator.h" #include "NumLib/Extrapolation/Extrapolator.h"
#include "NumLib/Extrapolation/ExtrapolatableElementCollection.h"
namespace NumLib { class LocalToGlobalIndexMap; } namespace NumLib
{
class LocalToGlobalIndexMap;
}
namespace ProcessLib namespace ProcessLib
{ {
...@@ -159,41 +163,39 @@ private: ...@@ -159,41 +163,39 @@ private:
//! Creates an object that computes a secondary variable via extrapolation //! Creates an object that computes a secondary variable via extrapolation
//! of integration point values. //! of integration point values.
template<typename PropertyEnum, typename LocalAssembler> template <typename LocalAssemblerCollection,
SecondaryVariableFunctions typename IntegrationPointValuesMethod>
makeExtrapolator(PropertyEnum const property, SecondaryVariableFunctions makeExtrapolator(
NumLib::Extrapolator<PropertyEnum, LocalAssembler>& NumLib::Extrapolator& extrapolator,
extrapolator, LocalAssemblerCollection const& local_assemblers,
typename NumLib::Extrapolator<PropertyEnum, IntegrationPointValuesMethod integration_point_values_method)
LocalAssembler>::LocalAssemblers const& local_assemblers)
{ {
static_assert(std::is_base_of< auto const eval_field = [&extrapolator, &local_assemblers,
NumLib::Extrapolatable<PropertyEnum>, LocalAssembler>::value, integration_point_values_method](
"The passed local assembler type (i.e. the local assembler interface) must" GlobalVector const& /*x*/,
" derive from NumLib::Extrapolatable<>."); NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
std::unique_ptr<GlobalVector> & /*result_cache*/
auto const eval_field = [property, &extrapolator, &local_assemblers]( ) -> GlobalVector const& {
GlobalVector const& /*x*/, auto const extrapolatables = NumLib::makeExtrapolatable(
NumLib::LocalToGlobalIndexMap const& /*dof_table*/, local_assemblers, integration_point_values_method);
std::unique_ptr<GlobalVector>& /*result_cache*/ extrapolator.extrapolate(extrapolatables);
) -> GlobalVector const&
{
extrapolator.extrapolate(local_assemblers, property);
return extrapolator.getNodalValues(); return extrapolator.getNodalValues();
}; };
auto const eval_residuals = [property, &extrapolator, &local_assemblers]( auto const eval_residuals = [&extrapolator, &local_assemblers,
GlobalVector const& /*x*/, integration_point_values_method](
NumLib::LocalToGlobalIndexMap const& /*dof_table*/, GlobalVector const& /*x*/,
std::unique_ptr<GlobalVector>& /*result_cache*/ NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
) -> GlobalVector const& std::unique_ptr<GlobalVector> & /*result_cache*/
{ ) -> GlobalVector const& {
extrapolator.calculateResiduals(local_assemblers, property); auto const extrapolatables = NumLib::makeExtrapolatable(
local_assemblers, integration_point_values_method);
extrapolator.calculateResiduals(extrapolatables);
return extrapolator.getElementResiduals(); return extrapolator.getElementResiduals();
}; };
return { eval_field, eval_residuals }; return {eval_field, eval_residuals};
} }
} // namespace ProcessLib } // namespace ProcessLib
#endif // PROCESSLIB_SECONDARY_VARIABLE_H #endif // PROCESSLIB_SECONDARY_VARIABLE_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment