matlib ref

23
Universit ´ e de Li ` ege Facult´ e des Sciences Appliqu ´ ees epartement A ´ erospatiale & M ´ ecanique LTAS – Milieux Continus & Thermom´ ecanique MAT L IB v.3 Reference Manual L. Stainier January 29, 2007 LTAS-MCT 1 chemin des chevreuils B-4000 Li ` ege el: +32-(0)4-366.91.52 Fax: +32-(0)4-366.91.41 Courriel: [email protected]

Upload: vucamtu

Post on 11-Apr-2015

118 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: matlib ref

Universit e de Li ege

Faculte des Sciences AppliqueesDepartement Aerospatiale & MecaniqueLTAS – Milieux Continus & Thermomecanique

MATL IB v.3 Reference Manual

L. Stainier

January 29, 2007

LTAS-MCT1 chemin des chevreuilsB-4000 Liege

Tel: +32-(0)4-366.91.52Fax: +32-(0)4-366.91.41

Courriel: [email protected]

Page 2: matlib ref

Chapter 1

Universal Interface

1.1 Introduction

Constitutive models represent a fundamental element in computational solid mechanics codes. These modelstend to include more and more physics (i.e. more or less explicit considerations of underlying micromecha-nisms), and thus become more and more complex. This increasing complexity in turn reinforce the interest ofdeveloping code-independent libraries of constitutive models, which could facilitate collaborations and “freecirculation” of models.

MATL IB is an attempt to propose such a code-independent library of constitutive models. But a critical prelimi-nary step to the design of this library is the definition of a unique interface accomodating all constitutive modelsin solid (thermo)mechanics. The interface proposed here is based on the description of constitutive relationsin a standard thermodynamic framework, where irreversible mechanisms are modeled by internal variables.Hence, the interface proposes a data structure storing the thermodynamic state of the material. The main roleof constitutive models in the context of a numerical simulation will be to update the internal variables from aknown state to a subsequent state (later in time or loading) where only external variables are known. In addi-tion, the model should be able to compute forces thermodynamically associated to external variables (and thesensitivity of the former to the latter). The interface imposes that implementations should provide this kind offunctionality.

Specific care was also taken to allow for interactions between coupled computations (such as thermal and me-chanical). Coupled problems can be solved through different types of numerical schemes, going from stronglycoupled approaches with simultaneous resolution of all fields, to weakly coupled approaches with sequentialresolution, passing by intermediate solutions such as strongly coupled by staggered solution schemes. Theproposed interface was designed to be compatible with all these various algorithms.

1.2 Material properties

The first part of the interface regards the material properties, or material parameters, data structure. The adopteddata structure is described in Box 1. Its features are the following:

• The properties can be of type integer, real (double precision), a function of one variable, or a genericProperty type, which allows to include more complex data types, such as a pre-computed Hookematrix in elasticity. Complex data types are typically used internally only, and they will normally notappear in an input file. This list might be extended in the future (e.g. to include multi-variable functions);

Page 3: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 2

• The properties are referenced by keywords. This choice, instead of indices as is often the case in otherframeworks, allows for a lot of modularity. Indeed, it is our goal that elements of existing models can becombined to create new models. The management of the respective properties of each of these elementsis transparent when using keywords, whereas it incurs a greatly increased complexity when using indices,hence our choice.

The choice and format of keywords is left open, and is of course dependent of the particular implementationsof constitutive models. But it is suggested to follow as much as possible the MIGtionary proposed in [?].

/ *** Class containing a set of material properties.

* /class MaterialProperties {

public:

// get material’s namestd::string getName() const;

// get property associated to keywordProperty& getProperty(const std::string&) const

throw (NoSuchPropertyException);int getIntegerProperty(const std::string&) const

throw (NoSuchPropertyException);double getDoubleProperty(const std::string&) const

throw (NoSuchPropertyException);Function& getFunctionProperty(const std::string&) const

throw (NoSuchPropertyException);

// set property associated to keywordvoid setProperty(const std::string&,Property&);void setProperty(const std::string&,int);void setProperty(const std::string&,double);void setProperty(const std::string&,Function&);

// read from an input streamvoid readFrom(std::istream&) throw (SyntaxError);

};

Box 1: The material properties data structure

Three exception types are associated with theMaterialProperties class:

• NoSuchPropertyException ;

• SyntaxError ;

• andInvalidPropertyException .

The first exception type is thrown when a request is made, through one of thegetProperty() methods,for a property which has not been loaded before in the data structure. In other words, this exception is thrownwhen the requested keyword is not found in the table of properties. The second one is thrown when the method

Page 4: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 3

readFrom() encounters problems with the format/syntax of the input stream, which depends on the particularimplementation of this interface (the syntax used by MATL IB is described in section 1.6). The last one can bethrown when a constitutive model implementation considers that a material property has been given a valueoutside of the acceptable range. More comments on this are given in section 1.4.

1.3 Material state

