33 double const aperture0,
34 Eigen::Ref<Eigen::VectorXd const>
36 Eigen::Ref<Eigen::VectorXd const>
38 Eigen::Ref<Eigen::VectorXd const>
40 Eigen::Ref<Eigen::VectorXd const>
42 Eigen::Ref<Eigen::VectorXd>
44 Eigen::Ref<Eigen::MatrixXd>
47 material_state_variables)
50 &material_state_variables) !=
nullptr);
63 const int index_ns = DisplacementDim - 1;
64 double const w_n = w[index_ns];
65 for (
int i = 0; i < index_ns; i++)
70 sigma.noalias() = C * w;
72 double const aperture = w_n + aperture0;
74 sigma.coeffRef(index_ns) =
77 C(index_ns, index_ns) =
81 sigma.noalias() += sigma0;
84 if (sigma[index_ns] < 0)
93 const double w_n_effective = w_n + sigma0[index_ns] / mp.Kn;
94 double degradation = 0.0;
97 state.damage_prev = 1.0;
103 computeDamage(state.damage_prev, w_n_effective, mp.w_np, mp.w_nf);
104 degradation = ((1 - state.damage) * mp.w_np) /
105 (mp.w_np + state.damage * (mp.w_nf - mp.w_np));
111 Eigen::VectorXd w_eff = w;
113 w_eff[index_ns] = w_n_effective;
116 if (state.damage > state.damage_prev)
120 Eigen::Matrix<double, DisplacementDim, 1> dd_dw =
121 Eigen::Matrix<double, DisplacementDim, 1>::Zero();
123 double const tmp = mp.w_np + state.damage * (mp.w_nf - mp.w_np);
125 (mp.w_np * mp.w_nf) / ((mp.w_nf - mp.w_np) * (tmp * tmp));
127 C -= C * w_eff * (dd_dw).transpose();