13#include <spdlog/spdlog.h>
15#include <Eigen/Eigenvalues>
21namespace SmallDeformationNonlocal
28 double const damage = (1 - beta_d) * (1 - std::exp(-kappa_d / alpha_d));
30 if (damage < 0. || damage >= 1.)
32 OGS_FATAL(
"Damage value {:g} outside of [0,1) interval.", damage);
38template <
int DisplacementDim,
typename KelvinVectorType>
40 double const eps_p_eff_diff,
41 KelvinVectorType
const& sigma,
42 double const kappa_d_prev,
52 Eigen::EigenSolver<
decltype(sigma_tensor)> eigen_solver(sigma_tensor);
53 auto const principal_stress = real(eigen_solver.eigenvalues().array());
54 double const prod_stress = std::sqrt(principal_stress.square().sum());
58 double const tensile_strength =
59 std::sqrt(3.0) * mp.
kappa / (1 + std::sqrt(3.0) * mp.
beta);
60 double const r_s = prod_stress / tensile_strength - 1.;
63 double const x_s = [](
double const h_d,
double const r_s)
71 return 1. + h_d * r_s * r_s;
73 return 1. - 3 * h_d + 4 * h_d * std::sqrt(r_s);
76 return kappa_d_prev + eps_p_eff_diff / x_s;
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)