Isotropic damage model

In this section, the formulation of an isotropic damage model will be described. To cover the various models based on isotropic damage concept, a base class IsotropicDamageMaterial is defined first, declaring the necessary services and providing the implementation of them, which are general. The derived classes then only implement a particular damage-evolution law.

The isotropic damage models are based on the simplifying assumption that the stiffness degradation is isotropic, i.e., stiffness moduli corresponding to different directions decrease proportionally and independently of direction of loading. Consequently, the damaged stiffness matrix is expressed as

   $ D$$\displaystyle = (1-\omega)$$ D$$\displaystyle _e,
$

where $ D$$ _e$ is elastic stiffness matrix of the undamaged material and $ \omega$ is the damage parameter. Initially, $ \omega$ is set to zero, representing the virgin undamaged material, and the response is linear-elastic. As the material undergoes the deformation, the initiation and propagation of microdefects decreases the stiffness, which is represented by the growth of the damage parameter $ \omega$. For $ \omega = 1$, the stiffness completely disappears.

In the present context, the $ D$ matrix represents the secant stiffness that relates the total strain to the total stress

   $ \sigma$$\displaystyle =$$ D$ $ \varepsilon $$\displaystyle = (1-\omega)$$ D$$\displaystyle _e$ $ \varepsilon $$\displaystyle .
$

Similarly to the theory of plasticity, a loading function $ f$ is introduced. In the damage theory, it is natural to work in the strain space and therefore the loading function is depending on the strain and on an additional parameter $ \kappa$, describing the evolution of the damage. Physically, $ \kappa$ is a scalar measure of the largest strain level ever reached. The loading function usually has the form

$\displaystyle f($ $ \varepsilon $$\displaystyle , \kappa) = \tilde\varepsilon($ $ \varepsilon $$\displaystyle ) - \kappa,
$

where $ \tilde\varepsilon$ is the equivalent strain, i.e., the scalar measure of the strain level. Damage can grow only if current state reaches the boundary of elastic domain ($ f=0$). This is expressed by the following loading/unloading conditions

$\displaystyle f \le 0,\;\;\dot\kappa \ge0,\;\;\dot\kappa f = 0.
$

It remains to link the variable $ \kappa$ to the damage parameter $ \omega$. As both $ \kappa$ and $ \omega$ grow monotonically, it is convenient to postulate an explicit evolution law

$\displaystyle \omega = g(\kappa).
$

The important advantage of this explicit formulation is that the stress corresponding to the given strain can be evaluated directly, without the need to solve the nonlinear system of equations. For the given strain, the corresponding stress is computed simply by evaluating the current equivalent strain, updating the maximum previously reached equivalent strain value $ \kappa$ and the damage parameter and reducing the effective stress according to $ \sigma$$ = (1-\omega)$$ D$$ _e$    $ \varepsilon $.

This general framework for computing stresses and stiffness matrix is common for all material models of this type. Therefore, it is natural to introduce the base class for all isotropic-based damage models which provides the general implementation for the stress and stiffness matrix evaluation algorithms. The particular models then only provide their equivalent strain and damage evolution law definitions. The base class only declares the virtual services for computing equivalent strain and corresponding damage. The implementation of common services uses these virtual functions, but they are only declared at IsotropicDamageMaterial class level and have to be implemented by the derived classes.

Together with the material model, the corresponding status has to be defined, containing all necessary history variables. For the isotropic-based damage models, the only history variable is the value of the largest strain level ever reached ($ \kappa$). In addition, the corresponding damage level $ \omega$ will be stored. This is not necessary because damage can be always computed from corresponding $ \kappa$. The IsotropicDamageMaterialStatus class is derived from StructuralMaterialStatus class. The base class represents the base material status class for all structural statuses. At StructuralMaterialStatus level, the attributes common to all ``structural analysis'' material models - the strain and stress vectors (both the temporary and non-temporary) are introduced. The corresponding services for accessing, setting, initializing, and updating these attributes are provided. Therefore, only the $ \kappa$ and $ \omega$ parameters are introduced (both the temporary and non-temporary). The corresponding services for manipulating these attributes are added and services for context initialization, update, and store/restore operations are overloaded, to handle the history parameters properly.

Borek Patzak 2017-12-30