Professional Documents
Culture Documents
Relatore
Prof. Claudio Bruno
Laureando
Luigi Romagnosi
Correlatore
Dott.ssa Antonella Ingenito
Dott. Donato Cecere
Indice
I
Introduzione
Capitolo 1
NDICE
I
I principi di conservazione
1.1
Introduzione
1.2
1.3
1.4
1.5
Equazione di stato
1.6
1.7
1.8
11
1.9
Teorema di Kelvin
12
1.10
Teoremi di Helmholtz
13
Capitolo 2
2.1
Introduzione
15
2.2
16
2.3
La teoria di Kolmogorov
18
2.4
21
2.4.1
Approccio RANS
22
2.4.1a
25
2.4.2
Approccio LES
26
2.4.2a
28
2.4.2b
30
2.4.2c
31
2.5
34
2.6
36
Indice
Capitolo 3
3.1
Origini e sviluppo
38
3.2
Set-up di simulazione
40
3.3
42
3.4
44
3.4.1
45
Capitolo 4
4.1
Introduzione al codice
58
4.2
59
4.3
62
4.4
64
4.4.1
Termine baroclinico
65
4.4.2
Vortex stretching
72
4.4.3
Termine compressibile
77
4.4.4
I termini viscosi
81
4.4.5
Vorticit e mescolamento
86
4.5
Conclusioni
Appendice A
91
I termini viscosi
A.1
Termine diffusivo D
96
A.2
Termine compressibile-viscoso CV
96
A.3
Termine viscosit-velocit VV
98
A.4
Termine deformazione-viscosit DV
99
Appendice B
I Codici
B.1
Post_plt_evo.f
101
B.2
Mod_EqTurb_evo.f90
111
B.3
Mod_Weno5_evo.f90
127
B.4
Pde.f90
129
Bibliografia
132
Introduzione
NTRODUZIONE
Fig.I.1: Velivolo sperimentale Bell X-1A che vol per la prima volta nel 1947 (a sinistra); lX-43A che nel 1997 raggiunse M=9.6 (a destra)
Oggi gli statoreattori (Ramjet e SCRJ) hanno conquistato lattenzione anche dellindustria
spaziale. Lattuale sfida la realizzazione di una nuova generazione di motori per lanciatori
Introduzione
spaziali in grado di sfruttare in fase di salita lossigeno presente nellatmosfera allo scopo di
abbattere i costi di messa in orbita di almeno un ordine di grandezza rispetto agli attuali ~10000
dollari al kg. Lambizioso progetto prevede laccoppiamento di un rocket (per la fase iniziale di
lancio, utile a raggiungere velocit operative del ramjet/scramjet, e per la fase finale di volo nel
vuoto) con un motore air-breathing nel volo ipersonico in atmosfera. Il vantaggio risiede nel
minor peso al decollo del lanciatore dovuto alla minor quantit di ossigeno liquido (LOX) richiesta
a bordo. Numerosi sono gli Stati coinvolti attualmente nello sviluppo di velivoli ipersonici, gli
Stati Uniti nei progetti come Falcon, HyFly e X-51, la Russia, il Regno Unito, lAustralia con
HyShot della University of Queensland, in Europa lESA coordina lo sviluppo di LAPCAP 2,
progetto al quale collabora anche la Sapienza Universit di Roma e che prevede la realizzazione di
aerei civili in grado di raggiungere M = 5 con motore ramjet e M = 8 con scramjet. Anche Cina,
India e recentemente la Korea hanno mostrato interesse per gli scramjet in particolar modo la
Seoul National University anche questa impegnata nel progetto HyShot.
La presente tesi si pone lobiettivo di indagare gli effetti della turbolenza sul mescolamento e
quindi sulleffettiva fattibilit di una completa combustione, allinterno di camere, in condizioni
supersoniche. Applicazioni che prevedono combustioni a velocit supersoniche vanno sotto il
nome di SCRAMJET (Supersonic Combustion Ramjet); questi, come avviene per motori Ramjet,
sfruttano la compressione dinamica dellaria con la differenza che alluscita dalla presa daria,
anteposta alla camera di combustione, il flusso caratterizzato da velocit superiori a quelle
soniche (M > 1). Il limite dei Ramjet sta nella massima velocit di volo che riescono a raggiungere
(M 5), poich un rallentamento fino a condizioni subsoniche comporterebbe temperature troppo
elevate in camera. Ma avere un flusso supersonico in camera di combustione, cosa che
contraddistingue i motori Scramjet, comporta un minor tempo di residenza, condizione che in
passato ha portato a dubitare sulleffettiva possibilit di ottenere un ancoraggio di fiamma; recenti
sviluppi hanno per scongiurato ogni dubbio.
Affinch possa esserci combustione, il tempo caratteristico delle reazioni, unito al tempo di
mescolamento e a eventuali ritardi di accensione, deve essere inferiore al tempo di residenza, che
in motori Scramjet dellordine di 10
-4
controllato dal mescolamento, reso critico dallelevata energia cinetica che rende la corrente rigida
a variazioni di direzione rallentando i processi di interdiffusione molecolare combustibileossidante. Come facile intuire, flussi che viaggiano a velocit supersoniche forzano
lallineamento del vettore vorticit con la direzione principale del moto (vorticit streamwise);
leffetto una riduzione globale della turbolenza essendo nulli i contributi dati dalle altre due
II
Introduzione
componenti del vettore vorticit al vortex stretching. Tale concetto verr chiarito nei capitoli
successivi. Allo stesso tempo per, elevati numeri di Mach impediscono alle particelle di
ridistribuirsi in presenza di ostacoli (es: idrogeno iniettato in cross flow rispetto allaria entrante),
la velocit di propagazione dei disturbi inferiore a quella convettiva con leffetto di
addensamenti locali nel flusso a cavallo di onde durto. Laumento della pressione comporta una
riduzione del libero cammino medio, e la cinetica chimica accelera per via di un numero maggiore
di collisioni efficaci tra le particelle. Lo studio dellaccoppiamento tra turbolenza e combustione
(mescolamento) viene fatto sulla base dei dati forniti dalla simulazione numerica realizzata in
collaborazione con il Dott. Donato Cecere e la Dott.ssa Antonella Ingenito per il progetto HyShot,
presso Enea Centro Ricerche Casaccia. Il lavoro strutturato come segue:
I.
Nel primo capitolo vengono ricavate le equazioni fondamentali della fluidodinamica per
flussi comprimibili servendosi dei principi di conservazione della massa, della quantit di
moto e dellenergia. Combinando opportunamente le equazioni di Navier-Stokes si giunge
alla formulazione dellequazione di trasporto della vorticit, utile alla comprensione dei
fenomeni legati alla turbolenza. Infine si richiamano alcuni teoremi fondamentali sui
vortici;
II.
III.
Il terzo fornisce un breve panoramica del progetto HyShot e dei principi di funzionamento
di un motore Scramjet. Viene trattato nello specifico il set-up del codice proprietario
S-HeaRT inerente alla simulazione di un flusso supersonico daria in una camera di
combustione con iniezione di idrogeno a 90 di inclinazione. A seguire la validazione dei
risultati mediante confronto con le prove sperimentali effettuate dalla University of
Queensland[19], e descrizione del campo fluidodinamico;
IV.
Nel quarto e ultimo capitolo vi una breve descrizione del codice sviluppato per lanalisi
della vorticit. Viene inoltre affrontata limplementazione e la validazione dello schema
numerico WENO35 su cui si basa il codice stesso. Il campo di moto vorticoso cos scisso
e separatamente studiato in ogni suo termine, di trasporto, di produzione e di dissipazione,
risaltando gli effetti della turbolenza sul mescolamento.
Infine sulla base delle nuove conoscenze, si conclude presentando due configurazioni diverse di
iniettore che potrebbero migliorare il mescolamento tra reagenti, ma ci rimane ancora da
verificare.
III
APITOLO
I PRINCIPI DI CONSERVAZIONE
1.1 INTRODUZIONE
Il set di equazioni per lo studio del moto dei fluidi va sotto il nome di Equazioni di Navier-Stokes,
esprimibili mediante i principi di conservazione della massa, della quantit di moto e dellenergia.
Queste rappresentano un sistema di equazioni alle derivate parziali che descrivono il
comportamento di un qualsiasi fluido continuo deformabile dal punto di vista macroscopico. Per la
chiusura del sistema occorre affiancare lequazione di stato dei gas perfetti e specificare le
condizioni al contorno e iniziali imposte dal problema in esame. Inoltre se si ha a che fare con
miscele di gas va verificata la conservazione delle singole specie gassose. Di seguito verranno
esposti i principi di conservazione e da questi si ricaver lequazione di trasporto della vorticit e
verranno enunciati alcuni teoremi fondamenti per lo studio dei vortici.
= 0
(1.1)
= 0
(1.2)
con volume fisso nello spazio (formulazione euleriana). Servendosi del teorema di Gauss:
(1.3)
la (1.2) diventa:
+ = 0
(1.4)
+ = 0
(1.5)
()
(1.6)
in altri termini, la (1.6), riscritta in forma integrale per un volumetto di fluido V, suggerisce che :
(1.7)
Forze di massa, dovute al fatto che le particelle dotate di una propria massa si trovano
immerse in un campo di forze (es: campo gravitazionale). Si indichi con f il contributo di
dette forze per unit di massa.
2
Forze di superficie, dovute invece al contributo della pressione normale p unito alla
componente tangenziale nel caso di fluido in movimento.
(1.8)
dove e sono rispettivamente la frazione massica della specie k-esima e la forza esterna che
agisce su tale specie. Per teorema di Gauss vale:
(1.9)
e considerata larbitrariet del volume scelto possibile scrivere la (1.7) in forma differenziale:
1
+ = +
(1.10)
(1.11)
+ 2
(1.12)
+ 2
3
(1.13)
(1.14)
(1.15)
1
2
+ = + 2 +
(1.16)
(1.17)
1
21
2
+ =
+ +
1
21
2
2
2
+ =
+ + +
3
3
(1.18)
1
+
2
(1.19)
dove il tensore gradiente di velocit (il gradiente applicato a un campo vettoriale fornisce un
tensore) e il suo trasposto, definiti come segue:
(1.20)
2 2 2
+
+
2
2
2
2
2
2
=
= 2
+
+
2
2
2
2 2 2
+
+ 2
2
2
(1.21)
2 2
2
+
+
2
2 2 2
=
=
+
+
2 2 2
+
+
(1.22)
1
21
1
2
+ =
+
+ + 2 +
3
3
(1.23)
(1.24)
con ET energia totale del sistema, L lavoro fatto sul sistema e Q il calore ceduto allesterno dal
sistema. Indicando con E lenergia totale per unit di massa, definita come somma di unenergia
interna e e dellenergia cinetica, la ET pu essere scritta come:
2
+
(1.25)
(1.26)
= +
(1.27)
dove il primo termine a destra del segno di uguaglianza rappresenta il flusso di calore trasferito per
conduzione (legge di Fourier), il secondo termine il contributo per interdiffusione cio il flusso
di entalpia di tutte le specie chimiche presenti con velocit diffusiva e infine il terzo tiene conto
5
(1.28)
Servendosi nuovamente del teorema del trasporto di Reynolds e di Gauss, si ricava dalla (1.28) la
forma differenziale dellequazione di conservazione in termini di energia totale:
+ =
+ +
(1.29)
La stessa equazione pu essere scritta, passando per lenergia interna e, in termini di entalpia:
= =
+ 0
(1.30)
intesa come somma del contributo sensibile e di formazione . La (1.29) diventa quindi:
=
+
+ +
(1.31)
(1.32)
ove V il volume, N il numero totale di moli della miscela gassosa e la costante universale
dei gas (= . ). Dato che:
=
=1
=1
=1
=1
=
=1
(1.33)
la (1.32) diventa:
=
=1
(1.34)
Nelle applicazioni di nostro interesse, quali flussi in camere di combustione per motori
SCRAMJET, si ben lontani dalla condizioni di equilibrio per via dei forti gradienti di velocit,
pressione e temperatura locali e di altri fenomeni che entrano in gioco in flussi reagenti, quali
dissociazioni e ionizzazioni. Tuttavia pratica comune servirsi dellequazione di stato (1.34)
ritenendo comunque valida lipotesi semplificativa di equilibrio termodinamico purch sia
verificata lipotesi di continuo (lontano dalle onde durto).
(1.35)
con velocit di produzione o scomparsa della singola specie chimica. La forma differenziale
della equazione (1.35) riportata di seguito:
+ =
(1.36)
avendo indicato con la velocit assoluta data dalla somma della velocit del baricentro del
sistema (moto di insieme) unita alla velocit relativa al baricentro, cio la velocit di diffusione
. Separando i due contributi possibile distinguere i termini rappresentanti i trasporti convettivi
e diffusivi delle specie:
+ = +
(1.37)
1
21
1
2
+ =
+
+ + 2
3
3
(1.38)
TERMINE A:
Definendo il vettore vorticit come:
= =
(1.39)
(1.40)
1
+ =
+ 2
(1.41)
()
+ =
(1.42)
+ =
+ +
(1.43)
TERMINE B:
Sapendo che un cambiamento di scala delloperatore rotore si effettua mediante la seguente
formula:
= +
()
Allora per = e = e tenendo conto della propriet (a), tale termine diviene:
1
1
1
= + =
(1.44)
TERMINE C:
Applicando qui due volte la propriet (d) e poi la (a) si ha che:
21
3
2 1
1
+
=
3
2 1
1
1
=
+ 2
3
21
2 1
=
+
3
3 2
=
(1.45)
TERMINE D:
Procedendo allo stesso modo per questo termine si ottiene:
1
3
1
3
1
=
3
(1.46)
TERMINE E:
2
1
1
= 2 +
=
1
1
= 2 2
TERMINE F:
(1.47)
= 2 +
2 =
= 2 + 2 2 2
(1.48)
2 1
2 1
+ + =
+
+
+
2
3
3 2
11
1
2
+
+ +
2
3
3
2
2
1
2 + + 2 2 2
(1.49)
1
=
+ + 2 + 2 + +
2
2
1
2
1
+ 2 + 2 + 2 +
3
3
(1.50)
Riprendendo la (1.23), si nota che il termine tra parentesi quadra, moltiplicato vettorialmente dal
gradiente di densit, altro non che la divergenza dello sforzo di taglio ( ) che sostituita
fornisce lequazione di trasporto della vorticit:
1
+
2
1
2
1
2 +
1
+
(1.51)
Una forma analoga delleqn.(1.51) stata proposta da Crocco e Vazsonyi[4], nella quale la
variazione di vorticit espressa in funzione del gradiente di entropia specifica. Per ottenerla
occorre riscrivere il termine baroclinico come segue:
1
=
2
(1.52)
=
+
=
+
=
10
(1.53)
(1.54)
(1.55)
(1.56)
0 0 0
TERMINE CONVETTIVO:
0 0
0
02
20
TERMINE BAROCLINICO:
1
1 0 0 02 1
02 1
=
2
02 0 0 2
20 2
0
02
= 2
0
0
TERMINE COMPRESSIBILE:
11
1
0 0
02
20
TERMINE DIFFUSIVO:
2
0 0 2
0 0 2
=
2
0 0
0 30
TERMINE COMPRESSIBILE-VISCOSO:
1
1 0 1
0 1
2
0
2
0 0 0 0 2
0 0 1
0 30 2
TERMINE VISCOSITA-VELOCITA:
2 +
0 0
2 +
0 0 20
0 0
2 +
0 30
TERMINE DEFORMAZIONE-VISCOSITA:
1
1 0 0 1
0 0 1
+
+ =
+
3
0 0 0 0
0 0
1
+ +
0
(1.57)
0
=
0 0
=
=
(1.58)
(1.59)
Il numero di Strouhal correla le frequenze proprie dei vortici, attraverso un tempo caratteristico
della eventuale non stazionariet, al trasporto convettivo, quindi stabilisce limportanza degli
effetti non stazionari sulla convezione. Dalla (1.57) si evince che in flussi supersonici tutti i
termini dellequazione di trasporto della vorticit, fatta eccezione per quelli dissipativi, hanno lo
stesso peso. I termini dissipativi tornano a essere importanti a parete e nelle zone di combustione
per via dellincremento di viscosit dovuto agli innalzamenti locali di temperatura.
energia turbolenta. Per definire il teorema di Kelvin occorre dapprima introdurre il concetto di
intensit di un vortice o circolazione , come la circuitazione del campo di velocit lungo un
percorso chiuso contenente per intero il vortice, che per il teorema di Stokes equivale al flusso di
vorticit attraverso la superficie racchiusa dal suddetto percorso:
(1.60)
Il teorema di Kelvin afferma che in un fluido barotropico, cio con densit funzione della sola
pressione, con forze di massa conservative e forze viscose trascurabili, la circolazione calcolata
lungo una linea materiale chiusa costante nel tempo, che equivale a scrivere:
=0
(1.61)
(1.62)
Sostituendo alla derivata lagrangiana della velocit lequazione di bilancio della quantit di moto
per fluido non viscoso, il primo termine a destra delluguaglianza si annulla in quanto integrale su
un circuito chiuso di differenziali esatti. Per il secondo termine vale:
+
=
=
=
0
0
(1.63)
2
=0
2
(1.64)
13
Si definiscono le linee vorticose, in analogia con le linee di corrente, come quelle linee che in ogni
punto verificano la condizione di tangenza al vettore vorticit. Le stesse linee vorticose che
attraversano un generico circuito chiuso C formano un superficie vorticosa e il volume di fluido al
suo interno prende il nome di tubo vorticoso. Sotto le stesse ipotesi del teorema di Kelvin valgono:
I)
II) Il tubo vorticoso un tubo materiale, cio costituito sempre dalle stesse particelle
III) Lintensit del vortice si mantiene costante nel tempo
Il primo teorema trova conferma nel fatto che, essendo nulla la divergenza del vettore vorticit per
la propriet (b) di pag.8, valido quanto segue:
0=
dV =
V
n dS =
S
n dS +
S1
n dS +
S2
n dS = 1 + 2
(1.65)
Sl
lintegrale sulla superficie esterna Sl zero per lannullarsi del prodotto scalare ( ) e data
larbitrariet del volume considerato ne segue che per qualsiasi tubo vorticoso vale = .
Lannullarsi del terzo integrale della (1.65), conseguenza del fatto che per definizione le linee
vorticose sono sempre tangenti a , giustifica il secondo teorema; se per assurdo una particella,
contenente vorticit, uscisse dal tubo vorticoso il flusso sulla parete laterale sarebbe non nullo, il
che impossibile. Il terzo teorema di Helmholtz giustificato da Kelvin in quanto per ogni sezione
deve valere lequazione (1.61).
14
APITOLO
2.1 INTRODUZIONE
In fluidodinamica possibile distinguere due stati comportamentali per il moto dei fluidi.
Osborne Reynolds, nel suo esperimento condotto nel 1883, dimostr lesistenza di due regimi di
moto e ne intu la dipendenza dalle grandezze macroscopiche del campo quali densit, velocit e
viscosit. In particolare per numeri di Reynolds (si veda eqn.1.59) inferiori a 2000 la corrente
completamente laminare, per
il moto turbolento,
rappresenta
viscose non sono pi sufficienti a contrastare le forze di inerzia avviene la transizione a regime
turbolento, caratterizzato da forti fluttuazioni, apparentemente a carattere randomico, di pressione
e velocit. Le particelle non seguono traiettorie ordinate come avveniva nel caso laminare ma si
muovono in maniera caotica. Spesso allaggettivo caotico si associa erroneamente il significato
di non prevedibile, qui va inteso come riportato dalla teoria del caos[7] secondo la quale un sistema
dinamico si dice caotico se presenta le seguenti propriet:
I)
II) Le sue orbite devono essere periodiche e dense, cio che levoluzione del sistema, nello
spazio delle fasi, descritto da innumerevoli orbite che rimangono confinate entro un certo
spazio; si veda lattrattore di Lorenz.
proprio limpossibilit di conoscere con certezza le condizioni iniziali o al contorno che rende
agli occhi di un osservatore la dinamica di tipo stocastica. In realt le fluttuazioni riscontrate in un
flusso turbolento non sono per niente aleatorie ma sono ampiamente predicibili dalle equazioni di
Navier-Stokes, si parla quindi di caos deterministico. Nonostante ci si trovano spesso in
letteratura approcci statistici per lo studio dei fenomeni turbolenti.
II)
16
Elevati numeri di Reynolds, le instabilit non vengono smorzate dalla viscosit in quanto
trascurabile rispetto alle forze di inerzia.
IV) Intense fluttuazioni delle variabili di campo con frequenze mediamente dellordine dei
kHz, e presenza di sporadici picchi pi elevati che danno origine al fenomeno noto come
intermittenza.
V)
VI) Maggiore dissipazione, rispetto al caso laminare, dellenergia cinetica in calore dovuta
alla formazione di strutture via via sempre pi piccole (cascata di energia) nelle quali
tornano a farsi sentire gli effetti viscosi.
VII) Verifica lipotesi di continuo poich la scala pi piccola delle strutture di gran lunga
superiore alla scala molecolare (
struttura ).
VIII) Un flusso turbolento interessa un grande spettro di lunghezze donda spaziali e temporali.
Si pu parlare quindi di turbolenza solo quando sono verificate contemporaneamente tutti gli
aspetti sopra elencati. Occorre infatti precisare che la sola individuazione di vortici in un campo
non indicativa della presenza effettiva di turbolenza. Si prenda un flusso bidimensionale a
elevato numero di Reynolds tale per cui possibile trascurare tutti i termini viscosi dellequazione
di vorticit (1.51), ricavata nel capitolo precedente, che nel caso incomprimibile si riduce a:
17
stretching visto che, per lipotesi di bidimensionalit del campo, lunica componente di vorticit
diversa da zero quella perpendicolare al piano del moto quindi ortogonale a tutti i gradienti di
velocit. Ne segue che la vorticit, se presente, rimane costante nel tempo e i vortici vengono
trasportati a valle dal moto medio senza essere dissipati. In definitiva, col termine turbolenza si
soliti individuare quel meccanismo autonomo (la turbolenza si autosostenta) di cascata di energia
che a partire da vortici di grande scala, le cui dimensioni dipendono dalla geometria e dalle
condizioni al contorno, genera vortici sempre pi piccoli fino alla scala di Kolmogorov. Fu
Richardson nel 1922 a intuire il trasferimento di energia a cascata dalle scale integrali a quelle
dissipative, ma solo nel 1941 con Kolmogorov vennero gettate le basi di una teoria rigorosa
applicabile alla turbolenza di tipo omogenea, isotropa e statisticamente stazionaria.
che rappresentano rispettivamente lunghezza, velocit e tempo caratteristici delle scale dissipative.
Essendo la potenza dissipata la stessa di quella introdotta dal moto medio alla scala integrale,
non pu dipendere dimensionalmente dalla viscosit, allora indicando con U, L e T rispettivamente
velocit, lunghezza e tempo dei grandi vortici e ricordando la definizione del numero di Reynolds,
si ha:
Queste relazioni correlano le caratteristiche delle due scale in funzione del numero di Reynolds, si
noti che a parit di tutte le altre condizioni al diminuire della viscosit si riduce la dimensioni dei
vortici pi piccoli che possibile trovare nel flusso. Queste stime sono utili in fase di progetto di
una griglia di calcolo poich, qualora si fosse interessati a cogliere tutte le dinamiche del campo,
dettano i limiti sulla dimensione massima della cella. Per quanto riguarda le scale intermedie
(range inerziale), nelle quali lenergia non viene n creata n dissipata ma unicamente trasferita,
lipotesi di Reynolds elevati assicura, anche per vortici di dimensioni r con
, la sola
potenza allun terzo di r ma allo stesso tempo presentano dinamiche pi lente (tempi maggiori).
Analizzando i gradienti di velocit, questi risultano invece pi intensi alle scale pi piccole, infatti
possibile scrivere
come:
Spesso si suole affiancare allanalisi temporale unanalisi spettrale, cio nel dominio delle
frequenze, in questo modo possibile risalire al contenuto energetico dei singoli vortici
19
verificando la distribuzione di energia cinetica turbolenta alle varie frequenze (spettro di energia).
Ogni vortice possiede infatti una propria energia cinetica media per unit di massa data da
dove
a bassa frequenza sono prodotte da vortici di grandi dimensioni, viceversa per i vortici pi piccoli
che ruotano in tempi pi corti. Definendo lo spettro di energia E(k) tale che:
con K energia cinetica per unit di massa del flusso e k numero donda, da considerazioni
puramente dimensionali possibile ricavare landamento dello spettro al variare del numero
donda. Per ipotesi di cui sopra, alle scale inerziali si pu esprime la dipendenza di E(k) del tipo:
Ora essendo k linverso di una lunghezza, in particolare della lunghezza donda, affinch
lintegrale abbia le dimensioni di unenergia deve essere:
da cui si ricava
e isotropa.
Fig.2.1: Spettro di energia della turbolenza omogenea e isotropa in scala bi-logaritmica [5]
Si noti come, ai bassi numeri donda, cio alla basse frequenze (scala integrale), sia associata
unenergia cinetica turbolenta maggiore, la quale decresce con
scale dissipative dotate di energia inferiore.
20
Occorre precisare che la teoria di Kolmogorov trova riscontro pratico unicamente nel caso di flussi
incomprimibili non reattivi, difatti qualora si considerassero anche gli effetti di comprimibilit
verrebbe meno lipotesi di energia trasferita costante alla scale inerziali. Si prenda nuovamente
lequazione di trasporto della vorticit (1.51) riscritta trascurando i termini viscosi:
per
si ricava che anche la divergenza del vettore velocit vale zero, per cui il trasporto di vorticit
affidato unicamente al termine di vortex stretching, il cui effetto quello di stirare i tubi vorticosi
orientati nella direzione del gradiente di velocit. A un allungamento del tubo vorticoso (tubo
materiale), per la conservazione del volume, deve corrispondere un restringimento della sezione
generando cos un vortice pi piccolo. Il vortex stretching in questo caso il solo responsabile del
trasferimento di energia innescando quel fenomeno chiamato turbolenza. Laggiunta del termine
compressibile comporta un aumento o una riduzione locale di vorticit a seconda che ci sia una
compressione o espansione del flusso. Le onde durto contribuiscono alla dissipazione di energia
ancor prima di raggiungere le dimensioni della scala di Kolmogorov limitando il processo di
cascata di energia. Se agli effetti di comprimibilit si aggiungono quelli derivanti
dallinnalzamento locale di temperatura dovuto alla combustione, seguito dallaumento della
viscosit del fluido che tende a laminarizzare il flusso, si deduce che la pendenza dello spettro pu
solo essere inferiore ai
di figura 2.1.
21
punti. A questi
vanno aggiunti i passi temporali che, sempre dalla eqn.(2.3), devono essere un numero dellordine
dei
occorrono
reazioni chimiche, molti ordini di grandezza pi bassi dei precedenti. Il grosso carico
computazionale richiesto dalla DNS, per via dellintegrazione diretta delle equazioni di N-S, ne
limita luso a geometrie particolarmente semplici e comunque a flussi dotati di bassi numeri di
Reynolds, condizioni ben lontane da quelli riscontrate in camere di combustione per applicazioni
Scramjet. Lalternativa servirsi di un approccio di tipo RANS (Reynolds Averaged Navier
Stokes) risolvendo il campo medio e introducendo modelli universali per il trasporto turbolento e
per la chimica. In RANS le scale vengono modellate tutte allo stesso modo, e ci rappresenta
unassunzione troppo restrittiva e ben lontana dalla fisica della turbolenza. Inoltre la risoluzione di
equazioni mediate nel tempo non consente di catturare eventuali instabilit del flusso come
mostrato in figura 2.2:
A met strada tra le due metodologie si pone la LES (Large Eddy Simulation), la quale propone
una simulazione diretta delle strutture di larga scala e una modellizzazione di quelle pi piccole,
risultando meno onerosa in termini computazionali di una DNS ma pi precisa di una RANS.
2.4.1 APPROCCIO RANS[9][12]
RANS la tecnica pi adottata in campo industriale perch consente di simulare flussi anche
molto complessi col minor carico computazionale, ovviamente a scapito della precisione dei
risultati. Con tale metodologia si riesce comunque ad avere una panoramica generale del campo
fluidodinamico. Come detto precedentemente, il modello RANS interviene a tutte le scale della
turbolenza caratterizzate per da dinamiche completamente differenti, le scale integrali dipendono
dalle condizioni al contorno e iniziali mentre le scale dissipative sono governate dalla viscosit. Un
modello che sia valido a ogni scala di difficile implementazione e questo rappresenta la maggiore
22
fonte di errore. RANS un approccio di tipo statistico che conduce alla risoluzione di equazioni di
moto mediate. La media di una qualsiasi variabile aleatoria, funzione dello spazio e del tempo,
viene fatta per mezzo delloperazione di media dinsieme, cio basata su un insieme di
realizzazioni statisticamente indipendenti (N dati acquisiti). Se poi possibile considerare la
variabile di tipo statisticamente stazionaria la media dinsieme equivale a una media temporale:
Tale ipotesi semplificher la scrittura delle equazioni mediate di Reynolds, difatti decomponendo
la generica grandezza u in una parte mediata , costante nel tempo, e in una parte non stazionaria
detta fluttuazione
valgono
Fig.2.3: Decomposizione della velocit in una parte mediata (stazionaria) e in una fluttuazione (non stazionaria) [5]
La media di Reynolds introduce per, attraverso il termine convettivo (non lineare) nuove
incognite che andranno poi modellizzate per garantire la chiusura del sistema. Per limitare la
proliferazione di tali termini nel caso di flussi comprimibili si soliti effettuare una media pesata
con la densit (media di Favre):
, cio:
23
I vantaggi apportati dalla media di Favre sono notevoli, come intuibile dal confronto:
Decomponendo tutte le variabili delle N-S secondo Favre, a esclusione della pressione e della
densit per le quali si utilizzata la media di Reynolds, e mediando si ottiene il sistema RANS qui
espresso in forma indiciale:
avendo trascurato nellequazione di energia il termine di trasporto di energia dovuto alla diffusione
di massa (assunzione valida per numeri di Lewis
). In
seguenti termini:
ripropone il problema della chiusura del sistema di equazioni. Tali incognite sono i cosiddetti
sforzi di Reynolds e costituiscono il tensore simmetrico di Reynolds
equazione delle (2.16) a indicare la sottrazione di energia dal moto medio a favore della
turbolenza. Generalmente le fluttuazioni delle variabili di campo sono molto elevate e possono
24
superare perfino i valori medi; ne consegue che gli sforzi di Reynolds risultano ordini di grandezza
pi grandi rispetto a quelli derivanti dalla viscosit molecolare, e da qui si spiega laumento di
diffusivit riscontrata in flussi turbolenti.
Per quanto riguarda lequazione di conservazione delle specie chimiche:
Termini come
25
campo, in particolare ai gradienti incrociati dei valori medi delle componenti di velocit secondo la
costante di proporzionalit
aggiunti per far s che la somma degli sforzi normali, cio per i = j, torni a essere uguale a
turbolenza cos simulata come effetto di una viscosit aggiunta
. La
isotropo avendo ipotizzato che la viscosit turbolenta non vari con la direzione. Si perci
spostato il problema della chiusura da un tensore (sei incognite) a due grandezze scalari
e .
Prandtl successivamente propose una modellizzazione della viscosit turbolenta che legasse
questultima a una lunghezza di mescolamento e alla fluttuazione di velocit
geometrie semplici che ipotizza una lunghezza di mescolamento dellordine delle dimensioni dei
vortici di grande scala (es: flusso in camera di combustione
), e la fluttuazione legata al
gradiente di velocit media per mezzo della stessa lunghezza di mescolamento; il secondo lega la
allenergia cinetica turbolenta e al rateo di dissipazione viscosa, mentre la fluttuazione viene
scritta come la radice quadrata di k:
ricavate sperimentalmente.
dal tipo di flusso e dalle condizioni al contorno. Con lapproccio LES (Large Eddy Simulation)
tale limite viene superato, poich a essere modellizzati sono unicamente le strutture fini che per
loro natura hanno un comportamento isotropo e omogeneo. Le grandi scale, invece, vengono
risolte direttamente come fatto per la DNS. Il vantaggio sostanziale apportato dalla LES che per
quanto precisi e affidabili possano essere i modelli, questi introducono inevitabilmente degli errori,
ma tali imprecisioni vengono commesse alle piccole scale che sul bilancio energetico globale
pesano poco se confrontate al contenuto energetico delle scale integrali (si veda fig.2.1). Il prezzo
da pagare per per la migliore accuratezza quantificabile in maggior tempo di calcolo e memoria
richiesta nettamente superiori alle simulazioni RANS. Per separare le grandi scale dalle piccole ci
si serve di un operatore filtro, definito dallintegrale di convoluzione della generica funzione
con
al dominio D:
con
chiamata
1)
filtro gaussiano
2)
3)
filtro top-hat
Il secondo un filtro in frequenza, con k numero donda, mentre gli altri due sono filtri definiti
nello spazio. Cos come fatto nelle RANS si decomponga la generica grandezza f come segue:
27
Sempre al fine di evitare la proliferazione dei termini aggiuntivi di sottogriglia, per flussi
compressibili, si adotta il filtro di Favre definito come:
Con queste assunzioni le equazioni di N-S filtrate, trascurando il contributo apportato dalle forze
di massa, diventano:
Col pedice SGS (SubGrid Scale) si vogliono indicare i termini di sottogriglia da modellizzare,
vengono chiamati sforzi di sottogriglia mentre
modello deve essere in grado di accoppiare le scale risolte con quelle simulate evitando che si
accumuli energia alle scale del filtro, quindi deve dissipare lenergia proveniente dalle grandi scale
e, allo stesso tempo, trasferire a questultime il calore di reazione che si sviluppa alle scale
molecolari.
28
) rischia solo
di appesantire il calcolo senza apportare grosse migliorie alla soluzione visto che a essere simulate
sono solo le piccole scale, che per loro natura tendono ad avere un comportamento pi isotropo.
Per semplificare la trattazione si consideri lequazione di trasporto della quantit di moto per un
fluido incomprimibile:
Lequazione filtrata (2.31) differisce dalla (2.30) per lultimo termine a secondo membro che
chiameremo di sottogriglia. In
di cui i primi due costituiscono il tensore di Leonard che rappresenta il contribuito alle scale SGS
fornito dallinterazione delle scale risolte,
con
e suppone che la viscosit turbolenta abbia una forma simile a quella proposta da Prandtl, cio
proporzionale a una lunghezza, settata pari alla dimensione del filtro
caratteristica
vale
, e a una velocit
29
con CS costante di Smagorinsky, scelta normalmente tra 0.1 e 0.2. Questa va impostata a priori e
poco si adatta a quelle zone del campo in cui il flusso torna a essere laminare come ad esempio a
parete o laddove si ha transizione laminare-turbolento, con leffetto di una sovrastima dellenergia
realmente dissipata. Il problema delleccessiva dissipazione del modello di Smagorinsky-Lilly
venne superato negli anni novanta con la formulazione di un nuovo modello in grado di adattarsi
dinamicamente alle condizioni del flusso.
Lidentit di Germano lega i tensori degli sforzi (2.32) e (2.36) al tensore degli sforzi delle scale
risolte:
La costante di Smagorinsky C ricavata dal modello dinamico pu assumere adesso valori sia
positivi che negativi, col vantaggio di poter simulare gli effetti di cascata inversa di energia o
backscatter. Il modello di Germano introduce per un nuovo errore generato dal fatto che la
viscosit turbolenta considerata omogenea e isotropa, ipotesi che impone nellidentit (2.38)
lallineamento del tensore degli sforzi di sottogriglia al tensore delle scale risolte. Di qui la nascita
della versione anisotropa del modello di Germano o lo sviluppo di modelli misti i quali risolvono
una parte delle scale SGS sfruttando le pi piccole scale risolte, ma per questi ultimi si rimanda a
testi specialistici.
2.4.2.c Modelli LES: Frattale FM
Il modello in questione merita maggiore attenzione in quanto proprio su tale modello che stato
sviluppato il codice proprietario S-HeaRT. Alla base del FM vi la teoria dei frattali utile a
descrivere la geometria di oggetti di forma irregolare. Un frattale (termine coniato da
Mandelbrot[15] nel 1975) un oggetto geometrico caratterizzato da un certo grado di autosimilarit, non strettamente geometrica, ma anche approssimata o statistica[16]. Un frattale ripete la
propria struttura a diverse scale (fig.2.4).
Fig.2.4: Frattale di Mandelbrot. Lo zoom a destra mostra una geometria simile a quella percepita a grande scala
Ai frattali associata una dimensione che rappresenta una misura delle irregolarit di questi
oggetti ed direttamente legata allevoluzione della loro forma. Se Dd la dimensione frattale di
un oggetto immerso in uno spazio di dimensione d, L la dimensione di un lato di un cubo,
contenente il frattale, N il numero di volumetti di dimensione necessari a coprire interamente la
forma del frattale, allora vale[16]:
31
Lapplicabilit di tale teoria ai fenomeni turbolenti sta nellanalogia tra i processi moltiplicativi,
tipici dei frattali, di strutture a tutte le scale con il concetto di cascata di vortici. Il modello di
sottogriglia (SGS), sviluppato dal Dott. Eugenio Giacomazzi, ha lo scopo di modellizzare le scale
non risolte al di sotto delle dimensione del filtro sfruttando la natura frattale della turbolenza. Il
FM sempre di tipo eddy viscosity e simula una viscosit turbolenta
vortici dissipativi che si formano dentro la generica cella di dimensione , e della viscosit
molecolare:
con
costante di calibrazione del modello. Lipotesi di fondo dello schema numerico che il
allinterno della cella, cio una cascata di energia fino alla scala dissipativa (fig.2.5).
Fig.2.5: Spettro dellenergia turbolenta E in funzione del numero donda in scala bi-logaritmica[16]
Lisotropia delle scale pi piccole che vengono modellizzate garantisce la self similarity tipica
frattale. Il punto di separazione del FM dalla teoria di Kolmogorov sta nel numero di vortici che si
generano a partire da una data scala nel processo di cascata di energia. Una possibile
interpretazione della teoria statistica di Kolmogorov che da un vortice si genera uno e uno solo di
dimensioni pi piccole[16]. Qui invece si immagina che un vortice iniziale di dimensione
moto Nc vortici pi piccoli della stessa scala, e cos via fino alle strutture dissipative
faccia notare che
metta in
(fig.2.6). Si
vortice di scala l viene infatti distribuita tra i vortici figli e da ognuno si dirama un processo di
cascata indipendente. chiaro, sotto tale visione, che il trasferimento di energia risulta cos
accelerato e ci sar tanto pi marcato tanto pi ci si spinge verso strutture pi piccole. In questo
modo si riesce a simulare anche il tratto curvo di fig.2.5.
32
Se si indica con Rc il rapporto tra una scala e la successiva considerato per ipotesi costante, con
la dimensione del vortice di partenza e con Nl il numero di step (o livelli) necessari al
raggiungimento della scala dissipativa, possibile ottenere
Mentre il numero totale di vortici creati compreso il primo (il seme) e il numero di vortici di scala
sono dati da:
con Nc numero di copie del seme imposto costante per semplicit. Il rapporto tra le due equazioni
fornisce la frazione numerica delle scale dissipative rispetto al numero totale di vortici, che per il
modello frattale vale:
Inoltre per il range inerziale la potenza trasferita si conserva (si veda par.2.3), quindi si pu
scrivere:
il rapporto
33
Manipolando opportunamente la (2.48) e ricordando che alle scale dissipative il Reynolds vale 1,
possibile ricavate le grandezze caratteristiche del vortice pi piccolo, quali dimensione velocit e
tempo:
Questultime se confrontate con quelle ottenute dalla teoria di Kolmogorov (eqn.2.3) mantengono
la stessa dipendenza funzionale dal Reynolds con la differenza che, nel FM, ci si riferisce alla
cella e non al flusso. Nel fractal model, in aggiunta alle equazioni (2.3), si tiene conto, attraverso i
rapporti di densit e viscosit, dellespansione delle scale dissipative per effetto della combustione.
Stesso effetto, cio dissipazione a numeri donda pi piccoli, si ha se ad aumentare il numero di
copie del seme
vortici[16].
Rimane incognita la
[16]
che sostituita nella (2.43) fornisce la chiusura del problema fluidodinamico. Caratteristica
importante del modello appena presentato che nelle zone laminari si disattiva automaticamente
poich la scala
della
cella e la restante parte di fluido che li circonda (surrounding fluid). Sotto tali ipotesi, per un
volumetto reattivo
ove
rappresentata solo una parte del volume totale occupato dalle fine structures (
unicamente la frazione
);
), cio
rappresenta il calore trasferito per irraggiamento dai reattori al fluido circostante, e infine
il termine sorgente o pozzo di calore per effetto delle reazioni chimiche, esprimibile come:
In stazionario i termini a sinistra delle equazioni (2.51) e (2.52) sono nulli e le portate in massa
entranti e uscenti coincidono, quindi:
35
avendo indicato con lapice 0 le grandezze del surrounding fluid e con * quelle legate al
reattore
. Introducendo inoltre il tempo di residenza nel reattore ( ) che per ipotesi si considera
uguale al tempo di vita delle strutture fini, quindi dei vortici di piccola scala (
), si ha:
Legando poi, per ogni cella, le grandezze del reattore e del surrounding a quelle filtrate come
proposto dallo stesso Magnussen:
si ottengono, con semplici passaggi, le equazioni risolutive dello stato del reattore:
e trascurato lirraggiamento.
avendo imposto
trascurata in precedenza, diventa ora necessaria nel trattare flussi reattivi comparendo
esplicitamente nelle equazioni risolutive del modello EDC (eqn. 2.59 e 2.60).
Sempre dalla teoria frattale possibile valutare la frazione di volume totale (
) occupata da
tutte le scale turbolente che si formano al di sotto della dimensione del filtro e da questa risalire
alla
e definendo
come[16]:
36
dallequazione (2.47):
con
Il
del seme. Per semplificare il modello, gi di per se pesante dal punto di vista computazionale, si
effettua unanalisi asintotica mandando a infinito
consente di chiudere il problema.
37
. Lesistenza dellasintoto
APITOLO
PROGETTO HYSHOT,
SIMULAZIONE E VALIDAZIONE
stabilizzazione del sistema in fase di rientro. Con questo secondo stadio venivano raggiunti gli
8300 km/h. Le manovre di assetto allapogeo della traiettoria erano gestite interamente dal
computer di bordo, equipaggiato di due sensori di assetto e tre magnetometri. Come sistema
propulsivo per le modifiche di assetto si usava azoto in pressione stivato a bordo.
Alla quota di 35 km e M=7.6 veniva iniettato combustibile, nello specifico idrogeno, attraverso
quattro orifizi di diametro 2 mm ciascuno, collocati 40 mm a valle dellingresso in camera di
combustione. Lacquisizione dei dati era principalmente
affidata a trasduttori di pressione disposti lungo tutta la
camera di combustione e sulla piastra di spinta. Leffetto
combinato dello spin di stabilizzazione del lanciatore, unito
a piccole variazione dellangolo di yaw, ha consentito
lacquisizione di una vasta quantit di dati a diversi angoli
di attacco e di yaw. Nel Luglio del 2002 stato effettuato
un secondo test, questa volta eseguito con successo; si
trattava di HyShot II. Il prototipo non rappresentava ancora
lo scramjet definitivo, ma era stato progettato al solo scopo
di verificare lancoraggio di fiamma in camera. Il disegno
era stato realizzato dalla UQ (fig.3.2).
Un ulteriore successo stato conseguito nel Marzo del 2006 (HyShot III) con a bordo lo scramjet
costruito dallazienda inglese QinetiQ; si trattava di un prototipo di forma cilindrica dotato di
quattro camere di combustione. Cinque giorni dopo a HyShot IV stato dato il compito di
39
sviluppo di una nuova generazione di sistemi propulsivi per trasporto civile capaci di volare a M =
8. Dei dieci voli previsti, tre sono stati coordinati direttamente dalla UQ. HIFiRE 0, noto anche
come HyShot V, stato eseguito nel Maggio del 2009 e non prevedeva uno scramjet a bordo, ma
servito unicamente a testare il sistema di controllo della traiettoria da impiegare nelle successive
missioni. Nel test HyShot VI, avvenuto a Marzo del 2010, sono state invece effettuate misure di
spinta del nuovo motore scramjet disegnato dallUniversit del Queensland; in quella occasione
per lo scramjet HyShot VI, separatosi anche dallultimo stadio (Orion), si sono registrate velocit
di volo cinque volte superiori a quelle del suono seguendo una traiettoria balistica simile ai primi
voli HyShot. Lultimo della serie HyShot, la versione VII, in corso dopera, rappresenta il culmine
dei due precedenti test HIFiRE. Lobiettivo raggiungere Mach di volo pari a otto mantenendo
una traiettoria orizzontale per pi di un minuto.
Fig.3.3: Geometria dello scramjet HyShot e condizioni di volo durante il test. In rosso evidenziata la porzione di motore simulata [19]
La simulazione nel presente lavoro relativa al solo combustore evidenziato in rosso in fig.3.3
assumendo una quota di volo di 28 Km e angolo di attacco 0. Le condizioni di ingresso in camera
sono state ricavate da una precedente simulazione del Prof. Jeung presso la Seoul National
University[20]. Impostare un corretto profilo di velocit per lo strato limite, gi completamente
sviluppato nel punto a, consente di evitare la formazione di unonda durto spuria (non fisica). Il
problema nasce dal fatto che non si sta simulando la zona antecedente alla camera di combustione,
per cui necessario impostare le condizioni al contorno includendo lo strato limite presente sul
tratto che va dal bordo di attacco inferiore dello scramjet e il punto a. Nella seguente tabella
sono riportate le condizioni di ingresso di combustibile e ossidante:
= 0.426
Pressure [Pa]
Mach
Density [kg/m3]
Temperature [K]
Velocit del suono [m/s]
Velocit del flusso [m/s]
Aria
82110
2.79
0.2358
1229
682.9
1905.291
Idrogeno
307340
1
0.3020
250
1204.4
1204.4
41
dai due orifizi centrali. Sempre dalla figura 3.4 si noti un ulteriore infittimento lungo y concentrato
tra = e = . , lato di iniezione dellidrogeno .
La simulazione LES stata effettuata servendosi del codice S-HeaRT (Supersonic Heat Release
and Turbolence), scritto in FORTRAN 95 e sviluppato in ENEA in collaborazione con la Sapienza
Universit di Roma. Il metodo alle differenze finite e le variabili di campo sono calcolate nei
centroidi di ciascuna cella. Il modello di sottogriglia adottato il Fractal Model[16], presentato nel
secondo capitolo, dal quale si ricavano , e . Il solutore delle equazioni di N-S reattive
esplicito e completamente compressibile. Lintegrazione nel tempo, con passo dellordine di
, accurata al 3 ordine e viene effettuata mediante lo schema esplicito TVD Runge-Kutta di
Shu e Osher[21]. Per lintegrazione spaziale delle equazioni alle derivate parziali dominate dal
trasporto convettivo si utilizza uno schema a bassa dissipazione, il WENO35[22] in grado di
ricostruire gli stati allinterfaccia tra le celle. I flussi sono ricavati a partire dagli stati ricostruiti
implementando un solutore ibrido del problema di Riemann noto come HLLC/HLLE [23]. Le
condizioni al contorno sono quelle riportate in tabella 1; lipotesi di non riflessione delle sezioni
di ingresso e di uscita permette poi di ridurre la presenza di onde di pressione nel campo, in
particolare quei disturbi che potrebbero risalire la corrente attraverso le zone subsoniche. Per
ovviare a questo problema si utilizzano le Navier-Stokes Characteristic Boundary Conditions
(NSCBC)[24,25].
Queensland[19]. Lesperimento stato eseguito a terra allinterno di una galleria ipersonica (T4
Shock Tunnel) in grado di accelerare il flusso daria a Mach 6.5. Per poter riprodurre le stesse
condizioni operative dingresso in camera di combustione del test in volo, langolo di
compressione della presa dinamica stato ridotto a 17. I dati sperimentali si riferiscono a misure
effettuate in loco per mezzo di 16 trasduttori di pressione collocati lungo la linea mediana (x =
37,5 mm) sulla superficie superiore della camera. I sensori sono distanziati 13 mm luno dallaltro
e il primo situato a 90 mm dallingresso del combustore.
Il confronto in fig.3.5 mostra landamento della pressione in funzione del tempo a z = 27.2 cm
(trasduttore n15). Nei primi 0.5 ms la curva in verde, ricavata dalla simulazione numerica, segue
landamento di pressione del test in galleria (curva di colore rosso) per poi discostarsi non di molto
raggiungendo la pressione massima di circa 285 kPa contro 260 kPa segnalati dal sensore. Tale
incongruenza pu essere attribuita a diversi fattori, inevitabili errori numerici introdotti dai
modelli, piccole perdite di informazioni dovute alla griglia, ma anche probabili variazioni delle
condizioni al contorno. Mediamente per si riesce a ottenere un andamento simile.
Fig.3.5: Confronto andamento della pressione nel tempo per il trasduttore n15 posto alluscita della camera di combustione (z = 27.2 cm)
Gli effetti di griglia sono meglio visibili in fig.3.6, che vede levoluzione della pressione lungo la
camera di combustione. I dati sperimentali mostrano un andamento altalenante della pressione
dovuta allinterazione di onde di compressione e di espansione che propagano trasversalmente alla
direzione principale del flusso; lungo la linea mediana del combustore i bow shocks dei due
iniettori centrali si scontrano e tali onde, nel meccanismo di successive riflessioni e interazioni,
generano questo tipo di disturbi trasversali.
43
Fig.3.6: Confronto dati sperimentali/numerici a t=0.45 ms su una griglia di 21.7 M nodi (a sinistra), e a t=1.65 per una pi fitta a destra (50 M)
44
Fig.3.8: Isolivelli di pressione su piani yz (x 2.81 mm e x 5.62 mm) e sul piano xz a y 9.7 mm; a destra uno zoom della zona di iniezione
Laumento di pressione a valle del combustore causato dal fatto che si sta somministrando calore
a un flusso supersonico. Infatti la figura 3.9 riporta la curva di Rayleigh che rappresenta gli stati
45
termodinamici nel piano h s (entalpia vs entropia) di un flusso alla Rayleigh. Le ipotesi su cui si
basa questo tipo di flusso sono:
Attrito trascurabile
Gas perfetto
Moto stazionario
Tali punti non sono tutti propriamente verificati; per esempio liniezione del getto in cross flow fa
cadere lipotesi di flusso quasi-monodimensionale, la somministrazione di calore avviene mediante
reazioni chimiche e un flusso turbolento per natura non stazionario, ma lo si pu considerare tale
dal punto di vista statistico. Inoltre, le relazioni di Rayleigh non prevedono laggiunta di massa al
sistema dagli iniettori, quindi evidente che non possibile servirsi di tali equazioni per
quantificare le variazioni delle grandezze fluidodinamiche, ma queste forniscono indicazioni sul
loro andamento qualitativo nel caso in cui venga somministrato calore al sistema. Seguendo il
ramo inferiore della curva (M > 1) e spostandosi verso valori di entropia maggiori (dS > 0), il
flusso rallenta fino alla condizione sonica come confermato in fig.3.14. Il punto, caratterizzato da
M = 1, rappresenta un limite oltre il quale non pi possibile fornire calore dato che lentropia non
pu diminuire ( choking termico). Si noti che il ramo supersonico, da sinistra a destra, attraversa
isobare caratterizzate da pressioni via via maggiori.
Fig.3.9: Comportamento di un flusso Rayleigh per entrambi i regimi di moto (subsonico e supersonico) [26]
La spiegazione fisica del diverso comportamento tra il regime di moto subsonico e quello
supersonico che per M > 1 laumento dello stato di agitazione molecolare, dovuto alla
46
a monte.
Lestensione di separazione
lincremento
di
pressione,
sezione
di
passaggio
con
che al di fuori dallo strato limite coalescono in un urto. Questo inevitabilmente interagisce con
47
su 2
del getto di combustibile allinterno della corrente principale e per le nostre simulazioni pari a
0.51.
Fig.3.11: Isolivelli della Uz sul piano passante per il centro del 2 iniettore con sovrapposti i vettori di velocit (a); isolivelli sul medesimo piano
di densit (b) e pressione (c)
Laria al di fuori dello strato limite subisce una prima compressione a circa z = 20 mm in cui
pressione e densit salgono rapidamente, e successivamente una seconda nellattraversare la sua
riflessione. A z = 34 mm, in seguito allassottigliamento dello strato limite, laria si espande
incrementando nuovamente la propria velocit. Il pennacchio di idrogeno che penetra nella
corrente daria, rimasta supersonica lontano dalle pareti, impone la formazione di unaltra onda
durto, il bow shock. La particolarit di tale onda da cui il nome, come mostrato dallandamento
del numero di Mach nel piano xz (fig.3.14), la sua forma concava-convessa e abbraccia
tridimensionalmente ogni singolo getto di idrogeno. In prossimit della parete questonda causa un
re-ispessimento locale della zona di separazione, generando un piccolo fascio di onde di
compressione che coalescono poco dopo nel bow shock, che assume la tipica forma a . Tale
fenomeno ben visibile nei precedenti isolivelli di densit e pressione appena sopra liniettore a
y 8 mm. Ma cosa accade al getto di idrogeno una volta iniettato in camera? Entrando in
48
condizioni soniche, questo accelera immediatamente trovando in camera una pressione inferiore, e
tende a espandersi in tutte le direzioni. Ma il combustibile che esce dal lato sopravvento
delliniettore subisce la pressione dellaria che sopraggiunge da sinistra a elevata energia cinetica.
La ragione per cui il core del getto di idrogeno non viene spazzato via dalla corrente principale
lelevata pressione e velocit (cio elevata quantit di moto) con la quale viene iniettato.
Allinterno del core, lidrogeno che continua a salire in direzione y cambia direzione con
formazione di un urto trasversale al getto, visibile in fig.3.12. Si tratta di un urto curvo e
tridimensionale che prende il nome di barrel shock. Nel lato sottovento si genera un fascio di
espansione centrato sullo spigolo vivo delliniettore, il quale nellattraversare il barrel shock
cambia direzione e impone allaria sovrastante di espandersi e seguire la curvatura del pennacchio
di idrogeno (fig.3.10). Lespansione, poco a valle del getto, termina con unaltra compressione.
Tale onda durto, insieme al barrel shock visto precedentemente, forma un vero e proprio urto a
barile, da cui il nome.
Dal numero di Mach e dal campo di temperatura, ristretto alla sola zona di iniezione, possibile
constatare quanto appena descritto. In fig.3.12(a) agli isolivelli di temperatura sono associate le
isolinee di pressione; la maggiore concentrazione di linee trasversali individua il bow shock in alto
e il barrel shock a y = 9 mm, localizzato dentro il getto stesso. Lunione di questultimo con quello
generato a valle d origine al disco di Mach; si tratta di un urto normale attraverso il quale la
velocit scende bruscamente a condizioni subsoniche. Tale disco, sul piano in fig.3.12(a) e (b),
rappresentato dal piccolo segmento a y 8.4 mm in cui si riscontra lincremento di temperatura e
il Mach passa da valori 2.4 a circa 0.6.
Fig.3.12: Isolivelli di temperatura (a) e del numero di Mach (b) con sovrapposte isolinee di pressione su un piano passante per x = 2.81cm.
49
Lingrandimento di figura 4.9 (cap.4) consente di visualizzare in dettaglio cosa accade ai vettori
velocit nellattraversare il barrel shock e il disco di Mach. In questultimo caso i vettori
rimangono paralleli a se stessi (urto normale).
In figura 3.13 riportata una schematizzazione 3D dei fenomeni finora descritti; i meccanismi di
produzione di vorticit allinterno del getto e ai lati, chiamati horseshoe vortices, verranno discussi
nel capitolo successivo.
Queste strutture vorticose sono indispensabili nei processi di combustione, in quanto favoriscono il
mescolamento aria-combustibile reso difficile dalla rigidit del flusso in regime supersonico. Il
contributo pi importante fornito dai due piccoli vortici controrotanti, che precedono il getto di
idrogeno, unito alla possibilit di reflusso di combustibile attraverso la sottile zona subsonica a
parete. La zona caratterizzata da M < 1 compresa tra z = 20 mm e z = 39 mm (fig.3.14) permette
lancoraggio di fiamma ancor prima degli iniettori.
Fig.3.14: Numero di Mach sul piano yz passante a met del 2 iniettore (in alto), sul piano xy che attraversa i 4 iniettori in direzione trasversale
(al centro), e sul piano xz a y = 9 mm (in basso). A destra riportato il numero di Mach mediato su piani a z costante lungo tutta la c.c
50
Per poter individuare la superficie di fiamma si introduca il parametro , noto come equivalence
ratio, definito come rapporto in massa combustibile-ossidante su combustibile-ossidante in
condizioni stechiometriche:
(3.1)
4
= 0.029
32 + 3.76 28
(3.2)
cio 34,32 g daria per ogni grammo di idrogeno. Quando la combustione controllata dalla
diffusione dei reagenti, come nel caso in esame, si parla di fiamme diffusive, e la superficie di
fiamma localizzata in quelle zone caratterizzate da = 1. In fig.3.15 rappresentata la superficie
in cui combustibile e ossidante si trovano in concentrazioni tali da reagire, sempre se il loro stato
di agitazione molecolare elevato. A livello macroscopico, la temperatura dei reagenti deve essere
maggiore della temperatura di attivazione, definita come rapporto tra lenergia di attivazione
[J/mol] e la costante universale dei gas che vale 8.314 J/molK.
Fig.3.15: A sinistra rappresentazione 3D delliso-superficie a = 1 (in basso) con rapporto di equivalenza, e vista in sezione (in alto); a destra
andamento della temperatura a parete (lato iniettori) e su piani paralleli al flusso a x 2.81 cm e x 5.62 cm rispettivamente sul 2
iniettore e a met tra il 3 e il 4
Si noti che lancoraggio di fiamma avviene a circa 22 mm dallingresso in camera (vedi fig.3.15).
La superficie di fiamma ha un andamento regolare nei primi 5 cm del combustore e poi diventa
51
I tre diversi andamenti sono legati alle caratteristiche geometriche e chimico-fisiche delle pareti;
sperimentalmente si dimostrato che in serbatoi sferici vi una maggiore tendenza allesplosione
poich, a parit di volume, offrono una superficie di interazione minore. Infatti, in prossimit della
parete sono molto frequenti reazioni di ricombinazione del tipo H + H + M H2 + M dove i
radicali H cedono la propria energia a un terzo corpo (parete), oppure reazioni di ossidazione delle
pareti stesse da parte dellossigeno [28]. I radicali sono importanti nei processi di combustione in
quanto sono specie molto reattive, formate da atomi o molecole che presentano un elettrone
spaiato, per cui hanno una forte tendenza a costituire dei legami. Le reazioni a parete sono
indesiderate in quanto tendono a sottrarre radicali rallentando la combustione. In generale
lesplosione spontanea di una miscela leffetto di una competizione tra meccanismi che
52
propagano o ramificano e quelli che terminano[29]. Tipica reazione di propagazione quella tra
idrogeno molecolare e il radicale idrossile che produce acqua e un nuovo radicale (H2 + OH
H2O + H); mentre si parla di ramificazione quando a partire da un radicale se ne formano altri due
come le reazioni H + O2 O + OH e H2 + O OH + H. Questultima combinazione risulta
favorita (pi probabile) rispetto a quella che prevede la dissociazione dellossigeno; essendo il
legame O=O pi forte di H-H, lenergia di attivazione, cio quella necessaria allo scambio tra H e
O2 vale 70.3 kJ/mol contro i 26.3 kJ/mol per H2 e O.
Tornando al diagramma, nel range di temperature comprese tra i 400 e i 600 C laccensione della
miscela fortemente legata alla pressione, a destra della curva a S si ha esplosione mentre a
sinistra no. Per pressioni maggiori dei 5000 Pa non si ha esplosione a causa della formazione del
radicale perossidrile HO2 che risulta poco reattivo fino a p = 1 MPa (10 atm). La reazione a tre
corpi H + O2 + M HO2 + M sequestra quindi radicali H terminando il processo di combustione.
A pressioni elevate questo radicale torna a essere attivo, e combinandosi con lidrogeno biatomico
produce un radicale H e il perossido di idrogeno H2O2, meglio noto come acqua ossigenata.
Questultima molecola, molto instabile, reagisce immediatamente liberando due radicali OH e
accelerando cos la cinetica chimica; la reazione del tipo H2O2 + M 2OH + M con M una
qualsiasi molecola o atomo presente in camera di combustione[29].
Lo schema cinetico adottato nella presente simulazione prevede ben 9 specie (H2, O2, N2, H2O, H,
O, OH, HO2, H2O2) e si considerato, per alleggerire il calcolo, lazoto come gas inerte
trascurando la partecipazione di questa molecola alle reazioni di combustione. La presenza di
azoto in camera si fa comunque sentire: sottrae calore al sistema e contribuisce ad abbattere la
temperatura adiabatica di fiamma. Incide sicuramente sulle massime temperature di fiamma anche
il fatto che lidrogeno entra in camera molto freddo ( = ), per cui parte del calore di
reazione speso per riscaldare il combustibile (si vedano gli isolivelli di temperatura in fig.3.15).
In fig.3.17 sono riportate le frazioni in massa delle principali specie coinvolte nella reazione di
combustione; i piani trasversali al flusso sono situati a z = 4 cm e tagliano a met i quattro iniettori,
mentre quelli paralleli rappresentano la sezione della camera di combustione che attraversa il 2
iniettore a x = 2.81cm (si veda nomenclatura di fig.3.7). Gli isolivelli si riferiscono ad andamenti
medi delle frazioni massiche, calcolate a partire da 53 istantanee del campo per un tempo totale di
circa 1.5 volte il tempo convettivo (caso HyShot_431-483). La frazione di idrogeno massima
alluscita degli iniettori; la particolare forma a fungo nel piano trasversale leffetto della
vorticit streamwise che si genera ai lati degli orifizi e che tende a deformare il gambo del getto
formandone il cappello superiore.
53
Fig.3.17: Frazioni in massa delle principali specie chimiche coinvolte nella reazione idrogeno-aria su piani trasversali al flusso situati a z = 4 cm
(a sinistra) e paralleli alla direzione z con x = 2.81 cm. Gli isolivelli si riferiscono al campo medio HyShot_431-483.
Inoltre, come mostrato dallandamento del numero di Mach in fig.3.14, appena sopra liniettore vi
il bow shock il quale tende ad addensare le linee di corrente del getto e a incurvarle verso il
basso. Una parte del combustibile, che costituisce circa il 25 % della massa totale a parete, cos
trasportato lateralmente e alimenta i horseshoe vortices mostrati in figura 3.13. Stessa cosa
visibile in vista laterale sul piano yz. Lidrogeno, che viene cos spalmato attorno alliniettore (si
veda fig.3.19), ha la possibilit di riscaldarsi pi facilmente poich il flusso di calore, proveniente
dallaria circostante decisamente pi calda ( ), agisce su una superficie maggiore.
Ritornando alliso-superficie in fig.3.15, le zone in cui si riscontrano temperature di fiamma pi
elevate dai 1800 K ai 2000 K sono quelle a monte delliniezione e a cavallo delle strutture laterali
che si formano tra i getti. Bisogna anche tener conto che la vicinanza con la parete, sulla quale
avviene la dissipazione dellenergia cinetica in calore, innalza la temperatura dei reagenti.
Leffetto delle pareti sulla combustione si vede analizzando gli isolivelli dellacqua e del radicale
OH; il profilo laterale nel piano yz del radicale idrossile in accordo con landamento della
superficie di fiamma mostrata in fig.3.15. La frazione massica di OH elevata (YOH 1.5%)
laddove vi lancoraggio di fiamma con temperature superiori ai 2500 K, sulle superfici laterali
della camera di combustione, e subisce un forte incremento sempre a parete (lato iniettori) per z
superiore a 7 cm, raggiungendo il 2.5% della massa totale. Lelevata quantit di acqua prodotta a
parete gi nei primi 8 cm della camera ( 25%) sintomo di un efficiente mescolamento e di
una buona combustione tra i reagenti; laria riesce a penetrare immediatamente al di sotto del
pennacchio di idrogeno, e questo grazie alla formazione dei due grossi vortici centrali (fig.3.13)
54
che si staccano dagli iniettori. Per meglio visualizzare quanto appena esposto, in fig.3.18 sono
riportate le curve delle frazioni massiche di H2, OH e H2O, al variare della coordinata y (in
ascisse), e parametrizzate in funzione di z seguendo la linea mediana del 2 iniettore (x 2.81 cm).
Analizzando lidrogeno per esempio, e ponendosi a z = 24.8 mm si riscontra che circa il 15 % della
massa totale costituita da combustibile; la frazione massica in quel punto massima a parete e
tende a diminuire rapidamente spostandosi da questa. Per z crescenti il picco tende a 1, condizione
che si verifica sopra liniettore a z = 40 mm. Seguendo landamento della curva in verde,
possibile stimare a poco pi di 2 mm la penetrazione del getto allinterno della corrente daria.
Fig.3.18: Frazioni in massa di idrogeno, radicale OH e acqua al variare della coordinata y (in ascisse), e parametrizzate in funzione di z seguendo
la linea mediana del 2 iniettore (x 2.81 cm). Le curve si riferiscono al campo medio HyShot_431-483.
A valle, il trasporto convettivo, unito allespansione delle strutture vorticose, fa s che lidrogeno
propaghi distribuendosi trasversalmente nel combustore; il picco massimo delle curve si sposta
verso valori di y pi piccoli e allo stesso tempo diminuisce in termini di frazione massica.
Il radicale OH mostra un comportamento differente: landamento a impulsi delle curve indica la
presenza di tale specie in zone molto sottili, cio limitatamente alla superficie di fiamma. A monte
degli iniettori a circa z = 22 mm (punto di ancoraggio della fiamma) la frazione di OH si attesta
intorno a 1.5 % e tende a diminuire rapidamente a valle del getto tra z = 50 mm e z = 70 mm (
= 0.1 0.2 %). Qui la temperatura notevolmente pi bassa a causa dellelevata quantit di
idrogeno e la produzione di radicali OH ne risente. Per z > 70 mm, come mostrato dalla curva
color oro sempre di fig.3.18 e confermato dalla visualizzazione in sezione dellintera camera in
fig.3.20(a), la combustione accelera con rapida formazione di radicali a parete. Comportamento
simile per lacqua nei primi 50 mm della camera, ma caratterizzato da frazioni in massa pi
elevate essendo questa una molecola pi stabile. La massima quantit dacqua prodotta a parete
aumenta al crescere della coordinata z, dove si osservano temperature molto alte che vanno dai
55
Fig.3.19: Andamento della frazione massica dellidrogeno calcolata sul campo medio (HyShot_431-483). La curva a sinistra invece linsieme dei
valori medi, a z costante, di YH2 in diverse sezioni trasversali della camera di combustione
In figura 3.20 e 3.21 sono riportati gli andamenti di OH e H2O. Si noti la tendenza asintotica della
al valore 0.1; la produzione di H2O a z = 16 cm subisce un forte rallentamento e lascia
pensare che a valle vi sia per di pi trasporto convettivo di questa specie. Al contrario la frazione
di OH tende a salire linearmente raggiungendo l1.5% della massa totale sulla sezione di uscita del
combustore e molto probabilmente si assister nella piastra di spinta a una ricombinazione dei
radicali.
Altro aspetto interessante emerge dalle viste nel piano xz in fig.3.20 e fig.3.21; la combustione
sembra essere pi lenta per gli iniettori pi esterni. La produzione di OH e H2O risulta ritardata e
spostata pi a valle se confrontata con gli iniettori centrali. Lateralmente si immagina un sistema di
urti ed espansioni pi complesso per via di continue riflessioni a parete che dissipano, a scapito del
mescolamento molecolare, energia a scale pi grandi della turbolenza.
56
Fig.3.20: Andamento della frazione massica del radicale OH calcolata sul campo medio (HyShot_431-483). La curva a sinistra invece linsieme
dei valori medi, a z costante, di YOH in diverse sezioni trasversali della camera di combustione
Fig.3.21: Andamento della frazione massica di acqua calcolata sul campo medio (HyShot_431-483). La curva a sinistra invece linsieme dei
valori medi, a z costante, di YH2O in diverse sezioni trasversali della camera di combustione
57
APITOLO
59
delle ricostruzioni polinomiali. Nei casi ottimali, in assenza di discontinuit, tale modifica
garantiva unaccuratezza pari a [30].
Per meglio comprendere la filosofia che sta alla base di tale metodo, si supponga di voler calcolare
semplicemente la derivata di una generica funzione u(x) sulla j-esima cella, per far ci
necessario ricostruire il valore destro e sinistro della funzione al contorno della cella stessa e
calcolare successivamente il rapporto incrementale come segue:
+1
+1
+1
(4.1)
= 0, , 1
(4.2)
Nel nostro caso lo stencil S0 include le celle i cui centroidi hanno coordinata spaziale xj, xj+1, e
xj+2, S1 le celle xj-1, xj, e xj+1, infine S2 quelle di ascissa xj-2, xj-1, e xj. A ogni centroide associato
il valore medio della funzione sulla cella. Per ogni stencil viene calcolata una funzione
polinomiale accurata allordine r che meglio approssima landamento di u(x). Calcolando
lapprossimazione secondo Lagrange (eqn.4.3) in +
e +
| =
=0
=+1
=0;
=0;
Questultime ricostruzioni
=0; ,
+1
+ 1 +1
2
si ottengono rispettivamente 3
, .
++1 +1
2
+ (4.3)
e + :
+1 2
+1
2,
+1
2,
=0
(4.4)
1
+1
+1
=
=0
60
2,
+1
2,
+1 2,
+1
=
,
+1
2,
1
=0
+1
=
,
1
=0
2,
+1
2,
, +
(4.5)
2,
+1
2 ,
, +
dove , sono i sopracitati indicatori di smoothness ed una costante molto piccola aggiunta
per evitare lannullarsi dei denominatori nelle (4.5).
Per gli indicatori si adoperata la definizione proposta da Shu nel 1996[22]:
1
, =
+1
=1
2 1
2 1
2
+1 2
1 2
(4.6)
Nelle regioni del campo in cui si hanno variazioni regolari di u(x), i k indicatori con k = 0,..,r-1
risultano coincidere tra loro ed essendo i coefficienti anche questi a somma unitaria si ha che
= . Tali coefficienti vengono ricavati in modo tale da raggiungere unaccuratezza di a
partire da uno schema di ordine r. In pratica significa imporre che le ricostruzioni finali
+1 2,
+1
2,,
+1
2,,
= +1
2,21
=0
(4.7)
1
+1
2,
+1
2,,
+1
2,,
= +1
2,21
=0
In figura 4.1 riportato, a titolo desempio, uno schema rappresentante la ricostruzione dei valori
destro e sinistro +
e +
allinterfaccia j+1/2. A partire dai valori medi per cella, per ogni stencil viene calcolata la funzione
polinomiale di secondo grado che meglio approssima tali valori (eqn.4.3). Servendosi della (4.6) si
associa il corrispettivo valore di IS da cui si ricavano i fattori peso. facile intuire, nel caso
61
illustrato in figura, che i pesi corrispondenti agli stencil S0 e S1 assumono valori molto piccoli tale
per cui la ricostruzione alle interfacce affidata unicamente allo stencil pi regolare S2. Se la
grandezza u avesse avuto un andamento regolare, lo schema si sarebbe adattato interpolando al
quinto ordine le di tutte e cinque le celle candidate.
+
=0
(4.8)
Per la risoluzione numerica della PDE (4.8) si utilizzato un 1 ordine upwind nel tempo e il
WENO35 nello spazio. Per equazioni di trasporto convettivo, nel calcolo delle derivate
necessario comunicare allo schema la direzione di propagazione dellonda. Lequazione (4.1)
stata perci modificata tenendo conto del segno di , positivo per informazione che viaggia da
sinistra a destra e viceversa se negativo:
+1/2 1/2
=
+1 2 1 2
> 0
++1/2 +1/2
=
+1 2 1 2
< 0
62
Per far ci si implementato un programma in Fortran PDE.f90 che richiama a sua volta il modulo
Mod_Weno5.f90 per il calcolo delle derivate, entrambi riportati in appendice.
Di seguito viene mostrato un confronto tra le soluzioni ricavate con vari schemi numerici di
unonda a gradino iniziale che si muove a una velocit di 0.9 m/s per un tempo di simulazione
pari a 3 s. Il passo spaziale fisso e vale 0.025 m, mentre il passo temporale ricavato in funzione
del parametro CFL (Courant Friedrichs Lewy) in modo tale da garantire sempre la stabilit dello
schema numerico.
Fig.4.2: Ricostruzione della soluzione dellequazione (4.8) per diversi schemi numerici al variare del numero di Courant
Al diminuire del CFL, definito come rapporto t su x, si riduce il passo temporale. Come
evidenziato in fig.4.2 lo schema upwind rimane pressoch insensibile alle variazioni del numero di
Courant. Lo schema Lax Wendroff, pi preciso dellupwind in una zona molto stretta in prossimit
della discontinuit, risulta per essere molto diffusivo e le oscillazioni introdotte a ogni passo
63
temporale propagano in direzione opposta a quella dellonda inficiandone la bont della soluzione.
Il Lax Friedrichs di contro fortemente dissipativo, smorza le oscillazioni ma tende nel tempo o
parimenti allaumentare del numero di iterazioni temporali, quindi al diminuire del t, ad
appiattire la soluzione stessa. Il WENO35 invece ai bassi CFL riesce a seguire egregiamente
landamento del gradino senza introdurre nessun disturbo numerico.
Il calcolo delle sole derivate spaziali, utili nellanalisi di post-processing sui termini dellequazione
della vorticit, stato invece effettuato secondo lequazione (4.1). A seguire i risultati per le
funzioni seno e gradino:
Fig.4.3: Confronto tra uno schema centrato e WENO35 nel calcolo della derivata della funzione seno (a sinistra) e a gradino (a destra)
Si noti dalla fig.4.3 come, nelle zone caratterizzate da brusche variazioni delle variabili di campo,
lerrore commesso nel calcolare la derivata a cavallo della discontinuit, cio laddove la derivata
stessa non definita, risulta per uno schema di tipo WENO inferiore rispetto a uno centrato
presentando un impulso di Dirac di ampiezza due ordini di grandezza pi piccolo.
1
+
2
1
2
1
2 +
1
+ (4.9)
1
p
2
con
(4.10)
1
= 2
1
2
1
2
1
2
(4.11)
lungo x (cio la densit aumenta da sinistra a destra). La porzione di fluido pi densa subisce
unaccelerazione inferiore rispetto alla porzione meno
densa cos da innescare un moto rotatorio (vorticit nel
piano xz diretta lungo y).
Il regime compressibile (supersonico) riduce sensibilmente
la possibilit di trovare particelle che abbiano energia
cinetica tale da risalire la corrente, per cui la vorticit
principalmente streamwise. Localmente, a cavallo di onde
durto presenti nel campo, nelle zone di reazione e nel-
le vicinanze degli iniettori, possibile trovare gradienti di pressione e densit in tutte le direzioni.
Fig.4.5: Modulo gradiente di densit e pressione su piani trasversali alla direzione principale del flusso (a sinistra) e su piani paralleli passanti
per il centro degli iniettori (a destra)
66
Fig.4.6: Modulo del termine baroclinico su piani trasversali alla direzione principale del flusso (a sinistra), e su piani paralleli passanti per il
centro degli iniettori (a destra)
A sinistra di figura 4.6 riportato il modulo del termine in questione su piani perpendicolari alla
direzione del moto a partire da 40 mm dallingresso in camera di combustione, passante
esattamente per il centro degli orifizi. Le strutture che si originano alluscita dei getti dilatano e
vengono trasportate nel campo sino a dissiparsi del tutto. Lattenuazione dei gradienti a valle della
camera di combustione in parte attribuibile agli effetti dissipativi sui vortici, e in parte a una
67
griglia volutamente pi rada per ragioni di tempo computazionale. Dalla seconda sezione
trasversale in poi, in fig.4.6, cominciano a delinearsi, tra un getto e laltro, altre strutture vorticose
generate dallinterazione delle correnti di idrogeno provenienti da due iniettori contigui. Tali
vortici verranno analizzati nel dettaglio successivamente contestualmente alla visualizzazione delle
linee di corrente, ma a prima vista si nota come gli iniettori pi esterni, risentendo degli effetti di
parete, funzionino diversamente rispetto a quelli centrali: i vortici tra i due orifizi che ne derivano
non si collocano al centro come avviene per quello tra il 2 e 3 iniettore. Limmagine a destra
(fig.4.6) riporta landamento del termine baroclinico in quattro sezioni longitudinali della camera,
ciascuna passante su ogni singolo iniettore, ed evidenzia, sebbene in zone molto ristrette, uno
sviluppo di vorticit a monte dei getti. La scala adottata non consente una corretta visualizzazione
e localizzazione dei punti in cui massima lintensit, per cui si ritenuto necessario mostrare
landamento del termine baroclinico, insieme ai gradienti di pressione e densit, lungo z su una
linea passante appena sopra il centro del 2 iniettore a y = 9.7 mm (fig.4.7).
Fig.4.7: Modulo del termine baroclinico (a) e dei gradienti di densit (b) e pressione (c) al variare di z per x = 2.81 cm e y = 9.7 mm
Tale confronto aiuta a comprendere limportanza di ogni singolo termine e a stabilirne lordine di
grandezza. Il primo contributo alla vorticit dato dai gradienti di densit e pressione per effetto
dellonda durto che si origina dallo spigolo vivo presente allingresso in camera di combustione
sulla parete superiore (lato iniettori). Sempre in direzione z si riscontra un secondo picco,
dellordine di 1010 rad/s2, corrispondente a un secondo urto dovuto alla separazione dello strato
limite. Dalle simulazioni numeriche tale onda si colloca a circa 20 mm dagli iniettori (picco n2 in
fig.4.7).
Poco a valle dellurto, in particolare allinterfaccia tra la zona di separazione e la corrente
principale, si generano gradienti di pressione e densit (picco n3 in fig.4.7): da un lato vi
lidrogeno che, partendo da una densit di per s gi bassa allingresso in camera ( = 0.3 kg/m3) e
68
69
successivo incremento per effetto di una nuova compressione (barrel shock). Si ricorda inoltre che
la zona che segue liniettore occupata per intero da idrogeno, la cui densit a denominatore
influisce col quadrato sul termine baroclinico.
2
3
3
1
Fig.4.8: Visualizzazione dei vortici responsabili del trasporto e del mescolamento tra idrogeno (a sinistra) e ossigeno (a destra)
Il picco n8 (fig.4.7) e quelli a seguire sono causati dal groviglio di riflessioni tra onde di
espansione e compressioni, infatti dalla fig.4.9 si intravedono a parete altre strutture vorticose a z
42 mm e z 44 mm e una pi piccola allincrocio tra le onde durto a y 8.5 mm.
Fig.4.9: Isolivelli di pressione e sovrapposti i vettori velocit a x = 2.81 mm (a); stessa immagine spostata di 1mm dalla mezzeria (b)
Concentrandosi sulle isobare si noti la formazione di una zona di ristagno, appena prima
delliniettore, giacente tra i due vortici a z 38 mm (punto di sella per la linea di corrente che
70
viaggia lungo la mezzeria delliniettore). Il confronto della 4.9(a) con la stessa, visualizzata per
su un piano yz diverso ma sempre interno alliniettore (fig.4.9b), indica una distribuzione di
pressione differente generata dalla curvatura del bow shock; laria nellattraversare questo urto
curvo subisce infatti una deviazione e una compressione diversa a seconda della posizione x alla
quale incontra tale onda. Considerazioni analoghe valgono per la densit. Il bow shock diventa
esso stesso fonte di vorticit.
Da una vista in pianta (fig.4.10) facile comprendere la tridimensionalit dei fenomeni fino a ora
descritti, quindi normale attendersi nelle altre direzioni effetti analoghi a quelli riscontrati in
direzione z, per esempio, lespansione dal centro del getto verso lesterno e a seguire la
compressione del barrel shock.
Fig.4.10: Modulo dei gradienti di densit (sinistra), di pressione (centro) e del termine baroclinico (destra) a y = 9.3 mm lato iniezione
Gli schemi (a) e (b) di figura 4.11 suggeriscono, in accordo con lequazione (4.11), la possibilit
da parte del termine baroclinico di generare attorno alliniettore vorticit positiva o negativa.
La figura 4.11(c), rappresentativa delle linee di corrente come testimoniato dalla simulazione,
mostra quale sia la direzione predominante dei gradienti di densit e pressione.
Fig.4.11: Schema di formazione dei vortici streamwise e spanwise (paralleli e trasversali alla direzione principale del moto)
(4.9); le strutture giacenti nel piano yz subiscono delle trasformazioni in quanto soggette
inevitabilmente a gradienti di velocit e a compressioni ed espansioni locali.
Ritornando alla fig.4.10, gli andamenti attorno alliniettore ricordano vagamente delle semilune: le
pi esterne rappresentano la ridistribuzione spaziale dei gradienti di pressione e densit (quindi del
termine baroclinico), dovuta allo stretching e al tilting della vorticit centrata a z 34 mm;
internamente vi leffetto combinato dei termini B, VS e CP. Prima di procedere con lanalisi dei
vortici sul piano xy opportuno indagare sui meccanismi che stanno alla base del vortex stretching
e del termine compressibile.
= =
Vx
x
Vx
y
Vx
z
Vy
x
Vy
y
Vy
z
Vz
x
Vz
=
y
Vz
z
Vx
Vx
Vx
+ y
+ z
x
y
z
Vy
Vy
Vy
x
+ y
+ z
x
y
z
Vz
Vz
Vz
x
+ y
+ z
x
y
z
x
(4.12)
Vy Vx
+
x
y
Vy
2
y
Vy Vz
+
z
y
Vz Vx
+
0
x
z
1 Vx Vy
Vz Vy
+
+
2 y
y
z
x
Vz
Vx Vz
2
z
z
x
72
Vy Vx
x
y
0
Vy Vz
z
y
Vz Vx
x
z
Vz Vy
y
z
0
(4.13)
e ricordando la definizione di tensore di deformazione (1.19) e del vettore vorticit (1.39), si ha:
0
1
= + z
2
y
z
0
x
y
x
0
(4.14)
Il secondo termine a destra delleqn.(4.14) altro non che il tensore di rotazione rigida che non
contribuisce al vortex stretching ( = ). Perci nel VS conta unicamente la deformazione. In
particolare essendo un tensore simmetrico, questo ammette tre autovalori reali a cui
corrispondono tre autovettori ortogonali. Lincremento di vorticit nel campo allora massimo
quando il vortice orientato in direzione dellautovettore corrispondente allautovalore positivo
pi grande (massimo allungamento del vortice). Ora se il fluido incomprimibile, ipotesi che per
il momento permette di semplificare la trattazione svincolando gli effetti del VS dal termine CP
(compressibile), la traccia di deve essere nulla ( = ) e ci assicura lesistenza di almeno
un autovalore positivo [6].
Con stretching e tilting si indicano rispettivamente allungamento e incurvamento dei volumetti
vorticosi; la (4.12) descrive chiaramente levoluzione di un vortice sottoposto a gradienti di
velocit. Condizione necessaria affinch ci sia VS e quindi turbolenza la presenza di vorticit nel
campo, la quale pu essere creata, come visto nel paragrafo precedente, solo per effetto
baroclinico. Inoltre il flusso deve essere tridimensionale, unico caso in cui il prodotto scalare
risulta diverso da zero. La figura che segue rappresentativa del meccanismo di produzione
Fig.4.12: Schema semplificato delleffetto dello stretching e del tilting sui vortici
Focalizzando lattenzione, per esempio, sulla variazione di lungo z (fig.4.12), si noti come in
seguito al gradiente di velocit > 0 un vortice orientato nella stessa direzione di
subisce un allungamento; per il teorema di Kelvin la circolazione deve rimanere costante, ci
implica la conservazione del flusso di vorticit attraverso la sezione del vortice; allora se
valida = (flusso incomprimibile) allo stretching del volumetto deve corrispondere una
73
A tal proposito si ricordi che la teoria di Kolmogorov non descrive ci che accade
istante per istante al singolo vortice ma fornisce una visione statistica del fenomeno turbolenza,
cio suggerisce quello che avviene mediamente (statisticamente) alle varie scale. Che un singolo
vortice in un certo istante venga allungato, strizzato e costretto a ruotare pi velocemente poco
importa, quello che conta cosa quell'aumento di velocit ha prodotto nel flusso.
Laumento di velocit tangenziale del primo vortice visto come un gradiente da un altro a
contatto e che nella migliore delle ipotesi orientato ortogonalmente rispetto al precedente
(stretching massimo). La stessa conservazione del volume ( = ) impone altres la
formazione di gradienti di velocit trasversali a partire dalla deformazione indotta dalla variazione
di uno solo dei termini dellequazione (4.17). Questo uno dei motivi per cui nel regime
comprimibile il rateo di produzione di scale risulta minore e ci si traduce in una pendenza
maggiore, in valore assoluto, dello spettro di energia nel range inerziale (fig.2.1).
Dal punto di vista energetico, il vortice che ha subito il primo stiramento ha sottratto energia al
campo, il "moto medio" ha compiuto un lavoro sul volumetto vorticoso che diventato pi piccolo
ed energetico, ma immediatamente questa energia ceduta al vicino con l'effetto complessivo di
una riduzione di energia associata a ogni scala (spostando lo spettro verso numeri d'onda pi
elevati). Nulla vieta per trasferimenti di energia in direzione opposta (cascata di energia inversa),
e ci avviene con maggiore probabilit alle grandi scale, caratterizzate da dinamiche lente, quando
due vortici si trovano ad avere vorticit concorde e frequenze proporzionali (sincronizzazione). Il
vortice di dimensione inferiore, anzich trasferire la propria energia a uno pi piccolo, trascina nel
suo moto rotatorio il vortice grande.
La turbolenza, intesa come meccanismo di produzione di scale, pu sussistere unicamente per
flussi tridimensionali perch solo in questo caso si hanno componenti di vorticit lungo la
direzione dei gradienti. In 2D e i gradienti di non sono complanari, la vorticit pu esserci ma
non la turbolenza e la dissipazione di energia risulter pi lenta proprio perch lo spettro di scale
meno ampio; il numero di Reynolds locale se inizialmente alto (es: flussi supersonici) rimane tale
e leffetto delle forze viscose rispetto a quelle inerziali quasi nullo.
74
Ritornando all eqn.(4.12), si noti come il contributo alla variazione di provenga anche da
vortici presenti nelle altre due direzioni che vengono incurvati per via di gradienti di velocit
lungo x e y (fig.4.12).
Nella simulazione del combustore di HyShot, si osservano stretching e tilting, come facile
intuire, intorno agli iniettori, poich in tali zone si combinano i pi elevati gradienti di velocit con
la pi alta produzione di vorticit per via del termine baroclinico. Ci che accade a valle di pi
difficile interpretazione, entrando in gioco effetti dovuti alla combustione che tenderebbero a far
espandere il flusso, uniti al susseguirsi di riflessioni e interazioni reciproche di onde di pressione
(urti ed espansioni locali); risulta allora arduo disaccoppiare gli effetti di stretching dalla
comprimibilit e andrebbe analizzato direttamente leffetto combinato .
Confrontando le figure (4.6) e (4.13) si noti che il vortex stretching, almeno nei primi 16 cm della
camera di combustione, rimane dello stesso ordine di grandezza del termine baroclinico, ma a
differenza di questultimo sembra mantenere alto il proprio contributo anche a valle e soprattutto a
parete. Questultima infatti, se da un verso tende a distruggere la vorticit per effetti viscosi,
dallaltro contribuisce a crearne di nuova (ovviamente a partire da vortici preesistenti) per via dei
gradienti di velocit nello strato limite.
Fig.4.13: Modulo del termine di vortex stretching su piani trasversali alla direzione principale del flusso (a sinistra), e su piani paralleli passanti
per il centro degli iniettori (a destra)
Come fatto al paragrafo precedente, si analizzi landamento del modulo di VS in funzione della
coordinata z lungo una linea passante appena sopra il centro delliniettore situata a . . Il
picco massimo si attesta intorno ai 1013 1/s2 (punto 7 di fig.4.14) ma presenta un maggior numero
di oscillazioni con valor medio superiore rispetto al termine baroclinico.
75
Fig.4.14: Modulo del termine di vortex stretching al variare di z per x = 2.81 cm e y = 9.7 mm
Variazioni di vorticit che vanno dai 51010 1/s2 a circa 21011 1/s2 (punto 1 e 2 di fig.4.14) si
riscontrano allinterno della zona di separazione, si tratta di stretching in direzione x di vortici nel
piano yz. Intorno alliniettore si hanno i massimi gradienti di velocit, il fluido rallenta allimpatto
col core del getto di idrogeno e accelera nel tentativo di aggirare lostacolo. Il vortice, situato
immediatamente prima del getto a z 38 mm, subisce leffetto combinato di stretching lungo x in
entrambe le direzioni ( positiva e negativa) e allo stesso tempo una rotazione (tilting)
dovuta alla ; ovviamente continua a essere alimentato per effetto baroclinico dal getto.
Nella figura sottostante sono rappresentate le traiettorie seguite dalle linee di corrente attorno al 2
orifizio.
Fig.4.15: Isolivelli di velocit media lungo y sul piano xz a y = 9.8 mm e su un piano ortogonale al primo a x = 2.81 cm con sovrapposte linee di
corrente (a sinistra); componente di velocit (campo medio) nella direzione principale del moto su un piano xz a y = 9.5 mm (a destra).
Si noti che a valle del getto, data la possibilit del fluido di espandersi nascono delle componenti
di velocit Vx ( tilting) che consentono ai vortici laterali di riconquistare la linea mediana
delliniettore nella direzione z. Si soliti indicare tali vortici con il nome di horseshoe vortex per la
loro particolare forma. Stessa dinamica per gli altri vortici allinterno della zona di separazione,
76
che per seguono una curvatura pi ampia, incontrandosi a met strada con i vortici provenienti
dagli iniettori contigui (si veda fig.4.26). La superficie di interazione combustibile-ossidante non
cos limitata alla sola zona di iniezione, ma si estende anche in larghezza a beneficio del
mescolamento e quindi della combustione. Come riportato in fig.4.15 a destra, laumento della
componente Vz da circa 200 a 1800 m/s non basta ad assicurare la produzione di vorticit tramite
lallungamento delle strutture vorticose, poich tale comportamento controbilanciato
dallespansione stessa del volumetto vorticoso. Non si in grado di spiegare quindi levoluzione
dei vortici senza aver affrontato gli effetti derivanti dalla comprimibilit; nel paragrafo che segue
viene perci trattato il termine CP nellequazione di trasporto (4.9).
per lo spettro di energia di Kolmogorov. Diversi studi relativi a flussi comprimibili sono stati
effettuati in merito alla dipendenza dellenergia cinetica turbolenta dal numero donda , ma non
forniscono risultati unanimi. Da un approccio teorico emersa una proporzionalit di con la
potenza alla - 8/3 del numero donda[31]; simulazioni DNS hanno invece evidenziato che lenergia
cinetica va con la potenza alla - 4 di k[32], mentre da prove sperimentali lesponente vale - 11/3[33].
Elemento comune la maggiore pendenza della curva nel range inerziale, la quale sta a
testimoniare una dissipazione aggiuntiva di energia rispetto al caso incomprimibile; ci comporta
una minore produzione di scale e quindi di turbolenza. La comprimibilit gioca un ruolo
ambivalente: se da un lato responsabile dellabbattimento dei tempi chimici agendo sul libero
cammino medio molecolare, dallaltro lincremento degli urti tra particelle grava sul coefficiente
di diffusione di specie. Per molti anni si ritenuta improponibile o difficile la combustione in
regime supersonico poich a parit di tempi di reazione, dellordine dei millisecondi tipici di flussi
subsonici, si pensava che lelevata velocit del flusso in camera avrebbe impedito lancoraggio di
fiamma, la quale sarebbe stata spazzata via convettivamente. In HyShot il tempo di residenza
dellordine di 10-4 s (Da<1, numero di Damkohler espresso come rapporto tra tempo convettivo su
tempo chimico). Ovviamente si stava trascurando leffetto della comprimibilit sulla cinetica
chimica; le molecole, in regime supersonico, non fanno in tempo a ridistribuirsi in presenza di un
ostacolo poich la velocit di agitazione molecolare di gran lunga inferiore a quelle del moto di
insieme del flusso (moto del centro di massa). La conseguenza un addensamento delle particelle
77
che rallentando generano lurto. Il libero cammino medio molecolare definito come:
(4.15)
= =
=1
(4.16)
=1
particelle con energia cinetica maggiore di E A (energia di attivazione); non tutte le collisioni
avvengono con una energia tale da favorire fenomeni di dissociazione o di scambio (reazioni
chimiche). Allo stesso tempo, se la frequenza con cui avvengono gli urti maggiore,
linterdiffusione di massa dei reagenti gli uni negli altri risulta sfavorita. Tale problema non si
presenta ovviamente in fiamme premiscelate, ma diventa importante in quelle diffusive.
Tornado allequazione della vorticit (4.9), il termine di comprimibilit CP figura come il prodotto
del vettore vorticit per la divergenza di che rappresenta la velocit con cui un generico
volume V si espande o comprime:
+
+
(4.17)
quindi:
+
+
+
+
+
+
78
(4.18)
Preceduto da un segno meno nella (4.9), tale termine contribuisce a generare vorticit nelle zone in
cui il fluido subisce una compressione ( < 0). Il teorema di Kelvin impone la costanza della
quantit , quindi nel caso incomprimibile per lequazione di conservazione della massa il
volume AL preservato, e allora risulta proporzionale alla lunghezza L del volumetto vorticoso;
per fluidi comprimibili ci non pi vero. Se vale:
=
(4.19)
(4.20)
si deduce che la quantit a essere proporzionale a L. In altri termini, per poter stabilire
come la deformazione del volume possa influire sulla vorticit nel campo, occorre conoscere
anche la variazione di densit del volume materiale, quindi il prodotto . Tale prodotto anche la
legge di scalatura della cinetica chimica del secondo ordine comparendo nella definizione del
numero adimensionale Da, e ci unulteriore conferma del legame che intercorre tra
comprimibilit e cinetica chimica. Tornando allesempio relativo allo stretching del vortice
(par.4.4.2), a un gradiente positivo di Vz lungo z non corrisponde inevitabilmente un aumento di
vorticit; lallungamento del tubo vorticoso associato a una diminuzione di densit potrebbe
lasciare inalterata la sezione preservando comunque la massa. Ci ampiamente descritto
dallequazione della vorticit; il confronto tra leqn.(4.12) e (4.18) mostra la presenza di un
termine comune in entrambe le equazioni ma con segno differente. Dalla somma algebrica
emerge che i gradienti di velocit in direzione dei vortici non contribuiscono alla vorticit
(4.21)
Anche in questo caso leffetto della comprimibilit si risente a parete per via del rallentamento del
flusso, e dalla vista laterale (fig.4.16), oltre che nellintorno delliniettore, emerge che il contributo
alla vorticit molto alto sul bow shock e sullonda riflessa poco pi a valle.
79
Fig.4.16: Modulo del termine compressibile su piani trasversali alla direzione principale del flusso (a sinistra), e su piani paralleli passanti per il
centro degli iniettori (a destra)
Fig.4.17: Divergenza del vettore velocit sul piano xz a y = 9.5 mm (a sinistra), e sul piano yz passante per il centro del 2 iniettore (a destra)
Le zone di colore rosso di figura (4.17) individuano le espansioni del fluido, quelle in blu le
compressioni. Il ferro di cavallo, meglio visibile sui due orifizi centrali, indica lallargamento
delle strutture vorticose che costeggiano il getto, quindi una riduzione di vorticit in
contrapposizione allo stretching imposto dallaumento di velocit nella direzione principale del
moto. La figura (4.18) mostra, in aggiunta alla zona di iniezione con picco massimo di circa
/, altri contributi, uno iniziale per londa durto che si forma allingresso della camera
80
Reynolds associato vale 60000 e da Kolmogorov si ottiene 0.5 m, quindi vortici grandi
decimi di micron.
Nel presente lavoro, i termini viscosi, nonostante scalino con 1/Re, vengono comunque presi in
considerazione poich si ritiene che i gradienti introdotti nel campo per via della viscosit possano
avere un effetto benefico sul mescolamento. In particolar modo si fa riferimento alla produzione di
vorticit generata dallinterazione del fluido con le pareti della camera. A parete infatti le
decelerazioni indotte dagli sforzi viscosi causano linnalzamento di temperatura, che contribuisce a
sua volta ad accelerare la combustione, e quindi al maggior sviluppo di calore. Leffetto combinato
dellattrito e della combustione favorisce da un lato laumento di viscosit, dallaltro il
rallentamento locale del flusso (Re 1). Le espressioni matematiche dei termini viscosi sono
riportate in appendice, mentre qui vengono unicamente presentati i risultati. Per un confronto
equo, come fatto in precedenza, si riportano i quattro termini viscosi in funzione della coordinata z,
parallela alla direzione del flusso, a y costante e pari a 9.7 mm.
82
Essendo una visualizzazione a parete, il contributo (in modulo), apportato da ogni singolo termine,
inteso come variazione di vorticit, da considerarsi massimo. La cosa che accomuna tutti e
quattro i termini il picco iniziale allingresso in camera, proprio in quella zona del campo in cui
ha origine la prima onda durto, la quale impone decelerazioni molto forti.
Il termine diffusivo D quello che pesa maggiormente rispetto agli altri contributi; i numerosi
picchi, di cui una buona parte supera i 1012 rad/s2, si verificano nella zona di iniezione. D
direttamente legato alle variazioni spaziali della vorticit, in particolare va con il laplaciano del
vettore quindi con le derivate seconde nello spazio (A.3). In pratica questo termine genera
vorticit in opposizione al vortex stretching che per lappunto massimo attorno ai getti.
Il contributo dato dallaccoppiamento comprimibilit-viscosit indicato con lacronimo CV;
questo tiene conto del fatto che particelle meno dense, a causa degli sforzi viscosi, subiscono
decelerazioni maggiori (A.10). La vorticit generata dal termine CV entra quindi in competizione
con leffetto baroclinico.
Pi complicato il termine VV (A.14), nel quale si includono gli effetti derivanti
dallaccoppiamento dei gradienti di velocit con le variazioni di viscosit nel campo. Vortici diretti
secondo una generica direzione vengono riorientati lungo una direzione ben precisa se sottoposti a
gradienti di viscosit nelle altre due direzioni; in particolare derivate come e , frutto
di innalzamenti locali della temperatura dovuti alla combustione, contribuiscono a creare vorticit
lungo z.
Il termine DV (A.17) considera invece linterazione tra le deformazioni della particella fluida, per
esempio quelle generate dalla presenza di una parete, con i gradienti locali di viscosit.
Fig.4.20: Schema semplificato di produzione di vorticit per laccoppiamento della deformazione del volumetto fluido con i gradienti di visco sit
In fig.4.20 riportato uno schema semplificato di generazione di vorticit lungo z causata dalla
deformazione di una particella fluida sottoposta a un gradiente di velocit positivo, che
per ipotesi si considera costante. La deformazione introduce degli sforzi viscosi superficiali sul
83
(4.22)
Essendo il gradiente di velocit qui per ipotesi costante, si ha vorticit lungo z unicamente se sono
presenti nel campo gradienti di viscosit sia in direzione z che x, e il contributo risulta
proporzionale a:
2
(4.23)
[3]
produzione dei termini viscosi, diventa difficile localizzare la vorticit derivante da ogni singolo
contributo essendo questa concentrata in zone molto sottili del campo come lo strato limite. Dalla
presente simulazione si per riusciti a cogliere alcuni interessanti effetti di interazione in larga
scala tra vortici e strato limite.
Le immagini che seguono, relative alla visualizzazione di linee di corrente, sono riferite al campo
medio per depurare le variabili dalle dinamiche a elevata frequenza, quindi caratterizzate da tempi
di vita molto brevi.
Fig.4.21: Visualizzazione di vorticit spanwise media in prossimit della parete (y = 9.4 mm) nel piano xz e diretta lungo y (a sinistra); traiettorie
3D delle linee di corrente del campo medio a valle delliniettore e sullo sfondo linee di corrente nel piano xy a z = 40 mm (a destra)
84
Il rallentamento andando verso la parete da regime supersonico a subsonico, causato dai fenomeni
di attrito con le superfici della camera, permette al flusso di ricircolare a valle delliniettore. Nella
zona compresa tra z = 41 mm e z = 42 mm , si formano nel piano xz, anche qui per effetto
baroclinico, due vortici controrotanti che contribuiscono a convogliare laria ai lati degli iniettori, e
la trasportano allinterno del getto di idrogeno. Come mostrato dalla vista in 3D, la vorticit da
spanwise diventa streamwise. Lallineamento del vettore vorticit nella direzione principale del
flusso favorito dai gradienti trasversali di velocit ( ) che nascono allinterno dello strato
limite. Si tratta di vortex stretching indotto dalla viscosit del flusso.
Interessante anche la produzione di vorticit causata dal contatto dei vortici con le superfici della
camera (fig.4.22). La rotazione oraria del vortice master, indicato col segno +, introduce nel
campo gradienti di velocit, e la condizione al contorno di non scorrimento a parete impone la
formazione di uno strato limite (t = t1).
centrifuga che tende a ripristinare la condizione di partenza con una nuova espansione dei
master. Linstabilit che ne deriva accelera linterdiffusione tra le specie a beneficio del
mescolamento.
Fig.4.23: Interazione vortici-parete in due sezioni della camera di combustione rispettivamente a z = 51 mm (a sinistra) e z = 53 mm (a destra). Le
immagini si riferiscono al campo medio HyShot_431-483.
86
dellordine di quello di rotazione delle strutture di piccola scala, dalla relazione di Kolmogorov
(eqn.2.3) che lega il rapporto dei tempi della scala integrale T e quella dissipativa con il numero
di Reynolds:
=
(4.24)
2
risulta immediata limportanza di avere vortici di grande scala molto energetici. Riprendendo
lesempio del paragrafo 4.4.4, per un vortice caratterizzato da ReL = 60000 e = 500000 rad/s
segue un tempo caratteristico delle scale dissipative dellordine dei nanosecondi ( 50 ns).
Dalla visualizzazione del campo di vorticit medio possibile trarre utili considerazione sul
contribuito totale dei vari termini dellequazione (4.9). Il bilancio tra termini di produzione e quelli
dissipativi garantisce mediamente la presenza di vorticit in modulo dellordine dei 105 Hz con
picchi di un ordine di grandezza pi grandi nella zona di iniezione (si veda ingrandimento in
fig.4.24).
Fig.4.24: Modulo della vorticit media (caso HyShot_431-483) su piani trasversali alla direzione principale del flusso (a sinistra), e su piani
paralleli passanti per il centro degli iniettori (a destra).
La vorticit nella zona che precede gli iniettori principalmente confinata a parete ed generata
dalla deformazione viscosa. Appena sopra il getto, dalla vista laterale riportata a sinistra della
fig.4.24, si intravede presenza di vorticit sul bow shock e sullonda riflessa poco pi a valle. Dei
gradienti introdotti da tale onda curva si era gi discusso nel paragrafo relativo alleffetto
baroclinico e la visualizzazione 3D (fig.4.25) delliso-superficie a = 30000 rad/s conferma
quanto detto.
87
Fig.4.25: Iso-superficie di vorticit media streamwice a = 30000 rad/s e relativa al secondo iniettore
A seconda della direzione dei gradienti si formano vortici orari ( positiva seguendo la regola
della mano destra) e sono rappresentati in rosso mentre il colore verde individua le strutture che
ruotano in senso opposto. La situazione presentata in fig.4.25 ricalca lo schema di fig.3.13: due
vortici controrotanti allinterno del getto pi altre strutture laterali di dimensioni inferiori chiamati
horseshoe vortices. Tra un iniettore e laltro convergono sia le linee di corrente dei vortici
spanwise generati a monte (come mostrato a destra in fig.4.26), sia quelle provenienti dai vortici
laterali visibili nel piano xy a x = 3 cm e x = 4.5 cm. Lidrogeno viene spinto a parete dalla
vorticit streamwise e trasportato trasversalmente in direzione x; limpatto dei due flussi di
combustibile, provenienti dai due iniettori vicini, d origine ad altre strutture per effetto
baroclinico ( mescolamento reazioni chimiche).
Fig.4.26: Isolivelli nel piano xy (z = 40 mm) delle frazioni massiche medie per le principali specie coinvolte nella reazione con sovrapposte linee di
corrente (a sinistra). A destra visualizzato lo stretching di vorticit spanwise con iso-superficie del getto di idrogeno a YH2 = 0.88; sullo
sfondo isolivelli di pressione (media) su piani paralleli alla direzione principale del moto rispettivamente a x = 2.81 cm e y = 9.8 mm
88
sorprendente verificare come venga deformata liso-superficie del getto fino a formare un
ricciolo. Si ricordi che il flusso di idrogeno entra in camera in condizioni soniche ma transita
immediatamente a supersonico; una deviazione cos accentuata d unidea di quanto elevata possa
essere la vorticit in questa zona.
Le immagini riportate in figura 4.27 mostrano leffetto delle strutture vorticose sulla distribuzione
delle principali specie coinvolte nella reazione di combustione: H2, O2, OH e H2O. Le quattro
sezioni si riferiscono a piani trasversali della camera al variare di z a partire da quello situato a z =
4 cm e passante per i quattro iniettori.
Fig.4.27: Isolivelli delle frazioni massiche di H2, O2, OH e H2O relativi al campo medio con sovrapposte linee di corrente su piani trasversali alla
direzione principale del flusso e situati rispettivamente a z = 40 mm, z = 44 mm, z = 53 mm e z = 68 mm.
nate a parete, di cui si era gi discusso nel paragrafo 4.4.4, consente allaria di interporsi tra il getto
di idrogeno e la parete della camera; lidrogeno viene spinto verso il centro del combustore e
laumento della superficie di interazione tra combustibile e ossidante, unita alle elevate
temperature a parete, favorisce il processo di combustione come mostrato dalle frazioni in massa
di OH e H2O in fig.4.27.
Unultima considerazione degna di nota che gli isolivelli YH2 nelle diverse sezioni mostrano un
consumo del core di idrogeno dallesterno verso linterno, il che conferma la natura diffusiva
della fiamma; nonostante laria riesca a penetrare immediatamente nel getto la temperatura molto
bassa del combustibile (fig.4.28) non consente di attuare reazioni di combustione. La stessa
presenza di acqua dentro il pennacchio di idrogeno a z = 68 mm pi un effetto legato al trasporto
di specie dalla corona circolare esterna (superficie di combustione) verso linterno. Infatti il vortice
a z = 44 mm caratterizzato da 5105 rad/s (80000 giri/s) compie un giro ogni 12 s, quindi il
tempo necessario alle particelle dacqua, prodotte al confine aria-idrogeno per esempio a y = 9
mm, a raggiungere la stessa ordinata y dentro il getto circa la met (6 s mezzo giro). In 6 s lo
stesso vortice viene trasportato convettivamente 9 mm pi a valle (si veda sezione trasversale a z =
53 mm) avendo considerato una Uz media di circa 1500 m/s (fig.4.15). Ci sono tutti i presupposti
per credere che laumento di temperatura di iniezione dellidrogeno rispetto allattuale =
potrebbe apportare grossi benefici in termini di velocit di reazione.
Fig.4.28: Isolivelli di temperatura relativi al campo medio con sovrapposte linee di corrente su piani trasversali alla direzione princ ipale del flusso
e situati rispettivamente a z = 40 mm, z = 44 mm, z = 53 mm e z = 68 mm.
90
-4
s),
91
Oltre al tempo di mescolamento, influisce sulla combustione anche il tempo chimico, cio la
velocit della reazione. La comprimibilit e in particolare le onde durto che si generano in seguito
al rallentamento del flusso supersonico contribuiscono ad accelerare la cinetica chimica per via di
un numero maggiore di collisioni tra le particelle (riduzione del libero cammino medio). Di contro
per laumento della frequenza collisionale rallenta linterdiffusione tra le specie, problema di cui
bisogna assolutamente tener conto in fiamme diffusive. Leccesso di urti in camera comporta
inoltre una dissipazione di energia gi dalla scala inerziale della turbolenza, situazione indesiderata
poich uno spettro ampio di scale (fino alla scala di Kolmogorov) facilita il mescolamento a
livello molecolare.
Inoltre essendo liniezione da fori a parete non si pu prescindere dallanalisi della vorticit
generata dagli effetti viscosi nonostante questi scalino con 1/Re nellequazione adimensionalizzata
(1.57), apportando non poche complicazioni nella comprensione dei meccanismi di interazione
aria-idrogeno.
Sulla base di queste nuove conoscenze ci si pu interrogare sulla possibilit di migliorare il
mescolamento tra reagenti e accelerare il processo di combustione. Liniezione in cross flow la
configurazione pi adatta per motori scramjet? Di una cosa si certi ed luso dellidrogeno come
combustibile che oltre alle sue propriet energetiche caratterizzato da una densit molto bassa
( . / in condizioni standard), la quale contribuisce a incrementare la produzione di
vorticit per effetto baroclinico. Sarebbe comunque interessante verificare il mescolamento per
differenti tipi di combustibile.
Se lo scopo fosse unicamente il raggiungimento di una completa combustione in camera
intuitivamente verrebbe da pensare che liniezione di combustibile a 90 rispetto alla corrente
daria possa essere la soluzione migliore in quanto quella in grado di offrire il maggior sviluppo di
vorticit. Come da simulazione i forti gradienti che si generano allinterfaccia tra laria e il getto di
idrogeno danno vita per effetto baroclinico a un sistema di vortici spanwise molto energetici
caratterizzati da velocit tangenziali dellordine dei 1000 m/s (circa la velocit di iniezione del
combustibile), e il vortex stretching si occupa di ruotare il vettore vorticit nella direzione
principale del moto. Lostacolo rappresentato dal getto stesso impone la formazione di una
violenta onda durto (il bow shock) che causa la separazione dello strato limite a monte degli
iniettori. La stessa separazione in una zona cos estesa della camera fonte di dubbi; globalmente
si ha un effetto benefico o no? Linterpretazione non semplice: da un lato questa sottile regione
subsonica permette allidrogeno di risalire la corrente e il tilting dei vortici contribuisce a
distribuirlo a parete aumentando la superficie di interazione combustibile-ossidante (lidrogeno
92
scalda pi velocemente); dallaltro, nel punto di separazione ha origine una nuova onda di
compressione che interagisce inevitabilmente con lo strato limite della parete opposta della
camera, quindi altra separazione che rappresenta un ulteriore ostacolo al deflusso daria, senza
contare il nuovo sistema di urti a cui d vita.
In vista dellottimizzazione dellintero motore, stabilire quale sia la configurazione ottimale, cio
un buon compromesso tra mescolamento e perdite di carico, un impresa ardua ma non
impossibile. Si capisce allora limportanza di avere uno strumento di simulazione cos potente con
il quale possibile implementare nuove modifiche senza ricorrere a sperimentazioni al buio.
Per esempio si potrebbe provare a verificare eventuali miglioramenti sul mescolamento iniettando,
a parit di condizioni e di area degli orifizi, idrogeno attraverso delle fessure anzich dei fori
circolari; questo con lintento di esporre una maggiore superficie del getto allazione dei vortici
spanwise o streamwise. Con la configurazione di tipo (a) in fig.4.29 si punterebbe pi sulla
vorticit spanwise del termine baroclinico orientata lungo x, lasciando al vortex stretching
lincarico di ruotare il vettore nella direzione streamwise; si inoltre fiduciosi del fatto che
iniettori di questo tipo possano presentare a valle una zona di ricircolo pi estesa (vorticit lungo
y) e analogamente a quanto visto in fig.4.21 queste strutture possano essere successivamente
orientate in direzione z dal vortex stretching. La disposizione degli iniettori nella direzione
parallela al flusso, riportata in fig.4.29(b), quella che offre invece una minore sezione frontale
ostacolando meno il deflusso dellaria in camera di combustione. Inoltre, vero che lidrogeno
entra in camera in fase gassosa, ma la rigidezza del flusso (supersonico) daria circostante farebbe
pensare a un comportamento del getto molto pi simile a un liquido che a un gas; liniezione
attraverso delle fessure renderebbe instabile la superficie dei getti pi rapidamente che con quelli
derivanti da orifizi di forma circolare (pi compatti).
93
Di contro si potrebbero avere maggiori perdite di carico alliniettore poich, a parit di sezione
dingresso, liniettore circolare quello che offre una minore superficie laterale, quindi inferiori
perdite di attrito.
Unaltra idea potrebbe essere quella di sfruttare nella direzione principale del flusso parte
dellelevata quantit di moto con la quale si inietta idrogeno giocando sullangolo di iniezione.
noto infatti che al crescere del M di volo cresce anche il contributo dei getti di combustibile alla
spinta. Sarebbe poi interessante confrontare gli andamenti del Mach e della frazione massica di
idrogeno, con quelli riportati in fig.3.14 e 3.19.
Riducendo langolo si potrebbe pensare di aumentare la velocit di iniezione pur mantenendo lo
stesso ingombro frontale del getto (stessa penetrazione del caso in cross flow). Con una
configurazione di questo tipo, venendo meno la separazione dello strato limite, si riduce
sensibilmente la possibilit di trovare vortici spanwise a monte degli iniettori, ma tale mancanza
potrebbe venir bilanciata dallaumento della vorticit streamwise ai lati (maggiore pressione di
iniezione).
Si spera, in un prossimo futuro, di poter avere un riscontro pratico su quelle che per il momento
rimangono semplici congetture. Si tenga presente per che lobiettivo finale non solo quello di
migliorare il mescolamento ma di riuscire a farlo con il minor aumento di entropia possibile
(minori perdite di energia). Dalla simulazione emerge una variazione di entropia tra ingresso e
uscita della camera di combustione di circa 37 J/molK. Lentropia della miscela stata calcolata
come somma pesata delle entropie dei singoli costituenti moltiplicate per le rispettive frazioni
molari:
(4.25)
con:
, = 0 +
(4.26)
dove rappresenta la frazione molare della i-esima specie, la costante universale dei gas e
indica la pressione parziale definita come prodotto della pressione della miscela per la frazione
molare . Per le grandezze e , , rispettivamente entropia standard (P0 = 1 atm) e calore
specifico a pressione costante, si sono usati i valori riportati nelle tavole termochimiche
JANAF[34]. Un risultato analogo di dS stato presentato da Paul A. Czysz nel suo lavoro
94
95
PPENDICE
I TERMINI VISCOSI
(. 1)
Il laplaciano ( 2 ) di una quantit vettoriale un vettore le cui componenti sono i laplaciani delle
singole componenti del vettore:
2 2 2
+
+
2
2
2
2 2 2
+
+
2
2
2
2
2
2
+
+
2
2
2
(. 2)
2 2 2
+
+
2
2
2
2 2 2
+
+
2
2
2
2 2 2
+
+
2
2
2
(. 3)
2 =
quindi:
1
2
(. 4)
(. 5)
1
2
1
2
1
+
2
1
+
2
1
2
1
2
(. 6)
si ottiene:
2
+ 2
3
2
+ 2
3
+ 2
3
(. 7)
(. 8)
dove:
2
2 2
2
2
+
+
+
+
2
+
3
2
2
2 2 2
2
+
+
+
+
+
+
+
+
2
2
2
2
2
2
2
=
+
+
+
+2
+
2
3
2
2 2 2
2
+
+
+
+
+
+
+
+
2
2
97
(. 9)
2 2
2
2
2
+
+
+ 2 +2 2 +
3
2 2 2 2
+
+
+
+
+
+
+
+
2
2
1
2
1
2
1
2
(. 10)
1
2 +
(. 11)
2
2 2 2
+
+
=
+
+
2
2 2
2
+
+
+
+
2
2 2 2 2
2
2 2 +
+
+
+
2
2
2
2
2 2
2
2 + =
=
+2
+
+
+
2
2
2
2 2
2 2 2
+
+2 2 +
+
2
2
(. 12)
(. 13)
98
(. 14)
1
+
(. 15)
1
1
+
+
1
1
=
+
+
1
1
+
+
1
1
+
+
+
+
2
1
1
=
+
+
+
+
=
2
1
1
+
+
+
+
2
(. 16)
con:
2 2 1 2
=
+
+
2 2
1 2
1
+
+
+
2
1
+
+
2
2
2
+
2
2
2
1
1
=
+
+
+
+
2
2
2
2
2
1
1
+
+
+
+
2
2
2 2
99
2 2
+
2
2 2
+
(. 17)
2 2
1 2
1 2 2
=
+
+
+
+
+
2 2
2 2
1 2
1 2
2
+
+
+
+
2
2
2
2 2
1
1 2 2
=
+
+
+
+
+
2
2
1 2
1 2 2
+
+
+
+
2 2
2 2
1 2
1 2 2
1 2
=
+
+
+
+
+
2 2
2 2
2
2
2
2
2
1
+
+
+
+
2
1 2
1 2
2
1 2
=
+
+
+
+
+
2
2
2 2
2
2
2
2
1
+
+
+
+
2
2
100
(. 18)
Appendice B I codici
PPENDICE
I CODICI
B.1 Post_plt_evo.f
PROGRAM Post_New_Heart
use Equ_Turbolenza
IMPLICIT NONE
include "tecio.for"
CHARACTER*100 filename , dummy_s
Character*100 Directory, Directory_out
Character*1000 st_app
CHARACTER*100 Prefix
CHARACTER(80) MYLIST
CHARACTER VAR_Yi*298,VAR_CK*298, Tec_string*300
INTEGER err_alloc,N_iniziale,N_file,min_I,max_I,min_J,max_J,min_K,max_K
INTEGER i, j, k, s, SUP, M_NsMAX, tipo_file_in, tipo_file_out, Lim_IBM
INTEGER maxZONE, Ghost, f, Campioni
Character*4 ext_in, ext_out
CHARACTER* 20 form_in, form_out
PARAMETER (maxZONE=2, M_NsMAX=20)
PARAMETER (Ghost=2)
CHARACTER*5 YiNAME(1:M_NsMAX)
CHARACTER*256 title, pre_file_name
CHARACTER*256 :: comment(10)
CHARACTER*20 machine
INTEGER zones(maxZONE+1), num_zones, n
INTEGER MAXi(0:maxZONE), MAXj(0:maxZONE),MAXk(0:maxZONE)
INTEGER MINi(0:maxZONE), MINj(0:maxZONE),MINk(0:maxZONE)
INTEGER I_GLOBAL(0:maxZONE), J_GLOBAL(0:maxZONE), K_GLOBAL(0:maxZONE)
INTEGER inZONE, inZONEax, IMAX, JMAX, KMAX, B, NsMAX, quanti_in_piu
LOGICAL cart, slice
character*1 NULLCHR
Integer*4
Debug,III,II
Integer*4 VIsDouble
DOUBLE PRECISION COSa,SINa
COMMON /MAXINDEX/ MAXi, MAXj, MAXk, MINi, MINj, MINk,
SUP, I_GLOBAL,J_GLOBAL,K_GLOBAL,
NsMAX,inZONE,inZONEax
COMMON /CHARx/ title, comment, YiNAME, machine, pre_file_name
COMMON/CONF/cart, slice
TYPE tipo1
SEQUENCE
101
Appendice B I codici
102
Appendice B I codici
Stop
end if
PII = 2. * DASIN(1.0d0)
!3.14159265359
NULLCHR = CHAR(0)
Debug
= 1
VIsDouble = 1
Directory =""
filename = Directory(1:len_trim(Directory))//Prefix(1:len_trim(Prefix))
//".rst"
Call read_rst ( filename )
Do_All_ini: do B=0, InZONE
if (answer=='y') then
write(*,'(A8,I1)') ' ZONA = ', B
Print *, ' Specificare minimi e massimi locali per i j k con'
write(*,'(3(1X,A6, I4,3X,I4,A2,5X))') ' i = [',MINi(B),MAXi(B),' ]',
.
' j = [',MINj(B),MAXj(B),' ]',
.
' k = [',MINk(B),MAXk(B),' ]'
read(*,*) MINiloc(B), MAXiloc(B), MINjloc(B), MAXjloc(B), MINkloc(B),
MAXkloc(B)
if ((MINiloc(B)>=MINi(B)) .AND. (MINiloc(B)<=MAXi(B)) .AND.
.
(MAXiloc(B)>=MINi(B)) .AND. (MAXiloc(B)<=MAXi(B)) .AND.
.
(MINjloc(B)>=MINj(B)) .AND. (MINjloc(B)<=MAXj(B)) .AND.
.
(MAXjloc(B)>=MINj(B)) .AND. (MAXjloc(B)<=MAXj(B)) .AND.
.
(MINkloc(B)>=MINk(B)) .AND. (MINkloc(B)<=MAXk(B)) .AND.
.
(MAXkloc(B)>=MINk(B)) .AND. (MAXkloc(B)<=MAXk(B))) then
else
Print *,' Errore, indici locali fuori range!'
stop
end if
else if (answer=='f') then
filename = Directory(1:len_trim(Directory))//ind_loc
(1:len_trim(ind_loc))
open (10,file=filename, STATUS='OLD', ERR=1000)
do while(.TRUE.)
read(10,*,END=1001) bb, MINiloc(B), MAXiloc(B), MINjloc(B),
MAXjloc(B), MINkloc(B),MAXkloc(B)
if (bb==B) exit
end do
close(10)
else
MINiloc(B)=MINi(B)
MAXiloc(B)=MAXi(B)
MINjloc(B)=MINj(B)
MAXjloc(B)=MAXj(B)
MINkloc(B)=MINk(B)
MAXkloc(B)=MAXk(B)
end if
min_I = MINiloc(B)-1
max_I = MAXiloc(B)+1
min_J = MINjloc(B)-1
max_J = MAXjloc(B)+1
min_K = MINkloc(B)-1
max_K = MAXkloc(B)+1
ALLOCATE (S_z(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_r(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_a(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
103
Appendice B I codici
ALLOCATE (S_Yi(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K,NsMax),
STAT=err_alloc)
ALLOCATE (S_T(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_Ur(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_Uz(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_Ut(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_p(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_rho(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
ALLOCATE (S_mi_t(B)%p_zone(min_I:max_I,min_J:max_J,min_K:max_K),
STAT=err_alloc)
enddo Do_All_ini
write(VAR_Yi,'(100(x,a))') (YiNAME(s),s=1,NsMAX)
write(VAR_CK,'(100(x,a))') ('CK'//CHAR(48+s),s=1,10)
Do_zones: do B=0, InZONE
min_I = MINiloc(B)-1
max_I = MAXiloc(B)+1
min_J = MINjloc(B)-1
max_J = MAXjloc(B)+1
min_K = MINkloc(B)-1
max_K = MAXkloc(B)+1
filename=Directory(1:len_trim(Directory))//Prefix(1:len_trim(Prefix))
//".ZONE"//CHAR(B+48)
open(9,file=filename,FORM="UNFORMATTED",RECORDTYPE='STREAM',
STATUS='OLD', CONVERT='BIG_ENDIAN')
z
=> S_z(B)%p_zone
r
=> S_r(B)%p_zone
a
=> S_a(B)%p_zone
Uz
=> S_Uz(B)%p_zone
Ur
=> S_Ur(B)%p_zone
Ut
=> S_Ut(B)%p_zone
T
=> S_T(B)%p_zone
p
=> S_p(B)%p_zone
rho
=> S_rho(B)%p_zone
Yi
=> S_Yi(B)%p_zone
mi_t
=> S_mi_t(B)%p_zone
k_loop: do k= MINk(B)-1, MAXk(B)+1
j_loop: do j= MINj(B)-1, MAXj(B)+1
i_loop: do i= MINi(B)-1, MAXi(B)+1
read(9) R_z,R_r,R_a,R_Uz,R_Ur,R_Ut,R_p,R_T,R_rho,R_C1,R_C2,
(R_Yi(s),s=1,NsMAX),R_mi_t
if ((i>=min_I).AND.(i<=max_I).AND.(j>=min_J).AND.(j<=max_J)
.AND.(k>=min_K).AND.(k<=max_K)) then
z(i,j,k)
= R_z
r(i,j,k)
= R_r
a(i,j,k)
= R_a
Uz(i,j,k)
= R_Uz
Ur(i,j,k)
= R_Ur
Ut(i,j,k)
= R_Ut
T(i,j,k)
= R_T
p(i,j,k)
= R_p
rho(i,j,k)
= R_rho
Yi(i,j,k,1:NsMAX) = R_Yi(1:NsMAX)
mi_t(i,j,k)
= R_mi_t
104
Appendice B I codici
end if
end do i_loop
end do j_loop
end do k_loop
close(9)
allocate(ER(min_I:max_I,min_J:max_J,min_K:max_K))
SommaYi=0.0
k_loop_o: do k= min_K, max_K
j_loop_o: do j= min_J, max_J
i_loop_o: do i= min_I, max_I
ER(i,j,k)=Yi(i,j,k,3)*8.D0/max(Yi(i,j,k,1),0.00000001D0)
end do i_loop_o
end do j_loop_o
end do k_loop_o
Tec_string(1:200) = "a r z Ut Ur Uz " //NULLCHR
filename = Directory(1:len_trim(Directory))//"Velocita"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'//NULLCHR,
Debug,VIsDouble)
II
= TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Ut,1)
II
= TecDat(III,Ur,1)
II
= TecDat(III,Uz,1)
II = TecEnd()
Tec_string(1:200) = "a r z p T rho mi_t" //NULLCHR
filename = Directory(1:len_trim(Directory))//"Proprieta_fisiche"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'//NULLCHR,
Debug,VIsDouble)
II
= TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,p,1)
II
= TecDat(III,T,1)
II
= TecDat(III,rho,1)
II
= TecDat(III,mi_t,1)
II = TecEnd()
Tec_string(1:200) = "a r z ER" // VAR_Yi(1:len_trim(VAR_Yi)) // NULLCHR
filename = Directory(1:len_trim(Directory))//"Specie"//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'//NULLCHR,
Debug,VIsDouble)
II
= TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,ER,1)
do s = 1, NsMAX
II
= TecDat(III,Yi(:,:,:,s),1)
end do
105
Appendice B I codici
II = TecEnd()
deallocate(T,Yi,ER)
if (flag_rid==0) then
write(*,*) 'Defining new variables...'
call deriv_init(a,r,z,Ut,Ur,Uz,p,rho,mi_t,min_I,max_I,min_J,
max_J,min_K,max_K)
deallocate(p)
write(*,*) 'Starting Subroutine Equ_turbolenza(1st derivatives)...'
call deriv1_turbolenza(min_I,max_I,min_J,max_J,min_K,max_K)
allocate(Aux(min_I:max_I,min_J:max_J,min_K:max_K))
S_Aux(1)%p_aux => Omx
S_Aux(2)%p_aux => Omy
S_Aux(3)%p_aux => Omz
write(*,*) 'Computing Vorticity...'
Tec_string(1:200) = "a r z Vortx Vorty Vortz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"Vorticita"//
".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'//NULLCHR,
Debug,VIsDouble)
II
= TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
do n=1,3
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
Aux(i,j,k)=S_Aux(n)%p_aux(i,j,k)
end do
end do
end do
II
= TecDat(III,Aux,1)
end do
II = TecEnd()
write(*,*) 'Computing Helicity...'
Tec_string(1:200) = "a r z Hel" //NULLCHR
filename = Directory(1:len_trim(Directory))//"Helicity"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'//NULLCHR,
Debug,VIsDouble)
II
= TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
Aux(i,j,k)= S_Aux(1)%p_aux(i,j,k)*Ut(i,j,k) +
S_Aux(2)%p_aux(i,j,k)*Ur(i,j,k) +
S_Aux(3)%p_aux(i,j,k)*Uz(i,j,k)
end do
end do
end do
II
= TecDat(III,Aux,1)
II = TecEnd()
106
Appendice B I codici
if (flag_gd==1) then
S_Aux(1)%p_aux => dRH0_dXx
S_Aux(2)%p_aux => dRH0_dYy
S_Aux(3)%p_aux => dRH0_dZz
write(*,*) 'Computing Auxiliar Variables...'
Tec_string(1:200) = "a r z dRho_x dRho_y dRho_z"//NULLCHR
filename = Directory(1:len_trim(Directory))//"G_densita"//
".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
do n=1,3
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
Aux(i,j,k)=S_Aux(n)%p_aux(i,j,k)
end do
end do
end do
II
= TecDat(III,Aux,1)
end do
II = TecEnd()
end if
if (flag_gp==1) then
S_Aux(1)%p_aux => dPr_dXx
S_Aux(2)%p_aux => dPr_dYy
S_Aux(3)%p_aux => dPr_dZz
write(*,*) 'Computing Auxiliar Variables...'
Tec_string(1:200) = "a r z dP_x dP_y dP_z" //NULLCHR
filename = Directory(1:len_trim(Directory))//"G_pressione"//
".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II
=TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)
+2,MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III =(MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
do n=1,3
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
Aux(i,j,k)=S_Aux(n)%p_aux(i,j,k)
end do
end do
end do
II
= TecDat(III,Aux,1)
end do
II = TecEnd()
end if
deallocate(Aux)
allocate(Auxx(min_I:max_I,min_J:max_J,min_K:max_K),
107
Appendice B I codici
.
.
Auxy(min_I:max_I,min_J:max_J,min_K:max_K),
Auxz(min_I:max_I,min_J:max_J,min_K:max_K))
caso='C'
call output1(Ut,Ur,Uz,rho,mi_t,min_I,max_I,min_J,max_J,
min_K,max_K,caso)
Tec_string(1:200) = "a r z Cx Cy Cz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"C_convettivo"//
".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='B'
call output1(Ut,Ur,Uz,rho,mi_t,min_I,max_I,min_J,max_J,
min_K,max_K,caso)
deallocate(dPr_dXx,dPr_dYy,dPr_dZz)
Tec_string(1:200) = "a r z Bx By Bz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"B_baroclinico"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='VS'
call output1(Ut,Ur,Uz,rho,mi_t,min_I,max_I,min_J,max_J,
min_K,max_K,caso)
Tec_string(1:200) = "a r z VSx VSy VSz" //NULLCHR
filename =Directory(1:len_trim(Directory))//"VS_vstretching"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='CP'
108
Appendice B I codici
.
.
call output1(Ut,Ur,Uz,rho,mi_t,min_I,max_I,min_J,max_J,
min_K,max_K,caso)
deallocate(Omx,Omy,Omz)
deallocate(Div_V)
Tec_string(1:200) = "a r z CPx CPy CPz" //NULLCHR
filename=Directory(1:len_trim(Directory))//"CP_compressibile"
//".plt"//NULLCHR
II = TecIni('Post DATASET'//NULLCHR,Tec_string,filename,'.'
//NULLCHR,Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,MAXjloc(B)+2,
MAXkloc(B)-MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
deallocate(Ut,Ur,Uz,Auxx,Auxy,Auxz)
if (flag_ds==1) then
write(*,*) 'Starting Subroutine Equ_turbolenza(2nd derivatives)..'
call deriv2_turbolenza(min_I,max_I,min_J,max_J,min_K,max_K)
allocate(Auxx(min_I:max_I,min_J:max_J,min_K:max_K),
Auxy(min_I:max_I,min_J:max_J,min_K:max_K),
Auxz(min_I:max_I,min_J:max_J,min_K:max_K))
caso='D'
call output2(rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
deallocate(d2Omx_dXx, d2Omx_dYy, d2Omx_dZz, d2Omy_dXx,
d2Omy_dYy, d2Omy_dZz, d2Omz_dXx, d2Omz_dYy,
d2Omz_dZz)
Tec_string(1:200) = "a r z Dx Dy Dz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"D_diffusivo"
//".plt"//NULLCHR
II
= TecIni('Post DATASET'//NULLCHR,Tec_string,filename,
'.'//NULLCHR, Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,
MAXjloc(B)+2,MAXkloc(B)-MINkloc(B)+3,'BLOCK'
//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='CV'
call output2(rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
deallocate(dRH0_dXx, dRH0_dYy, dRH0_dZz)
deallocate(Div_V)
Tec_string(1:200) = "a r z CVx CVy CVz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"CV_compressibileviscoso" //".plt"//NULLCHR
II
= TecIni('Post DATASET'//NULLCHR,Tec_string,filename,
'.'//NULLCHR, Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,
MAXjloc(B)+2,MAXkloc(B)-MINkloc(B)+3,'BLOCK'
//NULLCHR,CHAR(0))
109
Appendice B I codici
&
&
&
&
&
&
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='VV'
call output2(rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
Tec_string(1:200) = "a r z VVx VVy VVz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"VV_viscositavelocita" //".plt"//NULLCHR
II
= TecIni('Post DATASET'//NULLCHR,Tec_string,filename,
'.'//NULLCHR, Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,
MAXjloc(B)+2,MAXkloc(B)MINkloc(B)+3,'BLOCK'//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
II
= TecDat(III,r,1)
II
= TecDat(III,z,1)
II
= TecDat(III,Auxx,1)
II
= TecDat(III,Auxy,1)
II
= TecDat(III,Auxz,1)
II = TecEnd()
caso='DV'
call output2(rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
deallocate(rho,mi_t)
! Derivate prime
deallocate(dVx_dXx, dVy_dXx, dVz_dXx, dVx_dYy, dVy_dYy, dVz_dYy,
dVx_dZz, dVy_dZz, dVz_dZz, dMi_dXx, dMi_dYy, dMi_dZz)
! Derivate seconde
deallocate(d2Vx_dXx, d2Vy_dXx, d2Vz_dXx, d2Vx_dYy, d2Vy_dYy,
d2Vz_dYy, d2Vx_dZz, d2Vy_dZz, d2Vz_dZz, d2Mi_dXx,
d2Mi_dYy, d2Mi_dZz)
! Derivate miste
deallocate(d2Vx_dXdY, d2Vx_dYdX, d2Vx_dXdZ, d2Vx_dZdX,
d2Vx_dYdZ, d2Vx_dZdY,
d2Vy_dXdY, d2Vy_dYdX, d2Vy_dXdZ, d2Vy_dZdX,
d2Vy_dYdZ, d2Vy_dZdY,
d2Vz_dXdY, d2Vz_dYdX, d2Vz_dXdZ, d2Vz_dZdX,
d2Vz_dYdZ, d2Vz_dZdY,
d2Mi_dXdY, d2Mi_dYdX, d2Mi_dXdZ, d2Mi_dZdX,
d2Mi_dYdZ, d2Mi_dZdY)
Tec_string(1:200) = "a r z DVx DVy DVz" //NULLCHR
filename = Directory(1:len_trim(Directory))//"DV_deformazioneviscosita" //".plt"//NULLCHR
II
= TecIni('Post DATASET'//NULLCHR,Tec_string,filename,
'.'//NULLCHR, Debug,VIsDouble)
II = TecZne('Zone'//CHAR(48+B)//NULLCHR,MAXiloc(B)+2,
MAXjloc(B)+2,MAXkloc(B)-MINkloc(B)+3,'BLOCK'
//NULLCHR,CHAR(0))
III = (MAXiloc(B)+2)*(MAXjloc(B)+2)*(MAXkloc(B)-MINkloc(B)+3)
II
= TecDat(III,a,1)
deallocate(a)
II
= TecDat(III,r,1)
deallocate(r)
II
= TecDat(III,z,1)
110
Appendice B I codici
deallocate(z)
II
= TecDat(III,Auxx,1)
deallocate(Auxx)
II
= TecDat(III,Auxy,1)
deallocate(Auxy)
II
= TecDat(III,Auxz,1)
deallocate(Auxz)
II = TecEnd()
end if ! Derivate seconde
end if ! Analisi ridotta
end do Do_zones
STOP
1000 write(*,*) " Il seguente file non esiste: ", ind_loc
STOP
1001 write(*,*) " Indici locali di zona non esistenti!! "
STOP
END
B.2 Mod_EqTurb_evo.f90
module Equ_Turbolenza
! Parallelepipedo Rettangolo -> a=f(x) , r=f(y) , z=f(z)
! Zona 0 -> min_I=0, min_J=0, min_K=0
! min_* = minimo indice assoluto tra i nodi in direzione *
! max_*= massimo indice assoluto tra i nodi in direzione *
implicit none
Double precision, allocatable, dimension(:) :: Xm, Ym, Zm
Double precision, allocatable, dimension(:,:,:) :: Vx, Vy, Vz, Pr, RH0, Mi
Double precision, allocatable, dimension(:,:,:), Target ::
dVx_dXx, dVy_dXx, dVz_dXx, dVx_dYy, dVy_dYy, dVz_dYy, &
dVx_dZz, dVy_dZz, dVz_dZz, dPr_dXx, dPr_dYy, dPr_dZz, &
dRH0_dXx, dRH0_dYy, dRH0_dZz, dMi_dXx, dMi_dYy, dMi_dZz, &
dOmx_dXx, dOmx_dYy, dOmx_dZz, dOmy_dXx, dOmy_dYy, dOmy_dZz, &
dOmz_dXx, dOmz_dYy, dOmz_dZz
Double precision, allocatable, dimension(:,:,:), Target ::
d2Vx_dXx, d2Vy_dXx, d2Vz_dXx, d2Vx_dYy, d2Vy_dYy, &
d2Vz_dYy, d2Vx_dZz, d2Vy_dZz, d2Vz_dZz, d2Mi_dXx, &
d2Mi_dYy, d2Mi_dZz, d2Omx_dXx, d2Omx_dYy, d2Omx_dZz, &
d2Omy_dXx, d2Omy_dYy, d2Omy_dZz, d2Omz_dXx, d2Omz_dYy, d2Omz_dZz
Double precision, allocatable, dimension(:,:,:), Target ::
d2Vx_dXdY, d2Vx_dYdX, d2Vx_dXdZ, d2Vx_dZdX, d2Vx_dYdZ, d2Vx_dZdY, &
d2Vy_dXdY, d2Vy_dYdX, d2Vy_dXdZ, d2Vy_dZdX, d2Vy_dYdZ, d2Vy_dZdY, &
d2Vz_dXdY, d2Vz_dYdX, d2Vz_dXdZ, d2Vz_dZdX, d2Vz_dYdZ, d2Vz_dZdY, &
d2Mi_dXdY, d2Mi_dYdX, d2Mi_dXdZ, d2Mi_dZdX, d2Mi_dYdZ, d2Mi_dZdY
! Termini dell'equazione della vorticit
Double precision, allocatable, dimension(:,:,:), Target ::
Omx, Omy, Omz, Div_V, Auxx, Auxy, Auxz
contains
!=============================================================================!
subroutine
deriv_init(a,r,z,Ut,Ur,Uz,p,rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K)
implicit none
integer,intent(in) :: min_I, max_I, min_J, max_J, min_K, max_K
real*8, dimension(min_I:max_I,min_J:max_J,min_K:max_K), intent(in) ::
a, r, z, Ut, Ur, Uz, p, rho, mi_t
integer :: i, j, k
! Input
allocate(Xm(min_K-3:max_K+2),Ym(min_J-3:max_J+2),Zm(min_I-3:max_I+2))
111
Appendice B I codici
allocate(Vx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(Vy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(Vz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(Pr(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(RH0(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(Mi(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
!__________RIDEFINIZIONE DELLE VARIABILI ED AGGIUNTA DEI NODI GHOST__________!
! Calcolo coordinate medie (campo+ghost)
do k=min_K+1 ,max_K
Xm(k-1) = (a(min_I,min_J,k-1) + a(min_I,min_J,k)) / 2.0d0
end do
do k=1,3
Xm(min_K-k) = a(min_I,min_J,min_K) - ( Xm(min_K+k-1) - a(min_I,min_J,min_K) )
Xm(max_K+k-1) = a(max_I,max_J,max_K) + ( a(max_I,max_J,max_K) - Xm(max_K-k) )
end do
do j=min_J+1 ,max_J
Ym(j-1) = (r(min_I,j-1,min_K) + r(min_I,j,min_K)) / 2.0d0
end do
do j=1,3
Ym(min_J-j) = r(min_I,min_J,min_K) - ( Ym(min_J+j-1) - r(min_I,min_J,min_K) )
Ym(max_J+j-1) = r(max_I,max_J,max_K) + ( r(max_I,max_J,max_K) - Ym(max_J-j) )
end do
do i=min_I+1 ,max_I
Zm(i-1) = (z(i-1,min_J,min_K) + z(i,min_J,min_K)) / 2.0d0
end do
do i=1,3
Zm(min_I-i) = z(min_I,min_J,min_K) - ( Zm(min_I+i-1) - z(min_I,min_J,min_K) )
Zm(max_I+i-1) = z(max_I,max_J,max_K) + ( z(max_I,max_J,max_K) - Zm(max_I-i) )
end do
! Assegnazione valori del campo
do k=min_K,max_K
do j=min_J,max_J
do i=min_I,max_I
Vx(i,j,k)=Ut(i,j,k)
Vy(i,j,k)=Ur(i,j,k)
Vz(i,j,k)=Uz(i,j,k)
Pr(i,j,k)=p(i,j,k)
RH0(i,j,k)=rho(i,j,k)
Mi(i,j,k)=mi_t(i,j,k)
end do
end do
end do
! Assegnazione valori ghost in direzione z
do i=1,2
do j=min_J,max_J
do k=min_K,max_K
!Ghost minimi
Vx(min_I-i,j,k) = Vx(min_I,j,k) - ( Vx(min_I+i,j,k) - Vx(min_I,j,k) )
Vy(min_I-i,j,k) = Vy(min_I,j,k) - ( Vy(min_I+i,j,k) - Vy(min_I,j,k) )
Vz(min_I-i,j,k) = Vz(min_I,j,k) - ( Vz(min_I+i,j,k) - Vz(min_I,j,k) )
Pr(min_I-i,j,k) = Pr(min_I,j,k) - ( Pr(min_I+i,j,k) - Pr(min_I,j,k) )
RH0(min_I-i,j,k) = RH0(min_I,j,k)-( RH0(min_I+i,j,k)-RH0(min_I,j,k) )
Mi(min_I-i,j,k) = Mi(min_I,j,k) - ( Mi(min_I+i,j,k) - Mi(min_I,j,k) )
!Ghost massimi
Vx(max_I+i,j,k) = Vx(max_I,j,k) + ( Vx(max_I,j,k) - Vx(max_I-i,j,k) )
Vy(max_I+i,j,k) = Vy(max_I,j,k) + ( Vy(max_I,j,k) - Vy(max_I-i,j,k) )
Vz(max_I+i,j,k) = Vz(max_I,j,k) + ( Vz(max_I,j,k) - Vz(max_I-i,j,k) )
Pr(max_I+i,j,k) = Pr(max_I,j,k) + ( Pr(max_I,j,k) - Pr(max_I-i,j,k) )
RH0(max_I+i,j,k) = RH0(max_I,j,k)+( RH0(max_I,j,k)-RH0(max_I-i,j,k) )
112
Appendice B I codici
113
Appendice B I codici
allocate(dPr_dZz(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dRH0_dZz(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dMi_dZz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do i=min_I,max_I
call weno5_init(Zm(i-3:i+2))
do j=min_J,max_J
do k=min_K,max_K
call deriv_weno5(Zm(i-3:i+2),Vx(i-2:i+2,j,k),dVx_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Vy(i-2:i+2,j,k),dVy_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Vz(i-2:i+2,j,k),dVz_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Pr(i-2:i+2,j,k),dPr_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),RH0(i-2:i+2,j,k),dRH0_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Mi(i-2:i+2,j,k),dMi_dZz(i,j,k))
end do
end do
end do
! Direzione Y
allocate(dVx_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dVy_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dVz_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dPr_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dRH0_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dMi_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do j=min_J,max_J
call weno5_init(Ym(j-3:j+2))
do i=min_I,max_I
do k=min_K,max_K
call deriv_weno5(Ym(j-3:j+2),Vx(i,j-2:j+2,k),dVx_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Vy(i,j-2:j+2,k),dVy_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Vz(i,j-2:j+2,k),dVz_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Pr(i,j-2:j+2,k),dPr_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),RH0(i,j-2:j+2,k),dRH0_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Mi(i,j-2:j+2,k),dMi_dYy(i,j,k))
end do
end do
end do
! Direzione X
allocate(dVx_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dVy_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dVz_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dPr_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dRH0_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(dMi_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(Omx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2), &
Omy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2), &
Omz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do k=min_K,max_K
call weno5_init(Xm(k-3:k+2))
do i=min_I,max_I
do j=min_J,max_J
call deriv_weno5(Xm(k-3:k+2),Vx(i,j,k-2:k+2),dVx_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Vy(i,j,k-2:k+2),dVy_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Vz(i,j,k-2:k+2),dVz_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Pr(i,j,k-2:k+2),dPr_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),RH0(i,j,k-2:k+2),dRH0_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Mi(i,j,k-2:k+2),dMi_dXx(i,j,k))
! Componenti vettore vorticit
Omx(i,j,k)=( dVz_dYy(i,j,k)-dVy_dZz(i,j,k) )
Omy(i,j,k)=( dVx_dZz(i,j,k)-dVz_dXx(i,j,k) )
114
Appendice B I codici
Omz(i,j,k)=( dVy_dXx(i,j,k)-dVx_dYy(i,j,k) )
end do
end do
end do
deallocate(Pr,RH0,Mi,Vx,Vy,Vz)
! Assegnazione valori ghost in direzione z
do i=1,2
do j=min_J,max_J
do k=min_K,max_K
!Ghost minimi
Omx(min_I-i,j,k) = Omx(min_I,j,k)-( Omx(min_I+i,j,k)-Omx(min_I,j,k)
Omy(min_I-i,j,k) = Omy(min_I,j,k)-( Omy(min_I+i,j,k)-Omy(min_I,j,k)
Omz(min_I-i,j,k) = Omz(min_I,j,k)-( Omz(min_I+i,j,k)-Omz(min_I,j,k)
!Ghost massimi
Omx(max_I+i,j,k) = Omx(max_I,j,k)+( Omx(max_I,j,k)-Omx(max_I-i,j,k)
Omy(max_I+i,j,k) = Omy(max_I,j,k)+( Omy(max_I,j,k)-Omy(max_I-i,j,k)
Omz(max_I+i,j,k) = Omz(max_I,j,k)+( Omz(max_I,j,k)-Omz(max_I-i,j,k)
end do
end do
end do
! Assegnazione valori ghost in direzione y
do j=1,2
do i=min_I,max_I
do k=min_K,max_K
!Ghost minimi
Omx(i,min_J-j,k) = Omx(i,min_J,k)-( Omx(i,min_J+j,k)-Omx(i,min_J,k)
Omy(i,min_J-j,k) = Omy(i,min_J,k)-( Omy(i,min_J+j,k)-Omy(i,min_J,k)
Omz(i,min_J-j,k) = Omz(i,min_J,k)-( Omz(i,min_J+j,k)-Omz(i,min_J,k)
!Ghost massimi
Omx(i,max_J+j,k) = Omx(i,max_J,k)+( Omx(i,max_J,k)-Omx(i,max_J-j,k)
Omy(i,max_J+j,k) = Omy(i,max_J,k)+( Omy(i,max_J,k)-Omy(i,max_J-j,k)
Omz(i,max_J+j,k) = Omz(i,max_J,k)+( Omz(i,max_J,k)-Omz(i,max_J-j,k)
end do
end do
end do
! Assegnazione valori ghost in direzione x
do k=1,2
do i=min_I,max_I
do j=min_J,max_J
!Ghost minimi
Omx(i,j,min_K-k) = Omx(i,j,min_K)-( Omx(i,j,min_K+k)-Omx(i,j,min_K)
Omy(i,j,min_K-k) = Omy(i,j,min_K)-( Omy(i,j,min_K+k)-Omy(i,j,min_K)
Omz(i,j,min_K-k) = Omz(i,j,min_K)-( Omz(i,j,min_K+k)-Omz(i,j,min_K)
!Ghost massimi
Omx(i,j,max_K+k) = Omx(i,j,max_K)+( Omx(i,j,max_K)-Omx(i,j,max_K-k)
Omy(i,j,max_K+k) = Omy(i,j,max_K)+( Omy(i,j,max_K)-Omy(i,j,max_K-k)
Omz(i,j,max_K+k) = Omz(i,j,max_K)+( Omz(i,j,max_K)-Omz(i,j,max_K-k)
end do
end do
end do
!_______________________DERIVATE PRIME DI OMEGA_________________________!
write(*,*) '...'
! Direzione Z
allocate(dOmx_dZz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmy_dZz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmz_dZz(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do i=min_I,max_I
call weno5_init(Zm(i-3:i+2))
do j=min_J,max_J
115
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
Appendice B I codici
do k=min_K,max_K
call deriv_weno5(Zm(i-3:i+2),Omx(i-2:i+2,j,k),dOmx_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Omy(i-2:i+2,j,k),dOmy_dZz(i,j,k))
call deriv_weno5(Zm(i-3:i+2),Omz(i-2:i+2,j,k),dOmz_dZz(i,j,k))
end do
end do
end do
! Direzione Y
allocate(dOmx_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmy_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmz_dYy(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do j=min_J,max_J
call weno5_init(Ym(j-3:j+2))
do i=min_I,max_I
do k=min_K,max_K
call deriv_weno5(Ym(j-3:j+2),Omx(i,j-2:j+2,k),dOmx_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Omy(i,j-2:j+2,k),dOmy_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),Omz(i,j-2:j+2,k),dOmz_dYy(i,j,k))
end do
end do
end do
! Direzione X
allocate(dOmx_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmy_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
allocate(dOmz_dXx(min_I-2:max_I+2,min_J-2:max_J+2,min_K-2:max_K+2))
do k=min_K,max_K
call weno5_init(Xm(k-3:k+2))
do i=min_I,max_I
do j=min_J,max_J
call deriv_weno5(Xm(k-3:k+2),Omx(i,j,k-2:k+2),dOmx_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Omy(i,j,k-2:k+2),dOmy_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),Omz(i,j,k-2:k+2),dOmz_dXx(i,j,k))
end do
end do
end do
end subroutine deriv1_turbolenza
!=============================================================================!
subroutine deriv2_turbolenza(min_I,max_I,min_J,max_J,min_K,max_K)
use Weno5
implicit none
integer,intent(in) :: min_I, max_I, min_J, max_J, min_K, max_K
integer :: i, j, k
!_____________________DERIVATE SECONDE DI V, Mi, OMEGA ______________________!
! Nodi ghost per le derivate di omega in direzione del flusso (z)
write(*,*) 'Adding ghost nodes...'
do i=1,2
do j=min_J,max_J
do k=min_K,max_K
!Ghost minimi
dVx_dXx(min_I-i,j,k) = dVx_dXx(min_I,j,k) - ( dVx_dXx(min_I+i,j,k) dVx_dXx(min_I,j,k) )
dVx_dYy(min_I-i,j,k) = dVx_dYy(min_I,j,k) - ( dVx_dYy(min_I+i,j,k) dVx_dYy(min_I,j,k) )
dVx_dZz(min_I-i,j,k) = dVx_dZz(min_I,j,k) - ( dVx_dZz(min_I+i,j,k) dVx_dZz(min_I,j,k) )
dVy_dXx(min_I-i,j,k) = dVy_dXx(min_I,j,k) - ( dVy_dXx(min_I+i,j,k) dVy_dXx(min_I,j,k) )
dVy_dYy(min_I-i,j,k) = dVy_dYy(min_I,j,k) - ( dVy_dYy(min_I+i,j,k) dVy_dYy(min_I,j,k) )
116
Appendice B I codici
dVy_dZz(min_I-i,j,k) = dVy_dZz(min_I,j,k) - (
dVy_dZz(min_I,j,k) )
dVz_dXx(min_I-i,j,k) = dVz_dXx(min_I,j,k) - (
dVz_dXx(min_I,j,k) )
dVz_dYy(min_I-i,j,k) = dVz_dYy(min_I,j,k) - (
dVz_dYy(min_I,j,k) )
dVz_dZz(min_I-i,j,k) = dVz_dZz(min_I,j,k) - (
dVz_dZz(min_I,j,k) )
dMi_dXx(min_I-i,j,k) = dMi_dXx(min_I,j,k) - (
dMi_dXx(min_I,j,k) )
dMi_dYy(min_I-i,j,k) = dMi_dYy(min_I,j,k) - (
dMi_dYy(min_I,j,k) )
dMi_dZz(min_I-i,j,k) = dMi_dZz(min_I,j,k) - (
dMi_dZz(min_I,j,k) )
dOmx_dXx(min_I-i,j,k) = dOmx_dXx(min_I,j,k) dOmx_dXx(min_I,j,k) )
dOmy_dXx(min_I-i,j,k) = dOmy_dXx(min_I,j,k) dOmy_dXx(min_I,j,k) )
dOmz_dXx(min_I-i,j,k) = dOmz_dXx(min_I,j,k) dOmz_dXx(min_I,j,k) )
dOmx_dYy(min_I-i,j,k) = dOmx_dYy(min_I,j,k) dOmx_dYy(min_I,j,k) )
dOmy_dYy(min_I-i,j,k) = dOmy_dYy(min_I,j,k) dOmy_dYy(min_I,j,k) )
dOmz_dYy(min_I-i,j,k) = dOmz_dYy(min_I,j,k) dOmz_dYy(min_I,j,k) )
dOmx_dZz(min_I-i,j,k) = dOmx_dZz(min_I,j,k) dOmx_dZz(min_I,j,k) )
dOmy_dZz(min_I-i,j,k) = dOmy_dZz(min_I,j,k) dOmy_dZz(min_I,j,k) )
dOmz_dZz(min_I-i,j,k) = dOmz_dZz(min_I,j,k) dOmz_dZz(min_I,j,k) )
!Ghost massimi
dVx_dXx(max_I+i,j,k) = dVx_dXx(max_I,j,k) + (
dVx_dXx(max_I-i,j,k) )
dVx_dYy(max_I+i,j,k) = dVx_dYy(max_I,j,k) + (
dVx_dYy(max_I-i,j,k) )
dVx_dZz(max_I+i,j,k) = dVx_dZz(max_I,j,k) + (
dVx_dZz(max_I-i,j,k) )
dVy_dXx(max_I+i,j,k) = dVy_dXx(max_I,j,k) + (
dVy_dXx(max_I-i,j,k) )
dVy_dYy(max_I+i,j,k) = dVy_dYy(max_I,j,k) + (
dVy_dYy(max_I-i,j,k) )
dVy_dZz(max_I+i,j,k) = dVy_dZz(max_I,j,k) + (
dVy_dZz(max_I-i,j,k) )
dVz_dXx(max_I+i,j,k) = dVz_dXx(max_I,j,k) + (
dVz_dXx(max_I-i,j,k) )
dVz_dYy(max_I+i,j,k) = dVz_dYy(max_I,j,k) + (
dVz_dYy(max_I-i,j,k) )
dVz_dZz(max_I+i,j,k) = dVz_dZz(max_I,j,k) + (
dVz_dZz(max_I-i,j,k) )
dMi_dXx(max_I+i,j,k) = dMi_dXx(max_I,j,k) + (
dMi_dXx(max_I-i,j,k) )
dMi_dYy(max_I+i,j,k) = dMi_dYy(max_I,j,k) + (
dMi_dYy(max_I-i,j,k) )
dMi_dZz(max_I+i,j,k) = dMi_dZz(max_I,j,k) + (
dMi_dZz(max_I-i,j,k) )
dOmx_dXx(max_I+i,j,k) = dOmx_dXx(max_I,j,k) +
dOmx_dXx(max_I-i,j,k)
117
dVy_dZz(min_I+i,j,k) dVz_dXx(min_I+i,j,k) dVz_dYy(min_I+i,j,k) dVz_dZz(min_I+i,j,k) dMi_dXx(min_I+i,j,k) dMi_dYy(min_I+i,j,k) dMi_dZz(min_I+i,j,k) ( dOmx_dXx(min_I+i,j,k) ( dOmy_dXx(min_I+i,j,k) ( dOmz_dXx(min_I+i,j,k) ( dOmx_dYy(min_I+i,j,k) ( dOmy_dYy(min_I+i,j,k) ( dOmz_dYy(min_I+i,j,k) ( dOmx_dZz(min_I+i,j,k) ( dOmy_dZz(min_I+i,j,k) ( dOmz_dZz(min_I+i,j,k) dVx_dXx(max_I,j,k) dVx_dYy(max_I,j,k) dVx_dZz(max_I,j,k) dVy_dXx(max_I,j,k) dVy_dYy(max_I,j,k) dVy_dZz(max_I,j,k) dVz_dXx(max_I,j,k) dVz_dYy(max_I,j,k) dVz_dZz(max_I,j,k) dMi_dXx(max_I,j,k) dMi_dYy(max_I,j,k) dMi_dZz(max_I,j,k) ( dOmx_dXx(max_I,j,k) )
Appendice B I codici
dOmy_dXx(max_I+i,j,k) = dOmy_dXx(max_I,j,k) +
dOmy_dXx(max_I-i,j,k)
dOmz_dXx(max_I+i,j,k) = dOmz_dXx(max_I,j,k) +
dOmz_dXx(max_I-i,j,k)
dOmx_dYy(max_I+i,j,k) = dOmx_dYy(max_I,j,k) +
dOmx_dYy(max_I-i,j,k)
dOmy_dYy(max_I+i,j,k) = dOmy_dYy(max_I,j,k) +
dOmy_dYy(max_I-i,j,k)
dOmz_dYy(max_I+i,j,k) = dOmz_dYy(max_I,j,k) +
dOmz_dYy(max_I-i,j,k)
dOmx_dZz(max_I+i,j,k) = dOmx_dZz(max_I,j,k) +
dOmx_dZz(max_I-i,j,k)
dOmy_dZz(max_I+i,j,k) = dOmy_dZz(max_I,j,k) +
dOmy_dZz(max_I-i,j,k)
dOmz_dZz(max_I+i,j,k) = dOmz_dZz(max_I,j,k) +
dOmz_dZz(max_I-i,j,k)
end do
end do
end do
! Assegnazione valori ghost in direzione y
do j=1,2
do i=min_I,max_I
do k=min_K,max_K
!Ghost minimi
dVx_dXx(i,min_J-j,k) = dVx_dXx(i,min_J,k) - (
dVx_dXx(i,min_J,k) )
dVx_dYy(i,min_J-j,k) = dVx_dYy(i,min_J,k) - (
dVx_dYy(i,min_J,k) )
dVx_dZz(i,min_J-j,k) = dVx_dZz(i,min_J,k) - (
dVx_dZz(i,min_J,k) )
dVy_dXx(i,min_J-j,k) = dVy_dXx(i,min_J,k) - (
dVy_dXx(i,min_J,k) )
dVy_dYy(i,min_J-j,k) = dVy_dYy(i,min_J,k) - (
dVy_dYy(i,min_J,k) )
dVy_dZz(i,min_J-j,k) = dVy_dZz(i,min_J,k) - (
dVy_dZz(i,min_J,k) )
dVz_dXx(i,min_J-j,k) = dVz_dXx(i,min_J,k) - (
dVz_dXx(i,min_J,k) )
dVz_dYy(i,min_J-j,k) = dVz_dYy(i,min_J,k) - (
dVz_dYy(i,min_J,k) )
dVz_dZz(i,min_J-j,k) = dVz_dZz(i,min_J,k) - (
dVz_dZz(i,min_J,k) )
dMi_dXx(i,min_J-j,k) = dMi_dXx(i,min_J,k) - (
dMi_dXx(i,min_J,k) )
dMi_dYy(i,min_J-j,k) = dMi_dYy(i,min_J,k) - (
dMi_dYy(i,min_J,k) )
dMi_dZz(i,min_J-j,k) = dMi_dZz(i,min_J,k) - (
dMi_dZz(i,min_J,k) )
dOmx_dXx(i,min_J-j,k) = dOmx_dXx(i,min_J,k) dOmx_dXx(i,min_J,k) )
dOmy_dXx(i,min_J-j,k) = dOmy_dXx(i,min_J,k) dOmy_dXx(i,min_J,k) )
dOmz_dXx(i,min_J-j,k) = dOmz_dXx(i,min_J,k) dOmz_dXx(i,min_J,k) )
dOmx_dYy(i,min_J-j,k) = dOmx_dYy(i,min_J,k) dOmx_dYy(i,min_J,k) )
dOmy_dYy(i,min_J-j,k) = dOmy_dYy(i,min_J,k) dOmy_dYy(i,min_J,k) )
118
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
dVx_dXx(i,min_J+j,k) dVx_dYy(i,min_J+j,k) dVx_dZz(i,min_J+j,k) dVy_dXx(i,min_J+j,k) dVy_dYy(i,min_J+j,k) dVy_dZz(i,min_J+j,k) dVz_dXx(i,min_J+j,k) dVz_dYy(i,min_J+j,k) dVz_dZz(i,min_J+j,k) dMi_dXx(i,min_J+j,k) dMi_dYy(i,min_J+j,k) dMi_dZz(i,min_J+j,k) ( dOmx_dXx(i,min_J+j,k) ( dOmy_dXx(i,min_J+j,k) ( dOmz_dXx(i,min_J+j,k) ( dOmx_dYy(i,min_J+j,k) ( dOmy_dYy(i,min_J+j,k) -
Appendice B I codici
119
( dOmz_dYy(i,min_J+j,k) ( dOmx_dZz(i,min_J+j,k) ( dOmy_dZz(i,min_J+j,k) ( dOmz_dZz(i,min_J+j,k) dVx_dXx(i,max_J,k) dVx_dYy(i,max_J,k) dVx_dZz(i,max_J,k) dVy_dXx(i,max_J,k) dVy_dYy(i,max_J,k) dVy_dZz(i,max_J,k) dVz_dXx(i,max_J,k) dVz_dYy(i,max_J,k) dVz_dZz(i,max_J,k) dMi_dXx(i,max_J,k) dMi_dYy(i,max_J,k) dMi_dZz(i,max_J,k) (
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
Appendice B I codici
120
( dVx_dXx(i,j,min_K+k) ( dVx_dYy(i,j,min_K+k) ( dVx_dZz(i,j,min_K+k) ( dVy_dXx(i,j,min_K+k) ( dVy_dYy(i,j,min_K+k) ( dVy_dZz(i,j,min_K+k) ( dVz_dXx(i,j,min_K+k) ( dVz_dYy(i,j,min_K+k) ( dVz_dZz(i,j,min_K+k) ( dMi_dXx(i,j,min_K+k) ( dMi_dYy(i,j,min_K+k) ( dMi_dZz(i,j,min_K+k) )
)
)
)
)
)
)
)
)
( dOmx_dXx(i,j,min_K+k) -
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
dVx_dXx(i,j,max_K) -
Appendice B I codici
121
Appendice B I codici
call deriv_weno5(Zm(i-3:i+2),dVy_dXx(i-2:i+2,j,k),d2Vy_dXdZ(i,j,k))
call deriv_weno5(Zm(i-3:i+2),dVy_dYy(i-2:i+2,j,k),d2Vy_dYdZ(i,j,k))
call deriv_weno5(Zm(i-3:i+2),dVz_dXx(i-2:i+2,j,k),d2Vz_dXdZ(i,j,k))
call deriv_weno5(Zm(i-3:i+2),dVz_dYy(i-2:i+2,j,k),d2Vz_dYdZ(i,j,k))
call deriv_weno5(Zm(i-3:i+2),dMi_dXx(i-2:i+2,j,k),d2Mi_dXdZ(i,j,k))
call deriv_weno5(Zm(i-3:i+2),dMi_dYy(i-2:i+2,j,k),d2Mi_dYdZ(i,j,k))
end do
end do
end do
deallocate(dOmx_dZz, dOmy_dZz, dOmz_dZz)
write(*,*) '...'
! Direzione Y
allocate(d2Vx_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omx_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omy_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omz_dYy(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vx_dXdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vx_dZdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dXdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dZdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dXdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dZdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dXdY(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dZdY(min_I:max_I,min_J:max_J,min_K:max_K))
do j=min_J,max_J
call weno5_init(Ym(j-3:j+2))
do i=min_I,max_I
do k=min_K,max_K
call deriv_weno5(Ym(j-3:j+2),dVx_dYy(i,j-2:j+2,k),d2Vx_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVy_dYy(i,j-2:j+2,k),d2Vy_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVz_dYy(i,j-2:j+2,k),d2Vz_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dMi_dYy(i,j-2:j+2,k),d2Mi_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dOmx_dYy(i,j-2:j+2,k),d2Omx_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dOmy_dYy(i,j-2:j+2,k),d2Omy_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dOmz_dYy(i,j-2:j+2,k),d2Omz_dYy(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVx_dXx(i,j-2:j+2,k),d2Vx_dXdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVx_dZz(i,j-2:j+2,k),d2Vx_dZdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVy_dXx(i,j-2:j+2,k),d2Vy_dXdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVy_dZz(i,j-2:j+2,k),d2Vy_dZdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVz_dXx(i,j-2:j+2,k),d2Vz_dXdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dVz_dZz(i,j-2:j+2,k),d2Vz_dZdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dMi_dXx(i,j-2:j+2,k),d2Mi_dXdY(i,j,k))
call deriv_weno5(Ym(j-3:j+2),dMi_dZz(i,j-2:j+2,k),d2Mi_dZdY(i,j,k))
end do
end do
end do
deallocate(dOmx_dYy, dOmy_dYy, dOmz_dYy)
write(*,*) '...'
! Direzione X
allocate(d2Vx_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omx_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omy_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Omz_dXx(min_I:max_I,min_J:max_J,min_K:max_K))
122
Appendice B I codici
allocate(d2Vx_dYdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vx_dZdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dYdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vy_dZdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dYdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Vz_dZdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dYdX(min_I:max_I,min_J:max_J,min_K:max_K))
allocate(d2Mi_dZdX(min_I:max_I,min_J:max_J,min_K:max_K))
do k=min_K,max_K
call weno5_init(Xm(k-3:k+2))
do i=min_I,max_I
do j=min_J,max_J
call deriv_weno5(Xm(k-3:k+2),dVx_dXx(i,j,k-2:k+2),d2Vx_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVy_dXx(i,j,k-2:k+2),d2Vy_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVz_dXx(i,j,k-2:k+2),d2Vz_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dMi_dXx(i,j,k-2:k+2),d2Mi_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dOmx_dXx(i,j,k-2:k+2),d2Omx_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dOmy_dXx(i,j,k-2:k+2),d2Omy_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dOmz_dXx(i,j,k-2:k+2),d2Omz_dXx(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVx_dYy(i,j,k-2:k+2),d2Vx_dYdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVx_dZz(i,j,k-2:k+2),d2Vx_dZdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVy_dYy(i,j,k-2:k+2),d2Vy_dYdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVy_dZz(i,j,k-2:k+2),d2Vy_dZdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVz_dYy(i,j,k-2:k+2),d2Vz_dYdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dVz_dZz(i,j,k-2:k+2),d2Vz_dZdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dMi_dYy(i,j,k-2:k+2),d2Mi_dYdX(i,j,k))
call deriv_weno5(Xm(k-3:k+2),dMi_dZz(i,j,k-2:k+2),d2Mi_dZdX(i,j,k))
end do
end do
end do
deallocate(dOmx_dXx, dOmy_dXx, dOmz_dXx)
end subroutine deriv2_turbolenza
!=============================================================================!
subroutine output1(Ut,Ur,Uz,rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
implicit none
integer,intent(in) :: min_I, max_I, min_J, max_J, min_K, max_K
real*8,dimension(min_I:max_I,min_J:max_J,min_K:max_K),intent(in) :: Ut,Ur,Uz,
rho, mi_t
character*2,intent(in) :: caso
real*8 ia, ib, ic, id, ie, ig
integer :: i, j, k
select case (caso)
case('C')
write(*,*)'Computing "C"...'
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
!_______________________ "C" convettivo _________________________!
Auxx(i,j,k)=Ut(i,j,k)*dOmx_dXx(i,j,k) + Ur(i,j,k)*dOmx_dYy(i,j,k)
+ Uz(i,j,k)*dOmx_dZz(i,j,k)
Auxy(i,j,k)=Ut(i,j,k)*dOmy_dXx(i,j,k) + Ur(i,j,k)*dOmy_dYy(i,j,k)
+ Uz(i,j,k)*dOmy_dZz(i,j,k)
Auxz(i,j,k)=Ut(i,j,k)*dOmz_dXx(i,j,k) + Ur(i,j,k)*dOmz_dYy(i,j,k)
+ Uz(i,j,k)*dOmz_dZz(i,j,k)
!________________________________________________________________!
end do
end do
end do
case('B')
123
Appendice B I codici
write(*,*)'Computing "B"...'
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
!_______________________ "B" baroclinico ________________________!
Auxx(i,j,k)=(1.D0/(rho(i,j,k)**2.D0))*((dRH0_dYy(i,j,k)*
dPr_dZz(i,j,k))-(dRH0_dZz(i,j,k)*dPr_dYy(i,j,k)))
Auxy(i,j,k)=(1.D0/(rho(i,j,k)**2.D0))*((dRH0_dZz(i,j,k)*
dPr_dXx(i,j,k))-(dRH0_dXx(i,j,k)*dPr_dZz(i,j,k)))
Auxz(i,j,k)=(1.D0/(rho(i,j,k)**2.D0))*((dRH0_dXx(i,j,k)*
dPr_dYy(i,j,k))-(dRH0_dYy(i,j,k)*dPr_dXx(i,j,k)))
!________________________________________________________________!
end do
end do
end do
case('VS')
write(*,*)'Computing "VS"...'
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
!_____________________ "VS" vortex stretching ____________________!
Auxx(i,j,k)=(Omx(i,j,k)*dVx_dXx(i,j,k))+(Omy(i,j,k)*
dVx_dYy(i,j,k))+(Omz(i,j,k)*dVx_dZz(i,j,k))
Auxy(i,j,k)=(Omx(i,j,k)*dVy_dXx(i,j,k))+(Omy(i,j,k)*
dVy_dYy(i,j,k))+(Omz(i,j,k)*dVy_dZz(i,j,k))
Auxz(i,j,k)=(Omx(i,j,k)*dVz_dXx(i,j,k))+(Omy(i,j,k)*
dVz_dYy(i,j,k))+(Omz(i,j,k)*dVz_dZz(i,j,k))
!________________________________________________________________!
end do
end do
end do
case('CP')
write(*,*)'Computing "CP"...'
allocate(Div_V(min_I:max_I,min_J:max_J,min_K:max_K))
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
! Div(V)
Div_V(i,j,k)=( dVx_dXx(i,j,k)+dVy_dYy(i,j,k)+dVz_dZz(i,j,k) )
!_______"CP" compressibile ______!
Auxx(i,j,k)=Omx(i,j,k)*Div_V(i,j,k)
Auxy(i,j,k)=Omy(i,j,k)*Div_V(i,j,k)
Auxz(i,j,k)=Omz(i,j,k)*Div_V(i,j,k)
!________________________________!
end do
end do
end do
end select
end subroutine output1
!=============================================================================!
subroutine output2(rho,mi_t,min_I,max_I,min_J,max_J,min_K,max_K,caso)
implicit none
integer,intent(in) :: min_I, max_I, min_J, max_J, min_K, max_K
real*8,dimension(min_I:max_I,min_J:max_J,min_K:max_K),intent(in) :: rho, mi_t
character*2,intent(in) :: caso
real*8 ia, ib, ic, id, ie, ig
integer :: i, j, k
select case (caso)
case('D')
124
Appendice B I codici
write(*,*)'Computing "D"...'
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
!________________________ "D" diffusivo _________________________!
Auxx(i,j,k)=(mi_t(i,j,k)/rho(i,j,k))*( d2Omx_dXx(i,j,k) +
d2Omx_dYy(i,j,k) + d2Omx_dZz(i,j,k) )
Auxy(i,j,k)=(mi_t(i,j,k)/rho(i,j,k))*( d2Omy_dXx(i,j,k) +
d2Omy_dYy(i,j,k) + d2Omy_dZz(i,j,k) )
Auxz(i,j,k)=(mi_t(i,j,k)/rho(i,j,k))*( d2Omz_dXx(i,j,k) +
d2Omz_dYy(i,j,k) + d2Omz_dZz(i,j,k) )
!________________________________________________________________!
end do
end do
end do
case('CV')
write(*,*)'Computing "CV"...'
allocate(Div_V(min_I:max_I,min_J:max_J,min_K:max_K))
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
! Div(V)
Div_V(i,j,k)=( dVx_dXx(i,j,k)+dVy_dYy(i,j,k)+dVz_dZz(i,j,k) )
!__________________ "CV" compressibile-viscoso __________________!
! Componenti temporanee del vettore div(sigma)
ia=-(2.D0/3.D0)*(dMi_dXx(i,j,k)*Div_V(i,j,k)+mi_t(i,j,k)*
(d2Vx_dXx(i,j,k)+d2Vy_dYdX(i,j,k)+d2Vz_dZdX(i,j,k)))+2.D0*
(mi_t(i,j,k)*d2Vx_dXx(i,j,k)+dMi_dXx(i,j,k)*dVx_dXx(i,j,k))+
mi_t(i,j,k)*(d2Vx_dYy(i,j,k)+d2Vx_dZz(i,j,k)+d2Vy_dXdY(i,j,k)+
d2Vz_dXdZ(i,j,k))+dMi_dYy(i,j,k)*(dVx_dYy(i,j,k)+dVy_dXx(i,j,k))+
dMi_dZz(i,j,k)*(dVx_dZz(i,j,k)+ dVz_dXx(i,j,k))
ib=-(2.D0/3.D0)*(dMi_dYy(i,j,k)*Div_V(i,j,k)+mi_t(i,j,k)*
(d2Vx_dXdY(i,j,k)+d2Vy_dYy(i,j,k)+d2Vz_dZdY(i,j,k)))+2.D0*
(mi_t(i,j,k)*d2Vy_dYy(i,j,k)+dMi_dYy(i,j,k)*dVy_dYy(i,j,k))+
mi_t(i,j,k)*(d2Vy_dXx(i,j,k)+d2Vy_dZz(i,j,k)+d2Vx_dYdX(i,j,k)+
d2Vz_dYdZ(i,j,k))+dMi_dXx(i,j,k)*(dVx_dYy(i,j,k)+dVy_dXx(i,j,k))+
dMi_dZz(i,j,k)*(dVy_dZz(i,j,k)+ dVz_dYy(i,j,k))
ic=-(2.D0/3.D0)*(dMi_dZz(i,j,k)*Div_V(i,j,k)+mi_t(i,j,k)*
(d2Vx_dXdZ(i,j,k)+d2Vy_dYdZ(i,j,k)+d2Vz_dZz(i,j,k)))+2.D0*
(mi_t(i,j,k)*d2Vz_dZz(i,j,k)+dMi_dZz(i,j,k)*dVz_dZz(i,j,k))+
mi_t(i,j,k)*(d2Vz_dXx(i,j,k)+d2Vz_dYy(i,j,k)+d2Vx_dZdX(i,j,k)+
d2Vy_dZdY(i,j,k))+dMi_dXx(i,j,k)*(dVx_dZz(i,j,k)+dVz_dXx(i,j,k))+
dMi_dYy(i,j,k)*(dVy_dZz(i,j,k)+dVz_dYy(i,j,k))
! CV
Auxx(i,j,k)=( 1.D0/(rho(i,j,k)**2.D0) )*( dRH0_dYy(i,j,k)*ic dRH0_dZz(i,j,k)*ib )
Auxy(i,j,k)=( 1.D0/(rho(i,j,k)**2.D0) )*( dRH0_dZz(i,j,k)*ia dRH0_dXx(i,j,k)*ic )
Auxz(i,j,k)=( 1.D0/(rho(i,j,k)**2.D0) )*( dRH0_dXx(i,j,k)*ib dRH0_dYy(i,j,k)*ia )
!____________________________________________________________________!
end do
end do
end do
case('VV')
write(*,*)'Computing "VV"...'
do i=min_I,max_I
do j=min_J,max_J
do k=min_K,max_K
125
Appendice B I codici
126
Appendice B I codici
Auxz(i,j,k)= (2.D0/rho(i,j,k))*(ie-ig)
!_________________________________________________________________!
end do
end do
end do
end select
end subroutine output2
end module Equ_Turbolenza
B.3 Mod_Weno5_evo.f90
module Weno5
! [RIF]: CUEuler.f90 by Ing.Donato Cecere
-->
Paper of van Sint Annaland
! Calcolo della derivata nel nodo i-esimo a partire dall'approssimazione a
sinistra dell'interfaccia i+1/2(m_ip1_2) ed a destra dell'interfaccia i1/2(p_im1_2).
! Hp:
! 1) Problema di Riemann alle interfacce i-1/2 ed i+1/2 per ogni nodo i
appartenente al dominio
! 2) Griglia non uniforme
implicit none
! Matrici C(i,p) contenenti i pesi lineari
Double precision Cm_ip1_2(0:2), Cp_im1_2(0:2)
Double precision ai(0:2),ci(0:2),ei(0:2),gi(0:2)
Double precision aj(0:1), bj(0:1), cj(0:1), dj(0:1), ej(0:1), fj(0:1),
gj(0:1), hj(0:1), ij(0:1), lj(0:1)
contains
!=====================================================================!
subroutine weno5_init(nm)
implicit none
real(kind=8), dimension(-3:2), intent(in) :: nm
!real(kind=8) sum_c
! Variabile di controllo
! Linear Weight
Cm_ip1_2(0) = ( (nm(0)-nm(-3) )/( nm(2)-nm(-3) ) )* &
( (nm(0)-nm(-2) )/( nm(2)-nm(-2) ) )
Cm_ip1_2(1) = ( nm(0)-nm(-3) )/( nm(2)-nm(-3) )* &
( nm(2)-nm(0) )/( nm(2)-nm(-2) )* &
( (nm(2)-nm(-2) )/( nm(1)-nm(-3) ) + 1.d0 )
Cm_ip1_2(2) = ( (nm(1)-nm(0) )/( nm(2)-nm(-3) ) )* &
( (nm(2)-nm(0) )/( nm(1)-nm(-3) ) )
Cp_im1_2(0) = ( ( nm(-1)-nm(-2) )/( nm(2)-nm(-3) ) )* &
( ( nm(-1)-nm(-3) )/( nm(2)-nm(-2) ) )
Cp_im1_2(1) = ( ( nm(-1)-nm(-3) )/( nm(2)-nm(-3) ) )* &
( ( nm(2)-nm(-1) )/( nm(2)-nm(-2) ) )* &
( ( nm(2)-nm(-2) )/( nm(1)-nm(-3) ) + 1.d0 )
Cp_im1_2(2) = ( ( nm(1)-nm(-1) )/( nm(2)-nm(-3) ) )* &
( ( nm(2)-nm(-1) )/( nm(1)-nm(-3) ) )
! Termini per la costruzione degli indicatori di smoothness
! IS_0
ai(0) = 4.D0*( ( nm(0) - nm(-1) )/( nm(2) - nm(-1) ) )**2.D0
ci(0) = 10.D0*( nm(0)-nm(-1) )**2.D0 + ( nm(1)-nm(-1) )*( nm(1)-nm(0) )
ei(0) = 20.D0*( nm(0)-nm(-1) )**2.0D0 + 2.D0*( nm(1)-nm(-1) )* ( nm(1)nm(0) ) + ( nm(2)-nm(-1) )*( 2.D0*nm(1)-nm(0)-nm(-1) )
gi(0) = 10.D0*( nm(0)-nm(-1) )**2.0D0 + ( nm(2)+nm(1)-2.D0*nm(-1) )* &
( nm(2)+nm(1)-nm(0)-nm(-1) )
! IS_1
ai(1) = 4.D0*( ( nm(0)-nm(-1) )/( nm(1)-nm(-2) ) )**2.D0
ci(1) = 10.D0*( nm(0)-nm(-1) )**2.D0 + ( nm(1)-nm(-1) )*( nm(1)-nm(0) )
ei(1) = 20.D0*( nm(0)-nm(-1) )**2.0D0 - ( nm(1)-nm(0) )*( nm(-1)-nm(-2) ) -
127
Appendice B I codici
gi(1) =
! IS_2
ai(2) =
ci(2) =
ei(2) =
128
Appendice B I codici
B.3 Pde.f90
Program pde
use Weno5
implicit none
integer :: i, j, Nx, Nt
integer :: stato=0
double precision :: a,t_sim,int_a,int_b,dx,dt,C
double precision, allocatable, dimension(:) :: x, xm,y0
double precision, allocatable, dimension(:,:) :: u_up, u_lf, u_lw, u_w
double precision :: fL, fR, ftemp, u1_w
129
Appendice B I codici
! Velocit onda
a=0.9
! Tempo di simulazione
t_sim=3
! Dominio
int_a=0
int_b=10
! Numero intervalli spaziali
Nx=400
! Passo spaziale
dx=(int_b-int_a)/Nx
print*,'x_step = ',dx
! Numero di Courant
C=0.05
! C deve essere <=1
! Passo temporale ( tiene conto della stabilit)
dt=dx*C/abs(a)
Nt=int(t_sim/dt)+1 !Aggiusta gli intervalli temporali al n intero successivo
dt=t_sim/Nt
! Ricalcola nuovamente il dt
print*,'t_step = ',dt
allocate(x(-4:Nx+4),xm(-4:Nx+3),y0(0:Nx))
allocate(u_up(0:Nt,-1:Nx+1), u_lf(0:Nt,-1:Nx+1), &
u_lw(0:Nt,-1:Nx+1), u_w(0:Nt,-3:Nx+3))
! Vettore coordinate
do j=-4,Nx+4
x(j)=dx*j
end do
! Vettore coordinate medie
do j=-4,Nx+3
xm(j)=(x(j+1)+x(j))/2.D0
end do
! Condizione iniziale
do j=0,Nx
if (x(j)<=1) then
y0(j)=2
u_up(0,j)=2.D0
u_lf(0,j)=2.D0
u_lw(0,j)=2.D0
u_w(0,j)=2.D0
elseif (x(j)>1) then
y0(j)=0.D0
u_up(0,j)=0.D0
u_lf(0,j)=0.D0
u_lw(0,j)=0.D0
u_w(0,j)=0.D0
end if
end do
open (1,file='Confronto_schemi-numerici.txt',FORM="FORMATTED",
STATUS='REPLACE', CONVERT='BIG_ENDIAN',iostat=stato)
if (stato==1) then
write(*,*) ' Impossibile creazione file Confronto_schemi-numerici.txt!'
stop
end if
write(1,100) 'x,','y0,','Upwind,','Lax Friedrichs,','Lax Wendroff,', 'Weno35'
100 format(5X,A2,10X,A3,5X,A7,5X,A15,5X,A13,5X,A6)
do i=0,Nt-1
! Nodi ghost minimi(flusso libero u_x=0 derivata nulla)
u_up(i,-1)=u_up(i,0)
u_lf(i,-1)=u_lf(i,0)
u_lw(i,-1)=u_lw(i,0)
130
Appendice B I codici
u_w(i,-3:-1)=u_w(i,0)
! Nodi ghost massimi(flusso libero u_x=0 derivata nulla)
u_up(i,Nx+1)=u_up(i,Nx)
u_lf(i,Nx+1)=u_lf(i,Nx)
u_lw(i,Nx+1)=u_lw(i,Nx)
u_w(i,Nx+1:Nx+3)=u_w(i,Nx)
do j=0,Nx
! Schema upwind
if (a<0) then
! Foward time-Foward space
u_up(i+1,j)=u_up(i,j)-(a*dt/dx)*( u_up(i,j+1)-u_up(i,j) )
elseif (a>0) then
! Foward time-Backward space
u_up(i+1,j)=u_up(i,j)-(a*dt/dx)*( u_up(i,j)-u_up(i,j-1) )
end if
! Lax Friedrichs
u_lf(i+1,j)=(1.D0/2.D0)*( u_lf(i,j+1)+u_lf(i,j-1) )-(1.D0/2.D0)*
(a*dt/dx)*( u_lf(i,j+1)-u_lf(i,j-1) )
! Lax Wendroff
u_lw(i+1,j)=u_lw(i,j)-(1.D0/2.D0)*(a*dt/dx)*(u_lw(i,j+1)-u_lw(i,j-1) )+
(1.D0/2.D0)*((a*dt/dx)**2.D0)*( u_lw(i,j+1)2.D0*u_lw(i,j)+u_lw(i,j-1) )
! Weno35
if (a<0) then
call weno5_init(xm(j-3:j+2))
call deriv_weno5(xm(j-3:j+2),u_w(i,j-2:j+2),fL,fR)
ftemp=fL
call weno5_init(xm((j+1)-3:(j+1)+2))
call deriv_weno5(xm((j+1)-3:(j+1)+2),u_w(i,(j+1)-2:(j+1)+2),fL,fR)
u1_w=(fL-ftemp)/(xm(j)-xm(j-1))
u_w(i+1,j)=u_w(i,j)-a*dt*u1_w
elseif (a>0) then
call weno5_init(xm(j-3:j+2))
call deriv_weno5(xm(j-3:j+2),u_w(i,j-2:j+2),fL,fR)
ftemp=fR
call weno5_init(xm((j-1)-3:(j-1)+2))
call deriv_weno5(xm((j-1)-3:(j-1)+2),u_w(i,(j-1)-2:(j-1)+2),fL,fR)
u1_w=(ftemp-fR)/(xm(j)-xm(j-1))
u_w(i+1,j)=u_w(i,j)-a*dt*u1_w
end if
end do
end do
! Scrittura su file
do j=0,Nx
write(1,101) x(j),',',y0(j),',',u_up(Nt,j),',',u_lf(Nt,j),',',u_lw(Nt,j),
',',u_w(Nt,j)
101 format(F10.4,5(A1,F10.4))
end do
close(1)
stop
end
131
Bibliografia
IBLIOGRAFIA
[1]
R.B. Warren, E.Stewart and E.N. Lightfoot, Trasport Phenomena, Second Edition, John
Wiley & Sons, New York, 2002;
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
132
Bibliografia
[15]
[16]
[17]
[18]
Allan Paull, Neal E. Hass, Michael K. Smart, Flight Data Analysis of HyShot 2, 13th
AIAA/CIRA International Space Planes and Hypersonic Systems and Technologies
Conference;
[19]
[20]
[21]
C.W. Shu, S. Osher, Efficient implementation of essentially non-oscillatory shockcapturing schemes, J. Comput. Phys.77, 439471, 1988;
[22]
G.S. Jiang, C.W. Shu, Efficient Implementation of Weighted ENO Schemes, Division
of Applied Mathematics, Brown University, Providence, Rhode Island, 1996;
[23]
S.D. Kim, B.J. Lee, H.J. Lee, I. Jeung, J. Choi, Realization of contact resolving
approxima-te Riemann solvers for strong shock and expansioon flows, International
Journal for Numerical Methods in Fluids, 2009;
[24]
T.J. Poinsot and S.K. Lele , Boundary Conditions for Direct Simulations of
Compressible Viscous Flow, Journal of Computational Physics, 1992;
[25]
[26]
[27]
D.A. Dickmann, F.K. Lu, Shock/Boundary Layer Interaction Effects on Transverse Jet
in Crossflow over a Flat Plate, Journal of Spacecraft and Rockets, Vol.46, 2009;
[28]
[29]
Bibliografia
[30]
J. Smit, M. van Sint Annaland, J.A.M Kuipers, Grid adaptation with WENO schemes for
non-uniform grid to solve a convection-dominated partial differential equations,
Department of Science and Technology, University of Twente, Netherlands, 2004;
[31]
[32]
[33]
[34]
Chase, M.W., Jr., ed., JANAF Thermochemical Tables, 3rd Ed., Pts. 1 & 2, 1985;
[35]
134
Ringraziamenti
Il mio pi sentito grazie va ai miei genitori, ai quali dedico la tesi, che con non pochi sacrifici mi hanno
permesso di realizzare il mio sogno. Li ringrazio immensamente per la fiducia e lopportunit che mi hanno
concesso, e per non aver mai smesso di credere in me. Hanno sempre condiviso le mie scelte e proprio
questo senso di responsabilit mi ha spinto a crescere e a dare il massimo per non deluderli. A mia
madre che sempre riuscita a trovare le parole giuste nei momenti difficili confortandomi e
consigliandomi, a mio padre che ha sacrificato tutta una vita per rendere migliore la nostra e ai miei
fratelli ai quali so di aver tolto tanto
Un grazie va agli amici di sempre, ai colleghi che hanno intrapreso lavventura universitaria insieme a
me e con i quali si instaurato un saldo rapporto di amicizia, e a quelli che mi stanno sopportando in
questa fase conclusiva.
Agli amici di Capoeira e in particolare ai ragazzi del gruppo CAPOEIRA CUSben predisposti a
incassare i miei colpi :-D
Sar per sempre riconoscente al Prof. Claudio Bruno nonch mio relatore, persona preparata e
professionale che stimo profondamente. Lo ringrazio altres per aver alimentato in questi anni la passione
per questo ramo dellingegneria.
Ringrazio inoltre il Dott. Donato Cecere, la Dott.ssa Antonella Ingenito e il Dott. Eugenio Giacomazzi
per avermi seguito da vicino nello sviluppo della tesi, per la disponibilit, per i validi consigli, per aver
condiviso con me conoscenze e progetti, e soprattutto per avermi fatto sentire a casa nel loro gruppo di
lavoro.
Un ultimo grazie, ma non per questo meno sentito, va al Dott. Nunzio Arcidiacono il quale stato
determinante nello sviluppo del codice in FORTRAN, dimostrandosi una persona paziente e affabile.