21template <
typename LocalAssemblerInterface,
22 template <
typename ,
int >
23 class LocalAssemblerImplementation,
25 typename... ConstructorArgs>
28 LocalAssemblerInterface,
29 NumLib::DefaultIntegrationMethodProvider,
37 template <
typename ShapeFunction>
41 LocalAssemblerImplementation,
48 template <
typename ElementTraits>
51 return GlobalDim >= ElementTraits::ShapeFunction::DIM;
57 template <
typename ElementTraits>
60 if constexpr (GlobalDim < ElementTraits::ShapeFunction::DIM)
64 return ElementTraits::ShapeFunction::ORDER == 2 ||
67 typename ElementTraits::Element>;
74 integration_method_provider,
75 const unsigned shapefunction_order)
76 :
Base{dof_table, integration_method_provider}
78 if (shapefunction_order < 1 || 2 < shapefunction_order)
80 OGS_FATAL(
"The given shape function order {:d} is not supported",
84 if (shapefunction_order == 1)
87 using EnabledElementTraits =
89 std::declval<HasSuitableDimension>()));
92 [
this]<
typename ET>(ET*)
94 using MeshElement =
typename ET::Element;
97 using LowerOrderShapeFunction =
98 typename ET::LowerOrderShapeFunction;
101 template create<MeshElement>();
104 else if (shapefunction_order == 2)
107 using EnabledElementTraits =
109 std::declval<Is2ndOrderElementOfSuitableDimension>()));
112 [
this]<
typename ET>(ET*)
114 using MeshElement =
typename ET::Element;
115 using ShapeFunction2ndOrder =
typename ET::ShapeFunction;
118 template create<MeshElement>();
ProcessLib::GenericLocalAssemblerFactory< LocalAssemblerInterface, NumLib::DefaultIntegrationMethodProvider, ConstructorArgs... > Base
ProcessLib::LocalAssemblerBuilderFactory< ShapeFunction, LocalAssemblerInterface, LocalAssemblerImplementation, NumLib::DefaultIntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocAsmBuilderFactory
LocalAssemblerFactory(NumLib::LocalToGlobalIndexMap const &dof_table, NumLib::DefaultIntegrationMethodProvider const &integration_method_provider, const unsigned shapefunction_order)
void foreach(Function &&f)
decltype(auto) filter(Pred pred)
TemplateElement< PointRule1 > Point
constexpr bool operator()(ElementTraits *) const
constexpr bool operator()(ElementTraits *) const
std::unordered_map< std::type_index, LocAsmBuilder > _builders