Instabilità lineare

In questo breve post si descrive come fare un’analisi di instabilità lineare (buckling). Il problema è tratto da questo sito. Si tratta di calcolare il carico critico euleriano per (in questo caso) una semplice trave. La trave è libera solo di traslare in senso verticale nel suo estremo destro, dove viene applicato un carico nodale.

Trave caricata verticalmente all’estremo destro

Per l’impostazione del problema (creazione della mesh, impostazione dello studio, definizione dei materiali etc.) si rimanda ai post precedenti, qui tratteremo solo le caratteristiche specifiche di questo tipo di analisi. Per questa analisi occorre:

  • Eseguire un’analisi statica lineare con carichi e vincoli
  • Calcolare una matrice di rigidezza geometrica usando i soli vincoli
  • Eseguire un’analisi modale

Il risultato dell’analisi modale ci fornirà il carico critico che cerchiamo. Attenzione: il comportamento di Code_Aster è cambiato tra la versione 13 e la versione 14; i carichi critici (che sono gli autovalori forniti dall’analisi modale) prima erano calcolati con segno negativo e quindi in ordine inverso di quanto atteso, adesso sono calcolati normalmente. Per la trave utilizziamo un elemento POU_D_T a sezione circolare.

La definizione della sezione della trave circolare

Definiamo separatamente vincoli e carichi (cioè con due AFFE_CHAR_MECA distinte).

Definizione dei vincoli ai due estremi della trave
Carico verticale sull’estremo destro

Per prima cosa effettuiamo una normale analisi statica.

Analisi statica con carichi e vincoli

Dobbiamo estrarre il campo degli sforzi calcolati dall’analisi statica usando CREA_CHAMP, ci serviranno per ottenere la matrice di rigidezza geometrica.

Estrazione del campo di sforzi ai punti di Gauss dai risultati dell’analisi statica

Possiamo calcolare entrambe le matrici di rigidezza usando ASSEMBLAGE.

Calcolo delle matrice di rigidezza geometrica e meccanica assemblate

A questo punto possiamo eseguire l’analisi modale. Richiediamo un risultato di tipo MODE_FLAMB (instabilità si dice in questo contesto “flambement” o “flambage” in francese).

Calcolo modale di instabilità

Normalizziamo i modi rispetto alla traslazione più grande con NORM_MODE.

Normalizzazione dei modi

I carichi critici calcolati sono stampati dopo l’esecuzione del calcolo nei vari messaggi.

Possiamo estrarre i carichi critici calcolati in una tabella usando RECU_TABLE (che è poi possibile scrivere in un file di testo o in formato Excel con IMPR_TABLE).

#
-----------------------------------------------------------------
ASTER 14.02.00 CONCEPT TBCRT36 CALCULE LE 02/02/2019 A 11:18:24 DE TYPE
TABLE_SDASTER
NUME_ORDRE CHAR_CRIT
1 1.66642E+00

Questo risultato è molto vicino a quanto indicato nel documento iniziale.

Autovalore ottenuto dal calcolo iniziale

È possibile applicare questa analisi a molti tipi di strutture, anche complesse (comprese piastre, elementi solidi, etc.). Occorre tenere presente che i fenomeni di instabilità calcolati sono dei casi ideali: nella realtà imperfezioni, plasticizzazioni locali possono provocare l’instabilità della struttura con carichi inferiori. Di solito si correggono questi risultati con fattori di sicurezza, gestiti caso per caso. Ecco un link per scaricare un archivio contenente i file utilizzati in questo post. Di seguito il file di comandi completo.

DEBUT()

MAIL = LIRE_MAILLAGE(FORMAT='MED',
                     INFO=2,
                     INFO_MED=2,
                     UNITE=20,
                     VERI_MAIL=_F(VERIF='OUI'))

MODMECA = AFFE_MODELE(AFFE=_F(GROUP_MA='PROP_1',
                              MODELISATION=('POU_D_T', ),
                              PHENOMENE='MECANIQUE'),
                      MAILLAGE=MAIL)

