14. Stability assessment#

◇ CRIT_STAB = _F (
     ◇ OPTION =/"BANDE ",
                /"CALIBRATION ",
                /"PLUS_PETITE" (by default),
     # If: (equal_to (" OPTION ", 'BANDE'))
         ◇ CHAR_CRIT = float,
     # If: (equal_to (" OPTION ", 'PLUS_PETITE'))
         ◇ NMAX_CHAR_CRIT = int (default: 3),
     # If: (equal_to (" OPTION ", 'CALIBRATION'))
         ◇ CHAR_CRIT = float,
     ◇ COEF_DIM_ESPACE = int (default: 5),
     ◇ RIGI_GEOM =/"NON ",
                   /"OUI" (by default),
     ◇ MODI_RIGI =/"NON" (by default),
                   /"OUI ",
     ◇ TYPE =/"FLAMBEMENT" (by default),
              /"STABILITE ",
     ◇ PREC_INSTAB = float (default: 1e-06),
     ◇ SIGNE =/"NEGATIF ",
               /"POSITIF ",
               /"POSITIF_NEGATIF" (by default),
     # If: (equal_to (" RIGI_GEOM ", 'NON'))
         ◇ DDL_EXCLUS =/"DAMG ",
                        /"DCX ",
                        /"DCY ",
                        /"DCZ ",
                        /"DRX ",
                        /"DRY ",
                        /"DRZ ",
                        /"XX",
                        /"DY",
                        /"DZ",
                        /"GONF ",
                        /"GRX ",
                        /"H1X",
                        /"H1Y",
                        /"H1Z",
                        /"K1",
                        /"K2",
                        /"K3",
                        /"LAGS_C ",
                        /"LAG_GV ",
                        /"LIAISON ",
                        /"PHI ",
                        /"PRE1 ",
                        /"PRE2 ",
                        /"PRES ",
                        /"PRES11 ",
                        /"PRES12 ",
                        /"PRES13 ",
                        /"PRES21 ",
                        /"PRES22 ",
                        /"PRES23 ",
                        /"PRES31 ",
                        /"PRES32 ",
                        /"PRES33 ",
                        /"TEMP ",
                        /"UI2 ",
                        /"UI3 ",
                        /"UI4 ",
                        /"UI5 ",
                        /"UI6 ",
                        /"UO2 ",
                        /"UO3 ",
                        /"UO4 ",
                        /"UO5 ",
                        /"UO6 ",
                        /"V11",
                        /"V12",
                        /"V13",
                        /"V21",
                        /"V22",
                        /"V23",
                        /"V31",
                        /"V32",
                        /"V33",
                        /"VARI ",
                        /"VI2 ",
                        /"VI3 ",
                        /"VI4 ",
                        /"VI5 ",
                        /"VI6 ",
                        /"VO2 ",
                        /"VO3 ",
                        /"VO4 ",
                        /"VO5 ",
                        /"VO6 ",
                        /"WI1 ",
                        /"WI2 ",
                        /"WI3 ",
                        /"WI4 ",
                        /"WI5 ",
                        /"WI6 ",
                        /"WO",
                        /"WO1 ",
                        /"WO2 ",
                        /"WO3 ",
                        /"WO4 ",
                        /"WO5 ",
                        /"WO6 ",
     # If: equal_to (" TYPE ", 'STABILITE') and equal_to (" RIGI_GEOM ", 'NON')
         ◆ DDL_STAB =/"DAMG ",
                      /"DCX ",
                      /"DCY ",
                      /"DCZ ",
                      /"DRX ",
                      /"DRY ",
                      /"DRZ ",
                      /"XX",
                      /"DY",
                      /"DZ",
                      /"GONF ",
                      /"GRX ",
                      /"H1X",
                      /"H1Y",
                      /"H1Z",
                      /"K1",
                      /"K2",
                      /"K3",
                      /"LAGS_C ",
                      /"LAG_GV ",
                      /"LIAISON ",
                      /"PHI ",
                      /"PRE1 ",
                      /"PRE2 ",
                      /"PRES ",
                      /"PRES11 ",
                      /"PRES12 ",
                      /"PRES13 ",
                      /"PRES21 ",
                      /"PRES22 ",
                      /"PRES23 ",
                      /"PRES31 ",
                      /"PRES32 ",
                      /"PRES33 ",
                      /"TEMP ",
                      /"UI2 ",
                      /"UI3 ",
                      /"UI4 ",
                      /"UI5 ",
                      /"UI6 ",
                      /"UO2 ",
                      /"UO3 ",
                      /"UO4 ",
                      /"UO5 ",
                      /"UO6 ",
                      /"V11",
                      /"V12",
                      /"V13",
                      /"V21",
                      /"V22",
                      /"V23",
                      /"V31",
                      /"V32",
                      /"V33",
                      /"VARI ",
                      /"VI2 ",
                      /"VI3 ",
                      /"VI4 ",
                      /"VI5 ",
                      /"VI6 ",
                      /"VO2 ",
                      /"VO3 ",
                      /"VO4 ",
                      /"VO5 ",
                      /"VO6 ",
                      /"WI1 ",
                      /"WI2 ",
                      /"WI3 ",
                      /"WI4 ",
                      /"WI5 ",
                      /"WI6 ",
                      /"WO",
                      /"WO1 ",
                      /"WO2 ",
                      /"WO3 ",
                      /"WO4 ",
                      /"WO5 ",
                      /"WO6 ",
     ◇/LIST_INST = listr8,
       /PAS_CALC = int,
       /INST = float,
     ◇ CRITERE =/"ABSOLU ",
                 /"RELATIF" (by default),
     # If: (equal_to (" CRITERE ", 'RELATIF'))
         ◇ PRECISION = float (default: 1e-06),
     # If: (equal_to (" CRITERE ", 'ABSOLU'))
         ◆ PRECISION = float,
  ),

