# CSMm 2.5.Constitutive Laws

The constitutive law class is a core class of kratos. Located in kratos/kratos/includes/constitutive_law.h.

## ConstitutiveLaw derives from Flags

Right now, the flags used are only local flags (options) for the computation of the material response.

Current Avaliable Flags:

List of *LOCAL* flags, they will be used in the Parameters.mOptions:

**COMPUTE_STRAIN**

**COMPUTE_STRESS**

**COMPUTE_CONSTITUTIVE_TENSOR**

**ISOCHORIC_TENSOR_ONLY**

**VOLUMETRIC_TENSOR_ONLY**

**TOTAL_TENSOR**

**INITIAL_CONFIGURATION**

**LAST_KNOWN_CONFIGURATION**

**FINAL_CONFIGURATION**

**FINALIZE_MATERIAL_RESPONSE**

There is also a definition of the strain and stress measures that we are going to work with.

Strain and stress working measures:

They are defined in to two * enum* arrays:

STRAIN MEASURES:

**StrainMeasure_Infinitesimal**, Infinitesimal strain measure related to small displacements

**StrainMeasure_GreenLagrange**, Green-Lagrange strain measure related to the reference configuration

**StrainMeasure_Almansi**, Almansi strain measure related to the current configuration

** true strain measures*:

**StrainMeasure_Hencky_Material**, Hencky strain measure expressed in the reference configuration

**StrainMeasure_Hencky_Spatial**, Hencky strain measure expressed in the current configuration

STRESS MEASURES:

**StressMeasure_PK1**, First Piola-Kirchhoff stress related to the reference configuration non-symmetric

**StressMeasure_PK2**, Second Piola-Kirchhoff stress related to the reference configuration

**StressMeasure_Kirchhoff**, Kirchhoff stress related to the current configuration

**StressMeasure_Cauchy**, Cauchy stress related to the current configuration

## Constitutive law parameters Struct

Structure * Parameters* is used by the element to pass the parameters into the constitutive law:

{

PARAMETER OPIONS:

**mOptions** flags for the current Constitutive Law Parameters (input data)

KINEMATIC PARAMETERS:

**mDeterminantF** copy of the determinant of the Current DeformationGradient (although Current F is also included as a matrix) (input data)

**mDeterminantF0** copy of the determinant of the Total DeformationGradient (although Total F0 is also included as a matrix) (input data)

NOTE: Pointers are used only to point to a certain variable, nonewormalloccan be used for this Parameters

**mpDeformationGradientF** pointer to the current deformation gradient (can be an empty matrix if a linear strain measure is used) (input data)

**mpDeformationGradientF0** pointer to the total deformation gradient (can be an empty matrix if a linear strain measure is used) (input data)

**mpStrainVector** pointer to the current strains (total strains) (input data) (can be also an output with COMPUTE_STRAIN flag)

**mpStressVector** pointer to the current stresses (output with COMPUTE_STRESS flag)

**mpConstitutiveMatrix** pointer to the material tangent matrix (output with COMPUTE_CONSTITUTIVE_TENSOR flag)

GEOMETRIC PARAMETERS:

**mpShapeFunctionsValues** pointer to the shape functions values in the current integration point (input data)

**mpShapeFunctionsDerivatives** pointer to the shape functions derivaties values in the current integration point (input data)

**mpElementGeometry** pointer to the element's geometry (input data)

MATERIAL PROPERTIES:

**mpMaterialProperties** pointer to the material Properties object (input data)

PROCESS PROPERTIES:

**mpCurrentProcessInfo** pointer to current ProcessInfo instance (input data)

}

## ConstitutiveLaw Methods

The constitutive law is evaluated at integration point level. The **struct Parameters** must be set and passed to the constitutive law for the material response calculation.

General Method to get the material response in a specific *StressMeasure*:

**CalculateMaterialResponse( Parameters& , StressMeasure )**

Specific Methods for the requested stress measures:

**CalculateMaterialResponsePK1( Parameters& )**

**CalculateMaterialResponsePK2( Parameters& )**

**CalculateMaterialResponseKirchhoff( Parameters& )**

**CalculateMaterialResponseCauchy( Parameters& )**

General Method to finalize the material response in a specific *StressMeasure*:

**FinalizeMaterialResponse( Parameters& , StressMeasure )**

Specific Methods for the requested stress measures finalization:

**FinalizeMaterialResponsePK1( Parameters& )**

**FinalizeMaterialResponsePK2( Parameters& )**

**FinalizeMaterialResponseKirchhoff( Parameters& )**

**FinalizeMaterialResponseCauchy( Parameters& )**

--- to be continued