Euler buckling analysis ============================= The calculation of buckling modes in the sense of Euler [:ref:`bib5 `] is done by the problem solving operator with eigenvalues CALC_MODES (with the keyword TYPE_RESU = 'MODE_FLAMB'). In the context of buckling, we have the following typical syntax: MODP1 = CALC_MODES (MATR_RIGI = RAMEP1, MATR_RIGI_GEOM = RAGEP1, TYPE_RESU = 'MODE_FLAMB', OPTION = 'BANDE', CALC_CHAR_CRIT = _F (CHAR_CRIT = (-2.4, -2.2,),), SOLVEUR_MODAL =_F (METHODE = 'SORENSEN', DIM_SOUS_ESPACE = 80, NMAX_ITER_SOREN = 80,),) The argument for the MATR_RIGI keyword must be the so-called material stiffness matrix, while the MATR_RIGI_GEOM keyword expects the geometric rigidity matrix. As a reminder, buckling modes are the eigenmodes of the problem with the following eigenvalues: :math:`(K+\mu {K}_{g})x=0\iff Kx=\lambda {K}_{g}x` with: .. csv-table:: ":math:`K` ", ":", "stiffness matrix" ":math:`{K}_{g}` ", ":", "geometric rigidity matrix" ":math:`\mathrm{\lambda }` ", ":", "eigenvalue (:math:`\lambda =-\mu` with :math:`\mathrm{\mu }` load multiplier)" **Note:** It is the critical load factor :math:`\mu` and not :math:`\lambda` that is stored in the result concept. The material (or elastic) stiffness is calculated with the option 'RIGI_MECA' of CALC_MATR_ELEM. The geometric rigidity is calculated from the constraint field solution of the linear problem (option 'RIGI_GEOM' from CALC_MATR_ELEM). It is therefore necessary to have performed a static linear calculation prior to the use of CALC_MODES for buckling. If the load is composed of a fixed part (not controlled) and a variable part, the load multiplier coefficient must, of course, only relate to the variable part. The contribution of the other party of the load is found in the first member. Note :math:`{f}_{c}` fixed loading and :math:`{f}_{v}` controlled loading (proportional to :math:`\mu`). The eigenvalue problem becomes: :math:`(K+{K}_{g}({f}_{c}+\mu {f}_{v}))x=0\iff (K+{K}_{g}({f}_{c}))x=\lambda {K}_{g}({f}_{v})x` with: .. csv-table:: ":math:`K` ", ":", "material stiffness matrix" ":math:`{K}_{g}({f}_{c})` ", ":", "geometric rigidity matrix for uncontrolled loading" ":math:`{K}_{g}({f}_{v})` ", ":", "geometric rigidity matrix for variable loading" ":math:`\lambda` ", ":", "eigenvalue :math:`\lambda =-\mu`" In this case, it is therefore necessary to solve two preliminary linear elastic problems, in order to be able to calculate the two different geometric stiffness matrices. In order to be exhaustive, the presentation will focus on a structure subject to imposed displacements as well as efforts, which will be a combination of a fixed load and a variable load that will be controlled with an increasing coefficient that can lead to buckling. Step 1: Preliminary linear calculation (s) -------------------------------------------- We're going to use MECA_STATIQUE. The structure, meshed in shell-type elements (solid shell-type elements [:ref:`bib3 `]), is subject to Dirichlet (CONDLIM) and Neumann boundary conditions. These are broken down into: * PESA: gravity field, * PRESPH: uncontrolled imposed pressure field, * PRESPS1: variable imposed pressure field. For buckling analysis, it is necessary to separate constant efforts from those that are variable (driven by a coefficient). So we're going to do two linear static calculations. The first will be the case of the structure subject to imposed displacements and to constant efforts, the second will see the structure subject to imposed displacements and to variable efforts. **Controlled charging:** RESC11P1 = MECA_STATIQUE (MODELE = MODELE, CHAM_MATER = CHMAT, CARA_ELEM = CARAELEM, EXCIT = (_F (CHARGE = CONDLIM,), _F (CHARGE = PRESPS1,),), OPTION = 'SIEF_ELGA', ) **Uncontrolled charging:** RESC12P1 = MECA_STATIQUE (MODELE = MODELE, CHAM_MATER = CHMAT, CARA_ELEM = CARAELEM, EXCIT = (_F (CHARGE = CONDLIM,), _F (CHARGE = PESA,), _F (CHARGE = PRESPH,),), OPTION = 'SIEF_ELGA', ) We will use the constraint field to calculate the associated geometric rigidity matrices, for the two loads: SIGC11P1 = CREA_CHAMP (TYPE_CHAM = 'ELGA_SIEF_R', OPERATION = 'EXTR', RESULTAT = RESC11P1, NOM_CHAM = 'SIEF_ELGA', TYPE_MAXI = 'MINI', TYPE_RESU = 'VALE',) # REGC11P1 = CALC_MATR_ELEM (OPTION = 'RIGI_GEOM', MODELE = MODELE, CARA_ELEM = CARAELEM, SIEF_ELGA = SIGC11P1,) REGC11P1 is therefore the geometric stiffness matrix associated with the variable load case (PRESPS1). Likewise, we calculate the geometric stiffness matrix for the constant load (PESA and PRESPH), starting from RESC12P1: SIGC12P1 = CREA_CHAMP (TYPE_CHAM = 'ELGA_SIEF_R', OPERATION = 'EXTR', RESULTAT = RESC12P1, NOM_CHAM = 'SIEF_ELGA', TYPE_MAXI = 'MINI', TYPE_RESU = 'VALE',) # REGC12P1 = CALC_MATR_ELEM (OPTION = 'RIGI_GEOM', MODELE = MODELE, CARA_ELEM = CARAELEM, SIEF_ELGA = SIGC12P1,) It remains to calculate the material stiffness matrix for the total load: REMEP1 = CALC_MATR_ELEM (OPTION = 'RIGI_MECA', MODELE = MODELE, CHAM_MATER = CHMAT, CARA_ELEM = CARAELEM, CHARGE = (CONDLIM, PESA, PRESPH, PRESPS1,),) All the elementary matrices are calculated, so the next step is assembling them: NUP1 = NUME_DDL (MATR_RIGI = REMEP1,) # RAMC1P1 = ASSE_MATRICE (MATR_ELEM = REMEP1, NUME_DDL = NUP1,) # RAGEP1 = ASSE_MATRICE (MATR_ELEM = REGC11P1, NUME_DDL = NUP1,) # RAGC12P1 = ASSE_MATRICE (MATR_ELEM = REGC12P1, NUME_DDL = NUP1,) The material (RAMC1P1) and geometric (RAGC12P1) stiffness matrices corresponding to the case of constant loading are then summed up: RAMEP1 = COMB_MATR_ASSE (COMB_R = (_F (MATR_ASSE = RAMC1P1, COEF_R = 1.0,), _F (MATR_ASSE = RAGC12P1, COEF_R = 1.0,),),) The two matrices necessary for the calculation of buckling modes are therefore constructed. Step 2: Calculating Euler Modes ---------------------------------- It may be useful to do STURM tests (operator INFO_MODE) on the search interval on which you want to find cases of buckling. Thus, this will make it possible to optimize the size of the interval and to control the smooth running of the subsequent modal calculation since the number of existing modes will be known in advance. The syntax is: INFO_MODE (MATR_RIGI = RAMEP1, MATR_RIGI_GEOM = RAGEP1, TYPE_MODE = 'MODE_FLAMB', CHAR_CRIT = (-2.4, -2.2)) Once the critical buckling load search interval has been chosen, CALC_MODES can then be implemented as follows: MODP1 = CALC_MODES (MATR_RIGI = RAMEP1, MATR_RIGI_GEOM = RAGEP1, TYPE_RESU = 'MODE_FLAMB', OPTION = 'BANDE', CALC_ CHAR_CRIT =_F (CHAR_CRIT = (-2.4, -2.2,),),), SOLVEUR_MODAL =_F (DIM_SOUS_ESPACE = 80, NMAX_ITER_SOREN = 80,),) **Note** *If the algorithm does not converge or if the number of modes is not as predicted by* *INFO_MODE, it may be useful to increase the values of* *DIM_SOUS_ESPACE and* *and* *NMAX_ITER_SOREN.* We standardize the [:ref:`bib6 `] modes, only using the degrees of freedom of translation: MODP1 = NORM_MODE (reuse = MODP1 MODE = MODP1, NORME = 'TRAN',) The modes can then be post-processed. **Remarks** * *It is essential to check that the geometric stiffness of the chosen model is indeed an option available in Code_Aster.* * *A finer discretization normally leads to a reduction in critical loads.* * *Discretization must be able to capture buckling modes, knowing that these modes can generate localized deformations (folds). The preliminary calculation of dynamic modes can constitute a first indication of the quality of the mesh, although these modes can be very different from buckling modes.* * *The critical loads of the various modes are proportional to the Young modulus* :math:`E` *.* * *With this method, the follower nature of forces cannot be taken into account. In fact, the calculation of geometric stiffness made with the option* RIGI_GEOM *de* CALC_MATR_ELEM *is based on the assumption that all the forces imposed on the mechanical problem are of the dead force type. If we want to take into account the follow-on nature of certain requests, it is mandatory to use the nonlinear operators* STAT_NON_LINE *or* DYNA_NON_LINE *, with the keyword* CRIT_STAB, as will be seen in the rest of this document.