/** * @file material_damage_linear_inline_impl.cc * * @author Nicolas Richart * @author Marion Estelle Chambart * * * @brief Implementation of the inline functions of the material damage linear * * @section LICENSE * * Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * */ /* -------------------------------------------------------------------------- */ template inline void MaterialDamageLinear::computeStressOnQuad(Matrix & grad_u, Matrix & sigma, Real & dam, Real & K) { Real Fdiag[3]; Real Fdiagp[3]; Math::matrix33_eigenvalues(grad_u.storage(), Fdiag); Fdiagp[0] = std::max(0., Fdiag[0]); Fdiagp[1] = std::max(0., Fdiag[1]); Fdiagp[2] = std::max(0., Fdiag[2]); Real Ehat=sqrt(Fdiagp[0]*Fdiagp[0] + Fdiagp[1]*Fdiagp[1] + Fdiagp[2]*Fdiagp[2]); MaterialElastic::computeStressOnQuad(grad_u, sigma); Real Fd = Ehat-K; if (Fd > 0) { dam = (Ehat - Epsmin) / (Epsmax-Epsmin)*(Ehat/Epsmax); dam = std::min(dam, 1.); K=Ehat; } sigma *= 1-dam; }