47 {
49 std::size_t const local_matrix_size,
50 IntegrationMethodProvider const& integration_method_provider,
51 ConstructorArgs&&... args)
52 {
53 auto const& integration_method =
54 integration_method_provider
55 .template getIntegrationMethod<MeshElement>(e);
56
57 static_assert(!std::is_abstract_v<LocAsmImpl>,
58 "The given local assembler implementation is an "
59 "abstract class, which cannot be instantiated. Make "
60 "sure to implement all virtual methods!");
61
62 static_assert(std::is_constructible_v<
LocAsmImpl,
64 std::size_t,
65 decltype(integration_method),
66 ConstructorArgs&&...>,
67 "The given local assembler implementation is not "
68 "constructible from the provided arguments.");
69
70 return std::make_unique<LocAsmImpl>(
71 e,
72 local_matrix_size,
73 integration_method,
74 std::forward<ConstructorArgs>(args)...);
75 };
76 }
LocalAssemblerImplementation< ShapeFunction, LowerOrderShapeFunction, GlobalDim > LocAsmImpl