4. How the macro_command works#

The purpose of this macro_command is to restrict to what is strictly necessary the data relating to a simulation on a hardware point for an incremental behavior model.

The internal functioning therefore lightens the user’s command file, by carrying out repetitive operations for this type of situation.

4.1. Case SUPPORT =” ELEMENT “#

The operation is:

  1. creating a mesh of a single element at a single Gauss point (a tetrahedron with four nodes in 3D, a triangle with three nodes in 2D) (see for example [V6.04.176]).

  2. assigning a 3D model or C_ PLAN or D_ PLAN

  3. allocation of the material on this mesh;

  4. load assignment:

  5. with regard to the deformations imposed, for each component affected via one of the keywords in EPSI_IMPOSE, creation of a unit deformation load that will be multiplied by the time function provided for this component by the user;

  6. with regard to the constraints imposed, for each component affected via one of the keywords in SIGM_IMPOSE, creation of a unit load of constraints that will be multiplied by the time function provided for this component by the user;

  7. Call to STAT_NON_LINE. All keywords that have values by default are used unless overloaded by the user (NEWTON, CONVERGENCE, SUIVI_DDL, ARCHIVAGE, RECH_LINEAIRE) and in the initial state.

All the results (six or four stress and deformation components, internal variables) are stored in a table (tabres). For each component (column in the table), the evolution over time is shown.

4.2. Case SUPPORT =” POINT “#

In this case, rather than using a finite element (even a single one) to perform the calculation, SIMU_POIN_MAT uses a dedicated command, CALC_POINT_MAT, which includes in Fortran the direct call to the 3D behavior integration routine, NMCOMP. This is only available in the case of small deformations.

Recall that NMCOMP is the general routine for integrating laws of behavior, called by all 3D and 2D finite elements. It allows the calculation at one point (this point being the integration point for a finite element) of the stresses and internal variables at the current moment, knowing the stresses and internal variables at the previous moment; and the current increase in deformation. (cf. [D5.04.01] and [R5.03.14]). More precisely, at time \({t}_{i},\) and at iteration \(n\), the stress tensor \({\sigma }_{i}^{n}\), at one point, is calculated from \(({\sigma }_{i\mathrm{-}1},{\alpha }_{i\mathrm{-}1})\) and the deformation increment \(\Delta {\varepsilon }_{i}^{n}\).

When all the components of the deformation tensor are provided, the algorithm is immediate: it is a simple time loop, containing for each time increment the data of the mechanical state of the previous increment and the (symmetric) tensor corresponding to the known increase in deformation.

But in the opposite case, either that we provide only \(n\) components of the history of deformations, \(n<6\), or that we provide \(n\) components of the history of constraints, the algorithm is as follows:

  • by default, any unspecified component corresponds to a stress component subject to remain zero (Neumann condition)

  • the equations to be solved are (using the vector notation of symmetric tensors of order 2):

  • \({\sigma }_{\mathrm{i}}\mathrm{=}F(\Delta {\varepsilon }_{\mathrm{i}};{\sigma }_{i\mathrm{-}1},{\alpha }_{i\mathrm{-}1})\) where \(F\) represents the result of the integration of behavior by NMCOMP

  • for j varying from 1 to 6:

  • be \({({\sigma }_{i})}_{j}={g}_{j}({t}_{i})\)

  • be \({({\varepsilon }_{i})}_{j}={g}_{j}({t}_{i})\)

  • where \(\stackrel{ˉ}{{\sigma }_{j}}(t)\) and \(\stackrel{ˉ}{{\varepsilon }_{j}}(t)\) are given by SIGM_IMPOSE/EPSI_IMPOSE.

This can also be written as:

for each moment \({t}_{i},\) solve:

