11template <
typename ShapeFunction,
12 typename LowerOrderShapeFunction,
17 class LocalAssemblerImplementation,
18 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
20 typename... ConstructorArgs>
24 IntegrationMethodProvider,
30 LowerOrderShapeFunction,
38 template <
typename MeshElement>
42 std::size_t
const local_matrix_size,
43 IntegrationMethodProvider
const& integration_method_provider,
44 ConstructorArgs&&... args)
46 auto const& integration_method =
47 integration_method_provider
48 .template getIntegrationMethod<MeshElement>(e);
50 static_assert(!std::is_abstract_v<LocAsmImpl>,
51 "The given local assembler implementation is an "
52 "abstract class, which cannot be instantiated. Make "
53 "sure to implement all virtual methods!");
55 static_assert(std::is_constructible_v<
LocAsmImpl,
58 decltype(integration_method),
59 ConstructorArgs&&...>,
60 "The given local assembler implementation is not "
61 "constructible from the provided arguments.");
63 return std::make_unique<LocAsmImpl>(
67 std::forward<ConstructorArgs>(args)...);
83template <
int MinShapeFctOrder,
85 typename LocalAssemblerInterface,
89 class LocalAssemblerImplementation,
90 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
92 typename... ConstructorArgs>
95 IntegrationMethodProvider,
100 IntegrationMethodProvider,
103 template <
typename ShapeFunction,
typename LowerOrderShapeFunction>
106 LowerOrderShapeFunction,
108 LocalAssemblerImplementation,
109 IntegrationMethodProvider,
115 template <
typename ElementTraits>
118 if constexpr (GlobalDim < ElementTraits::ShapeFunction::DIM)
123 if constexpr (ElementTraits::Element::dimension < MinElementDim)
128 return ElementTraits::ShapeFunction::ORDER >= MinShapeFctOrder;
135 IntegrationMethodProvider
const& integration_method_provider)
136 :
Base{dof_table, integration_method_provider}
138 using EnabledElementTraits =
140 std::declval<IsElementEnabled>()));
143 [
this]<
typename ET>(ET*)
145 using MeshElement =
typename ET::Element;
147 using LowerOrderShapeFunction =
148 typename ET::LowerOrderShapeFunction;
152 LowerOrderShapeFunction>::
153 template create<MeshElement>();
159template <
typename LocalAssemblerInterface,
163 class LocalAssemblerImplementation,
164 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
166 typename... ConstructorArgs>
170 LocalAssemblerInterface,
171 LocalAssemblerImplementation,
172 IntegrationMethodProvider,
177template <typename LocalAssemblerInterface,
181 class LocalAssemblerImplementation,
182 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
184 typename... ConstructorArgs>
188 LocalAssemblerInterface,
189 LocalAssemblerImplementation,
190 IntegrationMethodProvider,
LocalAssemblerImplementation< ShapeFunction, LowerOrderShapeFunction, GlobalDim > LocAsmImpl
GenericLocalAssemblerFactory< LocalAssemblerInterface, IntegrationMethodProvider, ConstructorArgs... > GLAF
static LocAsmBuilder create()
typename GLAF::LocAsmIntfPtr LocAsmIntfPtr
typename GLAF::LocAsmBuilder LocAsmBuilder
LocalAssemblerBuilderFactoryTaylorHood()=delete
LocalAssemblerFactoryTaylorHood(NumLib::LocalToGlobalIndexMap const &dof_table, IntegrationMethodProvider const &integration_method_provider)
LocalAssemblerBuilderFactoryTaylorHood< ShapeFunction, LowerOrderShapeFunction, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocAsmBuilderFactory
ProcessLib::GenericLocalAssemblerFactory< LocalAssemblerInterface, IntegrationMethodProvider, ConstructorArgs... > Base
void foreach(Function &&f)
decltype(auto) filter(Pred pred)
LocalAssemblerFactoryTaylorHood< 2, 2, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactoryStokes
Stokes flow in OGS is defined for higher order elements only.
LocalAssemblerFactoryTaylorHood< 1, 2, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactoryHM
HM processes in OGS are defined for linear and higher order elements.
std::unordered_map< std::type_index, LocAsmBuilder > _builders
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