Analyse de flambement d’Euler ============================= Le calcul des modes de flambement au sens d’Euler [:ref:`bib5 `] se fait par l’opérateur de résolution de problèmes aux valeurs propres CALC_MODES(avec le mot-clé TYPE_RESU = 'MODE_FLAMB'). Dans le cadre du flambage, on a la syntaxe typique suivante: 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 , ) , ) L’argument du mot clé MATR_RIGI doit être la matrice de rigidité dite matérielle, alors que le mot clé MATR_RIGI_GEOM attend la matrice de rigidité géométrique. Pour rappel, les modes de flambement sont les modes propres du problème aux valeurs propres suivant: :math:`(K+\mu {K}_{g})x=0\iff Kx=\lambda {K}_{g}x` avec : .. csv-table:: ":math:`K`", ":", "matrice de rigidité" ":math:`{K}_{g}`", ":", "matrice de rigidité géométrique" ":math:`\lambda `", ":", "valeur propre (:math:`\lambda =-\mu` avec :math:`\mu ` coefficient multiplicateur du chargement)" **Remarque:** C’est bien le coefficient de charge critique :math:`\mu` et non :math:`\lambda` qui est stocké dans le concept résultat. La rigidité matérielle (ou élastique) se calcule avec l’option 'RIGI_MECA’ de CALC_MATR_ELEM. La rigidité géométrique se calcule à partir du champ de contrainte solution du problème linéaire (option 'RIGI_GEOM’ de CALC_MATR_ELEM). Il faut donc avoir effectué un calcul linéaire statique préalablement à l’utilisation de CALC_MODES pour le flambement. Si le chargement est composé d’une partie fixe (non pilotée) et d’une partie variable, le coefficient multiplicateur du chargement ne doit, bien sûr, porter que sur la partie variable. La contribution de l’autre partie du chargement se retrouve dans le premier membre. Notons :math:`{f}_{c}` le chargement fixe et :math:`{f}_{v}` le chargement piloté (proportionnel à :math:`\mu` ). Le problème aux valeurs propres devient: :math:`(K+{K}_{g}({f}_{c}+\mu {f}_{v}))x=0\iff (K+{K}_{g}({f}_{c}))x=\lambda {K}_{g}({f}_{v})x` avec : .. csv-table:: ":math:`K`", ":", "matrice de rigidité matérielle" ":math:`{K}_{g}({f}_{c})`", ":", "matrice de rigidité géométrique pour le chargement non piloté" ":math:`{K}_{g}({f}_{v})`", ":", "matrice de rigidité géométrique pour le chargement variable" ":math:`\lambda`", ":", "valeur propre :math:`\lambda =-\mu`" Dans ce cas, il faut donc résoudre deux problèmes élastiques linéaires préalables, pour pouvoir calculer les deux matrices de rigidité géométriques différentes. Afin d’être exhaustif, la présentation portera sur une structure soumise à des déplacements imposés ainsi que des efforts, qui seront la combinaison d’un chargement fixe et d’un chargement variable que l’on pilotera avec un coefficient croissant pouvant conduire au flambage. Étape 1 : Calcul(s) linéaire(s) préalable(s) -------------------------------------------- On va se servir de MECA_STATIQUE. La structure, maillée en éléments de type coque (éléments de type coques volumiques [:ref:`bib3 `]), est soumise à des conditions aux limites de Dirichlet (CONDLIM) et de Neumann. Ces dernières se décomposent en: * PESA: champ de pesanteur, * PRESPH: champ de pression imposé non piloté, * PRESPS1: champ de pression imposé variable. Pour l’analyse de flambage, il faut séparer les efforts constants de ceux qui sont variables (pilotés par un coefficient). On va donc faire deux calculs statiques linéaires. Le premier sera le cas de la structure soumise aux déplacements imposés et aux efforts constants, le second verra la structure soumise aux déplacements imposés et aux efforts variables. **Chargement piloté:** RESC11P1 = MECA_STATIQUE ( MODELE = MODELE , CHAM_MATER = CHMAT , CARA_ELEM = CARAELEM , EXCIT = ( _F( CHARGE = CONDLIM , ) , _F( CHARGE = PRESPS1 , ) , ) , OPTION = 'SIEF_ELGA' , ) **Chargement non piloté:** RESC12P1 = MECA_STATIQUE ( MODELE = MODELE , CHAM_MATER = CHMAT , CARA_ELEM = CARAELEM, EXCIT = ( _F( CHARGE = CONDLIM , ) , _F( CHARGE = PESA , ) , _F( CHARGE = PRESPH , ) , ) , OPTION = 'SIEF_ELGA' , ) On va utiliser le champ de contrainte pour calculer les matrices de rigidité géométrique associées, pour les deux chargements: 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 est donc la matrice de raideur géométrique associée au cas de chargement variable (PRESPS1). On calcule, de même, la matrice de raideur géométrique pour le chargement constant (PESA et PRESPH), à partir de 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 , ) Il reste à calculer la matrice de rigidité matérielle pour le chargement total: REMEP1 = CALC_MATR_ELEM ( OPTION = 'RIGI_MECA' , MODELE = MODELE , CHAM_MATER = CHMAT , CARA_ELEM = CARAELEM , CHARGE = ( CONDLIM , PESA , PRESPH , PRESPS1 , ) , ) Toutes les matrices élémentaires sont calculées, l’étape suivante est donc leur assemblage: 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 , ) On somme ensuite les matrices de rigidité matérielle (RAMC1P1) et géométrique (RAGC12P1) correspondant au cas de chargement constant: RAMEP1 = COMB_MATR_ASSE ( COMB_R = ( _F( MATR_ASSE = RAMC1P1 , COEF_R = 1.0 , ) , _F( MATR_ASSE = RAGC12P1 , COEF_R = 1.0 , ) , ) , ) Les deux matrices nécessaires au calcul des modes de flambement sont donc construites. Étape 2 : Calcul des modes d’Euler ---------------------------------- Il peut être utile de faire des tests de STURM (opérateur INFO_MODE) sur l’intervalle de recherche sur lequel on veut trouver les cas de flambement. Ainsi, cela permettra d’optimiser la taille de l’intervalle et de contrôler le bon déroulement du calcul modal ultérieur puisqu’on connaîtra d’avance le nombre de modes existants. La syntaxe est: INFO_MODE ( MATR_RIGI = RAMEP1 , MATR_RIGI_GEOM = RAGEP1 , TYPE_MODE = 'MODE_FLAMB' , CHAR_CRIT = (-2.4 ,-2.2) ) Une fois l’intervalle de recherche de charge critique de flambage choisi, on peut alors mettre en œuvre CALC_MODES comme suit: 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 , ) , ) **Remarque** *Si l’algorithme ne converge pas ou si le nombre de modes n’est pas celui prédit par* *INFO_MODE, il peut être utile d’augmenter les valeurs de* *DIM_SOUS_ESPACE et* *NMAX_ITER_SOREN.* On norme les modes [:ref:`bib6 `], uniquement en se servant des degrés de liberté de translation: MODP1 = NORM_MODE ( reuse = MODP1 MODE = MODP1 , NORME = 'TRAN' , ) Les modes peuvent ensuite être post-traités. **Remarques** * *Il est indispensable de vérifier que la raideur géométrique du modèle choisi est bien une option disponible dans Code_Aster.* * *Une discrétisation plus fine conduit normalement à une baisse des charges critiques.* * *La discrétisation doit être apte à capter les modes de flambement, sachant que ces modes peuvent engendrer des déformations localisées (plis). Le calcul préalable des modes dynamiques peut constituer une première indication sur la qualité du maillage, bien que ces modes puissent être très différents des modes de flambement.* * *Les charges critiques des différents modes sont proportionnelles au module d’Young* :math:`E` *.* * *Avec cette méthode, on ne peut tenir compte du caractère suiveur des forces. En effet, le calcul de raideur géométrique fait avec l'option* RIGI_GEOM *de* CALC_MATR_ELEM *se base sur l'hypothèse que toutes les forces imposées sur le problème mécanique sont de type force morte. Si l'on veut tenir compte du caractère suiveur de certaines sollicitations, il faut obligatoirement utiliser les opérateurs non-linéaires* STAT_NON_LINE *ou* DYNA_NON_LINE *, avec le mot-clé* CRIT_STAB, comme on le verra dans la suite de ce document.