70 {
71 if (shapefunction_order < 1 || 2 < shapefunction_order)
72 {
73 OGS_FATAL(
"The given shape function order {:d} is not supported",
74 shapefunction_order);
75 }
76
77 if (shapefunction_order == 1)
78 {
79
80 using EnabledElementTraits =
81 decltype(BaseLib::TMP::filter<EnabledElementTraitsLagrange>(
82 std::declval<HasSuitableDimension>()));
83
84 BaseLib::TMP::foreach<EnabledElementTraits>(
85 [this]<typename ET>(ET*)
86 {
87 using MeshElement = typename ET::Element;
88
89
90 using LowerOrderShapeFunction =
91 typename ET::LowerOrderShapeFunction;
93 LocAsmBuilderFactory<LowerOrderShapeFunction>::create();
94 });
95 }
96 else if (shapefunction_order == 2)
97 {
98
99 using EnabledElementTraits =
100 decltype(BaseLib::TMP::filter<EnabledElementTraitsLagrange>(
101 std::declval<Is2ndOrderElementOfSuitableDimension>()));
102
103 BaseLib::TMP::foreach<EnabledElementTraits>(
104 [this]<typename ET>(ET*)
105 {
106 using MeshElement = typename ET::Element;
107 using ShapeFunction2ndOrder = typename ET::ShapeFunction;
109 LocAsmBuilderFactory<ShapeFunction2ndOrder>::create();
110 });
111 }
112 }
ProcessLib::GenericLocalAssemblerFactory< LocalAssemblerInterface, ConstructorArgs... > Base
std::unordered_map< std::type_index, LocAsmBuilder > _builders
Mapping of element types to local assembler builders.