How to use the Constitutive Law class

From KratosWiki
(Difference between revisions)
Jump to: navigation, search
(API)
(API)
Line 39: Line 39:
 
shall be computed
 
shall be computed
  
== API ==
+
== Usage 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.
 
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.
 
The parameters data structure should be initialized using the following constructor:
 
The parameters data structure should be initialized using the following constructor:
Line 53: Line 53:
  
 
       GetOptions() //returns a reference to a flag container, to be employed in passing options to the CL
 
       GetOptions() //returns a reference to a flag container, to be employed in passing options to the CL
 
 
       GetDeterminantF()   
 
       GetDeterminantF()   
 
       GetDeformationGradientF()  
 
       GetDeformationGradientF()  
 
 
       GetShapeFunctionsValues()  
 
       GetShapeFunctionsValues()  
 
       GetShapeFunctionsDerivatives()  
 
       GetShapeFunctionsDerivatives()  
 
 
       GetStrainVector() //INPUT/OUTPUT -- note that F will be used preferentially instead of the input strain
 
       GetStrainVector() //INPUT/OUTPUT -- note that F will be used preferentially instead of the input strain
 
       GetStressVector()  
 
       GetStressVector()  
 
 
       GetConstitutiveMatrix()  
 
       GetConstitutiveMatrix()  
 
 
       GetProcessInfo()  
 
       GetProcessInfo()  
 
       GetMaterialProperties()  
 
       GetMaterialProperties()  
Line 86: Line 81:
  
 
there are 3 additional ones but are currently deprecated and not reported here.
 
there are 3 additional ones but are currently deprecated and not reported here.
 +
 +
A fundamental

Revision as of 06:25, 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

Usage 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. The parameters data structure should be initialized using the following constructor:

     Parameters (const GeometryType& rElementGeometry

,const Properties& rMaterialProperties ,const ProcessInfo& rCurrentProcessInfo) Thus allowing to encapsulate the pointer to the elemental properties, to the element geometry and to the process info.

The 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 ]]. For ease, the getter interface, returning a reference to the encapsulated data, is reported here

     GetOptions() //returns a reference to a flag container, to be employed in passing options to the CL
     GetDeterminantF()   
     GetDeformationGradientF() 
     GetShapeFunctionsValues() 
     GetShapeFunctionsDerivatives() 
     GetStrainVector() //INPUT/OUTPUT -- note that F will be used preferentially instead of the input strain
     GetStressVector() 
     GetConstitutiveMatrix() 
     GetProcessInfo() 
     GetMaterialProperties() 
     GetElementGeometry()

there are additionally the two functions

     GetDeterminantF0()   //DEPRECATED: please set to 1.0
     GetDeformationGradientF0() //DEPRECATED: please set to the IdentityMatrix

that are currently deprecated to simplify the constitutive law usage. Until their complete removal please set them respectively to 1.0 and to the IdentityMatrix of correct size. They will be removed asap.

The "Options" flag represents the fundamental tool in steering the control of the constitutive law behaviour. The interface provides a number of boolean flags that can be passed to the constitutive law:

   COMPUTE_STRAIN
   COMPUTE_STRESS
   COMPUTE_CONSTITUTIVE_TENSOR
   ISOCHORIC_TENSOR_ONLY      
   VOLUMETRIC_TENSOR_ONLY     
   TOTAL_TENSOR                
   FINALIZE_MATERIAL_RESPONSE

there are 3 additional ones but are currently deprecated and not reported here.

A fundamental

Personal tools
Categories