# Release of versions 3.1 and 3.0.3 of TFEL/MFront (15/12/2017)

Versions 3.1 and 3.0.3 of TFEL, MFront and MTest has been released on the 15th December, 2017.

## Version 3.1

A detailed version of the release notes is available here.

### Highlights

From a user point of view, TFEL 3.1 brings many important features:

• The gallery is a list of detailed documentations about implementing clean, efficient and reliable mechanical behaviour using MFront that will be updated as TFEL and MFront evolve. In each case, the integration algorithm is fully described. The gallery currently contains $$17$$ entries covering finite strain elasticity, finite strain viscoplasticity, damage, plasticity and viscoplasticity. The gallery. Those implementations are also gathered in a cmake projects called MFrontGallery which can be cloned on github: https://github.com/thelfer/MFrontGallery
• The integration of the TFEL/NUMODIS library which provides many functionalities associated with single crystal description coming from the NUMODIS project. Those functionalities are available in MFront through many new keywords that simplify to a great extent the way small and finite strain single crystal behaviours can be written. See the following page for a detailled description: http://tfel.sourceforge.net/singlecrystal.html
• The DDIF2 behaviour is used in CEA fuel performances codes to describe cracking of the nuclear fuel. The DDIF2 brick allows this model to be easily coupled to the viscplastic behaviour of the fuel material and can be used as easily as the StandardElasticity brick. See this page for details: http://tfel.sourceforge.net/ddif2.html
• An important work has been devoted to enhance the overall numerical reproducibility and stability of the algorithms of TFEL/Math. It is now much safer to use the -ffast-math option in gcc and clang which can drastically increase the efficiency of the generated code. This option is automatically added when using the --obuild=level2 option of mfront. See the release notes for details.
• Support for the Hershey/Hosford yield criteria which generalizes the Mises criteria. Indeed the Hershey/Hosford yield criteria lies between the Mises criteria and the Tresca criteria. Various functions have been introduced to compute the equivalent stress associated with this criteria, its first and second derivatives. See this page for details: http://tfel.sourceforge.net/tensors.html
• Support for the Barlat yield criteria which generalizes the Hill criteria. Various functions have been introduced to compute the equivalent stress associated with this criteria, its first and second derivatives. See this page for details: http://tfel.sourceforge.net/tensors.html
• Abritrary non linear constraints can now be defined in MTest.
• Better support of the Windows platform. Using the cmake generator, using mfront on windows with the Microsoft compilers is easy and closely follows the existing practices on other operating systems.
• Improved installation options. Two versions, or the same version in different flavours (compiled in debug mode, compiled with different compilers), of TFEL/MFront can now be installed in parallel. See http://tfel.sourceforge.net/install.html for details.

### Mechanical behaviours

#### New interfaces

Two new interfaces have been introduced in MFront:

• A native interface for the CalculiX solver. Here native is used to distinguish this interface from the Abaqus/Standard interface which can also be used within CalculiX. This interface can be used with CalculiX 2.13.
• An interface for the ANSYS APDL solver. The latter is still experimental.

#### The @NumericallyComputedJacobianBlocks keyword

Computing the jacobian of the implicit system is the most difficult part of implementing a behaviour. Computing the jacobian by finite difference is interesting but significantly decreases the performances of the behaviour and can be (very) sensitive to the choice of the numerical perturbation.

The @NumericallyComputedJacobianBlocks keyword is used select a list of jacobian blocks that have to be computed numerically. This is more efficient than computing the whole jacobian numerically. Combined with the ability to compare the jacobian to a numerical approximation, the user now has the ability to build the jacobian incrementally, block by block and checks at each steps that their analytical expressions are correct.

### Portability

Portability is a convincing sign of software quality and maintainability:

• usage of functionalities specific to operating systems are well identified.
• it demonstrates that the code is not dependant of the system libraries, such as the C or C++ libraries.

TFEL has been tested successfully on a various flavours of LinuX and BSD systems (including FreeBSD and OpenBSD). The first ones are mostly build on gcc, libstdc++ and the glibc. The second ones are build on clang and libc++.

TFEL can be build on Windows in a wide variety of configurations and compilers:

• native ports can be build using the Visual Studio (2015 and 2017) or MingGW compilers.
• TFEL can be build in the Cygwin environment.

TFEL have reported to build successfully in the Windows Subsystem for LinuX (WSL) environment.

Although not officially supported, more exotic systems, such as OpenSolaris and Haiku, have also been tested successfully. The Minix operating systems provides a pre-release of clang 3.4 that fails to compile TFEL.

#### Supported compilers

Version 3.1 has been tested using the following compilers:

• gcc on various POSIX systems: versions 4.7, 4.8, 4.9, 5.1, 5.2, 6.1, 6.2, 7.1, 7.2
• clang on various POSIX systems: versions 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0
• intel. The only tested version is the 2018 version on LinuX. Intel compilers 15 and 16 are known not to work due to a bug in the EDG front-end that can't parse a syntax mandatory for the expression template engine. The same bug affects the Blitz++ library (see http://dsec.pku.edu.cn/~mendl/blitz/manual/blitz11.html). Version 2017 shall work but were not tested.
• Visual Studio The only supported versions are the 2015 and 2017 versions. Previous versions do not provide a suitable C++11 support.
• PGI compiler (NVIDIA): version 17.10 on LinuX
• MinGW has been tested successfully in a wide variety of configurations/versions, including the version delivered with Cast3M 2017.

#### Benchmarcks

A comparison of various compilers and specific options
Compiler and options Success ratio Test time
gcc 4.9.2 100% tests passed 681.19 sec
gcc 4.9.2+fast-math 100% tests passed 572.48 sec
clang 3.5 100% tests passed 662.50 sec
clang 3.5+libstcxx 99% tests passed 572.18 sec
clang 5.0 100% tests passed 662.50 sec
icpc 2018 100% tests passed 511.08 sec
PGI 17.10 99% tests passed 662.61 sec

Concerning the PGI compilers, performances may be affected by the fact that this compiler generates huge shared libraries (three to ten times larger than other compilers).

## Version 3.0.3

This is mainly a bug fix version of the 3.0 series. Detailed release notes are available here. There are no known regressions.

# New entry in the gallery: perfect plasticity based on the Green yield criterion (30/11/2017)

