[Kratos] ConstitutiveLaw interface

Janosch Stascheit janosch.stascheit en rub.de
Mie Jun 2 18:29:46 CEST 2010

Hi all,

Nelson's proposal looks quite fine in principle. As far as I can judge
from a first glance, the principle is very similar to the one we are
actually using. I have prepared the draft of a nee base class definition
for the constitutive law.

Three comments:
1. I guess that the abbreviations used are referring to a kind of
enumeration? In this case, a complete list of variables and enumerations
would be nice. As far as I remember, we agreed to use Kratos variables
for the most common material parameters (like Density, Young's modulus)
and the MATERIAL_PARAMETERS vector for the specific ones of particular
models, right?

2. A more formalised description of the input format would be handy. In
the file Nelson sent, I am still not quite sure about how to actually
define the material models

3. This one is essential: please stick to English language comments and
names; and please use correct names if referring to particular persons
(like, for example "Mohr-Coulomb" and not "Morh-Colulomb"). This may
sound stupid as it is not important for the compiler. But it improves
usability and comprehensibility a lot. With respect to this issue, maybe
we should think about installing a kind of glossary to make sure we are
talking about the same things (e.g. fluency criterion <-> flow rule).

Attached, you will find my draft base class constitutive_law_new.h, a
respective constitutive model von_mises_3d_new and a respectively
changed kinematic_linear_element as a proof of concept. Some
explanations can be found in the additional text file.

Any comments and suggestions will be appreciated.

Best regards
------------ próxima parte ------------
Draft of new ConstitutiveLaw interface in KRATOS
- by Janosch Stascheit -

1. Introduction

The background for the new specification of a constitutive law interface in KRATOS is the need for unification and generification since the material models and their implementation in KRATOS have drifted apart in recent time. Hence, a newly standardized concept is to be implemented that takes into account both the need for efficient and fast implementations of simple constitutive models on the one hand and the flexibility for complex nonlinear material models on the other hand.

Furthermore, the generation of interfaces to external constitutive models, e.g. designed for existing commercial FEM software, should be as easy as possible. To facilitate this, the ANSYS interface for user-defined material models (USERMAT) has been considered as a reference. The constituve law interface of KRATOS should at least allow for the determination of all necessary input parameters of the USERMAT subroutine.

2. Design specifications

The following design specifications have been agreed on during the KRATOS workshop meeting:
· there should be only ONE public function to compute the material response. This has to be implemented by each constitutive law. As an intermediate, reversely compatible solution, this newly implemented function will be automatically set to call the formerly adopted functions UpdateMaterial() and CalculateStressAndTangentMatrix(), respectively. All elements, however, shall only call the newly implemented material response function
· basic material parameters that are typically used in more than one class of material models (such as DENSITY, YOUNGS_MODULUS or POISSON_RATIO) will be defined as KRATOS variables
· further material parameters that have only a specific meaning in particular constitutive models (such as shape parameters for certain yield surfaces) will not be defined as distinct variables but rather be included in a Kratos::Vector variable named MATERIAL_PARAMETERS
· internal variables of the constitutive laws will be stored in a Kratos::Vector variable named INTERNAL_VARIABLES

3. Individual model parameters for each gauss point

In several applications, it may be necessary to store an individual set of material parameters for each gauss point. For other applications, this may not be desirable, though. Therefore, is is left to the developer of material models to decide whether this shall be possible or not. In practice, this means that material parameters may be stored as member variables of the constitutive law. If they are, the access function SetValue() needs to be defined such that it is possible to provide a set of material parameters to an individual material point. In the case of uniform sets of parameters per Properties object, the material parameters have to be read directly from the Properties object.

Note, that in any case the material model has to read its parameters from member variables or from its properties each time its material response is requested. Storing constitutive matrices or immutable parameters should be avoided by all means.

4. Access to variables

Each constitutive law may define the access functions Has() GetValue() and SetValue() for all Kratos variable types (double, array_1d, Vector, Matrix). Their behaviour, though, depends on the actual implementation of the material model and is not restricted. As an exception, the variables MATERIAL_PARAMETERS and INTERNAL_VARIABLES should be reserved for the previously defined purpose.

The base class will provide default implementations for some variables:
· MATERIAL_PARAMETERS: Has() will return false if not overridden; GetValue() will return a ZeroVector of size 1; SetValue() will throw an error.
· INTERNAL_VARIABLES: Has() will return false; GetValue() will return a ZeroVector of size 1; SetValue() will perform no operation

5. Template parameter vs. variable
This part is open for discussion: the working space dimension of each constitutive law should be clearly defined and throw an error if applied wrongly. The question is: should be define it as a template parameter or as a variable? Second, I would remove the Node<3> template parameter from the constitutive law, since it was decided on removing this from all KRATOS in the future.

6. Example
Attached, an exemplary implementation of the new constitutive law interface can be found. Please comment on this.

7. ANSYS USERMAT interface and where its parameters can be retrieved from

    matId       // material number                                  -> probably not needed
    elemId      // element number                                   -> probably not needed
    kDomIntPt   // kth integration point                            -> probably not needed
    kLayer      // kth layer                                        -> probably not needed
    kSectPt     // kth section point                                -> probably not needed
    ldstep      // load step number                                 -> from process info?
    isubst      // substep number                                   -> from process info?
    keycut      // output: loading bisect control                   -> output
    nDirect     // number of direct components                      -> from dimension parameter
    nShear      // number of shear components                       -> from type of material
    ncomp       // nDirect + nShear                                 -> from type of material
    nStatev     // number of state variables                        -> from type of material
    nProp       // number of material constants                     -> from type of material
    Time        // time at beginning of increment                   -> from process info
    dTime       // time increment                                   -> from process info
    Temp        // temperature at beginning of increment            -> from process info?
    dTemp       // temperature increment                            -> from process info?
    stress      // stress tensor                                    -> standard output
    ustatev     // user state variables                             -> internal variables (INTERNAL_VARIABLES)
    dsdePl      // material tangent                                 -> standard output
    sedEl       // elastic work                                     -> output (maybe as additional variable)
    sedPl       // plasic work                                      -> output (maybe as additional variable)
    epseq       // equivalent plastic strain                        -> output (maybe as additional variable)
    Strain      // strain at beginning of increment                 -> input (may have to be converted)
    dStrain     // strain increment                                 -> to be computed
    epsPl       // ???                                              -> ???
    prop        // material constants defined by TB,USER            -> from material parameters (Properties or MATERIAL_PARAMETERS)
    coords      // current coordinates                              -> from geometry and shape function values
    rotateM     // rotation matrix for finite deformation update    -> probably not needed
    defGrad_t   // deformation gradient at time t                   -> probably not needed
    defGrad     // deformation gradient at time t+delta_t           -> probably not needed
    tsstif      // transverse shear stiffness                       -> output
    epsZZ       // strain eps_zz for plane stress                   -> probably not needed
    var1, var2, var3, var4, var5, var6, var7, var8 // reserved for future use -> probably not needed

------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : constitutive_law_new.h
Tipo       : text/x-chdr
Tamaño     : 17653 bytes
Descripción: no disponible
Url        : http://listas.cimne.upc.edu/pipermail/kratos/attachments/20100602/b318cd5e/attachment-0003.h 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : kinematic_linear.cpp
Tipo       : text/x-c++src
Tamaño     : 47758 bytes
Descripción: no disponible
Url        : http://listas.cimne.upc.edu/pipermail/kratos/attachments/20100602/b318cd5e/attachment-0002.cpp 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : kinematic_linear.h
Tipo       : text/x-chdr
Tamaño     : 13561 bytes
Descripción: no disponible
Url        : http://listas.cimne.upc.edu/pipermail/kratos/attachments/20100602/b318cd5e/attachment-0004.h 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : von_mises_3d_new.h
Tipo       : text/x-chdr
Tamaño     : 9012 bytes
Descripción: no disponible
Url        : http://listas.cimne.upc.edu/pipermail/kratos/attachments/20100602/b318cd5e/attachment-0005.h 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : von_mises_3d_new.cpp
Tipo       : text/x-c++src
Tamaño     : 18874 bytes
Descripción: no disponible
Url        : http://listas.cimne.upc.edu/pipermail/kratos/attachments/20100602/b318cd5e/attachment-0003.cpp 

More information about the Kratos mailing list