\(R({Y}_{i})=0\) with \({Y}_{i}=Y({t}_{i})=\left\{\begin{array}{}\left[{\sigma }_{i}\right]\\ \left[{\varepsilon }_{i}\right]\end{array}\right\}\) and \(R({Y}_{i})=\left\{\begin{array}{}\left[{\sigma }_{i}-F(\Delta {\varepsilon }_{i};{\sigma }_{i-1},{\alpha }_{i-1})\right]\\ \left[{C}_{1}\right]{\sigma }_{i}+\left[{C}_{2}\right]{\varepsilon }_{i}-g({t}_{i})\end{array}\right\}\)

which is a twelfth order nonlinear system.

The last relationship reflects the conditions of constraints or deformations imposed: the matrices \({C}_{1}\) and \({C}_{2}\) only contain terms on the diagonal, equal to 1 if the corresponding component is imposed, knowing that one cannot have both stress and imposed deformation at the same time.

For example, if deformation \({\varepsilon }_{\mathit{yy}}\) is imposed, the last relationship is written as:

\(\left[{C}_{1}\right]{\sigma }_{i}+\left[{C}_{2}\right]{\varepsilon }_{i}-g({t}_{i})=\left[\begin{array}{cccccc}1& 0& 0& 0& 0& 0\\ 0& 0& 0& 0& 0& 0\\ 0& 0& 1& 0& 0& 0\\ 0& 0& 0& 1& 0& 0\\ 0& 0& 0& 0& 1& 0\\ 0& 0& 0& 0& 0& 1\end{array}\right](\begin{array}{}{\sigma }_{\mathrm{xx}}\\ {\sigma }_{\mathrm{yy}}\\ {\sigma }_{\mathrm{zz}}\\ {\sigma }_{\mathrm{xy}}\\ {\sigma }_{\mathrm{xz}}\\ {\sigma }_{\mathrm{yz}}\end{array})+\left[\begin{array}{cccccc}0& 0& 0& 0& 0& 0\\ 0& 1& 0& 0& 0& 0\\ 0& 0& 0& 0& 0& 0\\ 0& 0& 0& 0& 0& 0\\ 0& 0& 0& 0& 0& 0\\ 0& 0& 0& 0& 0& 0\end{array}\right](\begin{array}{}{\varepsilon }_{\mathrm{xx}}\\ {\varepsilon }_{\mathrm{yy}}\\ {\varepsilon }_{\mathrm{zz}}\\ {\varepsilon }_{\mathrm{xy}}\\ {\varepsilon }_{\mathrm{xz}}\\ {\varepsilon }_{\mathrm{yz}}\end{array})=(\begin{array}{}0\\ {\varepsilon }_{\mathrm{yy}}({t}_{i})\\ 0\\ 0\\ 0\\ 0\end{array})\)

In the case where the user has specified (via the keywords MATR_C1, MATR_C2 and VECT_IMPO) additional relationships, these are taken into account directly in the matrices \({C}_{1}\) and \({C}_{2.}\)

This system of nonlinear equations is solved by a Newton method:

  • initialization: \({Y}_{i}^{0}={Y}_{i-1}+{[{K}_{i}^{0}]}^{\text{-1}}\left[\begin{array}{}0\\ -\left[{C}_{1}\right]{\sigma }_{i-1}-\left[{C}_{2}\right]{\varepsilon }_{i-1}+g({t}_{i})\end{array}\right]\)

  • at iteration n:

        • \(\delta {Y}_{i}^{n+1}\mathrm{=}\mathrm{-}{\mathrm{[}{K}_{i}^{n}\mathrm{]}}^{\text{-1}}R({Y}_{i}^{n})\mathrm{=}{\mathrm{[}{K}_{i}^{n}\mathrm{]}}^{\text{-1}}\left[\begin{array}{c}F(\Delta {\varepsilon }_{\mathrm{i}}^{\mathrm{n}};{\sigma }_{\mathrm{i}\mathrm{-}1},{\alpha }_{i\mathrm{-}1})\mathrm{-}{\sigma }_{\mathrm{i}}^{\mathrm{n}}\\ \mathrm{-}\left[{C}_{1}\right]{\sigma }_{\mathrm{i}}^{\mathrm{n}}\mathrm{-}\left[{C}_{2}\right]{\varepsilon }_{\mathrm{i}}^{\mathrm{n}}+\mathrm{g}({t}_{i})\end{array}\right]\);

