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 
16 #include "LocalDataInitializer.h"
19 
20 namespace ProcessLib
21 {
22 namespace HeatTransportBHE
23 {
24 namespace detail
25 {
26 template <template <typename, typename> class LocalAssemblerSoilImplementation,
27  template <typename, typename, typename>
28  class LocalAssemblerBHEImplementation,
29  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
31  NumLib::LocalToGlobalIndexMap const& dof_table,
32  std::vector<MeshLib::Element*> const& mesh_elements,
33  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
34  std::unordered_map<std::size_t, BHE::BHETypes*> const& element_to_bhe_map,
35  ExtraCtorArgs&&... extra_ctor_args)
36 {
37  // Shape matrices initializer
38  using LocalDataInitializer =
40  LocalAssemblerSoilImplementation,
41  LocalAssemblerBHEImplementation, ExtraCtorArgs...>;
42 
43  DBUG("Create local assemblers for the HeatTransportBHE process.");
44  // Populate the vector of local assemblers.
45  local_assemblers.resize(mesh_elements.size());
46 
47  LocalDataInitializer initializer(dof_table);
48 
49  DBUG("Calling local assembler builder for all mesh elements.");
51  initializer, mesh_elements, local_assemblers, element_to_bhe_map,
52  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
53 }
54 } // namespace detail
55 
67 template <template <typename, typename> class LocalAssemblerSoilImplementation,
68  template <typename, typename, typename>
69  class LocalAssemblerBHEImplementation,
70  typename LocalAssemblerInterface, typename... ExtraCtorArgs>
72  std::vector<MeshLib::Element*> const& mesh_elements,
73  NumLib::LocalToGlobalIndexMap const& dof_table,
74  std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
75  ExtraCtorArgs&&... extra_ctor_args)
76 {
77  DBUG("Create local assemblers for the HeatTransportBHE process.");
78 
79  detail::createLocalAssemblers<LocalAssemblerSoilImplementation,
80  LocalAssemblerBHEImplementation>(
81  dof_table, mesh_elements, local_assemblers,
82  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
83 }
84 } // namespace HeatTransportBHE
85 } // 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, std::unordered_map< std::size_t, BHE::BHETypes * > const &element_to_bhe_map, 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)