The second part of the interface is a data structure containing the information about the state of the material at agiven computation point (e.g. an integration point of a finite element). The nature of this information is definedby the thermodynamical framework in which we put ourselves. The state of the material is thus determinedby a set of external variables, plus a set of internal variables describing local irreversible processes (such asplastic deformation). The nature of external variables depends on the class of problem considered. In the caseof solid mechanics, for example, the external variable is the gradient of deformation. The exact content of theexternal variables array is listed in details in Appendix A, for the various classes of problems considered inMATL IB. The nature of internal variables depends on the specificities of each constitutive model, as describedin Chapter 2. As their name indicates, the library could actually be used without any knowledge of the detailof these internal variables (the size of the array is the only information practically needed, and it is provided bythe interface, see section 1.4). Thermodynamics associates forces to these external and internal variables: forexample, in the case of solid mechanics, the force thermodynamically associated to the gradient of deformationis the (first Piola-Kirchhoff) stress tensor. The role of the constitutive model is then to relate the evolution ofexternal variables to the evolution of their associated forces, at all times.

In most field theories, the external variable is the gradient of the unknown field, while the associated force canbe interpreted as a flux. We have adopted this nomenclature in our definition of the data structure representingthe material state, as detailed in Box 2. Note that we have included the thermodynamical forces in this datastructure, though the set of external and internal variables theoretically suffices to completely describe the stateof the material. The motivation for this redundancy is twofold. First it offers a convenient way of storing andtransmitting information to the rest of the code (finite elements, . . . ). Indeed, in a typical computation, thethermodynamical forces are the main element of information which is expected from the constitutive model.Second, some formulations work with constitutive equations in rate form only, and thus do not allow to derivethe forces from the external variables at a given time without performing the integration over the whole previoushistory. Storing the forces then allows to avoid this tedious operation, and to perform the integration on thecurrent time step only. A typical example of this kind of formulation is hypoelasticity.

The data composing theMaterialState class are declared of typeMatLibArray , which is in fact atypedef to some internal data structure of MATL IB. Should this internal data structure be changed, theinterface would remain the same. A list of relevant methods for the user is given in Box 3. As can be seenfrom this interface, assignment and access operators include range control, throwing runtime exceptions fromthe standard C++ library. Methodresize() can be used to set or change the size of an array, e.g. to thesize provided by the constitutive model for the external and/or internal variables (the default size of an array iszero).

1.4 Constitutive model

The core of the interface is of course the virtual base class for constitutive models. This base class is describedin Box 4. This structure assumes there are three levels of interaction with constitutive models:

• First, the constitutive model should provide informations about the type of external and internal variables

Page 5: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 4

/ *** Class describing the state of a material point.

* /class MaterialState {

public:

// external variablesMatLibArray grad;

// associated forcesMatLibArray flux;

// internal variablesMatLibArray internal;

};

Box 2: The material state data structure

it handles. Since we have chosen to externally manipulate these quantities as arrays, the main piece of in-formation whis is needed is the size of these arrays. This can be obtained from the methodsnExtVar()andnIntVar() ;

• Then, the constitutive model has an important role in preprocessing the material data, checking that thesehave acceptable values and that the set is complete for the model under consideration, as well as complet-ing this set with auxilliary parameters. This preprocessing is done by the methodcheckProperties() ,which can throw exceptions of typeInvalidPropertyException , as described in section 1.2. Oneshould always make sure that this method is called before proceeding to the actual computations;

• Finally, the main role of the constitutive model is to update the state of the material. But before updatingthe state, this one should be properly initialized, which can be done through the methodinitState() .This method will set the external and internal values to proper initial values (corresponding to a “virgin”state of the material).

There is a fourth level of interaction with the constitutive model. It is not essential to the proper functionningof the system, but is instead intended for self-documentation purposes. This capacity can be useful to writea generic post-processing tool, for example, or to check consistency between finite element formulations andconstitutive model. These self-documenting utility methods describe the segmentation of external and internalvariable arrays in actual data types (scalar, vector, tensor, ...). These data types are described by theenumConstitutiveModel::VariableType , which can take values as listed in Table 1.1. The presence of aspecific 2D type for tensors is explained as follows: tensors describing the bulk mechanical behaviour of solidsalways have a full diagonal, independently of the geometrical context (see appendix A), but for reduced models,such as in shells, a strictly bidimensional tensor type is useful.

The updateState() method is of course the main component of the constitutive model interface. Givenmaterial properties and external parameters, this method updates the state of the material from a known set toa partially unknown set. Typically, only the gradient is known for the final state, and this has to be completedby updating internal variables (which allows to compute fluxes). Optionally, the consistent tangent operator(derivatives of the fluxes with respect to gradients, accounting for the incremental nature of the problem) canbe computed. Alternatively, the tangent operator can be computed independently of any material state update.The tangent operator is stored in a data structure of generic typeMatLibMatrix described in Box 5. Thistype is actually atypedef to some internal data type, and functions similarly toMatLibArray .

Page 6: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 5

/ *** Class describing the array type for MatLib.

