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 #include "LocalDataInitializer.h"
17 
18 namespace ProcessLib
19 {
20 namespace TH2M
21 {
22 namespace detail
23 {
24 template <int GlobalDim,
25  template <typename, typename, typename, int>
26  class LocalAssemblerImplementation,
27  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
29  NumLib::LocalToGlobalIndexMap const& dof_table,
30  const unsigned shapefunction_order,
31  std::vector<MeshLib::Element*> const& mesh_elements,
32  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
33  ExtraCtorArgs&&... extra_ctor_args)
34 {
35  // Shape matrices initializer
36  using LocalDataInitializer =
38  LocalAssemblerImplementation, GlobalDim,
39  ExtraCtorArgs...>;
40 
41  DBUG("Create local assemblers.");
42  // Populate the vector of local assemblers.
43  local_assemblers.resize(mesh_elements.size());
44 
45  LocalDataInitializer initializer(dof_table, shapefunction_order);
46 
47  DBUG("Calling local assembler builder for all mesh elements.");
49  initializer, mesh_elements, local_assemblers,
50  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
51 }
52 
53 } // namespace detail
54 
66 template <int GlobalDim,
67  template <typename, typename, typename, int>
68  class LocalAssemblerImplementation,
69  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
71  const unsigned /*dimension*/,
72  std::vector<MeshLib::Element*> const& mesh_elements,
73  NumLib::LocalToGlobalIndexMap const& dof_table,
74  const unsigned shapefunction_order,
75  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
76  ExtraCtorArgs&&... extra_ctor_args)
77 {
78  DBUG("Create local assemblers.");
79 
80  detail::createLocalAssemblers<GlobalDim, LocalAssemblerImplementation>(
81  dof_table, shapefunction_order, mesh_elements, local_assemblers,
82  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
83 }
84 } // namespace TH2M
85 
86 } // namespace ProcessLib
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27
void createLocalAssemblers(NumLib::LocalToGlobalIndexMap const &dof_table, const unsigned shapefunction_order, std::vector< MeshLib::Element * > const &mesh_elements, std::vector< std::unique_ptr< LocalAssemblerInterface >> &local_assemblers, ExtraCtorArgs &&... extra_ctor_args)
void createLocalAssemblers(const unsigned, std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, const unsigned shapefunction_order, 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)