OGS
LargeDeformation/CreateLocalAssemblers.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"
11
12namespace ProcessLib
13{
14namespace LargeDeformation
15{
16namespace detail
17{
18template <int GlobalDim,
19 template <typename /* shp fct */, int /* global dim */>
20 class LocalAssemblerImplementation,
23 typename... ExtraCtorArgs>
25 NumLib::LocalToGlobalIndexMap const& dof_table,
26 std::vector<MeshLib::Element*> const& mesh_elements,
27 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
28 ProviderOrOrder const& provider_or_order,
29 ExtraCtorArgs&&... extra_ctor_args)
30{
31 DBUG("Create local assemblers.");
32
33 auto const& integration_method_provider =
34 getIntegrationMethodProvider(provider_or_order);
35
36 using IntMethProv =
37 std::remove_cvref_t<decltype(integration_method_provider)>;
38 using LocAsmFactory = ProcessLib::LocalAssemblerFactorySD<
39 LocalAssemblerInterface, LocalAssemblerImplementation, IntMethProv,
40 GlobalDim, ExtraCtorArgs...>;
41
42 LocAsmFactory factory(dof_table, integration_method_provider);
43 local_assemblers.resize(mesh_elements.size());
44
45 DBUG("Calling local assembler builder for all mesh elements.");
47 factory, mesh_elements, local_assemblers,
48 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
49}
50
51} // namespace detail
52
64template <int GlobalDim,
65 template <typename /* shp fct */, int /* global dim */>
66 class LocalAssemblerImplementation,
69 typename... ExtraCtorArgs>
71 std::vector<MeshLib::Element*> const& mesh_elements,
72 NumLib::LocalToGlobalIndexMap const& dof_table,
73 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
74 ProviderOrOrder const& provider_or_order,
75 ExtraCtorArgs&&... extra_ctor_args)
76{
77 DBUG("Create local assemblers.");
78
80 dof_table, mesh_elements, local_assemblers, provider_or_order,
81 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
82}
83} // namespace LargeDeformation
84
85} // namespace ProcessLib
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
void createLocalAssemblers(NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< MeshLib::Element * > const &mesh_elements, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)
void createLocalAssemblers(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< 2, LocalAssemblerInterface, LocalAssemblerImplementation, IntegrationMethodProvider, GlobalDim, ConstructorArgs... > LocalAssemblerFactorySD
Mechanics processes in OGS are defined in 2D and 3D only.
static void transformDereferenced(F const &f, C const &c, Data &data, Args_ &&... args)