OGS
CreateSourceTerm.cpp
Go to the documentation of this file.
1
11#include "CreateSourceTerm.h"
12
16#include "SourceTerm.h"
17#include "SourceTermConfig.h"
18
19namespace ProcessLib
20{
21std::unique_ptr<SourceTerm> createSourceTerm(
22 const SourceTermConfig& config,
23 const NumLib::LocalToGlobalIndexMap& dof_table_bulk,
24 const MeshLib::Mesh& source_term_mesh, const int variable_id,
25 const unsigned integration_order, const unsigned shapefunction_order,
26 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
27 [[maybe_unused]] std::vector<std::reference_wrapper<ProcessVariable>> const&
28 all_process_variables_for_this_process)
29{
31 auto const type = config.config.peekConfigParameter<std::string>("type");
32
33 // check basic data consistency
34 if (variable_id >=
35 static_cast<int>(dof_table_bulk.getNumberOfVariables()) ||
36 config.component_id >=
37 dof_table_bulk.getNumberOfVariableComponents(variable_id))
38 {
40 "Variable id or component id too high. Actual values: ({:d}, "
41 "{:d}), maximum values: ({:d}, {:d}).",
42 variable_id, config.component_id,
43 dof_table_bulk.getNumberOfVariables(),
44 dof_table_bulk.getNumberOfVariableComponents(variable_id));
45 }
46
47 if (!source_term_mesh.getProperties()
48 .template existsPropertyVector<std::size_t>(
50 {
52 "The required bulk node ids map does not exist in the source term "
53 "mesh '{:s}'.",
54 source_term_mesh.getName());
55 }
56 std::vector<MeshLib::Node*> const& source_term_nodes =
57 source_term_mesh.getNodes();
58 DBUG(
59 "Found {:d} nodes for source term at mesh '{:s}' for the variable {:d} "
60 "and component {:d}",
61 source_term_nodes.size(), source_term_mesh.getName(), variable_id,
62 config.component_id);
63
64 MeshLib::MeshSubset source_term_mesh_subset(source_term_mesh,
65 source_term_nodes);
66
67 if (type == "Nodal")
68 {
69 auto dof_table_source_term =
70 dof_table_bulk.deriveBoundaryConstrainedMap(
71 variable_id, {config.component_id},
72 std::move(source_term_mesh_subset));
74 config.config, config.mesh, std::move(dof_table_source_term),
75 source_term_mesh.getID(), variable_id, config.component_id,
76 parameters);
77 }
78
79 if (type == "Line" || type == "Volumetric")
80 {
81 auto dof_table_source_term =
82 dof_table_bulk.deriveBoundaryConstrainedMap(
83 variable_id, {config.component_id},
84 std::move(source_term_mesh_subset));
85 auto const& bulk_mesh_dimension =
86 dof_table_bulk.getMeshSubset(variable_id, config.component_id)
87 .getMesh()
88 .getDimension();
90 config.config, bulk_mesh_dimension, config.mesh,
91 std::move(dof_table_source_term), parameters, integration_order,
92 shapefunction_order);
93 }
94
95 if (type == "Python")
96 {
97 auto dof_table_source_term =
98 dof_table_bulk.deriveBoundaryConstrainedMap(
99 std::move(source_term_mesh_subset));
100
102 config.config, config.mesh, std::move(dof_table_source_term),
103 variable_id, config.component_id, integration_order,
104 shapefunction_order, source_term_mesh.getDimension(),
105 all_process_variables_for_this_process);
106 }
107
108 OGS_FATAL("Unknown source term type: `{:s}'.", type);
109}
110} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:26
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30
T peekConfigParameter(std::string const &param) const
A subset of nodes on a single mesh.
Definition MeshSubset.h:26
Mesh const & getMesh() const
Definition MeshSubset.h:92
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
Definition Mesh.h:106
unsigned getDimension() const
Returns the dimension of the mesh (determined by the maximum dimension over all elements).
Definition Mesh.h:88
std::size_t getID() const
Get id of the mesh.
Definition Mesh.h:121
Properties & getProperties()
Definition Mesh.h:134
const std::string getName() const
Get name of the mesh.
Definition Mesh.h:103
int getNumberOfVariableComponents(int variable_id) const
std::unique_ptr< LocalToGlobalIndexMap > deriveBoundaryConstrainedMap(int const variable_id, std::vector< int > const &component_ids, MeshLib::MeshSubset &&new_mesh_subset) const
MeshLib::MeshSubset const & getMeshSubset(int const variable_id, int const component_id) const
constexpr std::string_view getBulkIDString(MeshItemType mesh_item_type)
Definition Properties.h:188
std::unique_ptr< SourceTerm > createPythonSourceTerm(BaseLib::ConfigTree const &config, MeshLib::Mesh const &source_term_mesh, std::unique_ptr< NumLib::LocalToGlobalIndexMap > dof_table, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, unsigned const global_dim, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process)
std::unique_ptr< SourceTerm > createSourceTerm(const SourceTermConfig &config, const NumLib::LocalToGlobalIndexMap &dof_table_bulk, const MeshLib::Mesh &source_term_mesh, const int variable_id, const unsigned integration_order, const unsigned shapefunction_order, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process)
std::unique_ptr< SourceTerm > createNodalSourceTerm(BaseLib::ConfigTree const &config, MeshLib::Mesh const &st_mesh, std::unique_ptr< NumLib::LocalToGlobalIndexMap > dof_table, std::size_t const source_term_mesh_id, const int variable_id, const int component_id, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< SourceTerm > createVolumetricSourceTerm(BaseLib::ConfigTree const &config, unsigned const bulk_mesh_dimension, MeshLib::Mesh const &source_term_mesh, std::unique_ptr< NumLib::LocalToGlobalIndexMap > source_term_dof_table, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, unsigned const integration_order, unsigned const shapefunction_order)
MeshLib::Mesh const & mesh