The CRIT_STAB keyword allows you to trigger the calculation, at the end of each time increment, of a stability criterion. This criterion is useful to detect, during loading, the point from From which one loses stability by using two criteria

  • By buckling in the case of reversible mechanical phenomena (TYPE = “FLAMBEMENT”).

  • By a sign study on the second derivative of energy while respecting the increase of irreversible degrees of freedom in the case of dissipative mechanics (TYPE = “STABILITE”)

14.1. Case of buckling#

For buckling, the criterion is then calculated in the following way. At the end of a time step, in small disturbances, we solve

\[\mathit{det}\left({K}^{T}+{\mu }\cdot {K}^{g}\right)=0\]

where \({K}^{T}\) is the coherent tangent matrix at this point in time and \({K}^{g}\) is the geometric rigidity matrix, calculated from the stress field at this time.

In practice, the load is unstable if the critical load factor \({\mu }\) check:math: | {mu} |<1 (actually: math: 0< {mu} <1). We calculate the eigenvalues by the Sorensen method (see CALC_MODES). This can be quite expensive for large problems.

For large displacements and large deformations, we solve

\[\mathit{det}\left({K}^{T}+{\mu }\cdot I\right)=0\]

because \({K}^{T}\) then contains \({K}^{g}\).

The criterion is then a criterion of instability: when \({\mu }\) changes sign (so goes through 0) the load is unstable. We store the clean mode corresponding to the most small critical load (in absolute value) in the result object, under the name MODE_FLAMB. This mode clean can be extracted and visualized (like a travel field or a clean mode) classic). It is normalized to 1 on the largest displacement component. The analysis of linear stability does not make it possible to take into account the follower aspect of certain forces, it Then you have to use CRIT_STAB.

The [U2.08.04] documentation presents the different approaches for buckling analyses.

14.2. Stability case#

To deal with the particular case TYPE = “STABILITE”, it is necessary to take as a stiffness matrix geometric the identity matrix \({K}^{g}={I}_{d}\). We then look for the minimum of Next quadratic functional

\[C(x)\mathrm{=}\frac{{x}^{t} {K}^{T}x}{{x}^{t} x}\]

where \({K}^{T}\) is the coherent tangent matrix at the moment studied and \({x}^{t}\) is the vector transposed from the nodal unknowns field \(x\), under positivity constraints on the degrees of freedom of \(x\) are irreversible in nature. The minimum sign then allows conclude on the stability of the load. In the case where this one is negative, the solution is unstable. Otherwise, the solution obtained numerically is stable. The mode obtained, which is the minimizing vector \(C(x)\) (called instability mode) in the case where the minimum is negative), and the associated stability criterion estimate are stored in the result object under the name MODE_STAB (CHAR_STAB = \(C(x)\)).

14.3. Results output#

All results are stored in a table_container data structure with the name “ANALYSE_MODALE” attached to the evol_noli data structure. Buckling modes (TYPE =” FLAMBEMENT “) are stored as TYPE_MODE =” MODE_FLAMB” in the table while the stability modes (TYPE =” STABILITE “) are stored there as TYPE_MODE =” MODE_STAB” (see [DYNA_NON_LINE]).

14.4. Selection in the transitory#

