How to use the Constitutive Law class
(→Conventions) |
(→Conventions) |
||
Line 26: | Line 26: | ||
'''STRESS''' Voigt Notation: s00 s11 s01 | '''STRESS''' Voigt Notation: s00 s11 s01 | ||
− | The constitutive law works on the basis of the deformation gradient F, defined as | + | The constitutive law works on the basis of the '''total deformation gradient F''', defined as |
F := D(X) / D(X0) | F := D(X) / D(X0) | ||
that is, as the deformation gradient connecting the original and deformed configuration | that is, as the deformation gradient connecting the original and deformed configuration | ||
Line 36: | Line 36: | ||
//must coincide with X = node->GetInitialPosition() + node.FastGetSolutionStepValue(DISPLACEMENT); | //must coincide with X = node->GetInitialPosition() + node.FastGetSolutionStepValue(DISPLACEMENT); | ||
− | The ConstitutiveLaw always returns the ''' | + | The ConstitutiveLaw '''always returns the total stress'''. Formulations expressed in terms of strain increments shall store internally the strain stresses from which the increment |
+ | shall be computed | ||
+ | |||
+ | === API === | ||
+ | The constitutive law API is based on the use of an auxiliary "Parameters" data structure, designed to encapsulate the data to be passed to the CL and received from it. | ||
+ | Such data structure '''does not contain any internal storage''' and should be initialized with pointers to memory ''owned by the caller element''. | ||
+ | Full documentation of the code can be found in the file constitutive_law.hpp [[https://kratos.cimne.upc.es/projects/kratos/repository/entry/kratos/kratos/includes/constitutive_law.h | ||
+ | ]] |
Revision as of 06:07, 16 July 2015
The constitutive law behaviour is dealt with in kratos by the use of the class "ConstitutiveLaw", with a public interface defined in the file
kratos/kratos/includes/constitutive_law.h
which also provides some rather extensive inline documentation (in the form of comments in the code).
By design such file aims to provide a very flexible interface to constitutive law modelling, with the specific goal of maximizing the flexibility in the implementation of complex constitutive behaviours. While such approach provide obvious advantages, it also implies that the API is more complex than what would be strictly needed for very simple constitutive laws.
The objective of current HowTo is to provide a brief introduction to the interface
Conventions
Through the whole section, the following convenctions will be employed:
voigt notation: - 3D case:
STRAIN Voigt Notation: e00 e11 e22 2*e01 2*e12 2*e02 STRESS Voigt Notation: s00 s11 s22 s01 s12 s02
- 2D plane strain/axisymmetric case (4 stress components)
STRAIN Voigt Notation: e00 e11 e22 2*e01 STRESS Voigt Notation: s00 s11 s22 s01
- 2D plane stress
STRAIN Voigt Notation: e00 e11 2*e01 STRESS Voigt Notation: s00 s11 s01
The constitutive law works on the basis of the total deformation gradient F, defined as
F := D(X) / D(X0)
that is, as the deformation gradient connecting the original and deformed configuration
where the initial position X0 is the one obtained by
const array_1d<double,3>& X0 = node->GetInitialPosition()
and the deformed one by
const array_1d<double,3>& X = node->Coordinates() //must coincide with X = node->GetInitialPosition() + node.FastGetSolutionStepValue(DISPLACEMENT);
The ConstitutiveLaw always returns the total stress. Formulations expressed in terms of strain increments shall store internally the strain stresses from which the increment shall be computed
API
The constitutive law API is based on the use of an auxiliary "Parameters" data structure, designed to encapsulate the data to be passed to the CL and received from it. Such data structure does not contain any internal storage and should be initialized with pointers to memory owned by the caller element. Full documentation of the code can be found in the file constitutive_law.hpp [[https://kratos.cimne.upc.es/projects/kratos/repository/entry/kratos/kratos/includes/constitutive_law.h ]]