22 std::vector<std::unique_ptr<MeshLib::Mesh>>
const& meshes,
23 std::vector<GeoLib::NamedRaster>
const& named_rasters,
25 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
35 auto const mesh_name =
42 if (type ==
"Constant")
44 INFO(
"ConstantParameter: {:s}", name);
47 if (type ==
"CurveScaled")
49 INFO(
"CurveScaledParameter: {:s}", name);
52 if (type ==
"Function")
54 INFO(
"FunctionParameter: {:s}", name);
59 INFO(
"GroupBasedParameter: {:s}", name);
62 if (type ==
"MeshElement")
64 INFO(
"MeshElementParameter: {:s}", name);
67 if (type ==
"MeshNode")
69 INFO(
"MeshNodeParameter: {:s}", name);
72 if (type ==
"RandomFieldMeshElement")
75 INFO(
"RandomFieldMeshElement: {:s}", name);
80 INFO(
"RasterParameter: {:s}", name);
83 if (type ==
"TimeDependentHeterogeneousParameter")
85 INFO(
"TimeDependentHeterogeneousParameter: {:s}", name);
89 OGS_FATAL(
"Cannot construct a parameter of given type '{:s}'.", type);
96 if (parameter.
mesh() ==
nullptr)
102 if (*parameter.
mesh() == mesh)
107 return "The parameter's domain of definition mesh '" +
108 parameter.
mesh()->
getName() +
"' differs from the used mesh '" +
110 "'. The same mesh (the same name) has to be referenced in the "
111 "project file. Possible reasons are:\n - the parameter used for the "
112 "initial condition is not defined on the bulk mesh,\n - the "
113 "parameter's domain of definition mesh differs from the boundary "
114 "condition or source term domain of definition mesh.";
119 std::vector<std::unique_ptr<ParameterBase>>& parameters,
120 std::string
const& property_name,
121 std::string
const& tag_name,
122 std::string
const& inline_suffix)
128 std::size_t bad_idx = 0;
134 "Empty inline value list in <{:s}> for property '{:s}'. "
135 "Provide at least one numeric value (e.g., \"1.23 4.56\") or "
136 "specify the name of an existing parameter. "
137 "Raw input was: \"{:s}\".",
138 tag_name, property_name, raw);
142 std::vector<std::string> existing_names;
143 existing_names.reserve(parameters.size());
144 std::transform(parameters.begin(), parameters.end(),
145 std::back_inserter(existing_names),
146 [](
auto const& p) { return p->name; });
150 existing_names, property_name +
"_" + inline_suffix);
152 parameters.push_back(std::make_unique<P>(pname, std::move(*values)));
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
T peekConfigParameter(std::string const ¶m) const
T getConfigParameter(std::string const ¶m) const
const std::string getName() const
Get name of the mesh.
std::optional< std::vector< T > > tryParseVector(std::string const &raw, std::size_t *bad_token_idx)
std::string getUniqueName(std::vector< std::string > const &existing_names, std::string const &input_name)
Append '-' and a number such that the name is unique.
Mesh & findMeshByName(std::vector< std::unique_ptr< Mesh > > const &meshes, std::string_view const name)
std::unique_ptr< ParameterBase > createRasterParameter(std::string const &name, BaseLib::ConfigTree const &config, std::vector< GeoLib::NamedRaster > const &named_rasters)
std::unique_ptr< ParameterBase > createTimeDependentHeterogeneousParameter(std::string const &name, BaseLib::ConfigTree const &config)
std::optional< std::string > isDefinedOnSameMesh(ParameterBase const ¶meter, MeshLib::Mesh const &mesh)
std::unique_ptr< ParameterBase > createParameter(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh > > const &meshes, std::vector< GeoLib::NamedRaster > const &named_rasters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< ParameterBase > createGroupBasedParameter(std::string const &name, BaseLib::ConfigTree const &config, MeshLib::Mesh const &mesh)
std::unique_ptr< ParameterBase > createMeshElementParameter(std::string const &name, BaseLib::ConfigTree const &config, MeshLib::Mesh const &mesh)
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const ¶meter_name, std::vector< std::unique_ptr< ParameterBase > > const ¶meters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)
Parameter< double > & getNamedOrCreateInlineParameter(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterBase > > ¶meters, std::string const &property_name, std::string const &tag_name, std::string const &inline_suffix)
std::unique_ptr< ParameterBase > createCurveScaledParameter(std::string const &name, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< ParameterBase > createConstantParameter(std::string const &name, BaseLib::ConfigTree const &config)
std::unique_ptr< ParameterBase > createRandomFieldMeshElementParameter(std::string const &name, BaseLib::ConfigTree const &config, MeshLib::Mesh &mesh)
std::unique_ptr< ParameterBase > createFunctionParameter(std::string const &name, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< ParameterBase > createMeshNodeParameter(std::string const &name, BaseLib::ConfigTree const &config, MeshLib::Mesh const &mesh)
Single, constant value parameter.
MeshLib::Mesh const * mesh() const