71 auto const& stress_vector =
72 std::get<SymmetricTensor<DisplacementDim>>(variable_array.
total_stress);
74 auto const& stress_tensor =
77 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<double, 3, 3>>
78 eigenvalue_solver(stress_tensor);
81 auto const sigma = eigenvalue_solver.eigenvalues();
83 auto k_data =
k0_(t, pos);
85 double const max_sigma = std::max(std::fabs(sigma[0]), std::fabs(sigma[2]));
87 if (max_sigma < std::numeric_limits<double>::epsilon())
92 double const sigma_m = 0.5 * (sigma[2] + sigma[0]);
94 double const tau_m = 0.5 * std::fabs(sigma[2] - sigma[0]);
101 double const tau_tt =
104 f = std::max(f, tau_m / tau_tt);
109 f = tau_m / (
c_ * std::cos(
phi_) - sigma_m * std::sin(
phi_));
114 const double exp_value = std::exp(
b_ * f);
115 std::transform(begin(k_data), end(k_data), begin(k_data),
116 [&](
double const k_i)
117 {
return std::min(k_i +
kr_ * exp_value,
k_max_); });
124 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const e =
126 Eigen::Matrix<double, DisplacementDim, DisplacementDim> k =
127 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
129 for (
int i = 0; i < DisplacementDim; ++i)
131 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const
132 ei_otimes_ei = e.col(i) * e.col(i).transpose();
134 k += k_data[i] * ei_otimes_ei;
PermeabilityMohrCoulombFailureIndexModel(std::string name, ParameterLib::Parameter< double > const &k0, double const kr, double const b, double const c, double const phi, double const k_max, double const t_sigma_max, ParameterLib::CoordinateSystem const *const local_coordinate_system)
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