OGS
LIE/HydroMechanics/LocalAssembler/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 LIE
15{
16namespace HydroMechanics
17{
18namespace detail
19{
20template <int DisplacementDim,
21 template <typename, typename, int>
22 class LocalAssemblerMatrixImplementation,
23 template <typename, typename, int>
24 class LocalAssemblerMatrixNearFractureImplementation,
25 template <typename, typename, int>
26 class LocalAssemblerFractureImplementation,
27 typename LocalAssemblerInterface, typename... ExtraCtorArgs>
29 NumLib::LocalToGlobalIndexMap const& dof_table,
30 std::vector<MeshLib::Element*> const& mesh_elements,
31 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
32 NumLib::IntegrationOrder const integration_order,
33 ExtraCtorArgs&&... extra_ctor_args)
34{
35 // Shape matrices initializer
38 LocalAssemblerMatrixImplementation,
39 LocalAssemblerMatrixNearFractureImplementation,
40 LocalAssemblerFractureImplementation,
41 DisplacementDim, ExtraCtorArgs...>;
42
43 DBUG("Create local assemblers.");
44 // Populate the vector of local assemblers.
45 local_assemblers.resize(mesh_elements.size());
46
47 LocalDataInitializer initializer(dof_table, integration_order);
48
49 DBUG("Calling local assembler builder for all mesh elements.");
51 initializer, mesh_elements, local_assemblers,
52 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
53}
54
55} // namespace detail
56
68template <int DisplacementDim,
69 template <typename, typename, int>
70 class LocalAssemblerMatrixImplementation,
71 template <typename, typename, int>
72 class LocalAssemblerMatrixNearFractureImplementation,
73 template <typename, typename, int>
74 class LocalAssemblerFractureImplementation,
75 typename LocalAssemblerInterface, typename... ExtraCtorArgs>
77 std::vector<MeshLib::Element*> const& mesh_elements,
78 NumLib::LocalToGlobalIndexMap const& dof_table,
79 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
80 NumLib::IntegrationOrder const integration_order,
81 ExtraCtorArgs&&... extra_ctor_args)
82{
83 DBUG("Create local assemblers.");
84
86 DisplacementDim, LocalAssemblerMatrixImplementation,
87 LocalAssemblerMatrixNearFractureImplementation,
88 LocalAssemblerFractureImplementation>(
89 dof_table, mesh_elements, local_assemblers, integration_order,
90 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
91}
92
93} // namespace HydroMechanics
94} // namespace LIE
95} // 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, NumLib::IntegrationOrder const integration_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, NumLib::IntegrationOrder const integration_order, ExtraCtorArgs &&... extra_ctor_args)
static void transformDereferenced(F const &f, C const &c, Data &data, Args_ &&... args)