OGS
HeatTransportBHE/LocalAssemblers/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"
9
13
14namespace ProcessLib
15{
16namespace HeatTransportBHE
17{
18namespace detail
19{
20template <template <typename /* shp fct */>
21 class LocalAssemblerSoilImplementation,
22 template <typename /* shp fct */, typename /* bhe type */>
23 class LocalAssemblerBHEImplementation,
24 typename LocalAssemblerInterface, typename... ExtraCtorArgs>
26 NumLib::LocalToGlobalIndexMap const& dof_table,
27 std::vector<MeshLib::Element*> const& mesh_elements,
28 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
29 NumLib::IntegrationOrder const integration_order,
30 std::unordered_map<std::size_t, BHE::BHETypes*> const& element_to_bhe_map,
31 ExtraCtorArgs&&... extra_ctor_args)
32{
33 // Shape matrices initializer
36 LocalAssemblerSoilImplementation,
37 LocalAssemblerBHEImplementation, ExtraCtorArgs...>;
38
39 DBUG("Create local assemblers for the HeatTransportBHE process.");
40 // Populate the vector of local assemblers.
41 local_assemblers.resize(mesh_elements.size());
42
43 LocalDataInitializer initializer(dof_table, integration_order);
44
45 DBUG("Calling local assembler builder for all mesh elements.");
47 initializer, mesh_elements, local_assemblers, element_to_bhe_map,
48 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
49}
50} // namespace detail
51
63template <template <typename /* shp fct */>
64 class LocalAssemblerSoilImplementation,
65 template <typename /* shp fct */, typename /* bhe type */>
66 class LocalAssemblerBHEImplementation,
67 typename LocalAssemblerInterface, typename... ExtraCtorArgs>
69 std::vector<MeshLib::Element*> const& mesh_elements,
70 NumLib::LocalToGlobalIndexMap const& dof_table,
71 std::vector<std::unique_ptr<LocalAssemblerInterface>>& local_assemblers,
72 NumLib::IntegrationOrder const integration_order,
73 ExtraCtorArgs&&... extra_ctor_args)
74{
75 DBUG("Create local assemblers for the HeatTransportBHE process.");
76
77 detail::createLocalAssemblers<LocalAssemblerSoilImplementation,
78 LocalAssemblerBHEImplementation>(
79 dof_table, mesh_elements, local_assemblers, integration_order,
80 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
81}
82} // namespace HeatTransportBHE
83} // 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, 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, NumLib::IntegrationOrder const integration_order, ExtraCtorArgs &&... extra_ctor_args)
static void transformDereferenced(F const &f, C const &c, Data &data, Args_ &&... args)