OGS
LocalAssemblerFactoryForDimGreaterEqualN.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include "EnabledElements.h"
8
9namespace ProcessLib
10{
18template <int MinElementDim,
20 template <typename /* shp fct */, int /* global dim */>
21 class LocalAssemblerImplementation,
22 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
23 int GlobalDim,
24 typename... ConstructorArgs>
26 : public GenericLocalAssemblerFactory<LocalAssemblerInterface,
27 IntegrationMethodProvider,
28 ConstructorArgs...>
29{
31 IntegrationMethodProvider,
32 ConstructorArgs...>;
33
35 {
36 template <typename ElementTraits>
37 constexpr bool operator()(ElementTraits*) const
38 {
39 if constexpr (GlobalDim < ElementTraits::ShapeFunction::DIM)
40 {
41 return false;
42 }
43
44 return ElementTraits::Element::dimension >= MinElementDim;
45 }
46 };
47
48public:
50 NumLib::LocalToGlobalIndexMap const& dof_table,
51 IntegrationMethodProvider const& integration_method_provider)
52 : Base{dof_table, integration_method_provider}
53 {
54 using EnabledElementTraits =
56 std::declval<IsElementEnabled>()));
57
59 [this]<typename ET>(ET*)
60 {
61 using MeshElement = typename ET::Element;
62 using ShapeFunction = typename ET::ShapeFunction;
63 Base::_builders[std::type_index(typeid(MeshElement))] =
67 LocalAssemblerImplementation,
68 IntegrationMethodProvider,
69 GlobalDim,
70 ConstructorArgs...>::template create<MeshElement>();
71 });
72 }
73};
74
76template <typename LocalAssemblerInterface,
77 template <typename /* shp fct */, int /* global dim */>
78 class LocalAssemblerImplementation,
79 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
80 int GlobalDim,
81 typename... ConstructorArgs>
84 LocalAssemblerInterface,
85 LocalAssemblerImplementation,
86 IntegrationMethodProvider,
87 GlobalDim,
88 ConstructorArgs...>;
89
91template <typename LocalAssemblerInterface,
92 template <typename /* shp fct */, int /* global dim */>
93 class LocalAssemblerImplementation,
94 NumLib::IntegrationMethodProvider IntegrationMethodProvider,
95 int GlobalDim,
96 typename... ConstructorArgs>
99 LocalAssemblerInterface,
100 LocalAssemblerImplementation,
101 IntegrationMethodProvider,
102 GlobalDim,
103 ConstructorArgs...>;
104} // namespace ProcessLib
LocalAssemblerFactoryForDimGreaterEqualN(NumLib::LocalToGlobalIndexMap const &dof_table, IntegrationMethodProvider const &integration_method_provider)
GenericLocalAssemblerFactory< LocalAssemblerInterface, IntegrationMethodProvider, ConstructorArgs... > Base
void foreach(Function &&f)
Definition TMP.h:150
decltype(auto) filter(Pred pred)
Definition TMP.h:71
LocalAssemblerFactoryForDimGreaterEqualN< 2, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactorySD
Mechanics processes in OGS are defined in 2D and 3D only.
LocalAssemblerFactoryForDimGreaterEqualN< 1, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactory
By default processes in OGS are defined in 1D, 2D and 3D.
GenericLocalAssemblerFactory(NumLib::LocalToGlobalIndexMap const &dof_table, IntegrationMethodProvider const &integration_method_provider)