29 std::vector<std::unique_ptr<MeshLib::Mesh>>
const& meshes,
30 std::vector<GeoLib::NamedRaster>
const& named_rasters,
32 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
42 auto const mesh_name =
49 if (type ==
"Constant")
51 INFO(
"ConstantParameter: {:s}", name);
54 if (type ==
"CurveScaled")
56 INFO(
"CurveScaledParameter: {:s}", name);
59 if (type ==
"Function")
61 INFO(
"FunctionParameter: {:s}", name);
66 INFO(
"GroupBasedParameter: {:s}", name);
69 if (type ==
"MeshElement")
71 INFO(
"MeshElementParameter: {:s}", name);
74 if (type ==
"MeshNode")
76 INFO(
"MeshNodeParameter: {:s}", name);
79 if (type ==
"RandomFieldMeshElement")
82 INFO(
"RandomFieldMeshElement: {:s}", name);
87 INFO(
"RasterParameter: {:s}", name);
90 if (type ==
"TimeDependentHeterogeneousParameter")
92 INFO(
"TimeDependentHeterogeneousParameter: {:s}", name);
96 OGS_FATAL(
"Cannot construct a parameter of given type '{:s}'.", type);
103 if (parameter.
mesh() ==
nullptr)
109 if (*parameter.
mesh() == mesh)
114 return "The parameter's domain of definition mesh '" +
115 parameter.
mesh()->
getName() +
"' differs from the used mesh '" +
117 "'. The same mesh (the same name) has to be referenced in the "
118 "project file. Possible reasons are:\n - the parameter used for the "
119 "initial condition is not defined on the bulk mesh,\n - the "
120 "parameter's domain of definition mesh differs from the boundary "
121 "condition or source term domain of definition mesh.";
126 std::vector<std::unique_ptr<ParameterBase>>& parameters,
127 std::string
const& property_name,
128 std::string
const& tag_name,
129 std::string
const& inline_suffix)
134 std::size_t bad_idx = 0;
140 "Empty inline value list in <{:s}> for property '{:s}'. "
141 "Provide at least one numeric value (e.g., \"1.23 4.56\") or "
142 "specify the name of an existing parameter. "
143 "Raw input was: \"{:s}\".",
144 tag_name, property_name, raw);
148 std::vector<std::string> existing_names;
149 existing_names.reserve(parameters.size());
150 std::transform(parameters.begin(), parameters.end(),
151 std::back_inserter(existing_names),
152 [](
auto const& p) { return p->name; });
156 existing_names, property_name +
"_" + inline_suffix);
158 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