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))
53 OGS_FATAL(
"Unknown independent variable {:s} for a linear property.",
58 "Could not convert independent_variable neither to a Variable nor "
64 std::vector<IndependentVariable>
const& vs)
68 value_ = property_reference_value;
73 double const t,
double const )
const
75 auto calculate_linearized_ratio =
76 [&variable_array, pos, t](
double const initial_linearized_ratio,
79 double const x = iv.valueClamped(variable_array, pos, t);
81 return initial_linearized_ratio +
82 std::get<double>(iv.slope) *
83 (x - std::get<double>(iv.reference_condition));
86 double const linearized_ratio_to_reference_value =
90 calculate_linearized_ratio);
92 return std::get<double>(
value_) * linearized_ratio_to_reference_value;
98 double const t,
double const )
const
100 auto const independent_variable = std::find_if(
103 [&variable](
auto const& iv) ->
bool
105 if (auto const* var_ptr = std::get_if<Variable>(&iv.type))
107 return *var_ptr == variable;
112 auto const zero =
decltype(value_){};
113 if (independent_variable == independent_variables_.end())
118 auto const& iv = *independent_variable;
120 double const x = iv.valueUnclamped(variable_array, pos, t);
122 if (iv.min && x < *iv.min)
126 if (iv.max && x > *iv.max)
131 return std::get<double>(value_) * std::get<double>(iv.slope);
137 double const ,
double const )
const
139 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