* /class MatLibArray {

public:

// constructorMatLibArray(size_t = 0);

// copy constructorMatLibArray(const MatLibArray&);

// assignment operatorsMatLibArray& operator=(const MatLibArray&) throw (std::range_error);MatLibArray& operator=(double);

// access operatorsdouble operator()(size_t) const throw (std::out_of_range);double& operator()(size_t) throw (std::out_of_range);

// resize arrayvoid resize(size_t);

};

Box 3: Interface forMatLibArray

Two additional methods are provided for constitutive models. The first one,rotateProperties() , allowsto take into account a possible initial anisotropy of the material. It will modify material properties (normallygiven in some natural axes system) in function of the given orientation (the rotation operator transforms theglobal axes into the local –or material– axes). Another method,updateProperties() , allows to modifiymaterial properties in function of some external parameter set (such as room temperature). External parametersare stored in the dictionary-type data structureParameterSet , working on the basis of keywords. Externalparameters are also passed to theupdateState() method. Finally, two other useful methods, not shown inBox 4, are provided:bool ConstitutiveModel::isLinear() const indicates if the constitutive model is linear;bool ConstitutiveModel::isStandard() const indicates if the constitutive model is variational.

Variational constitutive models have the additional property that, in a constitutive update step, the externalforces can be derived from an incremental potential. In this case, the update method can be replaced by another

Table 1.1: Data types for external and internal variables

TYPE SCALAR scalarTYPE VECTOR vector (always 3 components)TYPE SYMTENSOR tensor with symmetric storageTYPE TENSOR tensor with full storageTYPE SYMTENSOR2D symmetric 2D tensor (3 components)TYPE TENSOR2D 2D tensor (4 components)TYPE NONE none of the above

Page 7: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 6

/ *** Virtual base class for constitutive models.

* /class ConstitutiveModel {

public:

// check consistency of material propertiesvoid checkProperties(MaterialProperties&,std::ostream * = 0)

throw (InvalidPropertyException);

// apply rotation to material propertiesvoid rotateProperties(MaterialProperties&,const Rotation&);

// update properties in function of external parametersvoid updateProperties(MaterialProperties&,const ParameterSet&);

// how many external variables ?unsigned int nExtVar() const;

// self-documenting utilitiesunsigned int nExtVarBundled() const;VariableType typeExtVar(unsigned int) const;unsigned int indexExtVar(unsigned int) const;std::string labelExtVar(unsigned int) const;std::string labelExtForce(unsigned int) const;

// how many internal variables ?unsigned int nIntVar() const;

// self-documenting utilitiesunsigned int nIntVarBundled() const;VariableType typeIntVar(unsigned int) const;unsigned int indexIntVar(unsigned int) const;std::string labelIntVar(unsigned int) const;

// initialize the state of the materialvoid initState(const MaterialProperties&,MaterialState&);

// update the state of the material (with option to compute tangents)void updateState(const MaterialProperties&,const ParameterSet&,

const MaterialState&,MaterialState&,double,MatLibMatrix&,bool);

// compute material tangents (without updating)void computeTangent(const MaterialProperties&,const ParameterSet&,

const MaterialState&,MaterialState&,double,MatLibMatrix&);

};

Box 4: Constitutive model interface

Page 8: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 7

/ *** Class describing the (square) matrix type for MatLib.

* /class MatLibMatrix {

public:

// constructorMatLibMatrix(size_t = 0);

// copy constructorMatLibMatrix(const MatLibMatrix&);

// assignment operatorsMatLibMatrix& operator=(const MatLibMatrix&) throw (std::range_error);MatLibMatrix& operator=(double);

// access operatorsdouble operator()(size_t,size_t) const throw (std::out_of_range);double& operator()(size_t,size_t) throw (std::out_of_range);

// resize matrixvoid resize(size_t);

};

Box 5: Interface forMatLibMatrix

which computes the value of the incremental potential and its derivatives. Thus, when the model is variational, itshould normally also implement the interface described in Box 6. As its name indicates, this method computesthe incremental energy, with the option to compute its first and second derivatives with respect to externalvariables (forces and consistent tangents, respectively).

/ *** Additional interface for standard materials.

* /class StandardMaterial : virtual public ConstitutiveModel {

public:

// compute the incremental potentialdouble incrementalPotential(const MaterialProperties&,const ParameterSet&,

const MaterialState&,MaterialState&,double,MatLibMatrix&,bool,bool);

};

Box 6: Interface for variational constitutive models

1.5 Model dictionary

All implemented constitutive models normally register themselves automatically into a model dictionary. Thisdictionary associates specific models to keywords, documented later in this document. In practice, the model

Page 9: matlib ref

CHAPTER 1. UNIVERSAL INTERFACE 8

dictionary is a class providing a static factory method for constitutive models:

ConstitutiveModel * ModelDictionary::build(const std::string& key,unsigned int d = 3)

throw (NoSuchModelException);

A call to this method will create a new instance of the constitutive model associated to the keywordkey in 1D,2D or 3D, according to the specified dimensiond. From there, it is up to the user to take care of the object(don’t forget todelete it when you will not reference it anymore).

1.6 Material properties file format

The methodMaterialProperties::readFrom() allows to load a set of material properties from aformatted text file. The format effectively used in MATL IB is described here.