The Green yield criterion is based on the definition of an equivalent stress $${\sigma_{\mathrm{eq}}}$$ defined as follows: ${\sigma_{\mathrm{eq}}}=\sqrt{{{{\displaystyle \frac{\displaystyle 3}{\displaystyle 2}}}}\,C\,{\underline{s}}\,\colon\,{\underline{s}}-F\,{{\mathrm{tr}{{\left({\underline{\sigma}}\right)}}}}^{2}}$ where $${\underline{s}}$$ is the deviatoric stress tensor: ${\underline{s}}={\underline{\sigma}}-{{{\displaystyle \frac{\displaystyle 1}{\displaystyle 3}}}}\,{{\mathrm{tr}{{\left({\underline{\sigma}}\right)}}}}\,{\underline{I}}$

A new entry in the gallery shows how to build a perfect plastic behaviour based on this equivalent stress. The implementation is available here: https://github.com/thelfer/MFrontGallery/blob/master/generic-behaviours/plasticity/GreenPerfectPlasticity.mfront

# Barlat stress (24/11/2017)

Functions to compute the Barlat equivalent stress and its first and second derivatives are now available in TFEL/Material.

The Barlat equivalent stress is defined as follows (See Barlat et al. (2005)): ${\sigma_{\mathrm{eq}}}^{B}= \sqrt[a]{ \frac{1}{4}\left( \sum_{i=0}^{3} \sum_{j=0}^{3} {{\left|s'_{i}-s''_{j}\right|}}^{a} \right) }$

where $$s'_{i}$$ and $$s''_{i}$$ are the eigenvalues of two transformed stresses $${\underline{s}}'$$ and $${\underline{s}}''$$ by two linear transformation $${\underline{\underline{\mathbf{L}}}}'$$ and $${\underline{\underline{\mathbf{L}}}}''$$: \left\{ \begin{aligned} {\underline{s}}' &= {\underline{\underline{\mathbf{L'}}}} \,\colon\,{\underline{\sigma}}\\ {\underline{s}}'' &= {\underline{\underline{\mathbf{L''}}}}\,\colon\,{\underline{\sigma}}\\ \end{aligned} \right.

The linear transformations $${\underline{\underline{\mathbf{L}}}}'$$ and $${\underline{\underline{\mathbf{L}}}}''$$ are defined by $$9$$ coefficients (each) which describe the material orthotropy. There are defined through auxiliary linear transformations $${\underline{\underline{\mathbf{C}}}}'$$ and $${\underline{\underline{\mathbf{C}}}}''$$ as follows: \begin{aligned} {\underline{\underline{\mathbf{L}}}}' &={\underline{\underline{\mathbf{C}}}}'\,\colon\,{\underline{\underline{\mathbf{M}}}} \\ {\underline{\underline{\mathbf{L}}}}''&={\underline{\underline{\mathbf{C}}}}''\,\colon\,{\underline{\underline{\mathbf{M}}}} \end{aligned} where $${\underline{\underline{\mathbf{M}}}}$$ is the transformation of the stress to its deviator: ${\underline{\underline{\mathbf{M}}}}={\underline{\underline{\mathbf{I}}}}-{{{\displaystyle \frac{\displaystyle 1}{\displaystyle 3}}}}{\underline{I}}\,\otimes\,{\underline{I}}$

The linear transformations of the deaviator stress $${\underline{\underline{\mathbf{C}}}}'$$ and $${\underline{\underline{\mathbf{C}}}}''$$, are defined as follows: ${\underline{\underline{\mathbf{C}}}}'= {{{\displaystyle \frac{\displaystyle 1}{\displaystyle 3}}}}\, \begin{pmatrix} 0 & -c'_{12} & -c'_{13} & 0 & 0 & 0 \\ -c'_{21} & 0 & -c'_{23} & 0 & 0 & 0 \\ -c'_{31} & -c'_{32} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & c'_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & c'_{55} & 0 \\ 0 & 0 & 0 & 0 & 0 & c'_{66} \\ \end{pmatrix} \quad \text{and} \quad {\underline{\underline{\mathbf{C}}}}''= \begin{pmatrix} 0 & -c''_{12} & -c''_{13} & 0 & 0 & 0 \\ -c''_{21} & 0 & -c''_{23} & 0 & 0 & 0 \\ -c''_{31} & -c''_{32} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & c''_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & c''_{55} & 0 \\ 0 & 0 & 0 & 0 & 0 & c''_{66} \\ \end{pmatrix}$

When all the coefficients $$c'_{ji}$$ and $$c''_{ji}$$ are equal to $$1$$, the Barlat equivalent stress reduces to the Hosford equivalent stress.

The following function has been implemented:

• computeBarlatStress: return the Barlat equivalent stress
• computeBarlatStressNormal: return a tuple containg the Barlat equivalent stress and its first derivative (the normal)
• computeBarlatStressSecondDerivative: return a tuple containg the Barlat equivalent stress, its first derivative (the normal) and the second derivative.

The implementation of those functions are greatly inspired by the work of Scherzinger (see Scherzinger (2017)). In particular, great care is given to avoid overflows in the computations of the Barlat stress.

Those functions have two template parameters:

• the type of symmetric tensors used for the stress tensor (automatically deduced, but required if the second parameter is specified).
• the eigen solver to be used.

## Example

The following example computes the Hosford equivalent stress, its normal and second derivative:

const auto l1 = makeBarlatLinearTransformation<N,double>(-0.069888,0.936408,
0.079143,1.003060,
0.524741,1.363180,
1.023770,1.069060,
0.954322);
const auto l2 = makeBarlatLinearTransformation<N,double>(-0.981171,0.476741,
0.575316,0.866827,
1.145010,-0.079294,
1.051660,1.147100,
1.404620);
stress seq;
Stensor  n;
Stensor4 dn;
std::tie(seq,n,dn) = computeBarlatStressSecondDerivative(s,l1,l2,a,seps);

In this example, s is the stress tensor, a is the Hosford exponent, seps is a numerical parameter used to detect when two eigenvalues are equal.

If C++-17 is available, the previous code can be made much more readable:

const auto l1 = makeBarlatLinearTransformation<N,double>(-0.069888,0.936408,
0.079143,1.003060,
0.524741,1.363180,
1.023770,1.069060,
0.954322);
const auto l2 = makeBarlatLinearTransformation<N,double>(-0.981171,0.476741,
0.575316,0.866827,
1.145010,-0.079294,
1.051660,1.147100,
1.404620);
const auto [seq,n,dn] = computeBarlatStressSecondDerivative(s,l1,l2,a,seps);

# Hosford equivalent stress (17/10/2017)

The header TFEL/Material/Hosford.hxx introduces three functions which are meant to compute the Hosford equivalent stress and its first and second derivatives. This header is automatically included by MFront

The Hosford equivalent stress is defined by: ${\sigma_{\mathrm{eq}}}=\sqrt{{{{\displaystyle \frac{\displaystyle 1}{\displaystyle 2}}}}{{\left({{\left|\sigma_{1}-\sigma_{2}\right|}}^{2}+{{\left|\sigma_{1}-\sigma_{3}\right|}}^{2}+{{\left|\sigma_{2}-\sigma_{3}\right|}}^{2}\right)}}}$ where $$s_{1}$$, $$s_{2}$$ and $$s_{3}$$ are the eigenvalues of the stress.

Therefore, when $$a$$ goes to infinity, the Hosford stress reduces to the Tresca stress. When $$n = 2$$ the Hosford stress reduces to the von Mises stress.

The following function has been implemented:

• computeHosfordStress: return the Hosford equivalent stress
• computeHosfordStressNormal: return a tuple containg the Hosford equivalent stress and its first derivative (the normal)
• computeHosfordStressSecondDerivative: return a tuple containg the Hosford equivalent stress, its first derivative (the normal) and the second derivative.

## Example

The following example computes the Hosford equivalent stress, its normal and second derivative:

stress seq;
Stensor  n;
Stensor4 dn;
std::tie(seq,n,dn) = computeHosfordStressSecondDerivative(s,a,seps);

In this example, s is the stress tensor, a is the Hosford exponent, seps is a numerical parameter used to detect when two eigenvalues are equal.

If C++-17 is available, the previous code can be made much more readable:

const auto [seq,n,dn] = computeHosfordStressSecondDerivative(s,a,seps);

# Release of TFEL3.0.2 (25/10/2017)

Version 3.0.2 of TFEL, MFront and MTest has been released on the 25th October, 2017.

This is mainly a bug fix version of the 3.0 series. Detailed release notes are available here. There are no known regressions.

# Behaviours for modelling mild steel (14/09/2017)

Thanks to Guillaume Michal, University of Wollongong (NSW, Australia), several implementation of behaviours suitable for the description of mild steel are now available:

• Three versions of the Johnson-Cook behaviour:
• JohnsonCook_s: which describes strain hardening but does not describe rate effects,
• JohnsonCook_ssr : which describes both strain hardening and rate effects.
• JohnsonCook_ssrt: which describes both strain hardening, rate effects and adiabatic heating.
• The Rusinek-Klepaczko law as described in: "Constitutive relations in 3-D for a wide range of strain rates and temperatures - Application to mild steels". A. Rusinek, R. Zaera and J. R. Klepaczko. Int. J. of Solids and Structures, Vol. 44, 5611-5634, 2007.

# Support for the total lagragian framework in Code_Aster

Thanks to M. Abbas, MFront finite strain behaviours can now be used in the total lagragian framework in Code_Aster (called GROT_GDEP). First tests confirm that the robustness and the effiency of this framework are much better than with the SIMO_MIEHE framework.

# First tests of MFront in the WindowsSubsystem for LinuX environment (3/08/2017)

After Visual Studio, Mingw and Cygwin, there is a new way to get MFront working on Windows !

Rafal Brzegowy have successfully compiled and tested MFront using the Windows Subsystem for LinuX (WSL). He was able to use MFront generated behaviours with CalculiX delivered by the bConverged suite.

All tests worked, except some tests related to the long double support in WSL.

TFEL and MFront now have their official twitter account !

We will use it to spread various events and developments make in TFEL and MFront.

# A spanish introduction to MFront and Salome-Meca (1/08/2017)

Thanks to Jordi Alberich, a spanish introduction to MFront and Salome-Meca is available here:

http://tfel.sourceforge.net/tutorial-spanish.html

# The talks of the third MFront Users Day (21 June 2017)

The talks of the third MFront Users Day are available here:

https://github.com/thelfer/tfel-doc

# Cast3m 2017 is out (12 May 2017)

Cast3M 2017 has been released.

A binary version of TFEL compiled for Cast3M 2017 is now available for download on sourceforge:

https://sourceforge.net/projects/tfel/files/

# Non linear constraints with MTest

Arbitrary non linear constraints can be now imposed in MTest using @NonLinearConstraint keyword.

## Applications

Abritray non linear constraints can be used to:

• Impose a constant stress triaxiality.
• Impose a constant first Piola-Kirchoff stress in a creep test described in finite strain.

## On the physical meaning of a constraint

A constraint $$c$$ is imposed by introducing a Lagrange multiplier $$\lambda$$.

Consider a small strain elastic behaviour characterised by its free energy $$\Psi$$. In the only loading is the constraint $$c$$, the solution satisfies: $\underset{\underline{\varepsilon},\lambda}{\min}\Psi-\lambda\,c$

In this case, the constraint $$c$$ is equivalent to the following imposed stress:

$-\lambda\,{{\displaystyle \frac{\displaystyle \partial c}{\displaystyle \partial \underline{\varepsilon}}}}$

If the constraint is $$\sigma_{xx}-\sigma_{0}$$, where $$\sigma_{0}$$ is a constant value, the previous equation shows that imposing this constraint is not equivalent to imposing an uniaxial stress state $$\left(\sigma_{xx}\,0\,0\,0\,0\,0\right)$$.

# [MFront Gallery] How to implement an isotropic viscoplastic behaviour with several kinematic variables following the Amstrong-Frederic evolution (27/03/2017)

The implementation of an an isotropic viscoplastic behaviour with several kinematic variables following the Amstrong-Frederic evolution law is described here

The behaviour is described by a standard split of the strain $${{\underline{\varepsilon}}^{\mathrm{to}}}$$ in an elastic and a plastic parts, respectively denoted $${{\underline{\varepsilon}}^{\mathrm{el}}}$$ and $${{\underline{\varepsilon}}^{\mathrm{vis}}}$$:

${{\underline{\varepsilon}}^{\mathrm{to}}}={{\underline{\varepsilon}}^{\mathrm{el}}}+{{\underline{\varepsilon}}^{\mathrm{vis}}}$

## Elastic behaviour

The stress $${\underline{\sigma}}$$ is related to the the elastic strain $${{\underline{\varepsilon}}^{\mathrm{el}}}$$ by a the standard Hooke behaviour:

${\underline{\sigma}}= \lambda\,{{\mathrm{tr}{{\left({{\underline{\varepsilon}}^{\mathrm{el}}}\right)}}}}\,{\underline{I}}+2\,\mu\,{{\underline{\varepsilon}}^{\mathrm{el}}}$

## Viscoplastic behaviour

The viscoplastic behaviour follows a standard viscoplastic behaviour: ${{\underline{\dot{\varepsilon}}}^{\mathrm{vis}}}=\left\langle{{{\displaystyle \frac{\displaystyle F}{\displaystyle K}}}}\right\rangle^{m}\,{\underline{n}}=\dot{p}\,{\underline{n}}$

where $$F$$ is the yield surface defined below, $$<.>$$ is Macaulay brackets, $${\underline{n}}$$ is the normal to $$F$$ with respect to the stress and $$p$$ is the equivalent plastic strain.

The yield surface is defined by: $F{{\left({\underline{\sigma}},{\underline{X}}_{i},p\right)}}={{\left({\underline{\sigma}}-\sum_{i=1}^{N}{\underline{X}}_{i}\right)}}_{\mathrm{eq}}-R{{\left(p\right)}}=s^{e}_{\mathrm{eq}}-R{{\left(p\right)}}$

where:

• $$R{{\left(p\right)}}$$ describes the isotropic hardening as a function of the equivalent viscoplastic strain $$p$$.
• the $$N$$ tensors $${\underline{X}}_{i}$$ (i) are backstresses describing the kinematic hardening.
• $${{\left(.\right)}}_{\mathrm{eq}}$$ is the Von Mises norm.

We have introduced an effective deviatoric stress $${\underline{s}}^{e}$$ defined by: ${\underline{s}}^{e}={\underline{s}}-\sum_{i=1}^{N}{\underline{X}}_{i}$ where $${\underline{s}}$$ is the deviatoric part of the stress.

The normal is then given by: ${\underline{n}}={{\displaystyle \frac{\displaystyle \partial F}{\displaystyle \partial {\underline{\sigma}}}}}={{{\displaystyle \frac{\displaystyle 3}{\displaystyle 2}}}}\,{{{\displaystyle \frac{\displaystyle {\underline{s}}^{e}}{\displaystyle s^{e}_{\mathrm{eq}}}}}}$

## Evolution of the isotropic hardening

The isotropic hardening is defined by: $R{{\left(p\right)}}=R_{\infty} + {{\left(R_{0}-R_{\infty}\right)}}\,\exp{{\left(-b\,p\right)}}$

## Evolution of the kinematic hardenings

${\underline{X}}_{i}={{{\displaystyle \frac{\displaystyle 2}{\displaystyle 3}}}}\,C_{i}\,{\underline{a}}_{i}$

The evolution of the kinematic variables $${\underline{a}}_{i}$$ follows the Armstrong-Frederic rule:

${\underline{\dot{a}}}_{i}={{\underline{\dot{\varepsilon}}}^{\mathrm{vis}}}-g[i]\,{\underline{a}}_{i}\,\dot{p}=\dot{p}\,{{\left({\underline{n}}-g[i]\,{\underline{a}}_{i}\right)}}$

# Third MFront Users Day

CEA and EDF are pleased to announce that the third MFront users meeting will take place on May 30th 2017 and will be organized by CEA DEC/SESC at CEA Saclay in the DIGITEO building (building 565, room 34).

Researchers and engineers willing to present their works are welcome.

They may contact the organizers for information at: .

Registration by sending an email at the previous address before May 12th is required to ensure proper organization.

# Announcing the tfel-plot project

The tfel-plot project is meant to create:

• a C++11 library for generating 2D plots based on the Qt library (version 4 or version 5).
• a drop-in replacement of gnuplot called tplot.

This project is based on:

Compared to gnuplot, we wanted to introduced the following new features:

• The ability to select a curve and modify its properties (color, line width, line style, etc..) interactively.
• The ability to use tplot from the command line.
• A widget that can be used in every Qt code.
• The ability to load C functions in shared libraries, such a the ones generated by the MFront code generator.
• Usage of some features introduced by the TFEL project such as:
• kriging interpolation.
• the ability to differentiate functions using the diff operator.
• Support for themes.

More details can be found on the dedicated github page:

https://github.com/thelfer/tfel-plot

# [MFront Gallery] Description of the implementation of a simple orthotropic behaviour (27/01/2017)

A new example has been added in the gallery here.

This example describes a simple orthotropic behaviour.

The behaviour is described by a standard split of the strain $${{\underline{\varepsilon}}^{\mathrm{to}}}$$ in an elastic and a plastic parts, respectively denoted $${{\underline{\varepsilon}}^{\mathrm{el}}}$$ and $${{\underline{\varepsilon}}^{\mathrm{p}}}$$:

${{\underline{\varepsilon}}^{\mathrm{to}}}={{\underline{\varepsilon}}^{\mathrm{el}}}+{{\underline{\varepsilon}}^{\mathrm{p}}}$

## Elastic behaviour

The stress $${\underline{\sigma}}$$ is related to the the elastic strain $${{\underline{\varepsilon}}^{\mathrm{el}}}$$ by a the orthotropic elastic stiffness $${\underline{\underline{\mathbf{D}}}}$$:

${\underline{\sigma}}= {\underline{\underline{\mathbf{D}}}}\,\colon\,{{\underline{\varepsilon}}^{\mathrm{el}}}$

The plastic part of the behaviour is described by the following yield surface: $f{{\left({\sigma_{H}},p\right)}} = {\sigma_{H}}-\sigma_{0}-R\,p$

where $${\sigma_{H}}$$ is the Hill stress defined below, $$p$$ is the equivalent plastic strain. $$\sigma_{0}$$ is the yield stress and $$R$$ is the hardening slope.

The Hill stress $${\sigma_{H}}$$ is defined using the fourth order Hill tensor $$H$$: ${\sigma_{H}}=\sqrt{{\underline{\sigma}}\,\colon\,{\underline{\underline{\mathbf{H}}}}\colon\,{\underline{\sigma}}}$

The plastic flow is assumed to be associated, so the flow direction $${\underline{n}}$$ is given by $${{\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial {\underline{\sigma}}}}}$$:

${\underline{n}} = {{\displaystyle \frac{\displaystyle \partial f}{\displaystyle \partial {\underline{\sigma}}}}} = {{{\displaystyle \frac{\displaystyle 1}{\displaystyle {\sigma_{H}}}}}}\,{\underline{\underline{\mathbf{H}}}}\,\colon\,{\underline{\sigma}}$

# New eigensolvers (23/01/2017)

The default eigen solver for symmetric tensors used in TFEL is based on analitical computations of the eigen values and eigen vectors. Such computations are more efficient but less accurate than the iterative Jacobi algorithm (see (Kopp 2008; Kopp 2017)).

With the courtesy of Joachim Kopp, we have introduced the following algorithms:

• Jacobi
• QL with implicit shifts
• Cuppen
• Analytical
• Hybrid
• Householder reduction

The implementation of Joachim Kopp have been updated for C++-11 and make more generic (support of all the floatting point numbers, different types of matrix/vector objects). The algorithms have been put in a separate namespace called fses (Fast Symmetric Eigen Solver) and is independant of the rest of TFEL.

We have also introduced the Jacobi implementation of the Geometric Tools library (see (Eberly 2016; Eberly 2017)).

Those algorithms are available in 3D. For 2D symmetric tensors, we fall back to some default algorithm as described below.

Table 1: List of available eigen solvers.
Name Algorithm in 3D Algorithm in 2D
TFELEIGENSOLVER Analytical (TFEL) Analytical (TFEL)
FSESJACOBIEIGENSOLVER Jacobi Analytical (FSES)
FSESQLEIGENSOLVER QL with implicit shifts Analytical (FSES)
FSESCUPPENEIGENSOLVER Cuppen's Divide & Conquer Analytical (FSES)
FSESANALYTICALEIGENSOLVER Analytical Analytical (FSES)
FSESHYBRIDEIGENSOLVER Hybrid Analytical (FSES)
GTESYMMETRICQREIGENSOLVER Symmetric QR Analytical (TFEL)

The various eigen solvers available are enumerated in Table  1.

The eigen solver is passed as a template argument of the computeEigenValues or the computeEigenVectors methods as illustrated in the code below:

tmatrix<3u,3u,real> m2;
tvector<3u,real>    vp2;
std::tie(vp,m)=s.computeEigenVectors<Stensor::GTESYMMETRICQREIGENSOLVER>();
Table 2: Test on $$10^{6}$$ random symmetric tensors in double precision (double).
Algorithm Failure ratio $$\Delta_{\infty}$$ Times (ns) Time ratio
TFELEIGENSOLVER 0.000632 7.75e-14 252663338 1
GTESYMMETRICQREIGENSOLVER 0 2.06e-15 525845499 2.08
FSESJACOBIEIGENSOLVER 0 1.05e-15 489507133 1.94
FSESQLEIGENSOLVER 0.000422 3.30e-15 367599140 1.45
FSESCUPPENEIGENSOLVER 0.020174 5.79e-15 374190684 1.48
FSESHYBRIDEIGENSOLVER 0.090065 3.53e-10 154911762 0.61
FSESANALYTICALEIGENSOLVER 0.110399 1.09e-09 157613994 0.62

#### Some benchmarks

We have compared the available algorithm on $$10^{6}$$ random symmetric tensors whose components are in $$[-1:1]$$.

For a given symmetric tensor, we consider that the computation of the eigenvalues and eigenvectors failed if: $\Delta_{\infty}=\max_{i\in[1,2,3]}\left\|{\underline{s}}\,\cdot\,\vec{v}_{i}-\lambda_{i}\,\vec{v}_{i}\right\|>10\,\varepsilon$ where $$\varepsilon$$ is the accuracy of the floatting point considered.

The results of those tests are reported on Table  2:

• The standard eigen solver available in previous versions of TFEL offers a very interesting compromise between accuracy and numerical efficiency.
• If very accurate results are required, the FSESJACOBIEIGENSOLVER eigen solver is a good choice.

# Official port of TFEL for FreeBSD (20/01/2017)

Thanks to the work of Pedro F. Giffuni , an official port of TFEL/MFront is available for FreeBSD:

http://www.freshports.org/science/tfel/

To install an executable package, you can now simply do:

pkg install tfel-mfront

Alternativel, to build and install TFEL from the ports tree, one can do:

cd /usr/ports/science/tfel/
make
make install

# New hyper(visco)elastic behaviours in the MFront model repository (13/01/2017)

The implementation of the Ogden behaviour is now described in depth in the following page:

http://tfel.sourceforge.net/ogden.html

This behaviour is interesting as it highlights the features introduced in TFEL-3.0 for computing isotropic functions of symmetric tensors.

http://tfel.sourceforge.net/hyperelasticity.html

Concerning hyperviscoelasticity, a page describing a generic implementation is available here:

http://tfel.sourceforge.net/hyperviscoelasticity.html

If you have particular wishes on behaviours implementation that you would like to see treated, do not hesitate to send a message at .

# MFront model repository (7/01/2017)

A page referencing examples of well written mechanical behaviours has been created here:

http://tfel.sourceforge.net/gallery.html

For each behaviours, we will try to provide tutorial-like pages explaining the implementations details (usage of tensorial objects, special functions of the TFEL library, choice of the algorithms, and so on...)

The first attempt is an hyperelastic behaviour already available in Code_Aster: the Signorini behaviour. You can find the page here:

http://tfel.sourceforge.net/signorini.html

This is still under review, so corrections and feed-backs would be greatly appreciated. The following behaviours are planned to be addressed:

• the Ogden hyperelastic behaviour which will show how we can compute eigenvalues, eigenvectors and isotropic functions of symmetric tensors.
• hyperviscoelasticity (a very small extension of hyperelasticity, indeed)
• simple plastic behaviours

If you have particular wishes on behaviours implementation that you would like to see treated, do not hesitate to send a message at .

# TFEL version 3.0 has been released the 16/12/2016.

From a user point of view, TFEL 3.0 brings many game-changing features:

• New mechanical behaviour interfaces to several finite element solvers (Europlexus, Abaqus/Standard, Abaqus/Explicit, CalculiX)
• The support of behaviours bricks.
• The ability to simulate pipes using a rigourous finite strain framework in MTest.
• The introduction of various accelerations algorithms used for solving the mechanical equilibrium when the consistent tangent operator is not available.
• The development of a stable API (application programming interface) in C++ and python which allow building external tools upon MFront and MTest. This point is illustrated by the development by EDF MMC in the Material Ageing Plateform of a new identification tool which is particularly interesting.

Many improvements for mechanical behaviours have also been made:

• Definition and automatic computation of elastic material properties from external MFront files.
• Support for the automatic computation of the thermal expansion and swelling in the mechanical behaviour.
• Better support for orthotropic behaviours with the notion of orthotropic convention which affects various keywords (@ComputeStiffnessTensor, @ComputeThermalExpansion, @Swelling, @AxialGrowth, @HillTensor etc..).
• An initial support of non local mechanical behaviours.
• Time steps management from the mechanical behaviour.
• Consistent tangent operator support in the Cast3M interface.
• Easier computations of isotropic functions of symmetric tensors and their derivatives.
• New material properties interfaces for various programming languages (fortran03, java, GNU/Octave).

A detailed version of the release notes is available here.

# A new behaviour implementation, called UnilateralMazars (1 June 2016)

A new behaviour implementation has been submitted by F. Hamon (EDF R&D AMA). This behaviour describes the damaging behaviour of concrete with unilateral effects as described in a dedicated paper:

A new 3D damage model for concrete under monotonic, cyclic and dynamic loadings. Jacky Mazars, François Hamon and Stéphane Grange. Materials and Structures ISSN 1359-5997 DOI 10.1617/s11527-014-0439-8

This implementation can be found in the current development sources of MFront.

# Progress in the Abaqus Explicit interface (VUMAT) (28 May 2016)

The Abaqus Explicit interface is becoming quite usable du to the extensive testing efforts of D. Deloison (Airbus). Here is an example a punching test (This test was also modelled using Abaqus Standard).

# Documentation of behaviour bricks (27 May 2016)

@Brick "StandardElasticity";

Behaviour bricks will be one of the most important new feature of TFEL 3.0.

A dedicated page has been created here

# The EUROPLEXUS interface (27 May 2016)

An interface for the EUROPLEXUS explicit finite element solver has been developed.

EUROPLEXUS (EPX) is a simulation software dedicated to the analysis of fast transient phenomena involving structures and fluids in interaction.

# tfel-docgithub repository. Talks of the Second MFront Users Day (27 May 2016)

A github repository has been set up to store various documents describing TFEL and MFront usage. The talks of the first and second MFront Users Days are available there:

https://github.com/thelfer/tfel-doc

# TFEL github repository (27 May 2016)

The subversion repository used by CEA and EDF are now synchronized with a public githbub repository:

https://github.com/thelfer/tfel

All the branches, commit description and history of TFEL are available. This repository is read-only. Its purpose is to integrate TFEL in continous-integration projects which depends on TFEL.

# Announcing the mfront module (May 2016)

A new python module has been introduced to analyse MFront files.

An overview of the module is available here.

Here is a typical usage example:

import mfront

dsl = mfront.getDSL("Chaboche.mfront")
dsl.setInterfaces(["aster"])
dsl.analyseFile("Chaboche.mfront",[])

# file description
fd = dsl.getFileDescription()
print("file author:      ", fd.authorName)
print("file date:        ", fd.date)
print("file descrption:\n", fd.description)

# targets information
tgt = dsl.getTargetsDescription()

# loop over (to be) generated libraries
for l in tgt:
print(l)

# Cast3m 2016 is out (28 April 2016)

Cast3M 2016 has been released.

This version allow even better integration with MFront and can now directly be used to make direct calls to MFront libraries for material properties (mechanical behaviours can be used since Cast3M 2015).

This syntax is now officially supported:

Ty = 'TABLE' ;
Ty.'LIB_LOI'   = 'libCastemM5.so' ;
Ty.'FCT_LOI'   = 'M5_YoungModulus' ;
Ty.'VARIABLES' = 'MOTS' 'T';

mo = 'MODELISER' m 'MECANIQUE' 'ELASTIQUE';
ma = 'MATERIAU' mo 'YOUN' Ty 'NU' 0.3;

A binary version of TFEL compiled for Cast3M 2016 is now available for download on sourceforge:

https://sourceforge.net/projects/tfel/files/

# Second MFront Users Day

CEA and EDF are pleased to announce that the second MFront users meeting will take place on May 20th 2016 and will be organized by EDF R&D at the EDF Lab Paris Saclay location.

Researchers and engineers willing to present their works are welcome. They may contact the organizers for information at: .

This users day will take place on Friday, May 20th, 2016 at EDF Lab Paris-Saclay (access map).

Registration is required to ensure proper organization. See the dedicated form on the Code_Aster website: http://www.code-aster.org/spip.php?article906

# Abaqus interface

The current development version now includes an experimental interface to the Abaqus solver through the umat subroutine.

The following results shows the results obtained on notched beam under a cyclic loading with an isotropic hardening plastic beahviour implemented with mfront:

The mfront results can be compared to the results obtained using Abaqus in-built model on the following figure:

The Abaqus interface is still in its early stage of developments. A full description of its usage and current abilities can be found in the associated documentation.

Feed-back from users would be greatly welcomed.

# IMSIA Seminar about MFront on Januar, 27 2016

An IMSIA seminar about MFront will be held on Januar, 27 2016. Here is the official announcement (in french):

Séminaire IMSIA : Implémentation de lois de comportement mécanique à l’aide du générateur de code MFront

Créé dans le cadre de la simulation des éléments combustibles nucléaire au sein d’une plate-forme logicielle nommée PLEIADES, MFront est un générateur de code, distribué en open-source [1], qui vise à permettre aux ingénieurs/chercheurs d’implémenter de manière simple et rapide des lois de comportements mécaniques de manière indépendante du code cible (EF ou FTT) [2,3].

Ce dernier point permet d’échanger les lois MFront entre différents partenaires, universitaires ou industriels. Le lien vers les codes cible se fait via la notion d’interface. A l’heure actuelle, des interfaces existent pour les codes Cast3M, Code-Aster, Abaqus, ZeBuLoN, AMITEX_FFT et d’autres codes métiers, et sont en cours de développement pour d’autres codes tels Europlexus, …

Ce séminaire proposera une description des fonctionnalités de MFront (lois en transformations infinitésimales et en grandes transformations, modèles de zones cohésives) et commentera plusieurs exemples d’applications, discutera des performances numériques obtenues et soulèvera la question de la portabilité des connaissances matériau. Nous montrerons qu’une démarche cohérente allant des expérimentations aux codes de calcul est nécessaire.

[1] http://tfel.sourceforge.net

[2] Introducing the open-source mfront code generator: Application to mechanical behaviours and material knowledge management within the PLEIADES fuel element modelling platform. Thomas Helfer, Bruno Michel, Jean-Michel Proix, Maxime Salvo, Jérôme Sercombe, Michel Casella, Computers & Mathematics with Applications, Volume 70, Issue 5, September 2015, Pages 994-1023, ISSN 0898-1221, http://dx.doi.org/10.1016/j.camwa.2015.06.027.

[3] Implantation de lois de comportement mécanique à l’aide de MFront : simplicité, efficacité, robustesse et portabilité. T. Helfer, J.M. Proix, O. Fandeur. 12ème Colloque National en Calcul des Structures 18-22 Mai 2015, Giens (Var)

# MFront and Cyrano3 at the LWR Fuel Performance Meeting 2015 (13 - 17 September 2015, Zurich, Switzerland)

A poster describing the use of MFront in EDF Cyrano3 fuel performance code has been presented at the LWR Fuel Performance Meeting 2015 (13 - 17 September 2015, Zurich, Switzerland):

# Release of version 2.0.3 (9 September 2015)

Version 2.0.3 is mostly a bug-fix release:

• Fix of a minor bug in the CxxTokenizer class which was appears when using the clang libc++ standard library. This prevented many MTest tests to work on Mac OS X.
• Fix of Ticket #9
• Fix of Ticket #10
• Fix of Ticket #11
• The class ExternalBehaviourDescription was introduced
• The AxialGrowth entry was added to the glossary

A full description of the 2.0.3 release can be found here (in french).

# Introducting mfront-doc (19 August 2015)

mfront-doc allows the user to extract the documentation out of MFront file. mfront-doc generates files in pandoc markdown format. Those files can be processed using pandoc and be converted to one of the many file format supported by pandoc, including LaTeX, html or various Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT.

mfront-doc is developped in the 3.0.x branche of TFEL. A overview of the mfront-doc functionalities can be found here.

# New documentations pages (18 August 2015)

New documentation pages were added to describe the MTest and MFront keywords:

# New interfaces for material properties (July 2015)

The current development version of MFront includes two new interfaces for material properties:

Here is an example of a GNU Octave session used to compute the Young Modulus of uranium-plutonium carbide $$UPuC$$ for various porosities over a range of temperatures:

octave:1> T=[300:100:1500]
T =
300    400    500    600    700    800    900   1000   1100   1200   1300   1400   1500
octave:2> y01=UPuC_YoungModulus(T,0.1)
y01 =
1.7025e+11   1.6888e+11   1.6752e+11   1.6616e+11   1.6480e+11   1.6344e+11   1.6207e+11   1.6071e+11   1.5935e+11   1.5799e+11   1.5662e+11   1.5526e+11   1.5390e+11
octave:3> y02=UPuC_YoungModulus(T,0.2)
y02 =
1.1853e+11   1.1758e+11   1.1663e+11   1.1568e+11   1.1474e+11   1.1379e+11   1.1284e+11   1.1189e+11   1.1094e+11   1.0999e+11   1.0905e+11   1.0810e+11   1.0715e+11

# A "publications" page has been added to the website (July 2015)

The number of papers in which MFront is used is increasing. A dedicated page has been added here.

If you publish papers which refers to MFront, please consider contributing to this page.

# The paper entitled "Introducing the open-source MFront code generator ..." has been accepted for publication in Computers and Mathematics with Applications (24 june 2015)

The first paper dedicated to MFront, written by Thomas Helfer, Bruno Michel, Jean-Michel Proix, Maxime Salvo, Jérôme Sercombe, and Michel Casella, has been accepted Computers and Mathematics with Applications. The paper is available online on the sciencedirect website:

http://www.sciencedirect.com/science/article/pii/S0898122115003132

The PLEIADES software environment is devoted to the thermomechanical simulation of nuclear fuel elements behaviour under irradiation. This platform is co-developed in the framework of a research cooperative program between Électricité de France (EDF), AREVA and the French Atomic Energy Commission (CEA). As many thermomechanical solvers are used within the platform, one of the PLEAIADES’s main challenge is to propose a unified software environment for capitalisation of material knowledge coming from research and development programs on various nuclear systems.

This paper introduces a tool called mfront which is basically a code generator based on C++ (Stroustrup and Eberhardt, 2004). Domain specific languages are provided which were designed to simplify the implementations of new material properties, mechanical behaviours and simple material models. mfront was recently released under the GPL open-source licence and is available on its web site: http://tfel.sourceforge.net/.

The authors hope that it will prove useful for researchers and engineers, in particular in the field of solid mechanics. mfront interfaces generate code specific to each solver and language considered.

In this paper, after a general overview of mfront functionalities, a particular focus is made on mechanical behaviours which are by essence more complex and may have significant impact on the numerical performances of mechanical simulations. mfront users can describe all kinds of mechanical phenomena, such as viscoplasticity, plasticity and damage, for various types of mechanical behaviour (small strain or finite strain behaviour, cohesive zone models). Performance benchmarks, performed using the Code-Aster finite element solver, show that the code generated using mfront is in most cases on par or better than the behaviour implementations written in fortran natively available in this solver. The material knowledge management strategy that was set up within the PLEIADES platform is briefly discussed. A material database named sirius proposes a rigorous material verification workflow.

We illustrate the use of mfront through two case of studies: a simple FFC single crystal viscoplastic behaviour and the implementation of a recent behaviour for the fuel material which describes various phenomena: fuel cracking, plasticity and viscoplasticity.

# Castem 2015 is out (12 April 2015)

Cast3M 2015 has been released.

This release allow direct call to MFront libraries for mechanical behaviours. The following syntax of the MODELISER operator is now officially supported:

mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
'NON_LINEAIRE' 'UTILISATEUR'
'LIB_LOI' 'src/libUmatBehaviour.so'
'FCT_LOI' 'umatnorton'
'C_MATERIAU' coel2D
'C_VARINTER' stav2D
'PARA_LOI'   para2D
'CONS' M;

# Salome-Meca 2015.1 is out (1O April 2015)

Salome-Meca 2015.1, which combines the Salome platform and Code-Aster, has been released on 1O April 2015. This version is the first to include a pre-packaged version of TFEL (version 2.0.1).

# Salome-Meca and Code_Aster Users Day (26 March 2015)

A presentation of MFront was done during the Salome-Meca and Code_Aster Users Day 2015 user meeting at EDF Lab Clamart.

Slides can be found here.

# MFront user meeting (6 Februar 2015)

The first MFront user meeting was held in Cadarache on Februar,6 2015. 27 participants from CEA, EDF, Areva and CNRS could discuss and comment about their use of MFront.

Various subjects were discussed:

• Introduction to the user meeting
• New functionalities introduced in TFEL/MFront 2.0
• Feed-back from users:
• Feed-back from the Code-Aster development team
• Feed-back from the Cyrano3 development team
• Modèle de couplage Fluage/Endommagement/Réaction Alcali Granulat (RAG) du béton
• Modélisation à différentes échelles du comportement mécanique du dioxyde d'uranium
• Writing portable behaviour with MFront
• On the road to TFEL 3.x

Those talks are available here

# First MFront user meeting (12 December 2014)

We are glad to announce that the first MFront user meeting will be held in Cadarache on Februar,6 2015. Everyone is invited but a registration must be performed before Januar, 16 2015 ().

• New functionalities introduced in TFEL/MFront 2.0
• Feed-back from users:
• Feed-back from the Code-Aster development team
• Feed-back from the Cyrano3 development team
• MFront usage for concrete modelling
• Examples of MFront usage in finite strain analyses
• Application of MFront to nuclear fuel modelling
• How to write portable behaviour implementations ?
• Conclusions

Other talks are welcomed.

# Some applications of MFront at the Cast3M user meeting (4 December 2014)

The Cast3M user meeting was held in Paris on November 28, 2014. Jérémy Hure had a talk about the application of MFront in finite strain elasto-plasticity. This talk is available here.

# AMITEX_FFTP has its own website (4 December 2014)

AMITEX_FFTP has now its own dedicated webiste.

The main purpose of AMITEX_FFTP is to implement an efficient distributed mechanical solver based on Fast Fourier Transform. AMITEX_FFTP is developped by CEA in the Departement of Nuclear Material.

AMITEX_FFTP is distributed under a free license for research and education purpose.

# Release of TFEL version 2.0.1 (2 December 2014)

TFEL version 2.0.1 is now available. This is mainly a bug-fix release after version 2.0.0.

This version is meant to be used in Code-Aster version 12.3 that will be released in January 2015.

# Creation of the <!-- h='&#x63;&#x65;&#x61;&#46;&#102;&#114;';a='&#64;';n='&#116;&#102;&#x65;&#108;&#x2d;&#x63;&#x6f;&#110;&#116;&#x61;&#x63;&#116;';e=n+a+h; document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'" clas'+'s="em' + 'ail">'+e+'<\/'+'a'+'>'); // --> tfel-contact at cea dot fr address (1 December 2014)

A new contact address has been created: .

This address can be used to contact directly the developers of TFEL and MFront for specific issues. However, if your issue may interest a broader audience, you may want to send a post to the TFEL users mailing lists: .

# MFront talk at Materiaux 2014 Montpellier (24 November 2014)

An MFront talk was given at Materiaux 2014. Slides (in french) are available here.

# Beta release of tfel-2.0.1 for Windows 64bits and Cast3M 2014 (18 November 2014)

A beta version of tfel-2.0.1 for Windows 64bits and Cast3M 2014 has been released. A binary installer is provided here.

Installing this version requires a functional installation of Cast3M $$2014$$ (which shall be patched to call external libraries) and the MSYS shell (It is recommended not to install mingw compilers along with the MSYS shell as Cast3M provides its own version of those compilers).

Installation instructions of those requirements are available here.

Any feedback would be gratefully acknowledge.

Note: The binary provided requires the mingw libraries delivered with Cast3M 2014.

Note: A standalone version of tfel-2.0.1 will be provided shortly.

# MFront behaviours can now be used in AMITEX_FFTP (24 October 2014)

AMITEX_FFTP is a massively parallel mechanical solver based on FFT developed at CEA. MFront behaviours can be used in AMITEX_FFTP through the UMAT interface introduced by the Cast3M finite element solver.

# TFEL/MFront on Cast3M web site (15 October 2014)

A page dedicated to MFront is now available on the Cast3M web site.

# Release of TFEL 2.0 (1 October 2014)

Here is the official announcement by Jean-Paul DEFFAIN (in French):

Bonjour,

Une version libre de MFront est désormais officiellement disponible sous licence GPL et CECILL-A.

Cette version 2.0 permet entre autres de générer des lois de comportements en transformations infinitésimales et en grandes transformations ainsi que des modèles de zones cohésives. Les lois générées sont utilisables dans les codes aux éléments finis Cast3M, Code-Aster, ZeBuLoN, l’ensemble des applications développées dans la plateforme PLEIADES, notamment Cyrano3, et le solveur FFT de la plate-forme. Des interfaces vers d'autres codes peuvent être rajoutées.

Un projet dédié a été crée sur sourceforge (http://sourceforge.net/projects/tfel) et fournit :

Pour les personnes souhaitant contribuer au développement, le dépôt subversion est accessible sur le serveur:

L’accès à ce dépôt est ouvert à tous mais nécessite l’ouverture d’un compte spécifique sur demande au .

Nous remercions chaleureusement tous ceux qui ont contribué à cette version et invitons toutes les personnes intéressées à se joindre au développement de MFront.

Jean-Paul DEFFAIN

Chef du programme SIMU

Commissariat à l'Énergie Atomique

# References

Barlat, F., H. Aretz, J. W. Yoon, M. E. Karabin, J. C. Brem, and R. E. Dick. 2005. “Linear Transfomation-Based Anisotropic Yield Functions.” International Journal of Plasticity 21 (5): 1009–39. doi:10.1016/j.ijplas.2004.06.004.

Eberly, David. 2016. “A Robust Eigensolver for 3 × 3 Symmetric Matrices.” https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf.

———. 2017. “Geometric Tools.” http://www.geometrictools.com/.

Kopp, Joachim. 2008. “Efficient Numerical Diagonalization of Hermitian 3x3 Matrices.” International Journal of Modern Physics C 19 (3): 523–48. doi:10.1142/S0129183108012303.

———. 2017. “Numerical Diagonalization of 3x3 Matrices.” https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/.

Scherzinger, W. M. 2017. “A Return Mapping Algorithm for Isotropic and Anisotropic Plasticity Models Using a Line Search Method.” Computer Methods in Applied Mechanics and Engineering 317 (April): 526–53. doi:10.1016/j.cma.2016.11.026.