/** * @file local_material_damage_inline_impl.hh * * @author Guillaume Anciaux * @author Marion Estelle Chambart * @author Nicolas Richart * * @date creation: Sun Oct 19 2014 * @date last modification: Mon Sep 11 2017 * * @brief Implementation of the inline functions of the material damage * * * @section LICENSE * * Copyright (©) 2015-2021 EPFL (Ecole Polytechnique Fédérale de Lausanne) * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * * Akantu is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with Akantu. If not, see . * */ /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ inline void LocalMaterialDamage::computeStressOnQuad(MatrixProxy & grad_u, MatrixProxy & sigma, Real & dam) { Real trace = grad_u.trace(); /// \sigma_{ij} = \lambda * (\nabla u)_{kk} * \delta_{ij} + \mu * (\nabla /// u_{ij} + \nabla u_{ji}) auto && epsilon = (grad_u + grad_u.transpose()) / 2.; sigma = Matrix::Identity(spatial_dimension, spatial_dimension) * trace * lambda + mu * epsilon; Real Y = sigma.doubleDot(epsilon) / 2.; Real Fd = Y - Yd - Sd * dam; if (Fd > 0) { dam = (Y - Yd) / Sd; } dam = std::min(dam, 1.); sigma *= 1 - dam; } /* -------------------------------------------------------------------------- */ inline void LocalMaterialDamage::computePotentialEnergyOnQuad( MatrixProxy & grad_u, MatrixProxy & sigma, Real & epot) { epot = sigma.doubleDot(grad_u) / 2.; } /* -------------------------------------------------------------------------- */ inline Real LocalMaterialDamage::getCelerity(const Element & /*element*/) const { return (std::sqrt(E / rho)); }