18namespace BoundaryConditionAndSourceTerm
20template <
typename LocalAssemblerInterface,
21 template <
typename,
typename,
int>
22 class LocalAssemblerImplementation,
24 typename... ConstructorArgs>
33 template <
typename ShapeFunction>
37 LocalAssemblerImplementation,
43 template <
typename ElementTraits>
46 return GlobalDim >= ElementTraits::ShapeFunction::DIM;
52 template <
typename ElementTraits>
55 if constexpr (GlobalDim < ElementTraits::ShapeFunction::DIM)
59 return ElementTraits::ShapeFunction::ORDER == 2 ||
62 typename ElementTraits::Element>;
68 const unsigned shapefunction_order)
71 if (shapefunction_order < 1 || 2 < shapefunction_order)
73 OGS_FATAL(
"The given shape function order {:d} is not supported",
77 if (shapefunction_order == 1)
80 using EnabledElementTraits =
81 decltype(BaseLib::TMP::filter<EnabledElementTraitsLagrange>(
82 std::declval<HasSuitableDimension>()));
84 BaseLib::TMP::foreach<EnabledElementTraits>(
85 [
this]<
typename ET>(ET*)
87 using MeshElement =
typename ET::Element;
90 using LowerOrderShapeFunction =
91 typename ET::LowerOrderShapeFunction;
96 else if (shapefunction_order == 2)
99 using EnabledElementTraits =
100 decltype(BaseLib::TMP::filter<EnabledElementTraitsLagrange>(
101 std::declval<Is2ndOrderElementOfSuitableDimension>()));
103 BaseLib::TMP::foreach<EnabledElementTraits>(
104 [
this]<
typename ET>(ET*)
106 using MeshElement =
typename ET::Element;
107 using ShapeFunction2ndOrder =
typename ET::ShapeFunction;
LocalAssemblerFactory(NumLib::LocalToGlobalIndexMap const &dof_table, const unsigned shapefunction_order)
TemplateElement< PointRule1 > Point
constexpr bool operator()(ElementTraits *) const
constexpr bool operator()(ElementTraits *) const
std::unordered_map< std::type_index, LocAsmBuilder > _builders
Mapping of element types to local assembler builders.