CAEL = AFFE_CARA_ELEM(MODELE=MODMECA,
                      POUTRE=_F(CARA=('R', ),
                                GROUP_MA='PROP_1',
                                SECTION='CERCLE',
                                VALE=(0.1784, )))

M42 = DEFI_MATERIAU(ELAS=_F(E=100000000,
                            NU=0,
                            RHO=0))

CHMAT = AFFE_MATERIAU(AFFE=_F(GROUP_MA=('PROP_1', ),
                              MATER=M42),
                      MAILLAGE=MAIL)

BL79 = AFFE_CHAR_MECA(DDL_IMPO=(_F(DRX=0,
                                   DRY=0,
                                   DRZ=0,
                                   DX=0,
                                   DY=0,
                                   DZ=0,
                                   NOEUD=('N1', )),
                                _F(DRX=0,
                                   DRY=0,
                                   DRZ=0,
                                   DX=0,
                                   DZ=0,
                                   NOEUD=('N2', ))),
                      MODELE=MODMECA)

CHMEC69 = AFFE_CHAR_MECA(FORCE_NODALE=_F(FY=-6,
                                         NOEUD='N2'),
                         MODELE=MODMECA)

RESU35 = MECA_STATIQUE(CARA_ELEM=CAEL,
                       CHAM_MATER=CHMAT,
                       EXCIT=(_F(CHARGE=CHMEC69),
                              _F(CHARGE=BL79)),
                       MODELE=MODMECA,
                       OPTION='SIEF_ELGA',
                       SOLVEUR=_F(METHODE='MUMPS',
                                  RENUM='PORD'))

FSIG36 = CREA_CHAMP(NOM_CHAM='SIEF_ELGA',
                    OPERATION='EXTR',
                    RESULTAT=RESU35,
                    TYPE_CHAM='ELGA_SIEF_R')

ASSEMBLAGE(CARA_ELEM=CAEL,
           CHAM_MATER=CHMAT,
           CHARGE=(BL79, ),
           MATR_ASSE=(_F(MATRICE=CO('SAMEC36'),
                         OPTION='RIGI_MECA'),
                      _F(MATRICE=CO('SAGEO36'),
                         OPTION='RIGI_GEOM',
                         SIEF_ELGA=FSIG36)),
           MODELE=MODMECA,
           NUME_DDL=CO('NDDL36'))

RESU36 = CALC_MODES(CALC_CHAR_CRIT=_F(NMAX_CHAR_CRIT=2),
                    MATR_RIGI=SAMEC36,
                    MATR_RIGI_GEOM=SAGEO36,
                    OPTION='PLUS_PETITE',
                    SOLVEUR=_F(METHODE='MUMPS'),
                    SOLVEUR_MODAL=_F(METHODE='TRI_DIAG'),
                    TYPE_RESU='MODE_FLAMB',
                    VERI_MODE=_F(STOP_ERREUR='NON'))

RESU36 = NORM_MODE(reuse=RESU36,
                   MODE=RESU36,
                   NORME='TRAN')

TBCRT36 = RECU_TABLE(CO=RESU36,
                     NOM_PARA='CHAR_CRIT')

IMPR_RESU(FORMAT='RESULTAT',
          RESU=(_F(NOM_CHAM='DEPL',
                   RESULTAT=RESU35,
                   VALE_MAX='OUI',
                   VALE_MIN='OUI'),
                _F(NOM_PARA='CHAR_CRIT',
                   RESULTAT=RESU36,
                   TOUT_CHAM='NON')),
          UNITE=8)

IMPR_RESU(FORMAT='MED',
          RESU=(_F(NOM_CHAM=('DEPL', ),
                   RESULTAT=RESU35),
                _F(NOM_CHAM='DEPL',
                   RESULTAT=RESU36)),
          UNITE=80)

IMPR_TABLE(TABLE=TBCRT36,
           UNITE=8)

TEST_RESU(RESU=_F(CRITERE='RELATIF',
                  NUME_MODE=1,
                  PARA='CHAR_CRIT',
                  RESULTAT=RESU36,
                  TOLE_MACHINE=0.02,
                  VALE_CALC=1.666583))

FIN()

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.