23 const unsigned integration_order,
const unsigned shapefunction_order,
24 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
25 [[maybe_unused]] std::vector<std::reference_wrapper<ProcessVariable>>
const&
26 all_process_variables_for_this_process,
39 "Variable id or component id too high. Actual values: ({:d}, "
40 "{:d}), maximum values: ({:d}, {:d}).",
47 .template existsPropertyVector<std::size_t>(
49 (type !=
"EmbeddedAnchor"))
52 "The required bulk node ids map does not exist in the source term "
56 std::vector<MeshLib::Node*>
const& source_term_nodes =
59 "Found {:d} nodes for source term at mesh '{:s}' for the variable {:d} "
61 source_term_nodes.size(), source_term_mesh.
getName(), variable_id,
69 auto dof_table_source_term =
72 std::move(source_term_mesh_subset));
74 config.
config, config.
mesh, std::move(dof_table_source_term),
80 const int number_of_components =
82 std::vector<int> component_ids(number_of_components);
83 std::iota(std::begin(component_ids), std::end(component_ids), 0);
84 auto dof_table_source_term =
86 variable_id, component_ids, std::move(source_term_mesh_subset));
87 const int bulk_mesh_dimension =
91 if (bulk_mesh_dimension != number_of_components)
94 "For the Anchor source term type,"
95 "the bulk mesh dimension needs to be the same "
96 "as the number of process variable components.");
98 switch (bulk_mesh_dimension)
103 std::move(dof_table_source_term), source_term_mesh.
getID(),
104 variable_id, parameters);
108 std::move(dof_table_source_term), source_term_mesh.
getID(),
109 variable_id, parameters);
112 "Anchor can not be instantiated "
113 "for mesh dimensions other than two or three. "
114 "{}-dimensional mesh was given.",
115 bulk_mesh_dimension);
118 if (type ==
"EmbeddedAnchor")
120 const int number_of_components =
123 const int bulk_mesh_dimension = bulk_mesh.
getDimension();
124 if (bulk_mesh_dimension != number_of_components)
127 "For the EmbeddedAnchor source term type,"
128 "the bulk mesh dimension needs to be the same "
129 "as the number of process variable components.");
131 switch (bulk_mesh_dimension)
135 config.
config, config.
mesh, bulk_mesh, dof_table_bulk,
136 source_term_mesh.
getID(), variable_id);
139 config.
config, config.
mesh, bulk_mesh, dof_table_bulk,
140 source_term_mesh.
getID(), variable_id);
143 "Anchor can not be instantiated "
144 "for mesh dimensions other than two or three. "
145 "{}-dimensional mesh was given.",
146 bulk_mesh_dimension);
149 if (type ==
"Line" || type ==
"Volumetric")
151 auto dof_table_source_term =
154 std::move(source_term_mesh_subset));
155 auto const& bulk_mesh_dimension =
160 config.
config, bulk_mesh_dimension, config.
mesh,
161 std::move(dof_table_source_term), parameters, integration_order,
162 shapefunction_order);
164 if (type ==
"Python")
166 auto dof_table_source_term =
168 std::move(source_term_mesh_subset));
171 config.
config, config.
mesh, std::move(dof_table_source_term),
174 all_process_variables_for_this_process);
177 OGS_FATAL(
"Unknown source term type: `{:s}'.", type);
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
T peekConfigParameter(std::string const ¶m) const
A subset of nodes on a single mesh.
Mesh const & getMesh() const
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
unsigned getDimension() const
Returns the dimension of the mesh (determined by the maximum dimension over all elements).
std::size_t getID() const
Get id of the mesh.
Properties & getProperties()
const std::string getName() const
Get name of the mesh.
int getNumberOfVariables() const
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)
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)
template std::unique_ptr< SourceTerm > createAnchorTerm< 3 >(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, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
template std::unique_ptr< SourceTermBase > createEmbeddedAnchor< 2 >(BaseLib::ConfigTree const &config, MeshLib::Mesh const &st_mesh, MeshLib::Mesh const &bulk_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, std::size_t const source_term_mesh_id, const int variable_id)
template std::unique_ptr< SourceTerm > createAnchorTerm< 2 >(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, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const ¶meters)
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 ¶meters)
template std::unique_ptr< SourceTermBase > createEmbeddedAnchor< 3 >(BaseLib::ConfigTree const &config, MeshLib::Mesh const &st_mesh, MeshLib::Mesh const &bulk_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, std::size_t const source_term_mesh_id, const int variable_id)
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 ¶meters, unsigned const integration_order, unsigned const shapefunction_order)
std::unique_ptr< SourceTermBase > 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 ¶meters, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process, const MeshLib::Mesh &bulk_mesh)
BaseLib::ConfigTree config
MeshLib::Mesh const & mesh