header blog

Blog R&D

Storie di innovazione e facili tutorial per conoscere il mondo dell'opensource

Il principale utilizzo della fluidodinamica computazione (CFD) è quello di risolvere un dominio composto da uno o più fluidi in movimento atraverso le equazioni di Navier-Stokes. La risoluzione per via analitica di queste equazioni è fattibile solamente in casi semplici con flussi laminari, e geometrie semplici (sfere, lastre piane), mentre le risoluzioni di casi reali, in cui compaiono di frequente flussi turbolenti, richiedono necessariamente un approccio numerico approssimato, ovvero in cui qualcosa viene semplificato o trascurato, al fine di ridurre drasticamente il costo computazionale mantenendo comunque un risultato significativo.

 RANSvsLES img1


Esistono quindi diversi metodi per risolvere le equazioni di Navier-Stokes:

   Direct Numerical Simulation (Simulazione Numerica Diretta: DNS): è l'approccio concettualmente più semplice, si discretizzano lo spazio e il tempo con griglie della dimensione voluta e si eseguono i calcoli su esse. È l'approccio che restituisce i risultati più accurati ma ha un costo computazionale elevatissimo, devono essere impiegati dei supercomputer. Per le applicazioni industriali risulta quindi troppo dispendioso.

   Reynolds Averaged Navier-Stokes (Equazioni mediate alla Reynolds: RANS): si basano sull'assunzione che si possa vedere il moto turbolento come formato da un moto medio e da una sua fluttuazione nel tempo. Le grandezze delle equazioni di partenza vengono mediate in un certo intervallo di tempo; così facendo i tempi di calcolo vengono notevolmente ridotti in quanto le scale del moto medio risultano essere notevolmente maggiori di quelle del moto turbolento. Richiedono l'utilizzo di ulteriori set di equazioni (ad esempio il modello turbolento k-ε) per mantenere chiuso il bilancio fisico del problema.

   Large Eddy Simulation (LES): consiste nel calcolare numericamente il comportamento delle scale turbolente più grandi e “tagliare” opportunamente attraverso un filtro le scale più piccole (Sub-grid Scale o scale di Kolmogorov). Fornisce risultati più accurati ad un costo computazionale leggermente superiore delle RANS ma al contempo notevolmente inferiore a quello della DNS, per questo motivo è un metodo in forte sviluppo.


Nel software opensource Code Saturne, sviluppato da EDF, è possibile impostare la risoluzione del modello sia con i metodi RANS sia con i metodi LES. Nel video allegato la differenza di modellizzazione per lo stesso condotto a T in cui due fluidi si incontrano a velocità diverse e si mischiano per proseguire lungo il condotto.

L’accortezza dell’operatore sta nella realizzazione della griglia di calcolo (mesh) in modo che sia ottimizzata per un metodo piuttosto che per un altro e nella scelta del modello più opportuno per la scala temporale che si intende analizzare. La precisione di un risultato è sempre un costo ed è opportuno sapere esattamente il livello di dettaglio necessario per risolvere in maniera affidabile il problema senza “spendere” troppo. Risulta quindi ovvio che non ha senso calcolare tutti i vortici “istantanei” in una simulazione semi-stazionaria (flussi mediamente stabili nel tempo) e quindi convengono i metodi RANS per costo computazionale e rapidità di soluzione. Allo stesso modo non ha senso utilizzare metodi LES su griglie troppo grossolane in quanto il software non avrebbe modo di risolvere correttamente il movimento turbolento.

 

Le nuove tecniche di produzione, ad esempio la stampa 3D o più genericamente l'additive manufacturing, permettono di estremizzare il concetto di geometria liberandosi dai vincoli di formatura delle tecniche convenzionali. Non è quindi un caso che l'ottimizzazione topologica negli ultimi anni stia guadagnando sempre più appeal nella progettazione di componenti strutturali. L'approccio dell'ottimizzazione topologica consiste nell'impiegare materiale solamente dove è strettamente necessario a sostenere i carichi di impiego. In questo modo è possibile sfruttare in maniera omogenea il materiale e ottenere al contempo componenti notevolmente alleggeriti. Proprio la possibilità di risparmiare preziosa materia prima e di ridurre il peso complessivo del componente (minori consumi in un veicolo = minori emissioni) rendono l'ottimizzazione topologica un processo estremamente "green". L'ottimizzazione topologica può quindi diventare il fattore chiave della progettazione del futuro, consentendo di rientrare nei sempre più stringenti vincoli ambientali promossi dagli enti normativi.

ARGO srl, grazie alla maturata esperienza nei software opensource, contribuisce attivamente allo sviluppo di una piattaforma libera per il calcolo di geometrie ottimizzate.

I primi algoritmi, liberamente disponibili alla pagina dedicata, sono ereditati dal lavoro di Frederic Renou sugli algoritmi SIMP sviluppati per il software Code_aster. 

Come esempio di ottimizzazione topologica su di una geometria semplice è stato pubblicato un video disponibile a questo link.


 

 

In questo terzo tutorial verrà illustrata la grande flessibilità del software Code_Aster nella gestione di condizioni al contorno particolari. L'esempio riguarda il raffreddamento per immersione in un bagno temprante di un componente in acciaio. Nei tutorial precedenti il raffreddamento era guidato da un coefficiente di scambio termico h [W/m^2 K ] costante; in realtà tale coefficiente subisce forti variazioni in funzione della temperatura superficiale del componente. Un generico mezzo temprante in fase liquida (sia acqua che olio) attraversa infatti 3 fasi di raffreddamento dette :

- film boiling : valori di coeff. h bassi

- nucleation/bubble boiling : valori di coeff.h molto alti

- convezione naturale : valori di coeff. h medio/bassi

 Nell'immagine sottostante un esempio di quanto il coefficiente di scambio per l'acqua e per l'olio possa variare durante le fasi di raffreddamento.

Fonte : ALD VACUUM TECHNOLOGIES

 A livello numerico la simulazione di un raffreddamento con coefficiente h variabile con la temperatura diventa pertanto non lineare in campo termico, Code_Aster in questi casi prevede l'utilizzo della funzione THER_NON_LINE.

La condizione al contorno di scambio termico tuttavia non prevede un coefficiente h funzione della temperatura h(T) ma solamente funzione del tempo : h(t); bisogna quindi sviluppare una condizione al contorno, definita dall'utente, che gestisca lo scambio di calore alla superficie.

Inizialmente vengono inseriti nel software i valori di coefficiente h in funzione delle diverse temperature di superficie, quindi vengono interpolati in modo lineare su tutto il dominio generando così la funzione "hT"; si definisce quindi la FORMULA "hec" (heat exchange coefficient) dello scambio termico funzione della temperatura T.

hec(T) = hT(T) * (Text - T) 

con Text la temperatura del bagno di tempra.

L'algoritmo di simulazione è stato testato su di un generico componente di media complessità a forma cilindrica ottenuto da GrabCad. Il componente alla temperatura di 850° in acciaio è stato immerso in un bagno di tempra a base olio. In questa simulazione per semplicità è stato considerato un tempo di immersione così ridotto da trascurare la velocità di ingresso nel bagno temprante. Di seguito i profili di temperatura rispettivamente dopo 2 e 10 secondi dall'immersione.

 

Profili di temperatura alla superficie ed in sezione dopo 2 secondi
Profili di temperatura alla superficie ed in sezione dopo 10 secondi

 CONCLUSIONI

Si può notare come, a causa dei diversi regimi di raffreddamento implementati, il gradiente di temperatura tra superficie e cuore varia in maniera non lineare rispetto al tempo: dopo 2 s il deltaT è di circa 200°C mentre dopo 10 s il deltaT è aumentato a 340 °C per poi ridursi via via che si raggiunge la temperatura di equilibrio del bagno. Questo avviene perchè alcune zone raggiungono una velocità di raffreddamento superiore ( passaggio tra film boiling e nucleation boiling) alcuni istanti prima di altre e questo fa si che la forbice di valori si allarghi notevolmente.

 

In questo secondo tutorial di Code_Aster verrà trattato il tema delle deformazioni indotte da uno shock termico o da un generico raffreddamento brusco in un componente metallico, sarà pertanto necessario accoppiare l'analisi termica ad un'analisi meccanica (sforzo-deformazione).

Durante la tempra (raffreddamento improvviso) di componenti dalla geometria complessa è importante trovare la disposizione o orientamento che minimizza le deformazioni e le tensioni residue. Nella realtà il raffreddamento non è omogeneo; è impossibile infatti che tutte le facce del componente vengono raffreddate nello stesso identico istante. Per questo motivo è opportuno inserire nella simulazione, come condizione al contorno, la direzione e la velocità di immersione nel bagno di tempra.

Nel tutorial viene introdotta una funzione arbitraria per la gestione della condizione al contorno superficiale durante l'immersione. La funzione generata è una funzione logistica in quanto l'obiettivo dichiarato è avere una variazione brusca del coefficiente_h ma non istantanea. Tale funzione ha come variabili la direzione di immersione (coordinata Z ad esempio) e il tempo (INST). Il componente utilizzato, un generico carter di forma mediamente complessa, è stato scaricato da GrabCad .

Sono state simulate due direzioni di immersione, scelte in modo arbitrario, allo scopo di evidenziare il raffreddamento non omogeneo e conseguentemente la differente distribuzione di tensioni residue nel pezzo alla fine del trattamento.


 


 

RISULTATI

 

Distribuzione di temperatura nella configurazione Z dopo 1,2 secondi dall'immersione

 

Tensioni residue dopo raffreddamento in configurazione Y

 

Tensioni residue dopo raffreddamento in configurazione Z

CONCLUSIONI 

Come era possibile aspettarsi, la direzione lungo Y genera maggiori tensioni residue all'interno del pezzo rispetto alla direzione Z. La disposizione "di piatto" (lungo Z) del carter in lega d'alluminio durante il ciclo di trattamento sembra pertanto da preferirsi per diminuire sia le deformazioni sia gli stress residui da tempra

 

Le immagini ottenute attraverso un microscopio a scansione elettronica (SEM) sono, per vincoli tecnici, ricostruzioni in bianco e nero (toni di grigio) della superficie osservata . Attualmente lo standard di pubblicazione di riviste con alto fattore di impatto richiede che tali immagini vengano colorate per aumentarne la profondità di campo e migliorarne la visualizzabilità. Esistono svariati metodi di complessità crescente per aggiungere colore alle immagini SEM. In questa prima guida verrà introdotto un metodo relativamente semplice per aumentare la profondità di campo a partire da una singola immagine utilizzando il software opensource GIMP (https://www.gimp.org/). Di seguito la procedura in pochi semplici passi:

1- Importare l'immagine in GIMP.

2- Convertirla in formato a colori (RGB) : Immagine -> Modalità -> RGB.

3- Generare due immagini identiche sovrapposte : Livello -> Duplica Livello.

4- Dal pannello laterale Livelli  ridurre l'opacità del livello più alto (livello 2) ad un valore compreso tra il 50% ed il 70%, a seconda del tipo di immagine.

5- Colorare il livello 1 (ad opacità 100%) : selezionare il livello 1 quindi  Colori -> Colora . Selezionare un colore di fondo dell'immagine dosandone anche saturazione e luminosità.

6- Intervenire sul livello 2 : selezionare il livello 2 quindi Colori -> Bilanciamento colore . In questa fase non esiste una regola precisa, generalmente operando su alte luci e ombre è possibile generare sfumature colorate in grado di aumentare il livello di profondità fittizia dell'immagine.

7- Ripetere il punto 4 fino a trovare la condizione di equilibrio desiderata.

8- Lavorare sul contrasto del livello 2 : Colori -> Luminosità-contrasto . Apportare piccoli cambiamenti al contrasto, generalmente aumentandolo, può portare ad un risultato sensibilmente migliore.

Nota: bisogna porre attenzione a non rovinare la risoluzione sgranando o "bruciando" (sovraesposizione) i colori durante le modifiche.

 

Fonte : http://remf.dartmouth.edu/images/insectPart3SEM/source/25.html

 

 

Fonte: http://www.azonano.com/article.aspx?ArticleID=3646


Nel primo tutorial viene trattato il tema delle analisi termiche con il software Code-Aster (http://code-aster.org). L'analisi è contestualizzata nello studio del raffreddamento dopo solubilizzazione di un generico componente meccanico, in lega di alluminio, caratterizzato da una massa termica non bilanciata. Il componente esce dal forno alla temperatura di 500°C e viene quindi immerso in acqua non agitata alla temperatura di 50 °C.

SALOME MECA

Attraverso questo software opensource (http://www.code-aster.org/V2/spip.php?article303) liberamente scaricabile è possibile eseguire tutti gli step dell'analisi. Gli step si dividono in : definizione della geometria, calcolo della mesh, definizione delle istruzioni di calcolo, soluzione, post-processing.

MODULO GEOMETRIA

La geometria viene importata in file STEP, successivamente viene creato un gruppo di facce sul quale applicare le condizioni al contorno. Vengono selezionate le superfici di scambio termico pezzo-acqua, tale gruppo prende il nome di "quench"; la superficie inferiore del componente, appoggiato su una piastra di supporto durante il trattamento, non entra in contatto con l'acqua e pertanto al momento non viene inserita nel gruppo quench.

MODULO MESH

La mesh viene calcolato attraverso l'algoritmo NETGEN con elementi triangolari e quadrangolari, il dimensionamento degli elementi è stato eseguito in modo da avere almeno 3 nodi per ogni sezione. La mesh quindi viene esportata in formato MED

 

MODULO ASTER

Attraverso "Aster -> add study case" è possibile iniziare una nuova simulazione fornendo un file di comandi, il file .comm e un file con la mesh .med.

file .comm =

DEBUT();

#MESH IMPORT: lire_maillage per importare la mesh in formato MED

mesh=LIRE_MAILLAGE(FORMAT='MED',);

#MATERIAL DEFINITION / DEFINIZIONE MATERIALE
#funzione DEFI_MATERIAU. THER = thermal properties / proprietà termiche
#IMPORTANT !!!!  RHO_CP = density * specific heat  [J/(m^3 *K)]

mate=DEFI_MATERIAU(THER=_F(LAMBDA=140.0,
                           RHO_CP=2430000.0,),);

#MATERIAL DOMAIN / DEFINIZIONE DEL DOMINIO DEL MATERIALE
#command AFFE_MATERIAU . Define wich part (TOUT=OUI) of the mesh (MAILLAGE) is affected by material properties (MATER)

affe_t=AFFE_MATERIAU(MAILLAGE=mesh,
                     AFFE=_F(TOUT='OUI',
                             MATER=mate,),
                     AFFE_VARC=_F(TOUT='OUI',
                                  NOM_VARC='TEMP',
                                  VALE_REF=20.0,),);

#MODEL DEFINITION / DEFINIZIONE DEL MODELLO
#command AFFE_MODELE , definition of the phisical domain (PHENOMENE=thermique)

m_ter=AFFE_MODELE(MAILLAGE=mesh,
                  AFFE=_F(TOUT='OUI',
                          PHENOMENE='THERMIQUE',
                          MODELISATION='3D_DIAG',),);

#THERMAL BOUNDARY CONDITION / CONDIZIONI AL CONTORNO TERMICHE
#Boundary Exchange / Scambio Termico alla superficie (ECHANGE)
#In this water quenching case a static mean exchange coefficient (COEF_H) [W/(m^2 * K)]  is used with a defined water temperature (TEMP_EXT)

char_t=AFFE_CHAR_THER(MODELE=m_ter,
                      ECHANGE=_F(GROUP_MA='quench',
                                 COEF_H=3000.0,
                                 TEMP_EXT=50.0,),);

#TIME TRANSIENT DEFINITION / DEFINIZIONE DELLA LISTA DEGLI ISTANTI DI CALCOLO
#Starting from a list of number defined with DEFI_LIST_REEL in several intervals, the intervals have smaller timesteps during the firsts seconds of the simulation

tempo=DEFI_LIST_REEL(DEBUT=0.0,
                     INTERVALLE=(_F(JUSQU_A=1.0,
                                    NOMBRE=20,),
                                 _F(JUSQU_A=5.0,
                                    NOMBRE=20,),
                                 _F(JUSQU_A=20.0,
                                    NOMBRE=20,),),);

inst=DEFI_LIST_INST(DEFI_LIST=_F(METHODE='AUTO',
                                 LIST_INST=tempo,
                                 PAS_MINI=0.005,
                                 PAS_MAXI=3.0,),
                    ADAPTATION=_F(),);

#THERMAL SOLVER / RISOLUZIONE DEL PROBLEMA TERMICO
#since this is a linear case the command for the resolution is THER_LINEARE, the initial state (ETAT_INIT) is defined in temperature (500 C)  at the time 0.0 (INST_ETAT_INIT)

t_lin=THER_LINEAIRE(MODELE=m_ter,
                    CHAM_MATER=affe_t,
                    EXCIT=_F(CHARGE=char_t,),
                    ETAT_INIT=_F(VALE=500.0,
                                 INST_ETAT_INIT=0.0,),
                    INCREMENT=_F(LIST_INST=inst,
                                 INST_INIT=0.0,),
                    SOLVEUR=_F(METHODE='MULT_FRONT',),
                    PARM_THETA=0.57,);

#SAVING RESULTS / SALVATAGGIO DEI RISULTATI
#The data calculated in THER_LINEAIRE, defined by the command RESU, are saved in MED format.

IMPR_RESU(FORMAT='MED',
          RESU=_F(MAILLAGE=mesh,
                  RESULTAT=t_lin,
                  TOUT_CHAM='OUI',),);

FIN();

Una volta definito il file di comando si lancia la simulazione attraverso il tasto play

MODULO DI POST PROCESSING (PARAVIEW)

I risultati ottenuti dal calcolo sono quindi importati nel modulo di paraview per essere analizzati.

0.5s
Distribuzione di temperatura a 0.5 secondi

Pagina 3 di 3

L.THEME
We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.