\(\Delta {Y}_{i}^{n}=\delta {Y}_{i}^{n}+\Delta {Y}_{i}^{n-1}\); \({Y}_{i}^{n}=\Delta {Y}_{i}^{n}+{Y}_{i-1}\)

with

\([{K}_{i}^{n}]=\left[\frac{\partial R}{\partial Y}\right]=\left[\begin{array}{cc}1& -{(\frac{\partial \sigma }{\partial \varepsilon })}_{i}^{n}\\ \left[{C}_{1}\right]& \left[{C}_{2}\right]\end{array}\right]\) and \([{K}_{i}^{0}]=\left[\begin{array}{cc}1& -{(\frac{\partial \sigma }{\partial \varepsilon })}_{i}^{0}\\ \left[{C}_{1}\right]& \left[{C}_{2}\right]\end{array}\right]\)

where \({(\frac{\partial \sigma }{\partial \varepsilon })}_{i}^{0}\) represents the tangent prediction operator (option RIGI_MECA_TANG, cf. [R5.03.01, R5.03.02]) and \({(\frac{\mathrm{\partial }\sigma }{\mathrm{\partial }\varepsilon })}_{i}^{n}\) represents the coherent tangent operator (option FULL_MECA), cf. [R5.03.01, R5.03.02]). These operators can be replaced by the elasticity operator using the keywords PREDICTION, REAC_ITER.

The only non-linearity of the problem comes from the behavior: \(F(\Delta {\varepsilon }_{i}^{n};{\sigma }_{i-1},{\alpha }_{i-1})\).

In the case of linear behavior, it is verified that the solution of the problem is obtained at the end of the prediction phase.

The convergence of the iterations is verified:

  • or in relative value, (keyword RESI_GLOB_RELA):

    • \(\mathrm{max}(\frac{\underset{j=\mathrm{1,6}}{\mathrm{max}}∣{({R}_{i}^{n})}_{j}∣}{\underset{j=\mathrm{1,6}}{\mathrm{max}}∣{({\sigma }_{i}^{0})}_{j}∣};\frac{\underset{j=\mathrm{7,12}}{\mathrm{max}}∣{({R}_{i}^{n})}_{j}∣}{\underset{j=\mathrm{7,12}}{\mathrm{max}}∣{({R}_{i}^{0})}_{j}∣})<\text{RESI\_GLOB\_RELA}\)

In this case, the terms in terms of stresses and deformations are separated for the examination of the convergence criterion in order to avoid problems due to differences in orders of magnitude.

  • either in absolute value (keyword RESI_GLOB_MAXI) or the value of the denominator close to zero in the relative criterion above:

\(\underset{j=\mathrm{1,12}}{\mathrm{max}}∣{({R}_{i}^{n})}_{j}∣<\text{RESI\_GLOB\_MAXI}\)

The options for calculating tangent stiffness by disturbance and the automatic management of the time step are also activated, as in [U4.51.03].

In the previous resolution, the constrained terms are dimensionalized, to avoid poor conditioning of the Jacobian matrix. For the resolution, we therefore divide all the stress terms by the max of the diagonal terms of the elasticity operator; we must therefore provide in DEFI_MATERIAU the keyword ELAS or ELAS_ORTH or ELAS_ISTR.

In the case SUPPORT =” POINT “, some keywords are not useful:

  • in the case of linear search, it is not programmed in the current version

  • in the case of archiving, only the keyword LIST_INST is taken into account

  • in the case CONVERGENCE/RESI_REFE_RELA, this keyword is not applicable: the residue by reference value does not make sense for a material point.

  • In the case where the value of the keyword DEFORMATIONn is not PETIT, we alarm the user by specifying that the type of DEFORMATIONchoisi is incompatible with SUPPORT = POINT, and that we therefore use SUPPORT = ELEMENT, except in the case where we provide all the components of the transformation gradient (keyword GRAD_IMPOSE).