OGS
CreateAnchorTerm.cpp
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#include "CreateAnchorTerm.h"
5
6#include "AnchorTerm.h"
8#include "BaseLib/Logging.h"
10
11namespace ProcessLib
12{
13template <int GlobalDim>
14std::unique_ptr<SourceTerm> createAnchorTerm(
15 BaseLib::ConfigTree const& config, MeshLib::Mesh const& st_mesh,
16 std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
17 std::size_t const source_term_mesh_id, const int variable_id,
18 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
19{
20 DBUG("Constructing AnchorTerm from config.");
22 config.checkConfigParameter("type", "Anchor");
23
24 auto const param_name =
26 config.getConfigParameter<std::string>("anchor_force_constant");
27 DBUG("Using parameter {:s} as anchor stiffness constant.", param_name);
28
29 auto& param = ParameterLib::findParameter<double>(param_name, parameters, 1,
30 &st_mesh);
31
32 for (MeshLib::Element const* const element : st_mesh.getElements())
33 {
34 if (element->getNumberOfNodes() != 2)
35 {
37 "Every anchor element needs to have precisely two nodes.");
38 }
39 }
40
41 return std::make_unique<AnchorTerm<GlobalDim>>(
42 std::move(dof_table), source_term_mesh_id, st_mesh, variable_id, param);
43}
44
45template std::unique_ptr<SourceTerm> createAnchorTerm<2>(
46 BaseLib::ConfigTree const& config, MeshLib::Mesh const& st_mesh,
47 std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
48 std::size_t const source_term_mesh_id, const int variable_id,
49 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
50 parameters);
51
52template std::unique_ptr<SourceTerm> createAnchorTerm<3>(
53 BaseLib::ConfigTree const& config, MeshLib::Mesh const& st_mesh,
54 std::unique_ptr<NumLib::LocalToGlobalIndexMap> dof_table,
55 std::size_t const source_term_mesh_id, const int variable_id,
56 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
57 parameters);
58} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
T getConfigParameter(std::string const &param) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
std::vector< Element * > const & getElements() const
Get the element-vector for the mesh.
Definition Mesh.h:100
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const &parameter_name, std::vector< std::unique_ptr< ParameterBase > > const &parameters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)
std::unique_ptr< SourceTerm > createAnchorTerm(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 &parameters)
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 &parameters)
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 &parameters)