25 std::variant<double, Eigen::Matrix<double, 2, 1>,
26 Eigen::Matrix<double, 3, 1>, Eigen::Matrix<double, 2, 2>,
27 Eigen::Matrix<double, 3, 3>, Eigen::Matrix<double, 4, 1>,
28 Eigen::Matrix<double, 6, 1>, Eigen::MatrixXd>;
76 double const t,
double const dt)
const;
82 double const t,
double const dt)
const;
90 double const t,
double const dt)
const;
97 double const t,
double const dt)
const;
104 double const t,
double const dt)
const;
109 std::vector<std::unique_ptr<Phase>>
const& phases);
111 void setScale(std::variant<Medium*, Phase*, Component*> scale)
117 template <
typename T>
119 double const t)
const
125 catch (std::bad_variant_access
const&)
128 "The initial value of {:s} does not hold requested type '{:s}' "
136 template <
typename T>
144 return std::get<T>(
value());
146 catch (std::bad_variant_access
const&)
149 "The value of {:s} does not hold requested type '{:s}' but a "
157 template <
typename T>
161 double const dt)
const
169 value(variable_array, variable_array_prev, pos, t, dt));
171 catch (std::bad_variant_access
const&)
174 "The value of {:s} is not of the requested type '{:s}' but a "
179 variable_array_prev, pos, t, dt)
183 template <
typename T>
186 double const dt)
const
193 return std::get<T>(
value(variable_array, pos, t, dt));
195 catch (std::bad_variant_access
const&)
198 "The value of {:s} is not of the requested type '{:s}' but a "
207 template <
typename T>
211 double const dt)
const
218 return std::get<T>(
dValue(variable_array, variable_array_prev,
219 variable, pos, t, dt));
221 catch (std::bad_variant_access
const&)
224 "The first derivative value of {:s} is not of the requested "
225 "type '{:s}' but a {:s}.",
229 [
dValue(variable_array, variable, pos, t, dt).index()]);
232 template <
typename T>
235 double const dt)
const
242 return std::get<T>(
dValue(variable_array, variable, pos, t, dt));
244 catch (std::bad_variant_access
const&)
247 "The first derivative value of {:s} is not of the requested "
248 "type '{:s}' but a {:s}.",
252 [
dValue(variable_array, variable, pos, t, dt).index()]);
255 template <
typename T>
259 double const dt)
const
267 d2Value(variable_array, variable1, variable2, pos, t, dt));
269 catch (std::bad_variant_access
const&)
272 "The second derivative value of {:s} is not of the requested "
273 "type '{:s}' but a {:s}.",
277 variable2, pos, t, dt)
290 std::variant<Medium*, Phase*, Component*>
scale_;
306 "scalar",
"2-vector",
"3-vector",
307 "2x2-matrix",
"3x3-matrix",
"2D-Kelvin vector",
308 "3D-Kelvin vector",
"dynamic matrix type"};
310 std::variant_size_v<PropertyDataType>,
311 "The array of property data type names has different size "
312 "than the PropertyDataType variant type.");
318 std::variant<Medium*, Phase*, Component*>
321 for (std::size_t i = 0; i < properties.size(); ++i)
323 if (new_properties[i] !=
nullptr)
325 properties[i] = std::move(new_properties[i]);
326 properties[i]->setScale(scale_pointer);
333 std::vector<std::unique_ptr<Phase>>
const& phases)
335 for (
auto& p : properties)
339 p->setProperties(phases);
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
This class defines components (substances).
virtual void checkScale() const
virtual void setProperties(std::vector< std::unique_ptr< Phase > > const &phases)
Default implementation:
virtual PropertyDataType d2Value(VariableArray const &variable_array, Variable const variable1, Variable const variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
Default implementation: 2nd derivative of any constant property is zero.
std::string description() const
static constexpr std::array property_data_type_names_
Corresponds to the PropertyDataType.
T dValue(VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
T value(VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
T d2Value(VariableArray const &variable_array, Variable const &variable1, Variable const &variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
PropertyDataType value_
The single value of a property.
T dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
T initialValue(ParameterLib::SpatialPosition const &pos, double const t) const
virtual PropertyDataType value() const
void setScale(std::variant< Medium *, Phase *, Component * > scale)
T value(VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
std::variant< Medium *, Phase *, Component * > scale_
virtual PropertyDataType initialValue(ParameterLib::SpatialPosition const &pos, double const t) const
virtual PropertyDataType dValue(VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
std::string typeToString()
void overwriteExistingProperties(PropertyArray &properties, PropertyArray &new_properties, std::variant< Medium *, Phase *, Component * > scale_pointer)
PropertyDataType fromVector(std::vector< double > const &values)
std::array< std::unique_ptr< Property >, PropertyType::number_of_properties > PropertyArray
void updatePropertiesForAllPhases(PropertyArray &properties, std::vector< std::unique_ptr< Phase > > const &phases)
std::variant< double, Eigen::Matrix< double, 2, 1 >, Eigen::Matrix< double, 3, 1 >, Eigen::Matrix< double, 2, 2 >, Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 >, Eigen::MatrixXd > PropertyDataType