79 auto const& stress_vector =
80 std::get<SymmetricTensor<DisplacementDim>>(variable_array.
total_stress);
82 auto const& stress_tensor =
85 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<double, 3, 3>>
86 eigenvalue_solver(stress_tensor);
89 auto const sigma = eigenvalue_solver.eigenvalues();
91 auto k_data = k0_(t, pos);
93 double const max_sigma = std::max(std::fabs(sigma[0]), std::fabs(sigma[2]));
95 if (max_sigma < std::numeric_limits<double>::epsilon())
100 double const sigma_m = 0.5 * (sigma[2] + sigma[0]);
102 double const tau_m = 0.5 * std::fabs(sigma[2] - sigma[0]);
104 if (sigma_m > t_sigma_max_)
107 f = sigma_m / t_sigma_max_;
109 double const tau_tt =
110 c_ * std::cos(phi_) - t_sigma_max_ * std::sin(phi_);
112 f = std::max(f, tau_m / tau_tt);
117 f = tau_m / (c_ * std::cos(phi_) - sigma_m * std::sin(phi_));
122 const double exp_value = std::exp(b_ * f);
123 std::transform(begin(k_data), end(k_data), begin(k_data),
124 [&](
double const k_i)
125 {
return std::min(k_i + kr_ * exp_value, k_max_); });
130 if (local_coordinate_system_ && (k_data.size() == DisplacementDim))
132 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const e =
133 local_coordinate_system_->transformation<DisplacementDim>(pos);
134 Eigen::Matrix<double, DisplacementDim, DisplacementDim> k =
135 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
137 for (
int i = 0; i < DisplacementDim; ++i)
139 Eigen::Matrix<double, DisplacementDim, DisplacementDim>
const
140 ei_otimes_ei = e.col(i) * e.col(i).transpose();
142 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