The times for which we want to do a stability calculation are given by a list of moments indicated by LIST_INST or by a frequency PAS_CALC.

The selection is controlled by the keywords PRECISION and CRITERE, see [U4.71.00].

In the absence of these keywords, the criterion is calculated at every time step.

14.6. Selecting matrices#

The RIGI_GEOM keyword (“OUI” by default) gives the user the choice between performing a search for generalized eigenvalues with the geometric matrix on the second member or not (case of major deformations).

Choosing “NON” means that the geometric stiffness matrix is replaced by the identity.

The MODI_RIGI keyword (“NON” by default) allows you to specify whether the overall stiffness matrix (and the geometric rigidity matrix if used) must be modified at the level of degrees of freedom that we list with DDL_EXCLUS. This allows, for example, for models mixed, not to conduct the stability analysis by excluding certain types of degrees of freedom and by correcting the overall stiffness matrices so that the terms related to these degrees of freedom do not: do not interfere with the search for instability. More details are given in the paragraph dedicated to DDL_EXCLUS. If the list of excluded degrees of freedom is empty, then MODI_RIGI is useless So to nothing.

14.7. Selecting degrees of freedom#

The keyword DDL_EXCLUS (empty list by default) refers to all the degrees of freedom that we wants to set to 0 in the second member of the generalized eigenvalue search. He does not can only be used under the condition RIGI_GEOM = “NON” or if MODI_RIGI = “OUI”.

In the case RIGI_GEOM = “NON” and MODI_RIGI = “NON”, this makes it possible to impose conditions additional compatibility on clean modes and thus to perform a search selective. This is particularly suitable for mixed formulations. In this case, The elimination of the Lagrange multipliers for the second member makes it possible to exclude the modes parasites with Lagrangian dominants and negative eigenvalues.

In the case MODI_RIGI = “OUI”, this makes it possible to modify the stiffness matrix (and if necessary the geometric rigidity matrix) in order to conduct the stability analysis without taking a step Take into account the excluded degrees of freedom. For example, you should use this option for models fluid-structure coupled (formulation \((u,p,\phi )\), confer documentation) [R4.02.02], which can be used with DYNA_NON_LINE but not step STAT_NON_LINE) for exclude fluid degrees of freedom since the matrix of global assembled stiffness is singular for these degrees of freedom.

For more details, the user can usefully refer to the documentation [U2.06.11] and [U2.08.04].

The keyword DDL_STAB refers to the set of irreversible degrees of freedom in the study of stability that we want to achieve with CRIT_STAB. It can only be used under conditions: TYPE =” STABILITE “and RIGI_GEOM =” NON”. This makes it possible to perform a sign study on the second derivative of energy, at load considered, looking only at disturbances that are likely to increase degrees of freedom declared in DDL_STAB. This is in order to respect the mechanical conditions of irreversibility.

14.8. Selection of criteria#

The SIGNE keyword allows you to specify what type of instability criterion will be used. This criterion will trigger a clean stop (saved base) of the non-linear calculation in case instability, if specified by the user, under [DEFI_LIST_INST].

Without this statement under DEFI_LIST_INST, even in case of instability detected, the calculation non-linear will attempt to continue: this is the mode by default. For stability analyses without a geometric rigidity matrix, the instability criterion is that a critical load tends to 0, or changes its sign. In this case, the SIGNE keyword is not used.

On the other hand, for cases where the geometric rigidity matrix is used, this keyword SIGNE is useful. With the default value SIGNE = “POSITIF_NEGATIF”, the solution will be declared unstable in cases where a critical load becomes between -1 and 1. If the user Choose the option “NEGATIF” then the instability domain will be bounded by the values -1 and 0. Conversely, the “POSITIF” option will set values 0 and 1 as domain limits

instability. The choice by default is the most conservative, but in some cases where you can clear a prima facie part of the domain of instability, then it is appropriate to modify the criteria with the keyword SIGNE. Recall that the critical load calculated by CRIT_STAB, in the case where the geometric rigidity matrix is taken into account, is equal to the coefficient imposed load multiplier that makes the problem unstable. So if the calculated value By CRIT_STAB equals 1 it means that we are unstable for the imposed load. If we obtain the value -1, then instability will occur for an imposed load of the same value but of the opposite sign. So for imposed loads that are known and evolve monotonically, it It is easy to restrict the area of instability because we know that the load cannot change sign. On the other hand, for cyclic or any other loading, it is safer not to step restrict the area of instability.

The keyword PREC_INSTAB allows you to define the relative tolerance with which you want check the instability criterion, which is set by the previous keyword SIGNE.