The first line must always contain the material’s name, i.e. the string which will be returned bygetName() .Aside of that, the file can include white lines or comment lines. These begin by one of the comment characters(! or #), possibly after white spaces of tabs. Only one property can be defined on each line, with the followinggeneral format:

KEYWORD = value (type)

White spaces are not necessary, the actual separators being the equal sign and the parentheses. Upper case ispreferred for the keyword but it is not mandatory (i.e. the reader automatically sets all characters in upper case).The type is eitherint , real or function , the genericProperty type having no meaning at this level. Inthe case of integer and real types, the value is just the number assigned to the property. In the case of functions,two formats are possible. A first possibility is to directly specify the function in the properties file in a tabulatedformat:

FUNCTION_KEYWORD = [ x1, f1 ; x2, f2 ; x3, f3 ; ...] (function)

The function will then be interpolated between the given points, in a piecewise linear fashion. Another possi-bility, useful for long lists of points, is to refer to an external file (suggested extension:.fct ):

FUNCTION_KEYWORD = "file.fct" (function)

The external file should itself be formatted in the following way: the first line is reserved for a label string, andeach following line corresponds to one point,x andf being separated by blank spaces or tabs. The function isalso interpolated between these points in a piecewise fashion.

Page 10: matlib ref

Chapter 2

Constitutive Models

2.1 Equations of state

The volumic behaviour of solids (i.e. the evolution of pressure with changes in volume) is sometimes betterdescribed separately from the overall bulk behaviour. This is for example the case when dealing with high-pressure states. By analogy to gasses and fluids, the relation between pressure and volume (plus temperature,usually) is called an equation of state. Often, it can be put in the form of a potential, of which the pressurederives:

p(J) = JW ′eos(J) or p(J, T ) = J∂JWeos(J, T ) (2.1)

whereJ = V/V0 is the scalar jacobian of deformation, andp the hydrostatic tension (negative pressure). The(isothermal) bulk modulus is then given by

K(J) = J∂p

∂J= J

[W ′

eos(J) + JW ′′eos(J)

](2.2)

2.1.1 Standard equation of state

Under moderate loading conditions, solids are usually considered to have a deformation-independent bulkmodulus. This is the case with the following equation of state potential, valid in isothermal settings:

Weos(J) = 12K0(log J)2 (2.3)

whereK0 is a constant material property. Temperature-dependence can be introduced by making the bulkmodulusK0 a function ofT .

Table 2.1: Material properties for standard e.o.s. model

Symbol Keyword Type S.I. UnitK0 BULK MODULUS (real) [Pa]

2.2 Elasticity

First, we will consider elastic constitutive models, corresponding to non-dissipative mechanical behaviour.Elastic solids (or solids in the elastic range) do not present any residual deformation upon unloading. In a

Page 11: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 10

standard thermodynamic description, the (mechanical) state of an elastic material is thus entirely defined bythe deformation gradientF [?]. The behaviour of the elastic solid is then described by the free energy density(per unit volume)W (F ). Additional considerations on frame invariance and objectivity lead to the conclusionthat the free energy must be a function of the right Cauchy-Green deformation tensorC only (again, see [?] formore details). The class of constitutive models following this description is labelledhyperelasticity.

In the case of small perturbations from the initial state, both the behaviour and the measure of deformation canbe linearized. The resulting class of constitutive models is labelledlinear elasticity.

Finally, an alternative approach to modelling non-dissipative elastic behaviour in the presence of large strainsand rotations is based on a rate description of constitutive equations. This class of constitutive models is labelledhypoelasticity.

2.2.1 Hyperelasticity

2.2.1.a Decomposition in volumic and deviatoric behaviours

All hyperelastic constitutive models can be combined with any equation of state (e.o.s.) through the followingadditive decomposition of the free energy:

W (C) = Weos(J) + Wdev(C) with J =√

det C andC = J−2/3C (2.4)

whereWeos(J) is a potential function of the scalar jacobian of deformationJ , describing the volumic behaviour(cf. section 2.1), whileWdev is a hyperelastic stored energy function of the distorsionC (such as those describedin the following).

The second Piola-Kirchhoff (PK2) stress tensor is then given by

S = 2∂W

∂C= J−2/3S +

(JW ′

eos(J)− 13 S · C

)C−1 with S = 2

∂Wdev

∂C(2.5)

which can be rewritten asS = J−2/3DEV[S] + JW ′

eos(J)C−1 (2.6)

whereDEV[•] = (•)− 13(• ·C)C−1 is the material deviatoric operator. The material tangents are given by

MIJKL = 4∂2W

∂CIJ∂CKL

= J−4/3MIJKL − 13J−2/3

(MIJMN CMNC−1

KL + C−1IJ MKLMN CMN

)− 2

3J−2/3(SIJC−1

KL + C−1IJ SKL

)+

[19C · M · C + 2

9 S · C + J(W ′

eos(J) + JW ′′eos(J)

)]C−1

IJ C−1KL

−(JW ′

eos(J)− 13 S · C

) (C−1

IKC−1JL + C−1

IL C−1JK

)(2.7)

with M = 4∂2Wdev

∂C∂C.

2.2.1.b Hencky models

The family of Hencky models are described by a stored energy function which is quadratic in logarithmicstrains:

W (C) = 12 ε ·H · ε with ε = 1

2 log[C] (2.8)

Page 12: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 11

where the 4th-order tensorH is a Hooke tensor, as defined in linear elasticity (see section 2.2.2). The secondPiola-Kirchhoff (PK2) stress tensor is then given by

S = 2∂W

∂C= (H · ε) · ∂ log[C]

∂C= σ · ∂ log[C]

∂C(2.9)

whereσ = H · ε is a “small-strain” type stress tensor. Note that this expression for the stress (2.9) differsfrom other approaches aiming at extending small-strain models to the finite deformation range. Comparing forexample with the approach of Cuitino and Ortiz [1], one can clearly see the presence of an additional factorcoming from the derivative of the logarithmic strain. The material tangents are then given by

MIJKL = 4∂2W

∂CIJ∂CKL= HMNPQ

∂ log[C]MN

∂CIJ

∂ log[C]PQ

∂CKL+ 2σMN

∂ log[C]MN

∂CIJ∂CKL(2.10)

Different material symmetries are then modeled by an appropriate choice of Hooke tensor, as detailed in thesection on linear elasticity (2.2.2). Here we will simply list the material properties and their associated keywordfor the various cases implemented in MATL IB.

Isotropy Material properties for isotropic hyperelasticity of Hencky type are listed in Table 2.2.

Table 2.2: Material properties for isotropic finite elasticity Hencky model (3 alternative sets)

Model keyword =ISOTROPIC HYPERELASTICITY

Symbol Keyword Type S.I. Unitλ0 1ST LAMECONSTANT (real) [Pa]µ0 2ND LAMECONSTANT (real) [Pa]

G0 SHEARMODULUS (real) [Pa]K0 BULK MODULUS (real) [Pa]

E0 YOUNGMODULUS (real) [Pa]ν0 POISSONCOEFFICIENT (real) [-]

Orthotropy

2.2.1.c Neohookean model

The neohookean model is described by the following stored energy function of the right Cauchy-Green defor-mation tensor:

W (C) = 12λ0 (log J)2 − µ0 log J + 1

2µ0 (tr[C]− 3) with J =√

det C (2.11)

whereλ0 andµ0 are the first and second Lame constants, respectively. In the above expression the originalpotential (for incompressible behaviour) has been augmented by a volumic part allowing for compressiblebehaviours.

The second Piola-Kirchhoff (PK2) stress tensor is then given by

S = 2∂W

∂C= λ0 log J C−1 + µ0

(δ −C−1

)(2.12)

Page 13: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 12

whereδ is the identity tensor. In the spatial configuration, the Cauchy stress tensor is given by

σ = J−1FSF T = λ0J−1 log J δ + µ0J

−1 (b− δ) (2.13)

whereb = FF T is the Finger deformation tensor. If we consider small deviations from the reference configu-ration, we can obtain the following linearized expressions:

J ' 1 + tr[ε] (2.14)

log J ' tr[ε] (2.15)

b ' δ + 2ε (2.16)

andσ ' λ0tr[ε]δ + 2µ0 ε (2.17)

which is nothing else than the standard stress-strain relation of linear elasticity (Hooke’s law) in terms of theLame coefficients, hence the name of the present model. Finally, note that in the finite strain regime, thestress-strain relation (2.13) can be more interestingly rewritten in terms of the Kirchhoff stress tensor:

τ = Jσ = λ0 log J δ + 2µ0 e (2.18)

wheree = 12(b− δ).

The material tangents are given by

MIJKL = 4∂2W

∂CIJ∂CKL= λ0 C−1

IJ C−1KL + (µ0 − λ0 log J)

(C−1

IKC−1JL + C−1

IL C−1JK

)(2.19)

The material part of the spatial tangents are obtained by

C(M)ijkl = J−1FiIFjJFkKFlLMIJKL

= λ(J) δijδkl + µ(J) (δikδjl + δilδjk)(2.20)

which is a Hooke tensor with effective (deformation-dependent) propertiesλ(J) = J−1λ0 and µ(J) =J−1(µ0 − λ0 log J). Obviously,λ(1) = λ0 andµ(1) = µ0, and in the case of incompressible behaviourfor example, the spatial tangents are exactly equal to the Hooke tensor.

Lame constantsλ0 andµ0 can be expressed in terms of other commonly used material parameters:

λ0 =ν0E0

(1 + ν0)(1− 2ν0)= K0 − 2

3G0 (2.21)

µ0 =E0

2(1 + ν0)= G0 (2.22)

whereE0 is Young’s modulus,ν0 Poisson’s coefficient,G0 the shear modulus andK0 the bulk modulus.Keywords for this model in MATL IB are listed in Table 2.3.

2.2.2 Linear elasticity

In the case of small displacements and rotations (small strains), the above models can be linearized around theinitial configuration. In this context, all measures of strain and stress become equivalent, and we will work withthe symmetric strainε ≈ F − I and the Cauchy stressσ.

The linear elastic behavior is characterized by a quadratic energy function, which takes the general form

W (ε) = 12 ε ·H · ε (2.23)

Page 14: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 13

Table 2.3: Material properties for neohookean model (3 alternative sets)

Model keyword =NEOHOOKEAN

Symbol Keyword Type S.I. Unitλ0 1ST LAMECONSTANT (real) [Pa]µ0 2ND LAMECONSTANT (real) [Pa]

E0 YOUNGMODULUS (real) [Pa]ν0 POISSONCOEFFICIENT (real) [-]

G0 SHEARMODULUS (real) [Pa]K0 BULK MODULUS (real) [Pa]

where the 4th-order tensorH is known as the Hooke tensor. Without loss of generality, we may assume that theHooke tensor has properties of major and minor symmetry :

Hijkl = Hklij and Hijkl = Hjikl = Hijlk = Hjilk (2.24)

Given these properties, any linear elastic material will be completely characterized by at most 21 independentcoefficients. Finally, the stress tensor is given by

σ =∂W

∂ε= H · ε (2.25)

and the material tangents

M =∂2W

∂ε2≡ H (2.26)

are constant.

2.2.2.a Isotropic elasticity

In the case of isotropic elastic materials (behavior completely independent of sample orientation), the Hooketensor is defined by two coefficients:

H = 3λ0K + 2µ0I (2.27)

whereIijkl = 12(δikδjl +δilδjk) is the 4th-order identity,Kijkl = 1

3δijδkl, andλ0 andµ0 are the first and secondLame constants, respectively. Alternatively, it can be written in terms of the bulk modulusK0 and the shearmodulusG0:

H = 3K0K + 2G0J (2.28)

whereJ ≡ I−K.

Taking into account the following properties:

J · ε = dev[ε] = ε− 13tr[ε]I and K · ε = 1

3tr[ε]I (2.29)

the elastic energy can be rewritten

W (ε) = 12λ0 (tr[ε])2 + µ0 (ε · ε) = 1

2K0 (tr[ε])2 + G0 (dev[ε] · dev[ε]) (2.30)

Similarly, the stress can be rewritten

σ = λ0 tr[ε]I + 2µ0 ε = K0 tr[ε]I + 2G0 dev[ε] (2.31)

Page 15: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 14

All the above material constants can also be expressed in terms of Young’s modulusE0 and Poisson’s coefficientν0:

λ0 = K0 − 23G0 =

ν0E0

(1 + ν0)(1− 2ν0)(2.32)

µ0 = G0 =E0

2(1 + ν0)(2.33)

Keywords for this model in MATL IB are listed in Table 2.4.

Table 2.4: Material properties for linear isotropic elasticity model (3 alternative sets)

Model keyword =ISOTROPIC ELASTICITY

Symbol Keyword Type S.I. Unitλ0 1ST LAMECONSTANT (real) [Pa]µ0 2ND LAMECONSTANT (real) [Pa]

G0 SHEARMODULUS (real) [Pa]K0 BULK MODULUS (real) [Pa]

E0 YOUNGMODULUS (real) [Pa]ν0 POISSONCOEFFICIENT (real) [-]

2.2.2.b Cubic elasticity

Structural tensor for materials with cubic symmetry:

S =(e

(2)1 ⊗ e

(2)2 + e

(2)2 ⊗ e

(2)3 + e

(2)3 ⊗ e

(2)1

)−

(e

(2)2 ⊗ e

(2)1 + e

(2)3 ⊗ e

(2)2 + e

(2)1 ⊗ e

(2)3

)(2.34)

whereei (i = 1, 2, 3) are the natural axes of the cubic system, ande(2)i = ei ⊗ ei (no sum). Let’s also define

the 4th-order tensorJc such thatJcijkl = 1

3SmnijSmnkl. The Hooke tensor of cubic materials is then given by:

H = 3K0K + 2G′0J + 2(G0 −G′

0)Jc (2.35)

The 3 elastic constantsK0, G0 andG′0 can be related to the classical constants for cubic elasticity through the

following relations:

C11 = K0 + 43G0 (2.36)

C12 = K0 − 23G0 (2.37)

C44 = G′0 (2.38)

The level of anisotropy can be measured by the anisotropy factorH = 2C44 + C12 − C11 = 2(G′0 −G0).

Obviously, in this case, tensorsJc andH are dependent on the initial orientation of the material. From theabove, we can see that the stored energy function can alternatively be expressed as an isotropic (orientation-independent) function ofε and(S · ε).

2.2.2.c Orthotropic elasticity

2.2.3 Hypoelasticity

Page 16: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 15

2.3 Viscoelasticity

Viscoelastic materials are characterized by the existence of a non-equilibrium component to the strain (i.e. theexistence of a rate of deformations in the presence of non-zero constant states of stress) and/or the existence ofresidual deformations upon unloading. These permanent deformations can be permanent or time-decaying, butthe critical difference with plastic behavior, described in a subsequent section (2.4), is the absence of a yieldlimit. In other words, no elastic domain can be defined for viscoelastic models.

2.3.1 Variational viscoelasticity

The variational viscoelasticity models implemented in MATL IB are based on the variational formulation forfinite viscoelasticity proposed by Fancelloet al. [2]. Here, we will briefly summarize the main features of thisformulation.

We place ourselves in the framework of alocal stateapproach to solid mechanics, where the mechanical stateat a given material point is entirely described by the gradient of deformationF and a suitably chosen set ofinternal variablesQ representing the past history of deformation.

Viscoelastic solids are characterized by the existence of inelastic deformationsF v, or viscousdeformations,representative of internal accommodation mechanisms. One therefore has, locally,

F = F eF v (2.39)

This multiplicative elastic-plastic kinematics was first suggested by Sidoroff [?].

2.3.2 Kelvin-Voigt viscoelasticity

The Kelvin-Voigt model of viscoelasticity is one of the simplest models in the category. It includes rate-sensitivity from the onset (instantaneous stress) but cannot reproduce permanent deformations. It does notinvolve any internal variables. It is thus decribed by two potentials: a Helmholtz free energyW (C) and adissipation pseudo-potentialφ∗(D;F ). The (first Piola-Kirchhoff) stress tensor is then given by:

P =∂W

∂F(C) +

∂φ∗

∂F(D;F ) = 2F

∂W

∂C+

∂φ∗

∂D(D;F )F−T (2.40)

2.3.2.a Isotropic Kelvin-Voigt finite viscoelasticity

For an isotropic material, the Helmholtz free energy can be chosen among any of the models defined forisotropic hyperelasticity. A possible choice is to take a Hencky potential (quadratic in logarithmic strains) withthe isotropic Hooke tensor. Regarding the dissipation pseudo-potential, a simple option is to take it quadraticin D:

φ∗(D) = 12D ·Hv ·D (2.41)

Material parameters corresponding to this specific model are given in Table 2.5.

2.3.2.b Orthotropic Kelvin-Voigt finite viscoelasticity

Page 17: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 16

Table 2.5: Material properties for finite isotropic Kelvin-Voigt viscoelasticity model (3 alternative sets)

Model keyword =ISOTROPIC KV VISCOHYPERELASTICITY

Symbol Keyword Type S.I. Unitλ0 1ST LAMECONSTANT (real) [Pa]µ0 2ND LAMECONSTANT (real) [Pa]

λ(v)0 VISCOUS1ST LAMECONSTANT (real) [Pa]

µ(v)0 VISCOUS2ND LAMECONSTANT (real) [Pa]

G0 SHEARMODULUS (real) [Pa]K0 BULK MODULUS (real) [Pa]

G(v)0 VISCOUSSHEARMODULUS (real) [Pa]

K(v)0 VISCOUSBULK MODULUS (real) [Pa]

E0 YOUNGMODULUS (real) [Pa]ν0 POISSONCOEFFICIENT (real) [-]

E(v)0 VISCOUSYOUNGMODULUS (real) [Pa]

ν(v)0 VISCOUSPOISSONCOEFFICIENT (real) [-]

2.4 Plasticity

The distinguishing characteristic of plasticity is the existence of a permanent residual deformation upon un-loading, provided that the solid was strained beyond a critical yield limit. Plastic behaviour is thus clearlyirreversible. In other words, plastic solids (i.e. solids in the plastic range) exhibit a memory effect, which, in astandard thermodynamic description, is modelled byinternal variables.

Plasticity in (poly)crystalline solids (e.g. metals) is linked to the existence of lattice defects, calleddislocations,and their motion. These dislocations can slide on specific crystalline planes and in specific directions (slipsystems) determined by the structure of the lattice (e.g. f.c.c., b.c.c., h.c.p.) [?]. Crystal plasticitymodelsdescribe the plastic flow at the lattice level, using slip strains and dislocation densities associated to each slipsystem.

Plasticity can also be described at a larger scale, aggregating the behaviour of many individual crystalline grainsinto a macroscopic homogenized model. Different approaches are then possible to model the plastic flow. In thefollowing we will specifically considerMisesandTrescamodels of plasticity. Note that this type of plasticitymodels is also suitable to describe non-crystalline materials, such as soils, rocks or concrete.

2.4.1 Variational plasticity

The variational plasticity models implemented in MATL IB are based on the variational formulation for finiteplasticity initially proposed by Ortiz and Stainier [?]. Here, we will briefly summarize the main features of thisformulation.

We place ourselves in the framework of alocal stateapproach to solid mechanics, where the mechanical stateat a given material point is entirely described by the gradient of deformationF and a suitably chosen set ofinternal variablesQ representing the past history of deformation.

Elastoplastic solids are characterized by the existence of a certain class of deformationsF p, or plasticdefor-mations, which leave the crystal lattice undistorted and unrotated, and, consequently, induce no long-range

Page 18: matlib ref

CHAPTER 2. CONSTITUTIVE MODELS 17

stresses. In addition to the plastic deformationF p, some degree of lattice distortionF e, or elasticdeformation,may also be expected in general. One therefore has, locally,

F = F eF p (2.42)

This multiplicative elastic-plastic kinematics was first suggested by Lee [?], and further developped and usedby many others.

2.4.2 Variational crystal plasticity

2.4.3 Variational Mises plasticity

2.4.3.a General description

2.4.3.b Linearized model

2.4.3.c Isotropic finite Mises plasticity

Page 19: matlib ref

Appendices

Page 20: matlib ref

Appendix A

Data Structures

A.1 Mechanics

For mechanical models, theMaterialState arrays contain the components of strain (grad ) and stress(flux ) tensors. The exact nature of these tensors depends on the kinematic assumptions taken.

A.1.1 Finite strains

In finite strains models, the strain tensor considered is the gradient of deformationF . Its components are storedin an array rowwise (C-style):

(3D) : grad = {F11, F12, F13, F21, F22, F23, F31, F32, F33} (A.1)

(2D) : grad = {F11, F12, F21, F22, F33} (A.2)

(1D) : grad = {F11, F22, F33} (A.3)

Similarly, the stress tensor considered is that conjugate to the gradient of deformation, i.e. the first Piola-Kirchhoff stress tensorP :

(3D) : flux = {P11, P12, P13, P21, P22, P23, P31, P32, P33} (A.4)

(2D) : flux = {P11, P12, P21, P22, P33} (A.5)

(1D) : flux = {P11, P22, P33} (A.6)

In 2D and 1D, all components not stored in the above arrays always remain equal to zero. Note that otherstress tensors can be computed from the gradient of deformation and the first Piola-Kirchhoff stress tensors, asindicated in Table A.1.

A.1.2 Linearized kinematics

In linearized kinematics (small strains), the strain tensor considered is the symmetric engineering strain tensorε. Its lower-triangular components are stored in an array rowwise (C-style):

(3D) : grad = {ε11, γ12, ε22, γ13, γ23, ε33} (A.7)

(2D) : grad = {ε11, γ12, ε22, ε33} (A.8)

(1D) : grad = {ε11, ε22, ε33} (A.9)

Page 21: matlib ref

APPENDIX A. DATA STRUCTURES 20

Table A.1: Conversion table for different stress measures (J = detF )P S τ σ

P – P = FS P = τF−T P = JσF−T

S S = F−1P – S = F−1τF−T S = JF−1τF−T

τ τ = PF T τ = FSF T – τ = Jσ

σ σ = J−1PF T σ = J−1FSF T σ = J−1τ –

with the strainεij = 12( ∂ui

∂xj+ ∂uj

∂xi) and the shear strainγij = 2εij (i 6= j). Similarly, the stress tensor considered

is that conjugate to the deformation, i.e. the Cauchy stress tensorσ:

(3D) : flux = {σ11, σ12, σ22, σ13, σ23, σ33} (A.10)

(2D) : flux = {σ11, σ12, σ22, σ33} (A.11)

(1D) : flux = {σ11, σ22, σ33} (A.12)

In 2D and 1D, all components not stored in the above arrays always remain equal to zero. This conventionallows to compute the energy by performing a scalar product of the two arrays:σ · ε ≡ flux · grad .

Page 22: matlib ref

Appendix B

Tensor algebra

B.1 Algorithm for polar decomposition

For some constitutive formulations, it is necessary to perform a polar decomposition of the gradient of defor-mation into a rotation and a stretch tensor:

F = RU (B.1)

whereR is an orthogonal tensor (RRT = I) andU is a symmetric positive semidefinite tensor, called theright stretch tensor (one can also define a left stretch tensorV such thatF = V R). The polar decompositiontheorem shows that this decomposition is unique [?, ?].

In 3 dimensions, a closed-form algorithm for the polar decomposition has been given by Simo and Hughes[?], which is based on a unified, singularity-free expression to computeU from the right Cauchy-Green tensorC [?, ?]. In 2 dimensions, thanks to the specific form of the rotation tensor, a much more simple and directalgorithm can be devised. Since[

F11 F12

F21 F22

]=

[R1 R2

−R2 R1

] [U11 U12

U12 U22

](B.2)

with R21 + R2

2 = 1, one can write

V1 = F11 + F22 = R1(U11 + U22) (B.3)

V2 = F12 − F21 = R2(U11 + U22) (B.4)

and

R1 =V1√

V 21 + V 2

2

R2 =V2√

V 21 + V 2

2

(B.5)

which yields the rotation tensor (R33 = 1). From there, one easily gets the stretch tensor:[U11 U12

U12 U22

]=

[R1 −R2

R2 R1

] [F11 F12

F21 F22

](B.6)

Page 23: matlib ref

Bibliography

[1] A. M. Cuitino and M. Ortiz. A material-independent method for extending stress update algorithms fromsmall-strain plasticity to finite plasticity with multiplicative kinematics.Engineering Computations, 9:437–451, 1992.

[2] E. Fancello, J. P. Ponthot, and L. Stainier. A variational formulation of constitutive models and up-dates in non-linear finite viscoelasticity.International Journal for Numerical Methods in Engineering,65(11):1831–1864, 2006.