20template <MeanType MeanType>
22 double const ) =
delete;
24template <MeanType MeanType>
26 double const ) =
delete;
34 return k_dry * (1.0 - S) + k_wet * S;
50 return k_dry + std::sqrt(S) * (k_wet - k_dry);
58 return 0.5 * (k_wet - k_dry) / std::sqrt(S);
65 return k_dry * std::pow(k_wet / k_dry, S);
72 return k_dry * std::pow(k_wet / k_dry, S) * std::log(k_wet / k_dry);
75template <MeanType MeanType,
int GlobalDimension>
87 double const t = std::numeric_limits<double>::quiet_NaN();
92 if (lambda_dry.size() != lambda_wet.size())
95 "In 'SaturationWeightedThermalConductivity' input data, the data "
97 "dry_thermal_conductivity of '{:d}' is different from that of "
98 "dry_thermal_conductivity of '{:d}'.",
99 lambda_dry.size(), lambda_wet.size());
102 for (std::size_t i = 0; i < lambda_dry.size(); i++)
104 if (lambda_dry[i] > lambda_wet[i])
107 "In 'SaturationWeightedThermalConductivity', "
108 "dry_thermal_conductivity of '{:g}' is larger than "
109 "wet_thermal_conductivity of '{:g}'.",
110 lambda_dry[i], lambda_wet[i]);
115 if (lambda_dry.size() != 1 && lambda_dry.size() != GlobalDimension)
118 "The saturation weighted geometric mean"
119 "is not implemented for arbitrary anisotropic thermal "
120 "conductivities and requires to be in diagonal shape.");
125template <MeanType MeanType,
int GlobalDimension>
142 else if (S_L > 0.0 && S_L <= 1.0)
144 for (std::size_t i = 0; i < lambda_data.size(); i++)
154template <MeanType MeanType,
int GlobalDimension>
164 "SaturationWeightedThermalConductivity::dValue is implemented for "
165 "derivatives with respect to liquid saturation only.");
172 std::vector<double> derivative_data(lambda_dry_data.size(), 0.0);
173 if (S_L <= 0.0 || S_L > 1.0)
177 for (std::size_t i = 0; i < lambda_dry_data.size(); i++)
virtual PropertyDataType value() const
Saturation dependent thermal conductivity model for soil.
SaturationWeightedThermalConductivity(std::string name, ParameterLib::Parameter< double > const &dry_thermal_conductivity, ParameterLib::Parameter< double > const &wet_thermal_conductivity)
ParameterLib::Parameter< double > const & wet_thermal_conductivity_
Thermal conductivity of soil at the fully water saturated state.
ParameterLib::Parameter< double > const & dry_thermal_conductivity_
Thermal conductivity of soil at the dry state.
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
double computeAverage< MeanType::GEOMETRIC >(const double S, double const k_dry, double const k_wet)
double computeAverage< MeanType::ARITHMETIC_LINEAR >(const double S, double const k_dry, double const k_wet)
PropertyDataType fromVector(std::vector< double > const &values)
double computeDAverage< MeanType::GEOMETRIC >(const double S, double const k_dry, double const k_wet)
double computeDAverage< MeanType::ARITHMETIC_LINEAR >(const double, double const k_dry, double const k_wet)
double computeDAverage< MeanType::ARITHMETIC_SQUAREROOT >(const double S, double const k_dry, double const k_wet)
double computeDAverage(const double, double const, double const)=delete
double computeAverage< MeanType::ARITHMETIC_SQUAREROOT >(const double S, double const k_dry, double const k_wet)
double computeAverage(const double, double const, double const)=delete
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