25 template <
int DisplacementDim>
28 double const b1,
double const b2,
double const b3,
29 double const minimum_permeability,
double const maximum_permeability,
35 minimum_permeability_(minimum_permeability),
36 maximum_permeability_(maximum_permeability),
37 local_coordinate_system_(local_coordinate_system)
42 template <
int DisplacementDim>
45 if (!std::holds_alternative<Medium*>(scale_))
48 "The property 'StrainDependentPermeability' is "
49 "implemented on the 'medium' scale only.");
53 template <
int DisplacementDim>
59 double const e_vol = std::get<double>(
61 double const e_vol_pls = std::get<double>(
64 auto k_data = k0_(t, pos);
66 double const ten_base_exponent = e_vol > 0.0 ? b3_ * e_vol : b2_ * e_vol;
68 std::pow(10.0, ten_base_exponent) * std::exp(b1_ * e_vol_pls);
70 for (
auto& k_i : k_data)
72 k_i = std::clamp(k_i * factor, minimum_permeability_,
73 maximum_permeability_);
78 if (local_coordinate_system_ && (k_data.size() == DisplacementDim))
80 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const e =
81 local_coordinate_system_->transformation<DisplacementDim>(pos);
82 Eigen::Matrix<double, DisplacementDim, DisplacementDim> k =
83 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
85 for (
int i = 0; i < DisplacementDim; ++i)
87 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const
88 ei_otimes_ei = e.col(i) * e.col(i).transpose();
90 k += k_data[i] * ei_otimes_ei;
98 template <
int DisplacementDim>
110 "The derivative of the intrinsic permeability of "
111 "StrainDependentPermeabilityis not implemented.");
virtual PropertyDataType value() const
A strain dependent intrinsic permeability model.
void checkScale() const override
StrainDependentPermeability(std::string name, ParameterLib::Parameter< double > const &k0, double const b1, double const b2, double const b3, double const minimum_permeability, double const maximum_permeability, ParameterLib::CoordinateSystem const *const local_coordinate_system)
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
PropertyDataType fromVector(std::vector< double > const &values)
@ equivalent_plastic_strain
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 > > PropertyDataType
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray