Visualizzazione delle sezioni degli elementi trave

Un altro post rapido per dare alcuni elementi di risposta per una domanda sentita varie volte sempre alla giornata Code_Aster di Modena (e di recente su Linkedin). Si tratta di argomento relativamente semplice ma è destinato a chi ha già un’esperienza di base in Code_Aster.

Gli elementi trave sono spesso rappresentati negli studi strutturali ad elementi finiti da elementi filari (1D) e non è quindi possibile vedere graficamente il loro orientamento o, più in generale, la forma della sezione. Nei programmi professionali esiste una qualche forma di visualizzazione che permette di “vedere” la trave come elemento solido, almeno per controllare il suo corretto orientamento.

In Code_Aster una possibilità consiste nell’utilizzo degli elementi multifibra. Le travi multifibra sono state create per modellare travi con una struttura interna complessa, spesso composita (per esempio nel caso delle armature in acciaio per il cemento armato). È possibile comunque utilizzarle anche per una qualsiasi trave, anche con “una fibra sola”, cioè fatta di un solo materiale.

Gli elementi multifibra, anche se sono un po’ più complessi da usare, permettono tutta una serie di trattamenti avanzati:

  • visualizzazione tridimensionale della sezione
  • visualizzazione della componente di un campo su vari punti della sezione
  • calcolo del criterio di Von Mises anche per gli elementi trave (possibile perché il codice, per questi elementi, conosce la forma della sezione)
  • come detto, utilizzo per travi composite
  • calcolo in piccole e grandi deformazioni

L’utilizzo degli elementi multifibra richiede una mesh (bidimensionale) per ogni tipo di sezione richiesta. Questa mesh deve essere fornita separatamente rispetto alla mesh della struttura, tramite il comando LIRE_MAILLAGE, immaginiamo di avere tre diverse sezioni, dobbiamo quindi fornire tre mesh:

ML50505=LIRE_MAILLAGE(UNITE=21, FORMAT='MED',)
MUPN100=LIRE_MAILLAGE(UNITE=22, FORMAT='MED',)
MUPN120=LIRE_MAILLAGE(UNITE=23, FORMAT='MED',)
Mesh per una sezione di trave di tipo UPN120
Mesh per una sezione di trave di tipo L50x50x5

A questo punto dobbiamo assegnare ogni sezione alla geometria della trave (occorre ricordare che si tratta di travi “multifibra”, anche se qui ne usiamo una sola) e dare ad ognuna un nome simbolico:

GEOFIBR=DEFI_GEOM_FIBRE(SECTION=(
                                 _F(GROUP_FIBRE="L_50x50x5", 
                                    MAILLAGE_SECT=ML50505,
                                    TOUT_SECT="OUI",  
                                    COOR_AXE_POUTRE = (0.0, 0.0), 
                                    ANGLE = 0.0),
                                _F(GROUP_FIBRE="UPN_100", 
                                   MAILLAGE_SECT=MUPN100,
                                   TOUT_SECT="OUI", 	
                                   COOR_AXE_POUTRE = (0.0, 0.0), 
                                   ANGLE = 0.0),
                                _F(GROUP_FIBRE="UPN_120", 
                                   MAILLAGE_SECT=MUPN120,
                                   TOUT_SECT="OUI", 	
                                   COOR_AXE_POUTRE = (0.0, 0.0), 
                                   ANGLE = 0.0),                              
                                ), )

Come sempre, dobbiamo definire un materiale tramite DEFI_MATERIAU, nel sistema di unità consistente scelto (in questo caso: tonnellate, mm, s, N, MPa)

acciaio = DEFI_MATERIAU(ELAS=_F(E = 2.1E5,
                                NU = 0.3,
                                RHO = 7.85E-09))

Il materiale deve essere assegnato alle fibre definite precedentemente (ricordiamo che questi elementi sono previsti anche per materiali compositi, quindi non basta assegnare il materiale alla “trave”, occorre indicarlo per ogni “fibra”):

COMP_REF=DEFI_COMPOR(GEOM_FIBRE=GEOFIBR,
                     MATER_SECT=acciaio,
                     MULTIFIBRE=(
                            _F(GROUP_FIBRE='L_50x50x5', MATER = acciaio),
                            _F(GROUP_FIBRE='UPN_100', MATER = acciaio),
                            _F(GROUP_FIBRE='UPN_120', MATER = acciaio),
                     ),)

Possiamo sfruttare la mesh della sezione per chiedere a Code_Aster di calcolare anche le caratteristiche della trave in automatico (area della sezione, momenti di inerzia, …):

T_UPN100=MACR_CARA_POUTRE(MAILLAGE=MUPN100, 
                          GROUP_MA_BORD='BORDER',
                          TABLE_CARA="OUI", 
                          NOM="SECTION", 
                          GROUP_NO="V1",  
                          ORIG_INER=(0.0, 0.0))
T_UPN120=MACR_CARA_POUTRE(MAILLAGE=MUPN120, 
                          GROUP_MA_BORD='BORDER',
                          TABLE_CARA="OUI", 
                          NOM="SECTION", 
                          GROUP_NO="V1",  
                          ORIG_INER=(0.0, 0.0))
T_L50505=MACR_CARA_POUTRE(MAILLAGE=ML50505, 
                          GROUP_MA_BORD='BORDER',
                          TABLE_CARA="OUI", 
                          NOM="SECTION", 
                          GROUP_NO="V1", 
                          ORIG_INER=(0.0, 0.0))

Dobbiamo come sempre definire un modello per il nostro studio, usando una delle possibilità disponibili per le travi multifibra (in questo caso POU_D_TGM, travi di Timoshenko con comportamento non lineare) :

model = AFFE_MODELE( MAILLAGE = mesh,
                     AFFE=(
			   _F(GROUP_MA = 'ALL1D',
			      PHENOMENE = 'MECANIQUE',
			      MODELISATION='POU_D_TGM'),								
			   ),
		   )

A questo punto dobbiamo assegnare le sezioni definite sopra alle varie parti della mesh della struttura, fornendo un orientamento ai diversi gruppi:

carel = AFFE_CARA_ELEM(MODELE = model,
		       POUTRE = (
                                 _F(GROUP_MA = 'UPN100',
                                    SECTION = 'GENERALE',
                                    TABLE_CARA=T_UPN100, 
                                    NOM_SEC='UPN_100',),
                                 _F(GROUP_MA = 'UPN120',   
                                    SECTION = 'GENERALE',
                                    TABLE_CARA=T_UPN120,
                                    NOM_SEC='UPN_120',),
		                 _F(GROUP_MA = 'L50_5',   
                                    SECTION = 'GENERALE',
                                    TABLE_CARA=T_L50505, 
                                    NOM_SEC='L_50_5',),
                                ),
		       GEOM_FIBRE=GEOFIBR,
                       MULTIFIBRE=(
                                   _F(GROUP_MA='L50_5', 
                                      GROUP_FIBRE='L_50x50x5'),
                                   _F(GROUP_MA='UPN100', 
                                      GROUP_FIBRE='UPN_100'),
                                   _F(GROUP_MA='UPN120', 
                                      GROUP_FIBRE='UPN_120'),
                        ),                                    
                        ORIENTATION = (
                                _F(CARA = 'ANGL_VRIL',
                                    VALE = (90.),
                                    GROUP_MA = ('CONEBEAM','DIAGBEAM')),
                                _F(CARA = 'ANGL_VRIL',
                                    VALE = (-90.),
                                    GROUP_MA = ('UPBEAM')),
                                _F(CARA = 'ANGL_VRIL',
                                    VALE = (-45.),
                                    GROUP_MA = ('XBEAMOUT','XBEAMIN'),),
                                      ),											
			)

Dobbiamo anche assegnare i materiali agli elementi della nostra struttura, facendo riferimento a quanto definito sopra per le travi multifibra:

chmat = AFFE_MATERIAU(MAILLAGE=mesh,
                      AFFE=(
                            _F( GROUP_MA = 'ALLMOD', MATER = acciaio),
                            ),
                      AFFE_COMPOR=(
                            _F( GROUP_MA = 'ALL1D', COMPOR=COMP_REF),
                            ),
                      )

Al momento dell’analisi, dobbiamo definire un comportamento “multifibra”, in questo caso alle piccole deformazioni:

RESU=STAT_NON_LINE(MODELE=model,
                   CHAM_MATER=chmat,
                   CARA_ELEM=carel,
                   EXCIT=(
                          _F(CHARGE=GRAV,FONC_MULT=RAMPE),
                          _F(CHARGE=BLOQ,),
                          _F(CHARGE=LIA,),
                          ),
                   CONTACT=CHCONT,
                   COMPORTEMENT=(
                                 _F(RELATION='ELAS', GROUP_MA='ALL2D'),
                                 _F(RELATION = 'MULTIFIBRE', 
                                    DEFORMATION= 'PETIT', 
                                    GROUP_MA = 'ALL1D'),
                                ),
                   CONVERGENCE=_F(ARRET='OUI',
                                 ITER_GLOB_MAXI=15,),                                  
                   INCREMENT=_F(LIST_INST=LAUTO,),
                   ARCHIVAGE=_F(LIST_INST=LINST,),)

Se vogliamo calcolare, per esempio, gli sforzi di Von Mises, possiamo eseguire un post processing dove andiamo ad estrarre i risultati alla fibra desiderata (in questo caso, l’unica presente in ogni trave):

RESUPMF=POST_CHAMP(RESULTAT=RESU,
                    EXTR_PMF =_F(NOM_CHAM='SIGM_ELNO', NUME_FIBRE=1,),
                  )

RESUPMF=CALC_CHAMP(reuse=RESUPMF,
                 RESULTAT=RESUPMF,
                 CONTRAINTE='SIGM_NOEU',
                 CRITERES=('SIEQ_NOEU'),
                 )

Se visualizziamo soltanto la mesh di una trave nella struttura (in questo caso una trave circolare, usata come rinforzo) non possiamo verificare direttamente l’orientamento della sezione.

Trave circolare, si notano i nodi (quadratini rossi) e i segmenti della mesh (trattini neri)

Possiamo quindi richiedere a Code_Aster la creazione di una struttura dati che ci permette di vedere la trave compresa la sua sezione (per esempio per verificare l’orientamento visivamente); allo stesso tempo possiamo anche vedere i valori di una certa componente nei vari punti della sezione:

IMPR_RESU_SP(RESULTAT=RESU,
             GROUP_MA=('ALL1D'),
             RESU=_F(NOM_CHAM='SIEF_ELGA',NOM_CMP=('SIXX'),),
             UNITE =10,
            )

Da notare: il comando IMPR_RESU_SP produce un archivio di tipo “tar” che contiene diversi file in formato compatibile con Paraview (e quindi con Paravis).

Visualizzazione di una trave multifibra: sono mostrati i valori di una componente di un campo nei vari punti della sezione.

Ovviamente gli elementi multifibra richiedono una descrizione più complessa (che potrebbe essere semplificata in questo caso particolare con qualche macro) rispetto alle travi normali ma presentano anche alcuni vantaggi.

Da notare: i risultati mostrati sulla sezione non sono semplici “estrapolazioni” ma sono stati estratti da Code_Aster a partire dai valori delle strutture dati interne delle travi multifibra, sono quindi valori effettivamente calcolati tramite il metodo degli elementi finiti.

5 risposte a “Visualizzazione delle sezioni degli elementi trave”

  1. Veramente ben fatto.
    Nonostante il limite ( per ora ) della mancata visualizzazione in pre-processing, questo tutorial permette di visionare anche l’orientamento della sezione in fase di post processing. Un modo rapido per aiutare a tenere sotto controllo i risultati del modello

  2. Ottimo allora non sono io l’unico che non visualizza le sezioni delle travi. 😀

    il procedimento è replicabile anche tramite “Asterstudy” (almeno per le prime volte), o si parte di pythoning direttamente?

    Una volta realizzata una trave multifibra monofibra, si possono ottenere risultati analoghi a quelli di una classica “eulerian 1d” (sollecitazioni e tensioni)? (Chiedo scusa ma quì pecco di ingnoranza nella tipologia di elemento finito)

    1. Ciao Paolo, ti rispondo per quello che sono le mie conoscenze.
      Per quanto riguarda la prima domanda, in AsterStudy si possono importare anche parti di comandi Python (sotto formato .comm) che l’interfaccia non tratta in forma grafica (è sufficiente che i comandi siano correttamente scritti per essere interpretati da code_aster – vedi link al relativo documento).
      Per quanto riguarda la seconda domanda, le travi multifibra (POU_D_EM) rispondono come le altre travi (POU_D_E, POU_D_T) alla gestione dei risultati (campi) calcolati, per cui è possibile ricavare sforzi e tensioni anche per loro (vedi relativo documento).

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.