OGS
CreateLocalAssemblersTaylorHood.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 <vector>
7
8#include "BaseLib/Logging.h"
12
13namespace ProcessLib
14{
15namespace detail
16{
27template <template <typename /* LocalAssemblerInterface */,
28 template <typename /* shp fct */,
29 typename /* lower order shp fct */,
30 int /* global dim */>
31 class /* LocalAssemblerImplementation */,
32 class /* IntegrationMethodProvider */, int /* global dim */,
33 typename... /* ConstructorArgs */>
35 int GlobalDim,
36 template <typename /* shp fct */, typename /* lower order shp fct */,
37 int /* global dim */>
38 class LocalAssemblerImplementation,
39 typename LocalAssemblerInterface,
40 IntegrationMethodProviderOrIntegrationOrder ProviderOrOrder,
41 typename... ExtraCtorArgs>
43 std::vector<MeshLib::Element*> const& mesh_elements,
44 NumLib::LocalToGlobalIndexMap const& dof_table,
45 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
46 ProviderOrOrder const& provider_or_order,
47 ExtraCtorArgs&&... extra_ctor_args)
48{
49 DBUG("Create local assemblers.");
50
51 auto const& integration_method_provider =
52 getIntegrationMethodProvider(provider_or_order);
53
54 using IntegrationMethodProvider =
55 std::remove_cvref_t<decltype(integration_method_provider)>;
56 using LocAsmFac = LocalAssemblerFactory<
57 LocalAssemblerInterface, LocalAssemblerImplementation,
58 IntegrationMethodProvider, GlobalDim, ExtraCtorArgs...>;
59
60 LocAsmFac factory(dof_table, integration_method_provider);
61 local_assemblers.resize(mesh_elements.size());
62
63 DBUG("Calling local assembler builder for all mesh elements.");
65 factory, mesh_elements, local_assemblers,
66 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
67}
68
69} // namespace detail
70
71template <int GlobalDim,
72 template <typename /* shp fct */, typename /* lower order shp fct */,
73 int /* global dim */>
74 class LocalAssemblerImplementation,
75 typename LocalAssemblerInterface,
76 IntegrationMethodProviderOrIntegrationOrder ProviderOrOrder,
77 typename... ExtraCtorArgs>
79 std::vector<MeshLib::Element*> const& mesh_elements,
80 NumLib::LocalToGlobalIndexMap const& dof_table,
81 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
82 ProviderOrOrder const& provider_or_order,
83 ExtraCtorArgs&&... extra_ctor_args)
84{
86 LocalAssemblerImplementation,
88 mesh_elements, dof_table, local_assemblers, provider_or_order,
89 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
90}
91
92template <int GlobalDim,
93 template <typename /* shp fct */, typename /* lower order shp fct */,
94 int /* global dim */>
95 class LocalAssemblerImplementation,
96 typename LocalAssemblerInterface,
97 IntegrationMethodProviderOrIntegrationOrder ProviderOrOrder,
98 typename... ExtraCtorArgs>
100 std::vector<MeshLib::Element*> const& mesh_elements,
101 NumLib::LocalToGlobalIndexMap const& dof_table,
102 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
103 ProviderOrOrder const& provider_or_order,
104 ExtraCtorArgs&&... extra_ctor_args)
105{
107 LocalAssemblerFactoryStokes, GlobalDim, LocalAssemblerImplementation,
109 mesh_elements, dof_table, local_assemblers, provider_or_order,
110 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
111}
112
113} // namespace ProcessLib
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
void createLocalAssemblersTaylorHood(std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)
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.
void createLocalAssemblersStokes(std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)
LocalAssemblerFactoryForDimGreaterEqualN< 1, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactory
By default processes in OGS are defined in 1D, 2D and 3D.
void createLocalAssemblersHM(std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)
static void transformDereferenced(F const &f, C const &c, Data &data, Args_ &&... args)