26 x = std::max(x, *
min);
30 x = std::min(x, *
max);
41 if (
auto* var_ptr = std::get_if<Variable>(&
type))
43 return std::get<double>(variable_array[*var_ptr]);
46 if (
auto* str_ptr = std::get_if<std::string>(&
type))
60 OGS_FATAL(
"Unknown independent variable {:s} for a linear property.",
65 "Could not convert independent_variable neither to a Variable nor "
71 std::vector<IndependentVariable>
const& vs)
75 value_ = property_reference_value;
80 double const t,
double const )
const
82 auto calculate_linearized_ratio =
83 [&variable_array, pos, t](
double const initial_linearized_ratio,
86 double const x = iv.valueClamped(variable_array, pos, t);
88 return initial_linearized_ratio +
89 std::get<double>(iv.slope) *
90 (x - std::get<double>(iv.reference_condition));
93 double const linearized_ratio_to_reference_value =
97 calculate_linearized_ratio);
99 return std::get<double>(
value_) * linearized_ratio_to_reference_value;
105 double const t,
double const )
const
107 auto const independent_variable = std::find_if(
110 [&variable](
auto const& iv) ->
bool
112 if (auto const* var_ptr = std::get_if<Variable>(&iv.type))
114 return *var_ptr == variable;
119 auto const zero =
decltype(value_){};
120 if (independent_variable == independent_variables_.end())
125 auto const& iv = *independent_variable;
127 double const x = iv.valueUnclamped(variable_array, pos, t);
129 if (iv.min && x < *iv.min)
133 if (iv.max && x > *iv.max)
138 return std::get<double>(value_) * std::get<double>(iv.slope);
144 double const ,
double const )
const
146 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