OGS
CreateLocalAssemblers.h
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include <vector>
13 
14 #include "BaseLib/Logging.h"
15 
17 
18 #include "LocalDataInitializer.h"
19 
20 namespace ProcessLib
21 {
22 namespace LIE
23 {
24 namespace SmallDeformation
25 {
26 namespace detail
27 {
28 template <int GlobalDim,
29  template <typename, typename, int>
30  class LocalAssemblerMatrixImplementation,
31  template <typename, typename, int>
32  class LocalAssemblerMatrixNearFractureImplementation,
33  template <typename, typename, int>
34  class LocalAssemblerFractureImplementation,
35  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
37  NumLib::LocalToGlobalIndexMap const& dof_table,
38  std::vector<MeshLib::Element*> const& mesh_elements,
39  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
40  ExtraCtorArgs&&... extra_ctor_args)
41 {
42  // Shape matrices initializer
44  LocalAssemblerInterface, LocalAssemblerMatrixImplementation,
45  LocalAssemblerMatrixNearFractureImplementation,
46  LocalAssemblerFractureImplementation, GlobalDim, ExtraCtorArgs...>;
47 
48  DBUG("Create local assemblers.");
49  // Populate the vector of local assemblers.
50  local_assemblers.resize(mesh_elements.size());
51 
52  LocalDataInitializer initializer(dof_table);
53 
54  DBUG("Calling local assembler builder for all mesh elements.");
56  initializer, mesh_elements, local_assemblers,
57  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
58 }
59 
60 } // namespace detail
61 
73 template <int GlobalDim,
74  template <typename, typename, int>
75  class LocalAssemblerMatrixImplementation,
76  template <typename, typename, int>
77  class LocalAssemblerMatrixNearFractureImplementation,
78  template <typename, typename, int>
79  class LocalAssemblerFractureImplementation,
80  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
82  std::vector<MeshLib::Element*> const& mesh_elements,
83  NumLib::LocalToGlobalIndexMap const& dof_table,
84  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
85  ExtraCtorArgs&&... extra_ctor_args)
86 {
87  DBUG("Create local assemblers.");
88 
90  GlobalDim, LocalAssemblerMatrixImplementation,
91  LocalAssemblerMatrixNearFractureImplementation,
92  LocalAssemblerFractureImplementation>(
93  dof_table, mesh_elements, local_assemblers,
94  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
95 }
96 
97 } // namespace SmallDeformation
98 } // namespace LIE
99 } // namespace ProcessLib
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27
void createLocalAssemblers(NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< MeshLib::Element * > const &mesh_elements, std::vector< std::unique_ptr< LocalAssemblerInterface >> &local_assemblers, 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, ExtraCtorArgs &&... extra_ctor_args)
static void transformDereferenced(F const &f, C const &c, Data &data, Args_ &&... args)