18template <
typename ShapeFunction,
19 typename LowerOrderShapeFunction,
20 typename LocalAssemblerInterface,
24 class LocalAssemblerImplementation,
25 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
27 typename... ConstructorArgs>
31 IntegrationMethodProvider,
36 using LocAsmImpl = LocalAssemblerImplementation<ShapeFunction,
37 LowerOrderShapeFunction,
45 template <
typename MeshElement>
49 std::size_t
const local_matrix_size,
50 IntegrationMethodProvider
const& integration_method_provider,
51 ConstructorArgs&&... args)
53 auto const& integration_method =
54 integration_method_provider
55 .template getIntegrationMethod<MeshElement>(e);
57 static_assert(std::is_constructible_v<
LocAsmImpl,
60 decltype(integration_method),
61 ConstructorArgs&&...>,
62 "The given local assembler implementation is not "
63 "constructible from the provided arguments.");
65 return std::make_unique<LocAsmImpl>(
69 std::forward<ConstructorArgs>(args)...);
85template <
int MinShapeFctOrder,
87 typename LocalAssemblerInterface,
91 class LocalAssemblerImplementation,
92 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
94 typename... ConstructorArgs>
97 IntegrationMethodProvider,
102 IntegrationMethodProvider,
105 template <
typename ShapeFunction,
typename LowerOrderShapeFunction>
108 LowerOrderShapeFunction,
110 LocalAssemblerImplementation,
111 IntegrationMethodProvider,
117 template <
typename ElementTraits>
120 if constexpr (GlobalDim < ElementTraits::ShapeFunction::DIM)
125 if constexpr (ElementTraits::Element::dimension < MinElementDim)
130 return ElementTraits::ShapeFunction::ORDER >= MinShapeFctOrder;
137 IntegrationMethodProvider
const& integration_method_provider)
138 :
Base{dof_table, integration_method_provider}
140 using EnabledElementTraits =
141 decltype(BaseLib::TMP::filter<EnabledElementTraitsLagrange>(
142 std::declval<IsElementEnabled>()));
144 BaseLib::TMP::foreach<EnabledElementTraits>(
145 [
this]<
typename ET>(ET*)
147 using MeshElement =
typename ET::Element;
148 using ShapeFunction =
typename ET::ShapeFunction;
149 using LowerOrderShapeFunction =
150 typename ET::LowerOrderShapeFunction;
152 Base::_builders[std::type_index(
typeid(MeshElement))] =
154 LowerOrderShapeFunction>::
155 template create<MeshElement>();
161template <
typename LocalAssemblerInterface,
165 class LocalAssemblerImplementation,
166 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
168 typename... ConstructorArgs>
172 LocalAssemblerInterface,
173 LocalAssemblerImplementation,
174 IntegrationMethodProvider,
179template <typename LocalAssemblerInterface,
183 class LocalAssemblerImplementation,
184 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
186 typename... ConstructorArgs>
190 LocalAssemblerInterface,
191 LocalAssemblerImplementation,
192 IntegrationMethodProvider,
static LocAsmBuilder create()
LocalAssemblerImplementation< ShapeFunction, LowerOrderShapeFunction, GlobalDim > LocAsmImpl
typename GLAF::LocAsmIntfPtr LocAsmIntfPtr
typename GLAF::LocAsmBuilder LocAsmBuilder
LocalAssemblerBuilderFactoryTaylorHood()=delete
LocalAssemblerFactoryTaylorHood(NumLib::LocalToGlobalIndexMap const &dof_table, IntegrationMethodProvider const &integration_method_provider)
std::function< LocAsmIntfPtr(MeshLib::Element const &e, std::size_t const local_matrix_size, IntegrationMethodProvider const &integration_method_provider, ConstructorArgs &&...)> LocAsmBuilder
std::unique_ptr< LocalAssemblerInterface > LocAsmIntfPtr
constexpr bool operator()(ElementTraits *) const