19 x = std::max(x, *
min);
23 x = std::min(x, *
max);
34 if (
auto* var_ptr = std::get_if<Variable>(&
type))
36 return std::get<double>(variable_array[*var_ptr]);
39 if (
auto* str_ptr = std::get_if<std::string>(&
type))
61 OGS_FATAL(
"Unknown independent variable {:s} for a linear property.",
66 "Could not convert independent_variable neither to a Variable nor "
72 std::vector<IndependentVariable>
const& vs)
76 value_ = property_reference_value;
81 double const t,
double const )
const
83 auto calculate_linearized_ratio =
84 [&variable_array, pos, t](
double const initial_linearized_ratio,
87 double const x = iv.valueClamped(variable_array, pos, t);
89 return initial_linearized_ratio +
90 std::get<double>(iv.slope) *
91 (x - std::get<double>(iv.reference_condition));
94 double const linearized_ratio_to_reference_value =
98 calculate_linearized_ratio);
100 return std::get<double>(
value_) * linearized_ratio_to_reference_value;
106 double const t,
double const )
const
108 auto const independent_variable = std::find_if(
111 [&variable](
auto const& iv) ->
bool
113 if (auto const* var_ptr = std::get_if<Variable>(&iv.type))
115 return *var_ptr == variable;
120 auto const zero =
decltype(value_){};
121 if (independent_variable == independent_variables_.end())
126 auto const& iv = *independent_variable;
128 double const x = iv.valueUnclamped(variable_array, pos, t);
130 if (iv.min && x < *iv.min)
134 if (iv.max && x > *iv.max)
139 return std::get<double>(value_) * std::get<double>(iv.slope);
145 double const ,
double const )
const
147 return decltype(
value_){};
std::vector< IndependentVariable > const independent_variables_
PropertyDataType d2Value(VariableArray const &variable_array, Variable const pv1, Variable const pv2, ParameterLib::SpatialPosition const &, double const, double const) const override
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &, double const, double const) const override
Linear(std::string name, PropertyDataType const &property_reference_value, std::vector< IndependentVariable > const &vs)
PropertyDataType value_
The single value of a property.
virtual PropertyDataType value() const
std::optional< MathLib::Point3d > const getCoordinates() const
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
double valueClamped(VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t) const
std::optional< double > max
std::optional< double > min
double valueUnclamped(VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t) const