You are on page 1of 146

Indice

Indice delle figure .4

Indice delle tabelle ..7

1 Introduzione 8

2 Aerodinamica dellalettone ....9

2.1 Profilo alare ...9

2.2 Centro di pressione 11

2.3 Profili normati 11

2.4 Forze aerodinamiche 12

2.5 Vincoli di progetto ..14

3 Approccio alla procedura di ottimizzazione ..15

3.1 Procedura di ottimizzazione dellalettone .16

3.1.1 Definizione della geometria e dei suoi parametri 16

3.1.2 Definizione delle condizioni di ottimizzazione ..16

3.1.3 Definizione ed analisi della funzione obbiettivo ..17

3.1.4 Scelta del codice numerico di calcolo ..17

3.1.5 Scelta dellottimizzatore 17

3.2 Implementazione della procedura in modeFrontier ..19

4 Modello parametrico per la definizione della geometria .21

4.1 Introduzione 21

4.2 Parametrizzazione del profilo anteriore ....21

4.2.1 Realizzazione delle due curve parametriche ..22

1

4.2.2 Definizione dei punti di controllo 23

4.2.3 Definizione dei punti di controllo ausiliari ...24

4.2.4 Definizione dei parametri ! ..28

4.2.5 Leggi opportune attraverso cui definire i polinomi di Bernstein29

4.2.6 Funzioni opportune che calcolano le coordinate dei punti di

passaggio....29

4.2.7 Realizzazione curva 30

4.2.8 Realizzazione superficie .31

4.2.9 Definizione della scalatura e rotazione del profilo ....31

4.3 Parametrizzazione del profilo posteriore 32

4.4 Realizzazione del box di calcolo ...35

5 Analisi della configurazione 37

5.1 Introduzione 37

5.2 Utilizzo del software Matlab 37

6 Analisi CFD dellalettone ..39

6.1 Introduzione 39

6.2 Importazione della geometria del modello e del box ...39

6.3 Impostazioni al contorno e generazione della mesh .41

6.4 Impostazioni delle condizioni del flusso ....46

6.5 Esportazione dei report delle forze ...47

7 Procedura di ottimizzazione in modeFRONTIER .48

7.1 Schema logico di ottimizzazione ..48

2

7.2 Impostazione del modello CAD ....50

7.3 Impostazione delle variabili di ottimizzazione ...52

7.4 Definizione del set di famiglia iniziale: DOE (Design of experiment) ..53

7.5 DOE: sequenze utilizzate ...54

7.6 Impostazione dellalgoritmo di ottimizzazione (Scheduler Node) ...55

7.7 Nodo ssh: connessione al cluster remoto ..58

7.8 Impostazione del nodo transfer file 60

7.9 Selezione del file di output e definizione della funzione obbiettivo 61

8 Analisi dei risultati 64

8.1 Analisi dei risultati e scelta della configurazione vincente .64

8.2 Visualizzazioni analisi CFD della configurazione 8749 76

8.3 Confronto delle caratteristiche aerodinamiche fra lalettone originale e

quello ottimizzato .......79

8.4 Visualizzazione dellalettone originale ....80

8.5 Confronto tra i vari metodi di ottimizzazione utilizzati .83

9 Conclusioni e sviluppi futuri ....91

9.1 Conclusioni ..91

9.2 Sviluppi futuri .92

Bibliografia .93

Appendice A ..94

Appendice B 104

Appendice C 115

3

Indice delle figure

Figura 2.1: Geometria di un profilo alare ....11

Figura 2.2: Andamento di Cd e Cl in funzione dellincidenza ..14

Figura 3.1: Andamento del flusso daria considerato nellottimizzazione..17

Figura 3.2: Ambiente di lavoro di modeFRONTIER .18

Figura 3.3: Workflow per lottimizzazione dellalettone ...20

Figura 4.1: Generative Shape Design Catia V5R19 .21

Figura 4.2: Curve parametriche del ventre e del dorso ..22

Figura 4.3: Curva parametrica in Rhynoceros 24

Figura 4.4: Andamento dei coefficienti di influenza del dorso ..25

Figura 4.5: Andamento dei coefficienti di influenza del ventre ...25

Figura 4.6: Punti di controllo ausiliari e loro posizione di riferimento .27

Figura 4.7: Inserimento delle relazioni dei punti di controllo .27

Figura 4.8: Inserimento delle relazioni dei punti di controllo .28

Figura 4.9: Introduzione dei parametri in Catia V5R19 ..28

Figura 4.10: Introduzione delle relazioni di Bernestein ..29

Figura 4.11: Introduzione delle relazioni per la parametrizzazione delle curve ...30

Figura 4.12: Definizione dei punti di passaggio ...30

Figura 4.13: Forma del profilo iniziale .31

Figura 4.14: Realizzazione superficie 31

Figura 4.15: Definizione della scalatura .32

Figura 4.16: NACA 4412 ...33

4

Figura 4.17: Profilo anteriore e posteriore ..34

Figura 4.18: Box di calcolo ..35

Figura 6.1: Modifica da apportare alla macro per limportazione del modello ....40

Figura 6.2: Sottogruppi delle varie superfici in STAR-CCM+ ...41

Figura 6.3: Visualizzazione delle condizioni al contorno assegnate 42

Figura 6.4: Mesh di volume dellalettone. ...45

Figura 6.5: Particolare della mesh di volume .46

Figura 7.1: Workflow di modeFrontier per lottimizzazione dellalettone ...49

Figura 7.2: Finestra per la definizione di avvio del driver di Catia ..50

Figura 7.3: Implementazione degli input allinterno di modeFRONTIER .52

Figura 7.4: Finestra per limpostazione delle variabili di ottimizzazione ...53

Figura 7.5: Sequenze allinterno del nodo DOE ...54

Figura 7.6: Algoritmo genetico MOGAII .57

Figura 7.7: Impostazione del nodo ssh 58

Figura 7.8:Impostazione del nodo ssh ...59

Figura 7.9:Transfer file ..60

Figura 7.10: Transfer file ..61

Figura 7.11: Output file ....61

Figura 7.12: Esportazione dei file di report del calcolo CFD ...62

Figura 7.13: Settaggio dellobbiettivo .63

Figura 8.1: Design Table History ....65

Figura 8.2: Design Table History ....66

5

Figura 8.3: Scatter chart Cl-Cd ..67

Figura 8.4: Particolare dello Scatter con configurazioni vincenti .68

Figura 8.5: Configurazione 9179 .71

Figura 8.6: Configurazione 9176 .73

Figura 8.7: Configurazione 8749 .75

Figura 8.8: Design Table History seconda ottimizzazione .84

Figura 8.9: Design Table History seconda ottimizzazione .85

Figura 8.10: Scatter chart Cl-Cd seconda ottimizzazione...85

Figura 8.11: Design Table History terza ottimizzazione ..86

Figura 8.12: Design Table History terza ottimizzazione ..87

Figura 8.13: Scatter chart Cl-Cd terza ottimizzazione .....87

Figura 8.14: Configurazione 2677 ..88

Figura 8.15: Vettori velocit della configurazione 2677 .89

Figura 8.16: Pressione totale della configurazione 2677 89

Figura 8.17: Coefficiente di pressione della configurazione 2677 ..90

6

Indice delle tabelle

Tabella 6.4: Parametri per la mesh 44

Tabella 8.1: Risultati dei design vincenti 69

Tabella 8.2: Parametri della configurazione 9179 ..70

Tabella 8.3: Parametri della configurazione 9176 ..72

Tabella 8.4: Parametri della configurazione 8749 ..74

Tabella 8.5: Confronto delle caratteristiche aerodinamiche delle due configurazioni..79

Tabella 8.6: Risultati dei vari algoritmi di ottimizzazione ..83

Tabella 8.7: Configurazioni vincenti nella seconda ottimizzazione .84

Tabella 8.8: Configurazioni vincenti nella terza ottimizzazione 86


7

Capitolo 1 - Introduzione

1 Introduzione

Nel presente lavoro stata svolta lottimizzazione fluidodinamica di un alettone a doppio


profilo dedicata allutilizzo su un auto da Gran Turismo. Tale ottimizzazione stata
effettuata in ambiente modeFRONTIER.

Per svolgere correttamente lintera ottimizzazione stato necessario interfacciare


modeFRONTIER con diversi software ognuno necessario per uno specifico compito. Il
primo software utilizzato stato Matlab, attraverso il quale possibile eseguire una
verifica della corretta geometria caratterizzante le configurazioni proposte dallalgoritmo
di ottimizzazione. Quindi le geometria ritenute corrette sono state elaborate attraverso il
software Catia VR19, attraverso il quale si riesce ad eseguire una modellazione
parametrica dellalettone da analizzare, successivamente, sotto il punto di vista
aerodinamico. Infine attraverso il solutore aerodinamico STAR-CCM+ si risolve il problema
del calcolo del flusso utilizzando un codice di tipo RANS.

Tutto ci permette quindi di poter definire la migliore o le migliori configurazioni


dellalettone.

Lottimizzazione in modeFRONTIER stata effettuata con due diversi algoritmi di


ottimizzazione e due diversi metodi di generazione dei design di partenza.

8

Capitolo 2 Aerodinamica dellalettone

2 Aerodinamica dellalettone

Nel presente capitolo verranno date le nozioni fondamentali che stanno alla base dello
studio dellaerodinamica dellalettone. bene notare che lalettone, essendo composto
da due profili alari, ha il medesimo comportamento dellala di un aereo, tranne per il fatto
che le forze agenti sul profilo stesso hanno il compito inverso di quelle agenti su unala di
un velivolo. Infatti tali forze dovranno agire in direzione tale da migliorare la tenuta di
strada della vettura in esame, cio di aumentare il cosiddetto carico verticale.

2.1 Profilo alare

Il profilo alare la sezione di unala (nel nostro caso dellalettone) condotta secondo un
piano verticale e parallelo alla mezzeria dellala stessa. Quando si studia un profilo alare,
si studia unala di lunghezza infinita (nella direzione perpendicolare al piano di sezione
che determina il profilo).

Secondo il teorema di Kutta-Joukowski, si crea una circolazione attorno al profilo che


genera una forza, in direzione perpendicolare alla corrente indisturbata, detta portanza
che tende a sostentarlo. Tale teorema vale solamente in condizioni di viscosit
trascurabile (flusso euleriano). In generale la portanza non l'unica forza agente sul
profilo: la viscosit del fluido genera anche una resistenza fluidodinamica, una
componente della risultante delle forze aerodinamiche diretta parallelamente alla
corrente indisturbata.

La forma dei profili alari tende a creare una differenza di pressione tra le due facce: una
volta che il fluido (nel nostro caso aria) investe il profilo con l'opportuno angolo d'attacco,
si genera una sovrappressione sulla pancia ed una depressione sul dorso del profilo
stesso.

Questa distribuzione di pressione fa s che le particelle di fluido generino una forza diretta
grosso modo verticalmente, dal basso verso l'alto che lo sostenta. La componente
perpendicolare alla corrente indisturbata, la portanza, cresce in maniera pressoch
lineare al crescere dell'angolo d'attacco del profilo fino ad un valore critico, chiamato
angolo di incidenza critico o angolo d'attacco aerodinamico critico. Aumentando
ulteriormente l'angolo d'attacco si raggiunge un massimo della portanza ad un valore

9

Capitolo 2 Aerodinamica dellalettone

chiamato angolo di incidenza di stallo o angolo d'attacco di stallo, oltre il quale si ha,
appunto, lo stallo del profilo al quale si riscontra una diminuzione della portanza ed un
aumento della resistenza aerodinamica.

Inoltre in caso reale di ala di lunghezza finita, necessario tenere in considerazione altri
effetti, il principale dei quali che un generico fluido tende a spostarsi da una zona di alta
pressione ad una di bassa pressione.

Tale principio facilmente riscontrabile in molti casi pratici: quando ad esempio un


pallone si buca, l'aria tende ad uscire verso l'esterno, cio verso lo stato di (bassa)
pressione atmosferica.

Ai bordi dell'ala si ha una migrazione di fluido verso i punti a pressione minore e quindi
un'ulteriore generazione di resistenza, fenomeno che spiega la presenza di alettoni
verticali ai bordi delle ali degli aeroplani o negli spoiler delle auto da corsa.

In un profilo si riconoscono i seguenti elementi geometrici caratteristici:

Bordo dattacco: il punto geometricamente pi avanzato del profilo (2);


Bordo duscita: il punto geometricamente pi arretrato del profilo (7);
Corda: la linea retta che unisce il bordo dattacco con il bordo duscita (c);
Dorso: la linea che delimita superiormente il profilo (6);
Ventre: la linea che delimita inferiormente il profilo (9);
Spessore: la distanza tra dorso e ventre (5);
Linea dincarnamento medio: la linea che unisce i punti equidistanti tra dorso e
ventre (8);
Freccia: la distanza tra la linea media e la corda misurata perpendicolarmente
alla corda;
Linea di portanza nulla: la linea, passante per il bordo duscita, parallela alla
direzione della corrente per la quale la portanza del profilo nulla (1);
Incidenza geometrica o angolo di attacco geometrico: langolo formato dalla
corda con la corrente indisturbata().

10

Capitolo 2 Aerodinamica dellalettone

Tali elementi sono illustrati in figura 2.1:

Figura 2.1: Geometria di un profilo alare

2.2 Centro di pressione

Il centro di pressione di un profilo alare il punto in cui possiamo immaginare applicata la


risultante delle forze fluidodinamiche agenti sul profilo stesso. La risultante viene
generalmente scomposta in portanza, perpendicolare alla velocit del flusso indisturbato
e positiva verso l'alto, e resistenza, parallela alla velocit del flusso indisturbato e positiva
nel verso della velocit. Il momento fluidodinamico agente rispetto al centro di pressione
nullo, perch nullo il braccio della risultante delle forze aerodinamiche.

Al variare dell'angolo d'attacco del profilo rispetto alla corrente, varier la posizione del
centro di pressione.

2.3 Profili normati

Sono oltre 1.800 i profili definiti in modo univoco. I pi comuni sono quelli definiti
dall'organizzazione governativa americana NACA (ora NASA) identificati con numeri a 4 o
5 cifre, che tutt'oggi sono uno standard per la produzione in serie di profili alari.

Per i profili a 4 cifre (es. NACA 2415), esse hanno il seguente significato:
1 cifra, valore della freccia massima in percentuale della corda (es. 2 = 0,02 c );

11

Capitolo 2 Aerodinamica dellalettone

2 cifra, distanza dal bordo dattacco della posizione della freccia massima, in
decimi della corda (es. 4 = 0.4 c);
3 e 4, spessore massimo, in percentuale della corda (es. 15 = 0,15 c).

2.4 Forze aerodinamiche

Uno dei risultati pi importanti dell'aerodinamica la determinazione delle forze


aerodinamiche che agiscono su un corpo. Il loro calcolo preciso di importanza
fondamentale nel progetto di un velivolo, di una barca a vela o di un'autovettura da
corsa.

Per convenzione, per semplificare i calcoli la forza aerodinamica risultante viene


scomposta in una componente perpendicolare alla velocit del velivolo (velocit
asintotica) e in una componente parallela alla velocit del velivolo; rispettivamente
denominate:

portanza "L" (dall'inglese Lift);


resistenza "D" (dall'inglese Drag).
La portanza definita come la forza aerodinamica agente in direzione perpendicolare alla
direzione del vento che investe il profilo. La portanza si calcola con la formula generale:
1
= ! !
2
dove la densit dell'aria, V la velocit, S la superficie di riferimento (nel caso di
velivoli si tratta di superficie alare) e Cl un coefficiente adimensionale detto coefficiente
di portanza. Esso varia in funzione della forma geometrica dell'ala, dell'angolo d'attacco,
del Numero di Reynolds e del Numero di Mach.
La resistenza definita come la forza aerodinamica agente in direzione parallela (e con
verso opposto) alla direzione del moto. Essa composta fondamentalmente da tre
termini:

resistenza di attrito
resistenza di pressione
resistenza indotta (o resistenza di vortice)
La resistenza di attrito dovuta alla viscosit del fluido. La resistenza di pressione
dovuta alla differenza di pressione agente sulla parte anteriore e posteriore del corpo in

12

Capitolo 2 Aerodinamica dellalettone

moto. Anch'essa fondamentalmente dovuta alla viscosit del fluido, per per comodit
di calcolo viene trattata separatamente dalla prima.

La resistenza indotta dovuta al meccanismo di generazione della portanza. Sul dorso del
profilo alare la pressione inferiore rispetto al ventre. Le equazioni di Navier-Stokes
stabiliscono che in tali condizioni il flusso d'aria tender a passare dal ventre al dorso
laddove questo possibile. Nel caso di un'ala di lunghezza finita questo si verifica in
corrispondenza delle estremit alari. In questi punti l'aria acquista una componente di
velocit perpendicolare alla direzione del volo che, sommandosi alla componente
parallela (velocit di volo) genera un movimento vorticoso che dissipa l'energia creando
resistenza.

La resistenza si pone uguale a:

1
= ! !
2
CD (indicato anche con CX nell'ambito automobilistico) un coefficiente adimensionale
detto coefficiente di resistenza. Esso varia in funzione della forma geometrica dell'ala,
dell'angolo d'attacco, del numero di Reynolds e del numero di Mach.

I progressi compiuti nella fluidodinamica computazionale, unitamente alle prestazioni


sempre pi elevate dei calcolatori elettronici, consentono oggi di fare una stima molto
precisa dei vari coefficienti aerodinamici.

13

Capitolo 2 Aerodinamica dellalettone

Un esempio dellandamento di Cl e Cd in funzione dellincidenza illustrato in figura 2.2.

Figura 2.2: Andamento di Cd e Cl in funzione dellincidenza

2.5 Vincoli di progetto

Nel presente lavoro si sono rispettati i seguenti vincoli:

La lunghezza dellalettone imposta e pari a 300 mm;


La velocit di avanzamento della vettura per il calcolo fluidodinamico imposta e
pari a 33 m/s.


14

Capitolo 3 Approccio alla procedura di ottimizzazione

3 Approccio alla procedura di ottimizzazione

La procedura di ottimizzazione parte da una configurazione iniziale della quale si sono


individuati un insieme di parametri di progetto, che sono definiti di ottimo, quando
riescono a minimizzare o massimizzare una o pi funzioni obbiettivo nel rispetto dei
vincoli imposti. In sostanza la procedura di ottimizzazione non altro che un confronto fra
possibili soluzioni ottenute facendo variare opportunamente i paramenti, cercando di
individuare la miglior combinazione di questultimi ed approdando cos ad una
configurazione finale definita di ottimo. In base al numero di funzioni obbiettivo si ha la
seguente classificazione della procedura di ottimizzazione:

Mono Obbiettivo: Quando si ha una sola funzione obbiettivo


Multi Obbiettivo: Quando si hanno pi funzioni obbiettivo

Lottimizzazione fluidodinamica viene svolta tramite la CFD poich presenta i seguenti


vantaggi:

Porta un confronto tra possibili soluzioni di un problema, da cui deriva


lannullamento della componente bias dellerrore e quindi una migliore
discriminazione delle soluzioni di ottimo;
Permette di avere la possibilit di effettuare un numero di prove elevato in tempi
sufficientemente brevi , difficilmente realizzabili in galleria del vento;
Ha costi ridotti.

Tuttavia lottimizzazione fluidodinamica con CFD presenta degli svantaggi:

La rappresentazione fisica non sempre corrispondente alla realt;


Si possono avere problematiche computazionali, in termini di ore di calcolo,
memoria e processori.

15

Capitolo 3 Approccio alla procedura di ottimizzazione

3.1 Procedura di ottimizzazione dellalettone

La procedura di ottimizzazione dellalettone richiede lo sviluppo dei seguenti passaggi:

Definizione della geometria e dei suoi parametri


Definizione dei vincoli
Scelta delle condizioni di ottimizzazione
Scelta della funzione obbiettivo
Scelta del codice numerico di simulazione aerodinamica
Scelta del software di ottimizzazione

3.1.1 Definizione della geometria e dei suoi parametri

Essendo un alettone a doppio profilo stata scelta una configurazione di partenza


differente tra il profilo anteriore e quello posteriore. Per quanto riguarda il profilo
anteriore la scelta effettuata stata quella di utilizzare il profilo attualmente montato
nella vettura da gara Ferrari 458 Granturismo. Per quanto riguarda quello posteriore,
invece, il profilo di partenza il NACA 4412. Entrambi i profili devono essere espressi in
forma parametrica quindi la linea che li descrive definita tramite le curve di Bezier,
grazie alle quali possibile modificare la geometria di partenza, ottenendo comunque
profili di forma regolare, anche con la modifica di un solo punto di controllo. La loro
propriet fondamentale che queste sono definite dai punti di controllo che non
coincidono, ma definiscono, i punti di passaggio della curva stessa. La procedura per il
calcolo dei punti di controllo stata effettuata in ambiente Rhinoceros. Avendo
costruito ogni profilo attraverso 15 punti di controllo, successivamente stato scelto di
far controllare i punti di controllo di ogni cruva da 3 punti di controllo ausiliari.

3.1.2 Definizione delle condizioni di ottimizzazione

Lottimizzazione viene svolta ponendo un flusso daria orizzontale a velocit costante


avente il valore di 33 m/s (circa 120 Km/h)

16

Capitolo 3 Approccio alla procedura di ottimizzazione

Figura 3.1: Andamento del flusso daria considerato nellottimizzazione

3.1.3 Definizione e analisi della funzione obbiettivo

Lobbiettivo della presente ottimizzazione quello di definire, tra le diverse configurazioni


analizzate, una possibile forma dellalettone che minimizzi il coefficiente di resistenza (Cd)
e massimizzi il coefficiente di portanza (Cl). Lottimizzazione sar quindi di tipo Multi-
obbiettivo in quanto si hanno due funzioni obbiettivo.

3.1.4 Scelta del codice numerico di calcolo

La scelta del codice numerico ricaduta sul software STARCCM+. STAR-CCM+, prodotto
da CD-adapco, un software commerciale per la fluidodinamica computazionale di largo
utilizzo in molti settori dell'industria e del mondo accademico, basato sul metodo ai
volumi finiti (tetraedri, celle trimmate, poliedri). All'interno della sua interfaccia Java,
sono possibili la generazione delle griglie di calcolo ("meshatura") e la visualizzazione dei
risultati delle analisi.

3.1.5 Scelta dellottimizzatore

La procedura di ottimizzazione dellalettone stata svolta in ambiente modeFRONTIER,


il quale permette una facile gestione della procedura grazie a una semplice interfaccia
grafica sotto forma di diagramma di flusso. Tale software ha inoltre al suo interno diversi

17

Capitolo 3 Approccio alla procedura di ottimizzazione

algoritmi di ottimizzazione per cui stato possibile fare il confronto di procedure


differenti di ottimizzazione. Il funzionamento del programma si basa sullutilizzo di
appositi nodi che permettono di collegare esso stesso ai vari software utilizzati per lo
sviluppo della procedura.

Il software di ottimizzazione modeFRONTIER presenta tre ambienti di lavoro, come


mostrato in figura 3.2:

Figura 3.2: Ambiente di lavoro di modeFRONTIER

Workflow
Run Logs
Design Space

Workflow: allinterno di questo ambiente si definisce il vero e proprio ciclo di


ottimizzazione in cui si avvale di appositi nodi, opportunamente collegati fra loro, che
rappresentano i singoli step in cui suddivisa la procedura. In ciascuno di essi possibile
definire i rispettivi parametri caratteristici aprendo le relative finestre di dialogo.

18

Capitolo 3 Approccio alla procedura di ottimizzazione

Run Logs: mostra lavanzamento della procedura fornendo una diagnosi di ciascuno dei
design completati e di quelli in fase di elaborazione. Ciascun design costituisce un
individuo della popolazione che si sta generando. In questo ambiente possibile vedere
quali design non hanno avuto buon esito e conoscere la causa del loro mancato
completamento, al suo interno dunque possibile seguire la procedura nella sua
evoluzione.

Design Space: esso raccoglie tutte le informazioni inerenti ai design completati e


permette uninterpretazione dei risultati della procedura attraverso una serie di
strumenti utili al post-processing, consentendo di analizzare linfluenza dei singoli
parametri sulla funzione obbiettivo. Una colorazione rossa permette di individuare le
configurazioni che, per incongruenza dei vincoli imposti, non sono state realizzate
dallottimizzatore.

3.2 Implementazione della procedura in modeFrontier

Nel presente paragrafo verr definito il flusso logico allinterno del workflow di figura 3.3
utilizzato per lottimizzazione dellalettone.

Funzione obbiettivo e algoritmo di ottimizzazione


Input file
Output file

La funzione obbiettivo rappresentata dai due goal nodes. Lo scopo della presente
ottimizzazione sar quello di trovare una configurazione che massimizzi il coefficiente di
portanza e minimizzi il coefficiente di resistenza. Attraverso la finestra di dialogo del goal
node possibile nella voce Type selezionare la voce minimize o maximize. Nel nodo
scheduler poi possibile indicare lalgoritmo di ottimizzazione voluto, mentre nel nodo
DOE si indicher il numero degli individui della popolazione iniziale e il tipo di generazione
di essa.

Gli Input file sono rappresentati allinterno del workflow da 17 input variable e
rappresentano i parametri da poter variare per compiere lottimizzazione. Per ogni
variabile stato definito un limite superiore ed un limite inferiore di escursione ed il
passo di discretizzazione.

19

Capitolo 3 Approccio alla procedura di ottimizzazione

I software utilizzati per il calcolo degli Output file sono i software Matlab, Catia e
Starcccm+. Il primo di essi raccoglie le variabili di input e controlla la geometria
corrispondente. In caso di esito positivo trasferisce le variabili al software Catia, il quale
ha il compito di creare il disegno CAD del profilo dellalettone e del relativo dominio di
calcolo per lanalisi aerodinamica. Fatto ci converte il file in formato .igs e lo trasferisce
al nodo relativo al software Starccm+ che esegue il calcolo aerodinamico esportando i
valori trovati di Cl e Cd in condizione di regime.

Figura 3.3: Workflow per lottimizzazione dellalettone

20

Capitolo 4 Modello parametrico per la definizione della geometria

4 Modello parametrico per la definizione della geometria

4.1 Introduzione

Allinterno del processo di ottimizzazione di fondamentale importanza la


parametrizzazione del modello geometrico, che possibile solo avendo chiari quali siano i
parametri che si sceglie di far muovere a modeFrontier e quali opportune relazioni
geometriche colleghino queste alla geometria del modello. Non esiste un modo univoco
per poter realizzare la parametrizzazione dellalettone, in ogni caso, qualunque sia la
strada, il fine unico quello di poter ottenere nuove geometrie dello stesso modello al
variare dei parametri in gioco.

4.2 Parametrizzazione del profilo anteriore

In questo paragrafo verr illustrata la parametrizzazione del profilo anteriore dellalettone


realizzata allinterno del Generative Shape Design (GSD) del software Catia V5 R19, al
quale si giunge semplicemente dal men avvia, come mostrato in figura 4.1.

Figura 4.1: Generative Shape Design Catia V5R19

21

Capitolo 4 Modello parametrico per la definizione della geometria

La realizzazione del modello parametrico avviene in tre fasi:

Realizzazione di due curve parametriche rispettivamente una per il ventre e una


per il dorso del profilo
Realizzazione della superficie del profilo
Caratterizzazione della scalatura della geometria realizzata e dellangolo di
incidenza del profilo

Le due curve sono visibili in figura 4.2:

Figura 4.2: Curve parametriche del ventre e del dorso

4.2.1 Realizzazione delle due curve parametriche

Le due curve caratterizzanti il profilo anteriore hanno in comune il primo e lultimo punto.
In particolare il primo punto coincide con lorigine del sistema di riferimento. Entrambi i
punti sono fissati e non variano al variare della forma del profilo. La procedura di
realizzazione delle curve ha richiesto il ricorso alle curve di Bezier. Una generica curva di
Bezier di grado n ha una rappresentazione parametrica definita nel seguente modo:

!
!!!
= ! 1 !

!!!

!
=
! 1 !

0,1

22

Capitolo 4 Modello parametrico per la definizione della geometria

Il polinomio

!!!
!,! = 1 !

prende il nome di polinomio di base di Bernstein di grado n , mentre i punti ! sono


chiamati punti di controllo. Quindi definendo ! = ! , ! , ! il generico punto di
controllo lespressione scalare della generica curva di Bezier data da:

! = !,! () !
!!!
!

! = !,! () !
!!!
!

! = !,! () !
!!!

Osservando la definizione delle curve di Bezier devono essere dunque definiti:

1. n+1 punti di controllo della curva;


2. i punti di controllo ausiliari;
3. i parametri ! ;
4. leggi opportune attraverso cui definire le curve di Bezier;
5. funzioni opportune attraverso le quali possibile calcolare le coordinate dei punti
di passaggio noti i punti di controllo.

4.2.2 Definizione dei punti di controllo: Si scelto un numero di punti di controllo pari a
15, in corrispondenza del quale si hanno errori di troncamento massimo (misurato dalla
deviazione dellultimo punto di passaggio dallultimo punto di controllo) inferiore a 10!!
mm, che un valore ancora accettabile per una corretta modellazione parametrica
dellalettone. Avere un numero di punti di controllo superiore a tale valore, infatti,
aumenterebbe in maniera smisurata lentit dellerrore commesso.

Come geometria iniziale del profilo anteriore dellalettone stato scelto di prendere
quello attualmente utilizzato nella vettura Ferrari 458 Granturismo. Quindi analizzando il
disegno CAD di tale profilo stato possibile ricavarci i punti di passaggio e disegnarlo in
ambiente Rhinoceros. Il software Rhinoceros permette di tracciare le curve attraverso i

23

Capitolo 4 Modello parametrico per la definizione della geometria

punti di controllo, quindi abbiamo disegnato una curva per il dorso del profilo e una per il
ventre che coincidessero con quelle relative allalettone preso come riferimento. E stato
cos possibile tracciare una curva identica a quella di partenza, di cui per adesso
possibile conoscere i suoi punti di controllo. Una volta noti i punti di controllo, Rhinoceros
permette di esportare le loro coordinate in un file .dat e quindi di poterli utilizzare in
ambiente Catia.

A titolo di esempio si riporta limmagine Rhinoceros della costruzione del ventre del
profilo anteriore.

Figura 4.3: Curva parametrica in Rhynoceros

4.2.3 Definizione dei punti di controllo ausiliari: a questo punto necessario fare la
seguente osservazione: utilizzare direttamente le curve di Bezier sarebbe una soluzione
possibile ma sicuramente poco efficiente. Infatti tale scelta comporterebbe un numero
eccessivo delle variabili di ottimizzazione da inserire in modeFrontier(26 parametri solo
per definire la forma del profilo anteriore). Per questo motivo sono stati introdotti i punti
di controllo ausiliari (tre per ogni curva) i cui spostamenti influenzano attraverso
opportuni coefficienti di influenza i punti di controllo e quindi la geometria del profilo. In
figura 4.4 e in figura 4.5 mostrato landamento dei coefficienti di influenza.

24

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.4: Andamento dei coefficienti di influenza del dorso

Figura 4.5: Andamento dei coefficienti di influenza del ventre

25

Capitolo 4 Modello parametrico per la definizione della geometria

Tali coefficienti sono stati calcolati in ambiente Matlab mediante la seguente relazione:

! ! !! !
1
! = 2 = 2 !
!!
! ! 2

dove

1 !! !
= !!!
2

una distribuzione di Gauss centrata in zero.

Lo script necessario per generare tali curve riportato in Appendice A.

Inoltre ! definito:

( ! min ( ! )
! =
min ( ! )

Lo spostamento delli-esimo punto di controllo si calcola quindi mediante la seguente


relazione:

! = !"#_!"#$% !

Si osserva dunque che lo spostamento dell i-esimo punto di controllo dato dallo
spostamento del punto di controllo ausiliario moltiplicato per il suo coefficiente di
influenza. Si introducono quindi, allinterno di Catia, i punti di controllo ausiliari come
parametri di lunghezza insieme alle loro posizioni di riferimento, come mostrato in figura
4.6.

26

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.6: Punti di controllo ausiliari e loro posizione di riferimento

Sono poi state definite opportune relazioni che leghino gli spostamenti dei punti di
controllo ausiliari con le loro posizioni di riferimento, come mostrato in figura 4.7. A
questo punto sono state definite relazioni che leghino tali spostamenti, moltiplicati per il
loro coefficiente di influenza, allo spostamento del generico punto di controllo, come
mostrato in figura 4.8.

Figura 4.7: Inserimento delle relazioni dei punti di controllo

27

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.8: Inserimento delle relazioni dei punti di controllo

4.2.4 Definizione dei parametri : Dalla curva di Bezier si osserva che questa definita
solo quando sono definiti i parametri ! . Si definito un vettore di parametri che ha tante
componenti quanti sono i punti di passaggio desiderati per ogni curva che necessario
tracciare. Nel presente lavoro volendo ottenere 60 punti di passaggio per ognuna di esse,
sono stati introdotti 60 parametri reali la cui spaziatura compresa tra 0 e 1.
Lintroduzione dei parametri viene fatta dallicona f(x) che permette lintroduzione di un
nuovo parametro di tipo reale come mostrato in figura 4.9.

Figura 4.9: Introduzione dei parametri in Catia V5R19

28

Capitolo 4 Modello parametrico per la definizione della geometria

4.2.5 Leggi opportune attraverso cui definire i polinomi di Bernstein: Una volta che
sono stati introdotti i parametri ! necessario introdurre le relazioni che definiscono i
polinomi di Bernstein. All interno del GSD di Catia possibile definire queste relazioni
facendo riferimento alla variabile di input che il parametro reale u e quella di output che
risulta proprio essere il polinomio in corrispondenza di u. Queste leggi vengono definite in
Catia attraverso unopportuna interfaccia attivabile mediante il comando fog , come
mostrato in figura 4.10.

Figura 4.10: Introduzione delle relazioni di Bernestein

4.2.6 Funzioni opportune che calcolano le coordinate dei punti di passaggio noti i
punti di controllo ed i punti di controllo ausiliari: Mediante il comando fog, mostrato in
figura 4.11, possibile definire delle relazioni che permettono di ottenere i punti di
passaggio delle curve in funzione della posizione dei punti di controllo ausiliari e della loro
posizione di riferimento.

Si arriva dunque alla geometria del profilo parametrizzata.

29

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.11: Introduzione delle relazioni per la parametrizzazione delle curve

Figura 4.12: Definizione dei punti di passaggio

4.2.7 Realizzazione curva: A questo punto possibile generare la curva del profilo
tramite il comando Spline. Attraverso il quale si possono unire tutti i punti di passaggio
calcolati e quindi tracciare la curva desiderata.

30

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.13: Forma del profilo iniziale

4.2.8 Realizzazione superficie: Per realizzare la superficie dellalettone stato


necessario utilizzare il comando Estrusione attraverso il quale si estrude in direzione y la
curva generata della quantit da noi voluta. Fatto ci con il comando Riempimento
abbiamo creato la superficie interna alla curva disegnata e alla curva opposta creata dal
comando estrusione.

Infine il comando Unione ha reso possibile la configurazione complessiva.

Figura 4.14: Realizzazione superficie

4.2.9 Definizione della scalatura e rotazione del profilo: Per completare il modello
parametrico stato necessario applicare il comando Scalatura il quale permettere di
ridurre o ingrandire in maniera proporzionale le dimensioni del profilo e il comando
31

Capitolo 4 Modello parametrico per la definizione della geometria

Rotazione il quale permette di modificare langolo di incidenza del profilo. Entrambi i


comandi permettono unazione rispetto al punto di origine del profilo stesso.

Figura 4.15: Definizione della scalatura

4.3 Parametrizzazione del profilo posteriore

Per realizzare il profilo posteriore stato sufficiente eseguire gli stessi passaggi fatti per il
profilo anteriore, ma con qualche differenza.

Per prima cosa, non avendo un alettone a doppio profilo come riferimento e di
conseguenza un profilo posteriore esistente, stato scelto di prendere come profilo di
riferimento un NACA 4412. I punti di controllo di tale profilo sono stati estrapolati da un
apposito software che permette di costruire i vari tipi di profili NACA indicandone la sigla
e il numero di punti di controllo. In figura 4.16 mostrato il profilo scelto.

32

Capitolo 4 Modello parametrico per la definizione della geometria

Figura 4.16: NACA 4412

Noti i punti di controllo iniziali stato possibile definire i punti di controllo ausiliari e di
conseguenza la curva di Bezier dipendente da essi. La differenza principale tra il profilo
anteriore e posteriore stata che questultimo necessita di un parametro aggiuntivo.
Infatti oltre alla scalatura e la rotazione del profilo realizzato necessario definire anche
la sua posizione sullasse z, cio la sua traslazione rispetto alla direzione z. Facendo ci si
pu posizionare il bordo dattacco del profilo posteriore ad unaltezza diversa rispetto al
bordo dattacco del profilo anteriore.

33

Capitolo 4 Modello parametrico per la definizione della geometria

Un esempio della posizione e della forma dei due profili visibile in figura 4.17.

Figura 4.17: Profilo anteriore e posteriore

34

Capitolo 4 Modello parametrico per la definizione della geometria

4.4 Realizzazione del box di calcolo

Il box che definisce il dominio di calcolo stato realizzato allinterno di Catia attraverso la
seguente procedura:

Si scelto prima di tutto il tipo di box di calcolo: nel nostro caso abbiamo scelto
come tipo di box quello anche chiamato a panettone
Quindi necessario definire le dimensioni: la parte anteriore a forma di
semicirconferenza stata fatta con un raggio pari a 10 volte la corda dellalettone,
mentre la parte rettangolare ha una lunghezza pari a 16 volte la corda e unaltezza
corrispondente al diametro della semicirconferenza
Lo spessore del box , come si pu vedere in figura 4.18, di piccole dimensioni in
quanto lo studio aerodinamico viene successivamente svolto in STAR-CCM+ in
ambito bidimensionale.

Figura 4.18: Box di calcolo

35

Capitolo 4 Modello parametrico per la definizione della geometria

La scelta di realizzare il box allinterno di Catia dovuta al fatto che questo permette di
identificare univocamente le varie superfici di cui composto una volta denominate.
Nellottica di una procedura di ottimizzazione, infatti, la generazione del box allinterno di
STAR-CCM+ porterebbe dei problemi allidentificazione delle diverse superfici che lo
compongono e di conseguenza allassegnazione delle condizioni al contorno. Si preferito
dunque realizzare anche il box in Catia per poi esportare separatamente tutte le superfici
che costituiscono il modello cad allinterno di STAR-CCM+. Cos facendo si sono risolti i
problemi legati allidentificazione automatica delle superfici senza ricorrere alla
numerazione assegnata in maniera random dal solutore aerodinamico durante
limportazione, che come prima accennato, potrebbe risultare diversa a seconda della
configurazione assegnata.

36

Capitolo 5 Analisi della configurazione

5 Analisi della configurazione

5.1 Introduzione

Prima di importare i parametri della configurazione analizzata dallottimizzatore


allinterno di Catia, essi devono essere analizzati in maniera tale da non generare profili
scorretti che porterebbero ad un blocco del software e di conseguenza
dellottimizzazione. Ci avviene attraverso il software di calcolo Matlab.

5.2 Utilizzo del software Matlab

Attraverso Matlab, come spiegato nellintroduzione, viene analizzata ogni configurazione


dellalettone utilizzata nel processo di ottimizzazione. Il primo passo da far compiere al
software quello di tracciare le curve dei due profili dellalettone determinate dai
parametri in ingresso. Per far ci si utilizzano le stesse relazioni utilizzate nel modello
parametrico di Catia e, una volta determinati i punti di passaggio possibile tracciare le
varie curve attraverso la funzione bezier presente allinterno del software.

37

Capitolo 5 Analisi della configurazione

Una volta fatto ci, il software dovr controllare che la curva del dorso sia in ogni punto al
di sopra della curva del ventre, chiaramente per entrambi i profili. Di conseguenza viene
fatta uninterpolazione di 1000 punti lungo la corda sia con la curva del dorso, sia con
quella del ventre, accertandosi che la prima interpolazione riesce sempre a dare un valore
superiore alla seconda.

Chiaramente Matlab dovr ulteriormente controllare che i due profili non si


sovrappongano. Se tutte le condizioni di correttezza della configurazione vengono
rispettate in uscita il software fornir un segnale pari a 1, e lanalisi aerodinamica pu
proseguire, altrimenti un segnale pari a 0 e lottimizzatore passer immediatamente alla
configurazione successiva.

Per un ulteriore controllo da parte dellutente i profili dellalettone vengono disegnati


anche dal software Matlab e salvati come file .jpg.

Il file .m completo utilizzato dal software per poter effettuare il controllo dei profili
riportato in Appendice B.


38

Capitolo 6 Analisi CFD dellalettone

6 Analisi CFD dellalettone

6.1 Introduzione

In questo capitolo verr illustrata la procedura di analisi CFD, che verr eseguita
allinterno di ogni ciclo di ottimizzazione per ciascun modello generato, al fine di ottenere
le caratteristiche aerodinamiche dellalettone.

La valutazione aerodinamica viene svolta attraverso il solutore STAR-CCM+, che si basa


sullutilizzo di un codice di calcolo RANS.

La sequenza delle fasi che si susseguono durante lanalisi CFD sono le seguenti:

Importazione della geometria del modello e del box


Impostazione delle condizioni al contorno e della mesh
Settaggio del solutore
Calcolo del flusso
Esportazione dei report delle forze

Queste fasi devono essere fatte ogni ciclo di ottimizzazione, di conseguenza sar
necessaria una macro in linguaggio .java che permetta lautomatizzazione della
procedura. La macro .java di facile realizzazione allinterno di STAR-CCM+, basta infatti
registrare i settaggi che si compiono attraverso il comando REC e stoppare al termine
delle operazioni. La macro utilizzata per lottimizzazione riportata in Appendice C.

6.2 Importazione della geometria del modello e del box

La geometria del modello e del box vengono importati in STAR-CCM+ come file .igs e
sono rappresentati come un insieme di superfici. Il comando importazione viene
registrato allinterno della macro .java relativamente ad una particolare configurazione
che in quel momento oggetto di lavoro. Poich durante lottimizzazione saranno
generate diverse configurazioni bisogna rendere questa macro nella forma pi generale
possibile. Per far questo basta cancellare il percorso seguito durante limportazione e
sostituirlo con il nome del file generato da Catia.

39

Capitolo 6 Analisi CFD dellalettone

Basta dunque che allinterno della stringa relativa al percorso compaia semplicemente
quanto segue:

Figura 6.1: Modifica da apportare alla macro per limportazione del modello

Si riesce cos a importare la geometria e il box. Una volta importate, le superfici vengono
subito rinominate da STAR-CCM+ in modo da essere chiaramente identificabili
nellassegnazione delle condizioni al contorno. Inoltre al fine di una qualit migliore per la
mesh, si sono raggruppate con il comando combine le diverse superfici che costituiscono
ununica parte specifica della simulazione.

La geometria sar quindi suddivisa nei gruppi:

Face 2
Face 4
Face 7
Face 9
Ingresso
Profilo anteriore
Profilo posteriore
Uscita

40

Capitolo 6 Analisi CFD dellalettone

Ci pu essere visto in figura 6.2 seguente:

Figura 6.2: Sottogruppi delle varie superfici in STAR-CCM+

6.3 Impostazioni al contorno e generazione della mesh

Il modello importato allinterno di STAR-CCM+ composto da regioni che hanno come


unica condizione al contorno quella di parete (wall) la quale va modificata l dove non sia
verificata. In particolare le condizioni al contorno imposte per ciascuna regione sono:

Velocity inlet: si impone per la regione denominata ingresso per la quale si settano
la velocit del flusso ed i suoi coseni direttori;
Pressure outlet: si impone per la regione denominata uscita per la quale si setta il
valore della pressione asintotica;
Simmetry: si impone per le regioni denominate Face 2 , Face 4, Face 7, Face 9 ;
Wall: si impone per le regioni denominate profilo anteriore e profilo posteriore.

Come si vede dalla figura precedente ogni regione sar caratterizzata dal simbolo
corrispondente alla condizione al contorno specifica.

Nella figura seguente mostrato il modello importato e le condizioni al contorno:

41

Capitolo 6 Analisi CFD dellalettone

Figura 6.3: Visualizzazione delle condizioni al contorno assegnate

Al fine di risolvere il problema fluidodinamico necessario fare una mesh di superficie e


una di volume al fine di poter svolgere il calcolo del flusso.

Il modello di meshatura superficiale stato fatto con celle poliedriche dal momento che
queste mostrano una maggior regolarit nella discretizzazione dello spazio. Dalla finestra
di dialogo di STAR-CCM+ si espande la voce Continua per poi andare su Mesh1, dove,
cliccando su Select Meshing Model, possibile scegliere il modello Surface Remesh per
fare la Mesh di superficie e Polyedral Mesher per la mesh di volume; infine si clicca su
Prism layer mesher.

La realizzazione della mesh passa attraverso la definizione delle dimensioni caratteristiche


delle celle che la compongono. Lottimizzazione un processo che deve essere in grado di
svolgersi in tempi rapidi, di conseguenza sia la costruzione della griglia, cos come il
calcolo del flusso, devono avvenire in tempi ragionevoli tali da non influenzare troppo la
tempistica di calcolo. La griglia di calcolo, allora, si trova a dover soddisfare due requisiti
di natura opposta: deve essere sufficientemente rada da garantire la sua generazione in
tempi contenuti, ma allo stesso tempo deve essere sufficientemente fitta in maniera tale
da dare una stima delle grandezze integrali con adeguata precisione.

42

Capitolo 6 Analisi CFD dellalettone

Sia per la mesh di superficie che per quella di volume necessario impostare congruenti
valori dimensionali dei loro parametri al fine di ottenere una mesh valida per
lottimizzazione. Il significato dei parametri caratteristici della meshatura presenti in
STAR-CCM+ sono i seguenti:

Per la mesh di superficie

Base Size: la dimensione caratteristica dellelemento superficiale, che viene


utilizzato di default dal meshatore per tutte le superfici, qualora non ci sia un
ulteriore specificazione;
Surface Curvature: rappresenta il numero di punti in cui viene suddivisa una
circonferenza di raggio unitario. Il valore di default 36, e viene consigliato un suo
aumento l dove siano presenti aree del modello con curvatura maggiore. Anche
in questo caso, quindi, questo valore pu variare a seconda della superficie in
esame;
Surface Growth Rate: rappresenta il fattore di crescita della cella. Aumentando
tale valore si ottiene una meshatura superficiale con una maggiore percentuale di
elementi di dimensione prossima a quella settata e caratterizzata da un gradiente
di crescita superiore.

Per la mesh di volume

Tet/Poly Density: sono i parametri che regolano la costruzione della mesh di


volume a partire da quella di superficie. I parametri da settare saranno Density (la
quale rappresenta la densit delle celle e quindi allaumentare di tale valore
aumenta il numero di celle poliedriche) e Growth Factor (il quale rappresenta il
gradiente di crescita delle celle e quindi incrementa il numero di celle dove si ha
una maggior densit nella mesh superficiale);
Tet/Poly Volume Blending: il parametro che regola il passaggio dalla densit di
mesh superficiale a quella di volume. Un incremento di tale parametro rispetto al
suo valore unitario rende pi brusca la transizione, creando problemi di
distorsione delle celle.

43

Capitolo 6 Analisi CFD dellalettone

A questo punto disabilitando la Prism mesh per quanto riguarda il box abbiamo potuto
definire le caratteristiche del Prism layer del profilo anteriore e posteriore. In particolare
abbiamo definito il numero, lo spessore e la distensione.

Si assegnano dunque i parametri per la generazione della mesh per il box e per i profili
dellalettone, rispettivamente riportati nella seguente tabella.

Tabella 6.4: Parametri per la mesh

Nel presente lavoro si scelto di realizzare una mesh pi rada nel box e pi fitta nei corpi,
in maniera tale da avere una stima migliore delle grandezze integrali che su questultimo
agiscono.

I valori assegnati e riportati nelle tabelle hanno permesso di realizzare una mesh
composta da 149382 celle la quale permette un tempo di calcolo totale dei risultati dello
studio aerodinamico di circa 30 minuti lavorando con un solo processore. In questo modo
si pu raggiungere, quindi, un buon compromesso fra i due requisiti richiesti.

44

Capitolo 6 Analisi CFD dellalettone

Una volta assegnati i parametri possibile dare il via alla generazione della mesh di
superficie che agisce discretizzando le superfici in esame con elementi triangolari. Su
questa stessa mesh di superficie, costituita da celle poliedriche, verr costruita la mesh di
volume che verr dapprima realizzata con celle tetraedriche che saranno a loro volta
combinate al fine di ottenere una mesh di volume finale poliedrica.

Infine con il comando Convert to 2D possibile trasformare il nostro studio da


tridimensionale a bidimensionale.

Figura 6.4: Mesh di volume dellalettone

45

Capitolo 6 Analisi CFD dellalettone

Figura 6.5: Particolare della mesh di volume

6.4 Impostazioni delle condizioni del flusso

Dopo aver creato la mesh di volume necessario impostare le condizioni del flusso
affinch STAR-CCM+ sia in grado di poter valutare le forze che agiscono sul modello. Per
poterle impostare necessario specificare un set di parametri relativi alle caratteristiche
del flusso (specificando il fluido in cui si sta lavorando) e determinare il tipo di solutore
che deve essere utilizzato, i criteri di convergenza o di arresto del calcolo.

I parametri impostati allinterno del solutore sono:

Caratteristiche del flusso: in corrispondenza della voce Model allinterno del


sottogruppo Physics1 si introducono le informazioni riguardanti la densit e la
viscosit dellaria che valgono rispettivamente = 1.225 Kg/m^3 e = 1.79*10^(-5);
Condizioni al contorno: si determinano il modulo della velocit e il valore dei
coseni direttori; nel caso in esame stata scelta una velocit con modulo di 33
m/s (circa 120 Km/h) con direzione lungo lasse x.

46

Capitolo 6 Analisi CFD dellalettone

Tipo di solutore: si determina il modello da adottare per la soluzione del flusso.


Nel presente lavoro stato scelto un solutore di tipo segregated che si mostra
particolarmente adatto a risolvere problemi legati ai flussi incomprimibili,
basandosi su una forma parzialmente disaccoppiata delle equazioni del flusso. In
analogia con altri lavori stato inoltre scelto il modello di turbolenza k- model.
Criteri di convergenza e di arresto: dopo varie prove eseguite si potuto scegliere
uno stopping criteria di 1100 iterazioni, sufficiente per la definizione corretta delle
forze in gioco.

6.5 Esportazione dei report delle forze

Dal momento che per ogni ciclo di ottimizzazione si vogliono conoscere i coefficienti delle
forze di portanza e resistenza che sono stati calcolati, diventa necessario la loro
esportazione in un file di testo. Bisogna ricordarsi dunque quando si sta registrando la
macro, di impostare la registrazione dei report.

Alla stessa maniera di come si proceduto precedentemente, anche in questo caso


necessario cancellare il percorso di esportazione, in maniera tale che il software effettui
questa operazione nella stessa cartella in cui si sta lavorando.


47

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

7 Procedura di ottimizzazione in modeFRONTIER

7.1 Schema logico di ottimizzazione

Come gi descritto nel capitolo Approccio alla procedura di ottimizzazione lobbiettivo


della presente ottimizzazione quello di definire, tra le diverse configurazioni analizzate,
una possibile forma dellalettone che minimizzi il coefficiente di resistenza (Cd) e
massimizzi il coefficiente di portanza (Cl). Lottimizzazione sar quindi di tipo Multi-
obbiettivo in quanto si hanno due funzioni obbiettivo. Lottimizzazione viene svolta
ponendo un flusso daria orizzontale a velocit costante avente il valore di 33 m/s (circa
120 Km/h) e la dimensione totale dellalettone fissata e pari a 300 mm.

Osservando il workflow di modeFRONTIER costruito per il lavoro svolto possibile


individuare i seguenti nodi:

Input node: Impostazione delle variabili di ottimizzazione unitamente al passo di


discretizzazione e ai relativi estremi di variazione;
Doe node: Definizione della popolazione di partenza e della modalit di
generazione della stessa;
Scheduler node: Scelta del tipo di algoritmo di ottimizzazione e dei relativi
parametri di controllo;
Matlab node: Selezione del file.m da eseguire;
If node: Esegue il controllo del risultato fornito da Matlab e determina la
continuazione o larresto del calcolo aerodinamico di una specifica configurazione;
Catia node: Genera la geometria dellalettone da analizzare in STAR-CCM+ e la
esporta in formato .igs;
SHH node: Impostazione dei parametri per la connessione al Linux Cluster del
laboratorio
Support file node: Assegnazione dei comandi .java per STAR-CCM+;
Output file node: Lettura del file di report prodotto da STAR-CCM+;
Output node: Estrazione del valore da utilizzare dal file di report delle forze;
Design objective: definizione degli obbiettivi


48

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.1: Workflow di modeFrontier per lottimizzazione dellalettone

49

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

7.2 Impostazione del modello CAD

Nel nodo Catia necessario selezionare il file relativo al modello parametrizzato e ogni
ciclo la geometria verr aggiornata prima che la configurazione arrivi al nodo successivo.
Affinch Catia venga correttamente avviato ad ogni passo del ciclo iterativo si deve
definire il driver con il quale eseguito il software cad. La sua definizione avviene
attraveso il pulsante Catia driver dalla finestra centrale di dialogo del nodo, riportata in
figura 7.2.

Figura 7.2: Finestra per la definizione di avvio del driver di Catia

50

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Le variabili di input di modeFRONTIER devono essere connesse con i parametri che sono
stati definiti allinterno del modello parametrico in Catia.

Ricordando che gli input del modello sono:

Tre punti ausiliari per il dorso del profilo anteriore


Tre punti ausiliari per il ventre del profilo anteriore
Tre punti ausiliari per il dorso del profilo posteriore
Tre punti ausiliari per il ventre del profilo posteriore
Scalatura del profilo anteriore
Scalatura del profilo posteriore
Traslazione lungo lasse z del profilo posteriore
Rotazione del profilo anteriore
Rotazione del profilo posteriore

La connessione fra i parametri di input e quelli corrispondenti in Catia viene eseguita con
il comando introspection, schematizzato come un binocolo vicino a ciascuna variabile,
attraverso il quale il software fornisce un elenco di tutti i parametri che sono presenti nel
modello CAD e ne permette il collegamento in modo semplice, come rappresentato in
figura 7.3.

51

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.3: Implementazione degli input allinterno di modeFRONTIER

7.3 Impostazione delle variabili di ottimizzazione

Precedentemente si sono individuate quelle che sono le variabili da fornire a


modeFRONTIER per effettuare lottimizzazione, di tali parametri bisogna definire gli
intervalli estremi di variazione.

Sar dunque necessario dare, per ogni variabile di ingresso, un limite superiore
(Upperbound), un limite inferiore (Lowerbound) ed il numero di discretizzazioni in cui
deve essere suddiviso lintervallo di variazione (Delta Value). A titolo di esempio, nella
figura 7.4, riportata la finestra di dialogo che si ottiene aprendo la variabile che
definisce la rotazione del profilo anteriore.

52

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.4: Finestra per limpostazione delle variabili di ottimizzazione

7.4 Definizione del set di famiglia iniziale: DOE (Design of experiment)

Affinch la procedura abbia inizio necessario avere a disposizione un set iniziale di


design da cui iniziare la ricerca della soluzione ottima. Attraverso il nodo scheduler
possibile definire sia la popolazione iniziale che lalgoritmo di ottimizzazione.

Il nodo DOE permette di definire una popolazione iniziale di configurazioni, che


generalmente si aggirano intorno al centinaio, la quale permette lesplorazione dellintero
spazio definito dalle variabili di input e dai loro rispettivi intervalli di variazione.
Attraverso poi lalgoritmo di ottimizzazione vengono selezionati i design di DOE
considerati di interesse e su questi ne vengono creati di nuovi. In altre parole lutilizzo di
un nodo DOE in questi termini ha due vantaggi: il primo riguarda la diminuzione dei tempi
dellottimizzazione, la quale aumenterebbe aumentando il numero di combinazioni
generate da modeFRONTIER, il secondo che, con lutilizzo di una popolazione iniziale si
riesce ad individuare quel range di intervalli in cui vanno a stabilizzarsi le configurazioni da
cui possibile ripartire per una ricerca pi accurata e approfondita. Questo modo di
procedere si presta a quelle ottimizzazioni caratterizzate da molteplici parametri, come
nel caso del nostro lavoro.

Allinterno del DOE possibile scegliere diverse sequenze come mostrato in figura 7.5.

53

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.5: Sequenze allinterno del nodo DOE

7.5 DOE: sequenze utilizzate

Nelle procedure di ottimizzazione condotte nel presente lavoro si sono utilizzate due tipi
di sequenze:

Sobol: un algoritmo di tipo deterministico simile al random, salvo il fatto che, a


differenza di questultimo, offre un campionamento pi regolare del design space;
Monte Carlo: esso si basa su un algoritmo che genera una serie di numeri
incorrelati tra loro, che seguono la distribuzione di probabilit che si suppone
abbia il fenomeno da indagare. Lincorrelazione tra i numeri garantita da un test
chi quadrato. Quindi il metodo Monte Carlo realizza una serie di realizzazioni del

54

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

fenomeno in esame, con il peso proprio della probabilit di tale evenienza,


cercando di esplorare in modo denso tutto lo spazio dei parametri del fenomeno.

In entrambi i casi la popolazione iniziale stata scelta pari a 100 design.

7.6 Impostazione dellalgoritmo di ottimizzazione (Scheduler Node)

Il processo di ottimizzazione stato condotto attraverso luso di algoritmi genetici. Gli


algoritmi genetici riproducono il processo evolutivo della specie umana. Partendo da una
popolazione iniziale (definita nel nodo DOE) il nodo Scheduler produce nuove generazioni
che contengono gli elementi migliori delle generazioni precedenti, muovendosi dunque
verso una condizione di ottimo globale. La soluzione trovata non sar legata ad una
condizione di ottimo assoluto, bens di ottimo relativo dipendente, come ovvio, alla
popolazione a cui si fa riferimento. La qualit di ciascun individuo, che compone la
popolazione delle possibili soluzioni del problema posto, definito attraverso una
funzione di fitness. La funzione di fitness indica la capacit di adattamento allambiente
dellindividuo. Gli individui che hanno una capacit elevata di adattamento si riproducono
e riescono cos a trasmettere i loro geni alle generazioni future e , sono quelli, dunque,
che presentano la funzione di fitness pi elevata.

Nel presente lavoro la funzione di fitness coincide con la funzione obbiettivo, quindi
scopo dellalgoritmo sar quella di ottimizzare la funzione di fitness. Ogni individuo della
popolazione rappresenta un elemento allinterno dello spazio di ricerca (design space). I
pi importanti operatori di ricerca sono il crossover e la mutazione: il primo ricombina i
geni in maniera tale che i loro figli abbiano caratteristiche di entrambi i genitori, il
secondo reintroduce nella popolazione materiale genetico perduto.

Gli algoritmi di ottimizzazione utilizzati sono i due algoritmi genetici denominati MOGA II
(Multi objective genetic algorithm) e l ARMOGA (Adaptive Range MOGA). Per entrambi
necessario settare diversi parametri per avere la completa funzionalit dellalgoritmo.

Numero di generazioni: a partire dal numero di individui della generazione di


partenza (DOE), lalgoritmo crea ad ogni nuova generazione, un identico numero
di individui. Nel presente lavoro stato scelto un numero di generazioni pari a 15.

55

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Probabilit di Crossover direzionale: consente di ottenere individui sempre


migliori e il suo valore compreso tra 0 e 1. Porre valore uguale a 0 significa
ottenere un crossover di tipo classico e dunque le nuove generazioni verranno
prodotte con lincrocio del DNA. Porre un valore uguale a 1 vuol dire ottenere le
nuove generazioni come combinazioni delle configurazioni tra loro pi vicine.
Scegliere un valore troppo alto porterebbe ad avere delle soluzioni di ottimo che
convergono tutte, molto presto, tuttavia la scelta di un valore troppo basso
allungherebbe di molto i tempi. Nel presente lavoro si scelto un valore pari a 0,5.
Probabilit di selezione: generalmente questo valore viene lasciato pari a quello di
default pari a 0,05. Esso rappresenta la possibilit che un individuo riesca a
trasmettere tutto il suo patrimonio genetico qualora sia inserito nella popolazione
successiva.
Probabilit di mutazione: generalmente questo valore viene lasciato quello di
default pari a 0,1 e rappresenta la probabilit che il patrimonio genetico di un
individuo venga mutato in maniera random.
DNA String Mutation Ratio: rappresenta la percentuale di DNA che viene cambiata
dalla mutazione. Si scelto in questo caso un valore pari a 0,05.
Elitismo: si sceglie di abilitarlo dal momento che questo parametro garantisce una
migliore efficienza ed accuratezza dellalgoritmo, poich vengono preservati i
migliori individui che costituiscono la popolazione.
Trattamento dei vincoli: possibile trattare i vincoli in due modi differenti:
penalizzazione dei vincoli che violano i vincoli imposti o penalizzazione delle
soluzioni che violano la definizione della funzione obbiettivo. Nel presente lavoro
si scelta la seconda soluzione.
Tipo di algoritmo: possibile scegliere tra differenti tipi di algoritmo, sulla base di
lavori fatti precedentemente si usato il criterio generazionale. Questo tipo di
algoritmo aggiorna ad ogni generazione un certo numero di configurazioni con cui
si lavora.

Oltre a questi parametri lARMOGA ha bisogno del settaggio di:

Inizio della generazione del range di adattamento: tale valore definisce la


generazione in cui inizia il range di adattamento: chiaramente se tale valore
56

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

superiore al numero di generazione il range di adattamento viene ignorato. Esso


pu prevenire la prematura convergenza dellottimo locale. Nel presente lavoro
tale valore stato posto pari a 2.
Intervallo di generazione del range di adattamento: esso definisce lintervallo del
range di adattamento. Tale valore stato scelto pari a 5.

Nella figura 7.6 mostrato il settaggio nel caso dellottimizzazione eseguita con
lalgoritmo genetico MOGA II.

Figura 7.6: Algoritmo genetico MOGAII

57

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

7.7 Nodo ssh: connessione al cluster remoto

Questo passaggio viene fatto avvalendosi del protocollo shh (secure shell), tale
collegamento viene effettuato attraverso un apposito nodo che risiede in
modeFRONTIER. dunque sufficiente impostare i parametri relativi alla connessione e il
percorso sul cluster del file di avvio di STAR-CCM+ per consentire lesecuzione del
programma.

I parametri da impostare per la connessione del nodo richiedono limpostazione del nome
dellhost, del numero della porta e della password per la connessione come riportato in
figura 7.7. Il percorso del file di avvio ed il numero di processori utilizzati viene invece
indicato nello script, che viene eseguito subito dopo aver stabilito la connessione come
visibile in figura 7.8.

Figura 7.7: Impostazione del nodo ssh

58

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.8:Impostazione del nodo ssh

59

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

7.8 Impostazione del nodo transfer file

Il processo di ottimizzazione che avviene in modeFRONTIER pu essere paragonato ad un


insieme di scatole cinesi. Durante lesecuzione del processo di ottimizzazione, infatti, il
software modeFRONTIER genera allinterno della cartella della simulazione in corso un
insieme di sottocartelle, ciascuna delle quali corrisponde ad un differente design
generato. In ogni cartella appartenente al design generato presente un ulteriore gruppo
di sottocartelle, dalle quali vengono avviati i software utilizzati nella simulazione:
necessario quindi specificare quali debbano essere trasferiti da una cartella di lavoro
allaltra. Di conseguenza il file .igs relativo al modello e alla superficie del box deve essere
copiato dalla cartella di lavoro di Catia alla cartella di lavoro di STAR-CCM+. Questa
operazione viene fatta proprio attraverso il nodo transfer file come riportato in figura 7.9
e figura 7.10.

Figura 7.9:Transfer file

60

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Figura 7.10: Transfer file

7.9 Selezione del file di output e definizione della funzione obbiettivo

La lettura degli output, registrati dal nodo di STARCCM+, avviene attraverso i file di
output. Si pu notare che loutput file deve essere collegato con luscita del nodo ssh,
affinch la lettura del file avvenga nella stessa cartella di lavoro. Quindi lo scopo del file di
output quello di estrarre il file dalla cartella di lavoro del Linux Cluster e di poterlo
utilizzare sul computer locale di lavoro, come visibile in figura 7.11.

Figura 7.11: Output file

61

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Per estrarre i valori del coefficiente di portanza e di resistenza dai rispettivi file di testo
necessario specificare la loro posizione allinterno della finestra che si apre cliccando sul
tasto Open Output File. Per identificare tale posizione necessario utilizzare un file
caratteristico di esportazione delle grandezze, relativo allesame di una configurazione di
prova. Limportazione di un file campione definito in figura 7.12.

Figura 7.12: Esportazione dei file di report del calcolo CFD


62

Capitolo 7 Procedura di ottimizzazione in modeFRONTIER

Lobbiettivo dellottimizzazione quello di massimizzare il coefficiente di portanza e di


minimizzare il coefficiente di resistenza. Di conseguenza allinterno del workflow saranno
presenti due nodi chiamati rispettivamente massimizza e minimizza.

Il primo sar collegato alloutput variable del coefficiente di portanza mentre il secondo a
quello del coefficiente di resistenza. Si riporta nella figura 7.13 la definizione del nodo
relativo alla massimizzazione del coefficiente di portanza.

Figura 7.13: Settaggio dellobbiettivo

Per settare correttamente la funzione obbiettivo sar necessario definire i seguenti


parametri:

Name: dovr essere introdotto il nome che sar usato da modeFRONTIER per
identificare loggetto di ottimizzazione;
Enabled: qualora spuntato specifica se loggetto deve essere considerato o
ignorato dallalgoritmo scelto nel nodo scheduler;
Format: ossia la tipologia del formato numerico che sar usato nelle varie tabelle
per visualizzare i valori delloggetto;
User Expression: ossia lespressione che definisce la funzione obbiettivo;
Type in questa casella si decide se minimizzare o massimizzare la funzione
obbiettivo.

63

Capitolo 8 Analisi dei risultati

8 Analisi dei risultati

8.1 Analisi dei risultati e scelta della configurazione vincente

La procedura di ottimizzazione ha avuto come obbiettivo la ricerca di una combinazione


di parametri geometrici dei profili dellalettone che garantisca una configurazione che
minimizzi la resistenza e massimizzi la deportanza.

Il tempo medio di simulazione per ogni configurazione stato di circa 10 minuti


avvalendosi di 4 processori in parallelo. Laumento dei processori non avrebbe diminuito
in maniera apprezzabile il tempo impiegato per ciascuna simulazione quindi, avendo un
maggior numero di processori a disposizione, si scelto di analizzare fino a 7
configurazioni in contemporanea, andando quindi ad utilizzare un massimo di 28
processori. Un aumento di processori per il singolo design sarebbe risultato efficace
qualora la mesh fosse ulteriormente fitta, infatti, a parit di numero di processori
utilizzati, questultima avrebbe comportato tempi elevati per la sua generazione, di
conseguenza un aumento del numero di processori sarebbe stato salutare. Nel presente
lavoro si lavorato mediamente con un numero di celle che si aggira attorno ad un valore
di 150.000 proprio per avere un buon compromesso da un punto di vista del legame
processori tempi richiesti.

Prendendo come riferimento lottimizzazione eseguita con un sistema di generazione


della famiglia iniziale di tipo Sobol e con lalgoritmo di ottimizzazione del tipo MOGA II , si
pu notare che in esso sono state analizzate circa 2800 configurazioni di cui circa 1400
sono state scartate o meglio sono state arrestate perch la geometria di tali design era
incompatibile con i vincoli imposti.

Le configurazioni analizzate sono riportate in figura 8.1 grazie allutilizzo del grafico
History del design table. In tale grafico possibile visualizzare landamento del Cl per ogni
configurazione analizzata. In figura 8.2 possibile vedere landamento del Cd per ogni
configurazione analizzata. Come si pu notare dalle figure ci sono spazi vuoti fra alcune
configurazioni: ci dovuto a delle interruzioni di simulazione, causate dal blocco del
computer utilizzato. Infatti in caso di interruzione, dal momento di ripresa

64

Capitolo 8 Analisi dei risultati

dellottimizzazione, modeFRONTIER assegner al primo design analizzato un numero pari


al doppio dellultima configurazione terminata prima del blocco.

Nella History sono evidenziati in verde gli individui pi interessanti.

Figura 8.1: Design Table History

65

Capitolo 8 Analisi dei risultati

Figura 8.2 : Design Table History

66

Capitolo 8 Analisi dei risultati

In figura 8.3 possibile vedere la Scatter chart Cl-Cd.

Figura 8.3: Scatter chart Cl-Cd


67

Capitolo 8 Analisi dei risultati

Fra gli elementi pi interessanti definiti dallottimizzatore sono stati selezionate 6


configurazioni vincenti, le quali possono essere visualizzate in figura 8.4.

Figura 8.4: Particolare dello Scatter con configurazioni vincenti

68

Capitolo 8 Analisi dei risultati

Le configurazioni vincenti sono descritte nella tabella 8.1.

Numero design Cd Cl

2864 0.0614 2.4812


8749 0.0539 2.3348
8933 0.0314 1.7131
9176 0.0310 1.6761
9179 0.0720 2.8593
9308 0.0537 2.3269
Tabella 8.1: Risultati design vincenti

Come si pu notare dai risultati ottenuti si cercato si selezionare design che


raggiungessero un buon compromesso fra un alto coefficiente di portanza e un basso
coefficiente di resistenza.

Inoltre nelle configurazioni vincenti stato scelto anche un design con alto coefficiente di
portanza, anche se ci comporta un pi alto coefficiente di resistenza: tale
configurazione, come ben visibile la 9179. I parametri caratterizzanti tale configurazione
sono riportati in tabella 8.2.

69

Capitolo 8 Analisi dei risultati

Parametro Valore

Ap1 74
Ap2 79
Ap3 97.5
Ap1v -69.5
Ap2v -105
Ap3v -56
Ap1f 35
Ap2f 25
Ap3f 18.5
Ap1fv -44.5
Ap2fv -41.25
Ap3fv -40.875
Rotazione profilo anteriore 7
Rotazione profilo posteriore -20
Scalautra profilo anteriore e posteriore 1 e 1.1 rispettivamente
Spostamento z profilo posteriore 124
Tabella 8.2: Parametri della configurazione 9179

70

Capitolo 8 Analisi dei risultati

Tale configurazione, da un punto di vista geometrico pu essere vista nella figura 8.5.

Figura 8.5: Configurazione 9179

71

Capitolo 8 Analisi dei risultati

Allo stesso modo stato scelto anche un design con basso coefficiente di resistenza,
anche se ci comporta un pi basso coefficiente di portanza: tale configurazione, come
ben visibile la 9176. I parametri caratterizzanti tale configurazione sono riportati in
tabella 8.3.

Parametro Valore

Ap1 73
Ap2 82.5
Ap3 98
Ap1v -67.5
Ap2v -105.5
Ap3v -53.5
Ap1f 39.5
Ap2f 18
Ap3f 26
Ap1fv -45
Ap2fv -37.5
Ap3fv -39.75
Rotazione profilo anteriore 1
Rotazione profilo posteriore -10
Scalautra profilo anteriore e posteriore 0.96 e 0.46 rispettivamente
Spostamento z profilo posteriore 84
Tabella 8.3: Parametri della configurazione 9176

72

Capitolo 8 Analisi dei risultati

Tale configurazione, da un punto di vista geometrico pu essere vista nella figura 8.6.

Figura 8.6: Configurazione 9176

73

Capitolo 8 Analisi dei risultati

Il design che per raggiunge il miglior compromesso tra alto coefficiente di portanza e
basso coefficiente di resistenza il numero 8749. Tale configurazione caratterizzata dai
parametri rappresentati in tabella 8.4.

Parametro Valore
Ap1 80
Ap2 82.5
Ap3 98
Ap1v -67.5
Ap2v -106
Ap3v -53.5
Ap1f 41
Ap2f 10
Ap3f 26
Ap1fv -52.5
Ap2fv -37.5
Ap3fv -38.625
Rotazione profilo anteriore 6
Rotazione profilo posteriore -19
Scalautra profilo anteriore e posteriore 0.98 e 0.54 rispettivamente
Spostamento z profilo posteriore 123
Tabella 8.4: Parametri della configurazione 8749

74

Capitolo 8 Analisi dei risultati

Tale configurazione, da un punto di vista geometrico pu essere vista nella figura 8.7.

Figura 8.7: Configurazione 8749

75

Capitolo 8 Analisi dei risultati

8.2 Visualizzazioni analisi CFD della configurazione 8749

Vettori velocit

76

Capitolo 8 Analisi dei risultati

Pressione totale


77

Capitolo 8 Analisi dei risultati

Coefficiente di pressione

78

Capitolo 8 Analisi dei risultati

8.3 Confronto delle caratteristiche aerodinamiche fra lalettone originale


e quello ottimizzato

Considerando come alettone ottimizzato la configurazione 8749 gi descritta nei paragrafi


precedenti andiamo adesso a fare un confronto delle caratteristiche aerodinamiche fra
tale configurazione e quella fornita, caratterizzata da un singolo profilo. Ripetendo
lanalisi CFD per lalettone originale si possono trovare i risultati esposti in tabella 8.5.

ALETTONE ORIGINALE ALETTONE OTTIMIZZATO


Cl = 1.9735 Cl = 2.3348
VARIAZIONE
+18.3%
ALETTONE ORIGINALE ALETTONE OTTIMIZZATO
Cd = 0.0580 Cd = 0.0539
VARIAZIONE
-7.06%
Tabella 8.5: Confronto delle caratteristiche aerodinamiche delle due configurazioni in esame

Come si pu facilmente vedere ottimizzando lalettone e trasformandolo in un alettone a


doppio profilo siamo riusciti ad aumentare il coefficiente di portanza (o meglio di
deportanza) e a diminuire il coefficiente di resistenza.

Quindi lobbiettivo di ottenere una configurazione migliore di quella di partenza stato


raggiunto.

79

Capitolo 8 Analisi dei risultati

8.4 Visualizzazioni dellalettone originale

Vettori velocit

80

Capitolo 8 Analisi dei risultati

Pressione totale

81

Capitolo 8 Analisi dei risultati

Coefficiente di pressione

82

Capitolo 8 Analisi dei risultati

8.5 Confronto tra i vari metodi di ottimizzazione utilizzati

Come esposto nei capitoli precedenti nel presente lavoro sono state svolte tre tipi di
ottimizzazioni:

1. Ottimizzazione con DOE del tipo Sobol e algoritmo del tipo MOGA II (i cui risultati
sono stati esposti nei paragrafi precedenti)
2. Ottimizzazione con DOE del tipo Sobol e algoritmo del tipo ARMOGA
3. Ottimizzazione con DOE del tipo Montecarlo e algoritmo del tipo MOGA II.

Andiamo ora a confrontare le differenze risultate utilizzando un ottimizzazione diversa da


quella esposta. Un primo risultato ben visibile che utilizzando come algoritmo genetico
il MOGA II le configurazioni che i software vanno ad analizzare sono man mano meno
scartabili da Matlab, mentre utilizzando come algortimo lARMOGA anche a fine
ottimizzazione si va incontro a molte configurazioni geometricamente scorrette.

Per quanto riguarda invece il numero delle configurazioni analizzate, il numero delle
configurazioni scartate e il numero delle soluzioni considerate da modeFRONTIER di
ottimo, esse possono essere visualizzate nella tabella 8.6:

Ottimizzatore N di Design N di Design scartati N di Design di


analizzati ottimo
Sobol e MOGA II 2790 1427 24
Sobol e ARMOGA 3000 2061 20
Montecarlo e MOGA 2764 1202 45
II
Tabella 8.6: Risultati dei vari algoritmi di ottimizzazione

Come si pu riscontrare anche da tali dati lalgoritmo MOGA II non solo permette di
compiere lottimizzazione con un numero minore di configurazioni analizzate e, di
conseguenza, in un minor tempo totale, ma riesce anche ad scartare un numero minore
di configurazioni.

83

Capitolo 8 Analisi dei risultati

In ogni caso andando ad analizzare i risultati della seconda ottimizzazione (Sobol con
ARMOGA) le configurazioni migliori sono riportate nella tabella 8.7.

Configurazione Cd Cl

3266 0.0389 1.8712


2745 0.0539 2.3258
2504 0.0721 2.6371
2692 0.0969 2.7955
3093 0.1328 2.8581
Tabella 8.7: Configurazioni vincenti nella seconda ottimizzazione

Mentre le design table history e la scatter chart ottenute in questa ottimizzazione sono
rappresentate nelle figure 8.8, 8.9 e 8.10.

Figura 8.8: Design Table History seconda ottimizzazione

84

Capitolo 8 Analisi dei risultati

Figura 8.9: Design Table History seconda ottimizzazione

Figura 8.10: Scatter chart Cl-Cd seconda ottimizzazione

85

Capitolo 8 Analisi dei risultati

Andando invece ad analizzare la terza ottimizzazione (Montecarlo con MOGA II) le


configurazioni migliori sono riportate in tabella 8.8:

Configurazione Cd Cl

2677 0.0389 1.8712


2517 0.0539 2.3258
2715 0.0721 2.6371
1993 0.0969 2.7955
1294 0.1328 2.8581
Tabella 8.8:Configurazioni vincenti nella terza ottimizzazione

Mentre le design table history e la scatter chart ottenute in questa ottimizzazione sono
rappresentate nelle figure 8.11, 8.12 e 8.13.

Figura 8.11: Design Table History terza ottimizzazione

86

Capitolo 8 Analisi dei risultati

Figura 8.12: Design Table History terza ottimizzazione

Figura 8.13: Scatter chart Cl-Cd terza ottimizzazione

87

Capitolo 8 Analisi dei risultati

In questultima ottimizzazione una configurazione interessante la 2677, la quale, anche


se ha un coefficiente di portanza leggermente inferiore a quello dellalettone originale,
riesce ad abbassare del 32,9% il coefficiente di resistenza. La geometria e lanalisi CFD di
tale configurazione sono riportate nelle figure 8.14, 8.15, 8.16 e 8.17.

Figura 8.14: Configurazione 2677

88

Capitolo 8 Analisi dei risultati

Figura 8.15: Vettori velocit della configurazione 2677

Figura 8.16: Pressione totale della configurazione 2677

89

Capitolo 8 Analisi dei risultati

Figura 8.17: Coefficiente di pressione della configurazione 2677

90

Capitolo 9 Conclusioni e sviluppi futuri

9 Conclusioni e sviluppi futuri

9.1 Conclusioni

Il presente lavoro ha avuto come scopo lottimizzazione di un alettone a doppio profilo da


installare su un autovettura da Granturismo in ambiente modeFRONTIER. Lalettone di
riferimento era caratterizzato da un unico profilo, il che ha richiesto la realizzazione della
configurazione iniziale del secondo profilo. A questo punto stato possibile procedere
con il processo di ottimizzazione al fine di ottenere una configurazione di insieme che
offrisse allo stesso tempo una bassa resistenza ed unelevata deportanza.

Lottimizzazione ha coinvolto diversi parametri in gioco che permettessero le forme pi


svariate dellalettone analizzato. Inoltre sono stati analizzati tre diversi metodi di
ottimizzazione da poi confrontare per poter definire quello pi stabile.

stato possibile quindi definire la geometria finale e, quindi, la realizzazione del CAD
definitivo che permette di ottenere un alettone con minor resistenza e maggior
deportanza rispetto alla configurazione di partenza. Particolare interesse stato dato poi
da un ulteriore configurazione dellalettone che, nonostante abbia una deportanza
minore della configurazione di partenza, riesce ad offrire un coefficiente di resistenza
molto basso.

Per quanto riguarda i metodi di ottimizzazione utilizzati si pu facilmente arrivare alla


conclusione che lalgoritmo genetico MOGA II risulta molto pi stabile e veloce. Infatti,
dai risultati ottenuti, risulta chiaro che tale algoritmo riesca non solo a trovare le soluzioni
di ottimo analizzando un numero inferiore di configurazioni e, quindi, in minor tempo, ma
procedendo nellottimizzazione va sempre verso soluzioni geometricamente corrette.
Quindi, a differenza dellalgoritmo genetico ARMOGA, ha una stabilit maggiore e riesce a
scartare un minor numero di design analizzati. Per quanto riguarda invece il sistema di
generazione della famiglia iniziale i due metodi analizzati, Sobol e Montecarlo, non hanno
fatto intravedere grosse differenze fra loro e possono essere considerati entrambi corretti
e affidabili.

91

Capitolo 9 Conclusioni e sviluppi futuri

9.2 Sviluppi futuri

Il presente lavoro non ha la presunzione di affermare che la configurazione ottenuta sia la


migliore in assoluto poich le geometrie date dallottimizzatore sono figlie degli intervalli
estremi che sono stati assegnati. Nessuno pu garantire a priori che la soluzione di ottimo
si trovi esattamente allinterno di quellintervallo, ma vero anche che pensare di
muovere le variabili di ottimizzazione allinterno di limiti piuttosto grandi comporterebbe
enormi tempi di ottimizzazione e, quindi, intollerabili. Per questo, dal momento che
lorientamento odierno verso potenze di calcolo sempre maggiori, sarebbe interessante
poter dar vita ad una procedura che veda due ottimizzatori lavorare in parallelo, sulla
medesima geometria di partenza a cui per siano stati assegnati opportuni valori di
intervalli di variazione differenti fra loro, ed operare ad ottimizzazioni concluse, un
confronto tra le configurazioni ottenute, scegliendo quella vincente. In questo modo si
otterrebbero pi combinazioni in tempi sicuramente pi ristretti.

In ogni caso la configurazioni finale pu essere presa come nuovo punto di partenza per
uno studio ancora pi accurato nel quale definire nuovi intervalli di variazione dei
parametri alla luce delle geometrie finora ottenute.

92

Bibliografia

Bibliografia

1. G.Lombardi, Appunti di aerodinamica degli aeromobili, Pisa 2008


2. G.Lombardi, Appunti di aerodinamica dei veicoli, Pisa 2008
3. G.Buresti, Appunti di lezione di fluidodinamica, Pisa 2005
4. Jhon Wiley & Sons, Engineering Optimization: Methods and Application, New York
1984
5. Pedgral, Introduction to optimization, Springer, New York 2000
6. Vanderplaast, N.G., Numerical Optimization Techniques for Engineering Design,
McGraw Hill, New York 1984
7. T. Spadafora, Studio del progetto di ottimizzazione fluidodinamica della deriva di
una barca a vela in ambiente modeFRONTIER, Tesi di Laurea in Ingegneria
Aerospaziale, 2010,Pisa
8. Vignocchi, Progettare con Catia V5, Seconda edizione, s.l. ATHENA AUDIOVISUALS
9. Sergio E. Perez, STAR CCM+, Tutorials
10. Esteco, modeFRONTIER User Manual
11. Dassault Systemes, Catia V5 Documentation
12. CD-ADAPCO STAR CCM+ User Guide

93

Appendice

Appendice A

clear all

close all

%%%%%%%%%%%%%%%% PRIMA CURVA%%%%%%%%%%%%%%%%%%%

%%%%% CALCOLO DELLE DISTANZE CON I PUNTI DI CONTROLLO

%%%%% AUSILIARI

cp_dorso=xlsread('C:\Users\alberto\Desktop\tutte le
curve\CP_dorso.xlsx','B2:D16','basic');

aux_cp_dorso=xlsread('C:\Users\alberto\Desktop\tutte le
curve\ausiliari_controllo.xls','A3:C5','basic');

dist_dorso=[];

for i=1:3

for j=1:13

dist_dorso(i,j)=sqrt((aux_cp_dorso(i,1)-
cp_dorso(j+1,1))^2+(aux_cp_dorso(i,3)-cp_dorso(j+1,2))^2);

end

end

min_dorso=(min(dist_dorso'))';

%% calcolo delle distanze normalizzate con il minimo di


ciascuna

dist_dorso_norm=[];

for i=1:3

dist_dorso_norm(i,:)=(dist_dorso(i,:)-
min_dorso(i,1))./min_dorso(i,1);

94

Appendice

end

%% calcolo dei COEFFICIENTI DI INFLUENZA

sigma_dorso=[0.6,0.45,1];

CI_dorso=[];

for i=1:13

for j=1:3

CI_dorso(j,i)=normcdf(1-
dist_dorso_norm(j,i),0,sigma_dorso(j));

end

end

xlswrite('C:\Users\alberto\Desktop\tutte le
curve\coefficienti.xls', CI_dorso,'Foglio1','E4');

%%%%%%%%%%%%%%% SECONDA CURVA%%%%%%%%%%%%%%%%%%%%

%%%%% CALCOLO DELLE DISTANZE CON I PUNTI DI CONTROLLO

%%%%% AUSILIARI

cp_ventre=xlsread('C:\Users\alberto\Desktop\tutte le
curve\CP_ventre.xlsx','B2:D16','basic');

aux_cp_ventre=xlsread('C:\Users\alberto\Desktop\tutte le
curve\ausiliari_controllo.xls','A7:C9','basic');

dist_ventre=[];

for i=1:3

for j=1:13

95

Appendice

dist_ventre(i,j)=sqrt((aux_cp_ventre(i,1)-
cp_ventre(j+1,1))^2+(aux_cp_ventre(i,3)-cp_ventre(j+1,2))^2);

end

end

min_ventre=(min(dist_ventre'))';

%% calcolo delle distanze normalizzate con il minimo di


ciascuna

dist_ventre_norm=[];

for i=1:3

dist_ventre_norm(i,:)=(dist_ventre(i,:)-
min_ventre(i,1))./min_ventre(i,1);

end

%% calcolo dei COEFFICIENTI DI INFLUENZA

sigma_ventre=[0.6,0.45,1];

CI_ventre=[];

for i=1:13

for j=1:3

CI_ventre(j,i)=normcdf(1-
dist_ventre_norm(j,i),0,sigma_ventre(j));

end

end

96

Appendice

xlswrite('C:\Users\alberto\Desktop\tutte le
curve\coefficienti.xls', CI_ventre,'Foglio1','E8');

%%%%%%%%%%% TERZA CURVA %%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% CALCOLO DELLE DISTANZE CON I PUNTI DI CONTROLLO

%%%%% AUSILIARI

cp_dorsoflap=xlsread('C:\Users\alberto\Desktop\tutte le
curve\CP_flap_dorso.xlsx','B2:D16','basic');

aux_cp_dorsoflap=xlsread('C:\Users\alberto\Desktop\tutte le
curve\ausiliari_controllo.xls','A11:C13','basic');

dist_dorsoflap=[];

for i=1:3

for j=1:13

dist_dorsoflap(i,j)=sqrt((aux_cp_dorsoflap(i,1)-
cp_dorsoflap(j+1,1))^2+(aux_cp_dorsoflap(i,3)-
cp_dorsoflap(j+1,2))^2);

end

end

min_dorsoflap=(min(dist_dorsoflap'))';

%% calcolo delle distanze normalizzate con il minimo di


ciascuna

dist_dorsoflap_norm=[];

for i=1:3

dist_dorsoflap_norm(i,:)=(dist_dorsoflap(i,:)-
min_dorsoflap(i,1))./min_dorsoflap(i,1);

97

Appendice

end

%% calcolo dei COEFFICIENTI DI INFLUENZA

sigma_dorsoflap=[0.6,0.45,1];

CI_dorsoflap=[];

for i=1:13

for j=1:3

CI_dorsoflap(j,i)=normcdf(1-
dist_dorsoflap_norm(j,i),0,sigma_dorsoflap(j));

end

end

xlswrite('C:\Users\alberto\Desktop\tutte le
curve\coefficienti.xls', CI_dorsoflap,'Foglio1','E12');

%%%%%%%%%%%%%%%%%% QUARTA CURVA %%%%%%%%%%%%%%%%%%

%%%%% CALCOLO DELLE DISTANZE CON I PUNTI DI CONTROLLO

%%%%% AUSILIARI

cp_ventreflap=xlsread('C:\Users\alberto\Desktop\tutte le
curve\CP_ventre_flap.xlsx','B2:D16','basic');

aux_cp_ventreflap=xlsread('C:\Users\alberto\Desktop\tutte le
curve\ausiliari_controllo.xls','A16:C18','basic');

dist_ventreflap=[];

for i=1:3

for j=1:13

98

Appendice

dist_ventreflap(i,j)=sqrt((aux_cp_ventreflap(i,1)-
cp_ventreflap(j+1,1))^2+(aux_cp_ventreflap(i,3)-
cp_ventreflap(j+1,2))^2);

end

end

min_ventreflap=(min(dist_ventreflap'))';

%% calcolo delle distanze normalizzate con il minimo di


ciascuna

dist_ventreflap_norm=[];

for i=1:3

dist_ventreflap_norm(i,:)=(dist_ventreflap(i,:)-
min_ventreflap(i,1))./min_ventreflap(i,1);

end

%% calcolo dei COEFFICIENTI DI INFLUENZA

sigma_ventreflap=[0.6,0.45,1];

CI_ventreflap=[];

for i=1:13

for j=1:3

CI_ventreflap(j,i)=normcdf(1-
dist_ventreflap_norm(j,i),0,sigma_ventreflap(j));

99

Appendice

end

end

xlswrite('C:\Users\alberto\Desktop\tutte le
curve\coefficienti.xls', CI_ventreflap,'Foglio1','E16');

%%%%%%%%%%%%%%% disegno delle curve%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%% PRIMA CURVA %%%%%%%%%%%%%%%%%%%%%%%%%%%

y=cp_dorso(1:15,3);

x=cp_dorso(1:15,1);

y1=aux_cp_dorso(1:3,3);

x1=aux_cp_dorso(1:3,1);

figure;

subplot (2,1,1),plot(x,y);

hold on;

plot(x1,y1);

title('dorso')

x2=cp_dorso(2:14,1);

y2=CI_dorso(1,1:13);

y3=y2';

y4=CI_dorso(2,1:13);

y5=y4';

y6=CI_dorso(3,1:13);

y7=y6';

subplot(2,1,2) , plot(x2,y3)

hold on

100

Appendice

plot(x2,y5,'m')

hold on

plot (x2,y7,'y')

%%%%%%%%%%% SECONDA CURVA %%%%%%%%%%%%%%%%%%%%%%%%%

z=cp_ventre(1:15,3);

w=cp_ventre(1:15,1);

z1=aux_cp_ventre(1:3,3);

w1=aux_cp_ventre(1:3,1);

figure;

subplot (2,1,1),plot(w,z);

hold on;

plot(w1,z1);

title('ventre')

w2=cp_ventre(2:14,1);

z2=CI_ventre(1,1:13);

z3=z2';

z4=CI_ventre(2,1:13);

z5=z4';

z6=CI_ventre(3,1:13);

z7=z6';

subplot(2,1,2) , plot(w2,z3)

hold on

plot(w2,z5,'m')

101

Appendice

hold on

plot (w2,z7,'y')

%%%%%%%%%%%%%% TERZA CURVA %%%%%%%%%%%%%%%%%%%%%%

s=cp_dorsoflap(1:15,3);

d=cp_dorsoflap(1:15,1);

s1=aux_cp_dorsoflap(1:3,3);

d1=aux_cp_dorsoflap(1:3,1);

figure;

subplot (2,1,1),plot(d,s);

hold on;

plot(d1,s1);

title('dorso profilo posteriore')

d2=cp_dorsoflap(2:14,1);

s2=CI_dorsoflap(1,1:13);

s3=s2';

s4=CI_dorsoflap(2,1:13);

s5=s4';

s6=CI_dorsoflap(3,1:13);

s7=s6';

subplot(2,1,2) , plot(d2,s3)

hold on

plot(d2,s5,'m')

hold on

102

Appendice

plot (d2,s7,'y')

%%%%%%%%%%%%%%%%%%%%% QUARTA CURVA %%%%%%%%%%%%%%%%

q=cp_ventreflap(1:15,3);

r=cp_ventreflap(1:15,1);

q1=aux_cp_ventreflap(1:3,3);

r1=aux_cp_ventreflap(1:3,1);

figure;

subplot (2,1,1),plot(r,q);

hold on;

plot(r1,q1);

title('ventre del profilo posteriore')

r2=cp_ventreflap(2:14,1);

q2=CI_ventreflap(1,1:13);

q3=q2';

q4=CI_ventreflap(2,1:13);

q5=q4';

q6=CI_ventreflap(3,1:13);

q7=q6';

subplot(2,1,2) , plot(r2,q3)

hold on

plot(r2,q5,'m')

hold on

plot (r2,q7,'y')

103

Appendice

Appendice B

T=logspace(0,1,150);

t=[(T-1)/9];

%scalatura1=1.1;

%scalatura2=0.5;

%spostamento_z_profilo_posteriore=60;

%rotazione_profilo_anteriore=0;

%rotazione_profilo_posteriore=-30;

% dorso primo profilo

%ap1=70.682;

%ap2=82.113;

%ap3=101.197;

dzap1=ap1-70.682;

dzap2=ap2-82.113;

dzap3=ap3-101.197;

dz1=0.9274*dzap1 +0.8239*dzap2 +0.3902*dzap3;

dz2=0.9393*dzap1 +0.8695*dzap2 +0.4225*dzap3 ;

dz3=0.9464*dzap1 +0.9014*dzap2 +0.4515*dzap3;

dz4=0.9522*dzap1 +0.9393*dzap2 +0.5001*dzap3;

dz5=0.9512*dzap1 +0.9624*dzap2 +0.5479*dzap3 ;

dz6=0.9382*dzap1 +0.9788*dzap2 +0.6101*dzap3;

dz7=0.9098*dzap1 +0.9852*dzap2 +0.6637*dzap3 ;

dz8=0.8597*dzap1 +0.9869*dzap2 +0.7107*dzap3;

104

Appendice

dz9=0.7723*dzap1 +0.9844*dzap2 +0.7542*dzap3 ;

dz10=0.6634*dzap1 +0.977*dzap2 +0.7858*dzap3 ;

dz11=0.4161*dzap1 +0.9374*dzap2 +0.8251*dzap3 ;

dz12=0.1768*dzap1 +0.8094*dzap2 +0.8413*dzap3;

dz13=0.0231*dzap1 +0.4127*dzap2 +0.8178*dzap3;

xx=[0 -1.043*scalatura1 8.377*scalatura1 16.802*scalatura1


30.948*scalatura1 45.145*scalatura1 64.529*scalatura1
82.745*scalatura1 100.702*scalatura1 120.21*scalatura1
137.582*scalatura1 169.087*scalatura1 202.757*scalatura1
251.141*scalatura1 287.8*scalatura1];

yy=[0 (4.957+dz1)*scalatura1 (9.991+dz2)*scalatura1


(11.943+dz3)*scalatura1 (14.281+dz4)*scalatura1
(15.645+dz5)*scalatura1 (17.153+dz6)*scalatura1
(18.771+dz7)*scalatura1 (20.155+dz8)*scalatura1
(22.168+dz9)*scalatura1 (24.031+dz10)*scalatura1
(28.057+dz11)*scalatura1 (33.822+dz12)*scalatura1
(47.059+dz13)*scalatura1 (68.785)*scalatura1];

ROT=[cosd(-rotazione_profilo_anteriore) -sind(-
rotazione_profilo_anteriore);sind(-
rotazione_profilo_anteriore) cosd(-
rotazione_profilo_anteriore)];

A=[xx;yy];

B=ROT*A;

[x,y]=bezier(B(1,:),B(2,:),t);

%ventre primo profilo

%ap1v=-63.12;

%ap2v=-107.137;

%ap3v=-51.574;

105

Appendice

dzap1v=ap1v+63.12;

dzap2v=ap2v+107.137;

dzap3v=ap3v+51.574;

dz1v=0.9466*dzap1v +0.8986*dzap2v +0.000583*dzap3v ;

dz2v=0.9522*dzap1v +0.9265*dzap2v +0.0013*dzap3v ;

dz3v=0.9521*dzap1v +0.9435*dzap2v +0.0024*dzap3v;

dz4v=0.9453*dzap1v +0.9598*dzap2v +0.005*dzap3v ;

dz5v=0.9226*dzap1v +0.9735*dzap2v +0.0122*dzap3v ;

dz6v=0.8797*dzap1v +0.9811*dzap2v +0.0263*dzap3v;

dz7v=0.7817*dzap1v +0.986*dzap2v +0.0618*dzap3v ;

dz8v=0.5586*dzap1v +0.9869*dzap2v +0.1597*dzap3v;

dz9v=0.2563*dzap1v +0.9797*dzap2v +0.3532*dzap3v ;

dz10v=0.1242*dzap1v +0.9682*dzap2v +0.4915*dzap3v ;

dz11v=0.0361*dzap1v +0.938*dzap2v +0.6547*dzap3v;

dz12v=0.0038*dzap1v +0.8484*dzap2v +0.801*dzap3v;

dz13v=0.0002505*dzap1v +0.6934*dzap2v +0.8413*dzap3 ;

xxv=[0 1.553*scalatura1 13.854*scalatura1 23.814*scalatura1


36.935*scalatura1 54.205*scalatura1 70.826*scalatura1
92.141*scalatura1 121.653*scalatura1 156.102*scalatura1
176.724*scalatura1 202.783*scalatura1 237.519*scalatura1
269.357*scalatura1 287.8*scalatura1];

yyv=[0 (-5.599+dz1v)*scalatura1 (-12.96+dz2v)*scalatura1 (-


17.23+dz3v)*scalatura1 (-21.029+dz4v)*scalatura1 (-
23.927+dz5v)*scalatura1 (-24.425+dz6v)*scalatura1 (-
23.166+dz7v)*scalatura1 (-17.767+dz8v)*scalatura1 (-
6.67+dz9v)*scalatura1 (1.705+dz10v)*scalatura1

106

Appendice

(13.638+dz11v)*scalatura1 (32.873+dz12v)*scalatura1
(57.722+dz13v)*scalatura1 (68.785)*scalatura1];

C=[xxv;yyv];

D=ROT*C;

[xv,yv]=bezierv(D(1,:),D(2,:),t);

%dorso secondo profilo

%ap1f=29;

%ap2f=27;

%ap3f=26;

dzap1f=ap1f-29;

dzap2f=ap2f-27;

dzap3f=ap3f-26;

dz1f=0.6893*dzap1f +0.0418*dzap2f +0.0242*dzap3f ;

dz2f=0.8002*dzap1f +0.1277*dzap2f +0.046*dzap3f ;

dz3f=0.8808*dzap1f +0.3063*dzap2f +0.0849*dzap3f;

dz4f=0.9346*dzap1f +0.6098*dzap2f +0.1651*dzap3f ;

dz5f=0.9522*dzap1f +0.8707*dzap2f +0.3047*dzap3f ;

dz6f=0.9293*dzap1f +0.9700*dzap2f +0.4934*dzap3f;

dz7f=0.8263*dzap1f +0.9869*dzap2f +0.6802*dzap3f ;

dz8f=0.5960*dzap1f +0.9707*dzap2f +0.8026*dzap3f;

dz9f=0.3092*dzap1f +0.8688*dzap2f +0.8413*dzap3f ;

dz10f=0.1154*dzap1f +0.5959*dzap2f +0.8096*dzap3f ;

dz11f=0.0359*dzap1f +0.2875*dzap2f +0.7344*dzap3f ;

dz12f=0.0119*dzap1f +0.1167*dzap2f +0.6503*dzap3f;

107

Appendice

dz13f=0.0054*dzap1f +0.0557*dzap2f +0.5883*dzap3f ;

xxf=[300-140*scalatura2-(300-140*scalatura2) 300-
140*scalatura2-(300-140*scalatura2) 300-132.212*scalatura2-
(300-140*scalatura2) 300-123.755*scalatura2-(300-
140*scalatura2) 300-112.809*scalatura2-(300-140*scalatura2)
300-99.882*scalatura2-(300-140*scalatura2) 300-
85.53*scalatura2-(300-140*scalatura2) 300-70.165*scalatura2-
(300-140*scalatura2) 300-54.717*scalatura2-(300-
140*scalatura2) 300-39.972*scalatura2-(300-140*scalatura2)
300-26.674*scalatura2-(300-140*scalatura2) 300-
15.509*scalatura2-(300-140*scalatura2) 300-7.068*scalatura2-
(300-140*scalatura2) 300-1.81*scalatura2-(300-140*scalatura2)
300-(300-140*scalatura2)];

yyf=[0 (140*0.01613055+dz1f)*scalatura2
(140*0.02550863+dz2f)*scalatura2
(140*0.0288018+dz3f)*scalatura2
(140*0.02729671+dz4f)*scalatura2
(140*0.02291088+dz5f)*scalatura2
(140*0.01797475+dz6f)*scalatura2
(140*0.01341529+dz7f)*scalatura2
(140*0.00884712+dz8f)*scalatura2
(140*0.00515351+dz9f)*scalatura2
(140*0.00264353+dz10f)*scalatura2
(140*0.00117731+dz11f)*scalatura2
(140*0.00042685+dz12f)*scalatura2
(140*0.0000933+dz13f)*scalatura2 0];

ROT2=[cosd(-rotazione_profilo_posteriore) -sind(-
rotazione_profilo_posteriore);sind(-
rotazione_profilo_posteriore) cosd(-
rotazione_profilo_posteriore)];

E=[xxf;yyf];

F=ROT2*E;

108

Appendice

[xf,yf]=bezierf(300-
140*scalatura2+F(1,:),F(2,:)+spostamento_z_profilo_posteriore
,t);

%ventre secondo profilo

%ap1fv=-39;

%ap2fv=-38;

%ap3fv=-34;

dzap1fv=ap1fv+39;

dzap2fv=ap2fv+38;

dzap3fv=ap3fv+34;

dz1fv=0.828*dzap1fv +0.4155*dzap2fv +0.1344*dzap3fv ;

dz2fv=0.8697*dzap1fv +0.5381*dzap2fv +0.1743*dzap3fv ;

dz3fv=0.9095*dzap1fv +0.6919*dzap2fv +0.2385*dzap3fv;

dz4fv=0.9401*dzap1fv +0.8469*dzap2fv +0.3418*dzap3fv ;

dz5fv=0.9522*dzap1fv +0.9431*dzap2fv +0.4801*dzap3fv ;

dz6fv=0.9403*dzap1fv +0.9794*dzap2fv +0.6281*dzap3fv;

dz7fv=0.8901*dzap1fv +0.9869*dzap2fv +0.7485*dzap3fv ;

dz8fv=0.7767*dzap1fv +0.9791*dzap2fv +0.8205*dzap3fv;

dz9fv=0.5988*dzap1fv +0.9438*dzap2fv +0.8413*dzap3fv ;

dz10fv=0.4055*dzap1fv +0.8523*dzap2fv +0.8210*dzap3fv ;

dz11fv=0.2543*dzap1fv +0.7043*dzap2fv +0.7763*dzap3fv;

dz12fv=0.1627*dzap1fv +0.5524*dzap2fv +0.7266*dzap3fv;

dz13fv=0.1180*dzap1fv +0.4498*dzap2fv +0.6894*dzap3fv ;

109

Appendice

xxfv=[300-140*scalatura2-(300-140*scalatura2) 300-
140*scalatura2-(300-140*scalatura2) 300-133.923*scalatura2-
(300-140*scalatura2) 300-125.701*scalatura2-(300-
140*scalatura2) 300-114.479*scalatura2-(300-140*scalatura2)
300-100.862*scalatura2-(300-140*scalatura2) 300-
85.623*scalatura2-(300-140*scalatura2) 300-69.835*scalatura2-
(300-140*scalatura2) 300-54.13*scalatura2-(300-
140*scalatura2) 300-39.284*scalatura2-(300-140*scalatura2)
300-26.038*scalatura2-(300-140*scalatura2) 300-
15.035*scalatura2-(300-140*scalatura2) 300-6.796*scalatura2-
(300-140*scalatura2) 300-1.701*scalatura2-(300-
140*scalatura2) 300-(300-140*scalatura2)];

yyfv=[0 (-140*0.0210754+dz1fv)*scalatura2 (-
140*0.04410422+dz2fv)*scalatura2 (-
140*0.06650318+dz3fv)*scalatura2 (-
140*0.08489365+dz4fv)*scalatura2 (-
140*0.09608192+dz5fv)*scalatura2 (-
140*0.09791217+dz6fv)*scalatura2 (-
140*0.09119013+dz7fv)*scalatura2 (-
140*0.07892389+dz8fv)*scalatura2 (-
140*0.06282467+dz9fv)*scalatura2 (-
140*0.04496367+dz10fv)*scalatura2 (-
140*0.02761792+dz11fv)*scalatura2 (-
140*0.01308373+dz12fv)*scalatura2 (-
140*0.00340035+dz13fv)*scalatura2 0];

G=[xxfv;yyfv];

H=ROT2*G;

[xfv,yfv]=bezierv(300-
140*scalatura2+H(1,:),H(2,:)+spostamento_z_profilo_posteriore
,t);

% disegno profili

plot(x,y)

110

Appendice

hold on

plot(xv,yv)

hold on

plot(xfv,yfv,'r')

hold on

plot(xf,yf,'r')

axis equal

saveas(gcf,'disegno profili.jpg')

%controllo primo profilo

u=0:(B(1,15)/1000):B(1,15);

z=interp1(x,y,u);

l=interp1(xv,yv,u);

for b=1:(1001)

if z(1,b) < l(1,b)

check(b,1)=0;

else

check(b,1)=1;

end

end

controlloprofilo1=sum(check);

if controlloprofilo1==1001

controllo=1

else

111

Appendice

controllo=0

end

%controllo secondo profilo

u2=(300-140*scalatura2+H(1,1)):(((300-
140*scalatura2+H(1,15))-(300-
140*scalatura2+H(1,1)))/1000):(300-140*scalatura2+H(1,15));

z2=interp1(xf,yf,u2);

l2=interp1(xfv,yfv,u2);

for b2=1:(1001)

if z2(1,b2) < l2(1,b2)

check2(b2,1)=0;

else

check2(b2,1)=1;

end

end

controlloprofilo2=sum(check2);

if controlloprofilo2==1001

controllo_2=1

else

controllo_2=0

end

%controllo totale forma

if controllo+controllo_2==2

112

Appendice

controllo_forma=1

else

controllo_forma=0

end

%controllo che i due profili siano uno dietro l'altro

u3=300-140*scalatura2+H(1,1):((B(1,15)-(300-
140*scalatura2+H(1,1)))/1000):B(1,15);

z3=interp1(x,y,u3);

l3=interp1(xfv,yfv,u3);

for b3=1:(1001)

if z3(1,b3)> l3(1,b3);

check3(b3,1)=0;

else

check3(b3,1)=1;

end

end

sovrapposizione=sum(check3);

if x(1,150)< xf(1,1)

controllo_lungo_x=1

else

if sovrapposizione==1001

controllo_lungo_x=1

else

113

Appendice

controllo_lungo_x=0

end

end

%controllo totale

if controllo_forma+controllo_lungo_x==2

controllo_totale=1

else

controllo_totale=0

end

close all


114

Appendice

Appendice C

// STAR-CCM+ macro: macro_finale.java

package macro;

import java.util.*;

import star.common.*;

import star.flow.*;

import star.motion.*;

import star.meshing.*;

import star.segregatedflow.*;

import star.turbulence.*;

import star.material.*;

import star.keturb.*;

import star.base.neo.*;

import star.vis.*;

import star.resurfacer.*;

import star.base.report.*;

import star.dualmesher.*;

import star.prismmesher.*;

public class macro_finale extends StarMacro {

115

Appendice

public void execute() {

Simulation simulation_0 =

getActiveSimulation();

ImportManager importManager_0 =

simulation_0.getImportManager();

importManager_0.importIges(resolvePath("alettone.igs"),
"OneBoundaryPerPatch", "OneRegionForAllBodies", "AllEdges",
30.0, 2, 1.0E-5);

simulation_0.getSceneManager().createGeometryScene("Geometry
Scene", "Outline", "Geometry", 1);

Scene scene_0 =

simulation_0.getSceneManager().getScene("Geometry Scene
1");

scene_0.initializeAndWait();

PartDisplayer partDisplayer_1 =

((PartDisplayer) scene_0.getCreatorDisplayer());

116

Appendice

partDisplayer_1.initialize();

PartDisplayer partDisplayer_0 =

((PartDisplayer)
scene_0.getDisplayerManager().getDisplayer("Outline 1"));

partDisplayer_0.initialize();

PartDisplayer partDisplayer_2 =

((PartDisplayer)
scene_0.getDisplayerManager().getDisplayer("Geometry 1"));

partDisplayer_2.initialize();

PartDisplayer partDisplayer_3 =

((PartDisplayer) scene_0.getHighlightDisplayer());

partDisplayer_3.initialize();

CurrentView currentView_0 =

scene_0.getCurrentView();

currentView_0.setInput(new DoubleVector(new double[]


{0.7504987839999999, 0.0, -0.019999999999999907}), new
DoubleVector(new double[] {0.7504987839999999, 0.0,

117

Appendice

20.388833847763447}), new DoubleVector(new double[] {0.0,


1.0, 0.0}), -1.0, 0);

Region region_0 =

simulation_0.getRegionManager().getRegion("Region 1");

Boundary boundary_0 =

region_0.getBoundaryManager().getBoundary("Face 8");

partDisplayer_3.getParts().setObjects(boundary_0);

Boundary boundary_1 =

region_0.getBoundaryManager().getBoundary("Face 10");

partDisplayer_3.getParts().setObjects(boundary_1,
boundary_0);

SurfaceMeshProxy surfaceMeshProxy_0 =

simulation_0.get(SurfaceMeshProxy.class);

surfaceMeshProxy_0.combineBoundaries(new
NeoObjectVector(new Object[] {boundary_0, boundary_1}));

partDisplayer_3.getParts().setObjects(boundary_0);

118

Appendice

boundary_0.setPresentationName("profilo anteriore");

Boundary boundary_2 =

region_0.getBoundaryManager().getBoundary("Face 5");

partDisplayer_3.getParts().setObjects(boundary_2);

Boundary boundary_3 =

region_0.getBoundaryManager().getBoundary("Face 6");

partDisplayer_3.getParts().setObjects(boundary_2,
boundary_3);

surfaceMeshProxy_0.combineBoundaries(new
NeoObjectVector(new Object[] {boundary_2, boundary_3}));

partDisplayer_3.getParts().setObjects(boundary_2);

boundary_2.setPresentationName("profilo posteriore");

Boundary boundary_4 =

region_0.getBoundaryManager().getBoundary("Face 1");

partDisplayer_3.getParts().setObjects(boundary_4);

119

Appendice

boundary_4.setPresentationName("uscita");

boundary_4.setBoundaryType(PressureBoundary.class);

Boundary boundary_5 =

region_0.getBoundaryManager().getBoundary("Face 3");

partDisplayer_3.getParts().setObjects(boundary_5);

boundary_5.setPresentationName("ingresso");

boundary_5.setBoundaryType(InletBoundary.class);

Boundary boundary_6 =

region_0.getBoundaryManager().getBoundary("Face 2");

partDisplayer_3.getParts().setObjects(boundary_6);

Boundary boundary_7 =

region_0.getBoundaryManager().getBoundary("Face 4");

partDisplayer_3.getParts().setObjects(boundary_6,
boundary_7);

120

Appendice

Boundary boundary_8 =

region_0.getBoundaryManager().getBoundary("Face 7");

partDisplayer_3.getParts().setObjects(boundary_8,
boundary_6, boundary_7);

Boundary boundary_9 =

region_0.getBoundaryManager().getBoundary("Face 9");

partDisplayer_3.getParts().setObjects(boundary_9,
boundary_8, boundary_6, boundary_7);

boundary_9.setBoundaryType(SymmetryBoundary.class);

boundary_7.setBoundaryType(SymmetryBoundary.class);

boundary_8.setBoundaryType(SymmetryBoundary.class);

boundary_6.setBoundaryType(SymmetryBoundary.class);

partDisplayer_3.getParts().setObjects();

partDisplayer_2.setMesh(true);

121

Appendice

MeshContinuum meshContinuum_0 =

((MeshContinuum)
simulation_0.getContinuumManager().getContinuum("Mesh 1"));

meshContinuum_0.enable(ResurfacerMeshingModel.class);meshCont
inuum_0.enable(DualMesherModel.class);

meshContinuum_0.enable(PrismMesherModel.class);

meshContinuum_0.getReferenceValues().get(BaseSize.class).setV
alue(0.45);

NumPrismLayers numPrismLayers_0 =

meshContinuum_0.getReferenceValues().get(NumPrismLayers.class
);

numPrismLayers_0.setNumLayers(4);

PrismLayerStretching prismLayerStretching_0 =

meshContinuum_0.getReferenceValues().get(PrismLayerStretching
.class);

122

Appendice

prismLayerStretching_0.setStretching(1.2);

PrismThickness prismThickness_0 =

meshContinuum_0.getReferenceValues().get(PrismThickness.class
);

GenericRelativeSize genericRelativeSize_0 =

((GenericRelativeSize)
prismThickness_0.getRelativeSize());

genericRelativeSize_0.setPercentage(0.7);

SurfaceGrowthRate surfaceGrowthRate_0 =

meshContinuum_0.getReferenceValues().get(SurfaceGrowthRate.cl
ass);

surfaceGrowthRate_0.setGrowthRate(1.1);

SurfaceSize surfaceSize_0 =

meshContinuum_0.getReferenceValues().get(SurfaceSize.class);

RelativeMinimumSize relativeMinimumSize_0 =

surfaceSize_0.getRelativeMinimumSize();
123

Appendice

relativeMinimumSize_0.setPercentage(10.0);

RelativeTargetSize relativeTargetSize_0 =

surfaceSize_0.getRelativeTargetSize();

relativeTargetSize_0.setPercentage(10.0);

partDisplayer_3.getParts().setObjects(boundary_4);

partDisplayer_3.getParts().setObjects();

boundary_4.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

partDisplayer_3.getParts().setObjects(boundary_4);

partDisplayer_3.getParts().setObjects();

boundary_6.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

partDisplayer_3.getParts().setObjects(boundary_6);
124

Appendice

partDisplayer_3.getParts().setObjects();

boundary_5.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

partDisplayer_3.getParts().setObjects(boundary_5);

partDisplayer_3.getParts().setObjects();

boundary_7.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

partDisplayer_3.getParts().setObjects(boundary_7);

partDisplayer_3.getParts().setObjects();

SurfaceSizeOption surfaceSizeOption_0 =

boundary_2.get(MeshConditionManager.class).get(SurfaceSizeOpt
ion.class);

125

Appendice

surfaceSizeOption_0.setSurfaceSizeOption(true);

SurfaceSize surfaceSize_1 =

boundary_2.get(MeshValueManager.class).get(SurfaceSize.class)
;

RelativeMinimumSize relativeMinimumSize_1 =

surfaceSize_1.getRelativeMinimumSize();

relativeMinimumSize_1.setPercentage(0.2);

RelativeTargetSize relativeTargetSize_1 =

surfaceSize_1.getRelativeTargetSize();

relativeTargetSize_1.setPercentage(0.5);

partDisplayer_3.getParts().setObjects(boundary_2);

partDisplayer_3.getParts().setObjects();

boundary_8.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

126

Appendice

partDisplayer_3.getParts().setObjects(boundary_8);

partDisplayer_3.getParts().setObjects();

boundary_9.get(MeshConditionManager.class).get(CustomizeBound
aryPrismsOption.class).setSelected(CustomizeBoundaryPrismsOpt
ion.DISABLE);

partDisplayer_3.getParts().setObjects(boundary_9);

partDisplayer_3.getParts().setObjects();

SurfaceSizeOption surfaceSizeOption_1 =

boundary_0.get(MeshConditionManager.class).get(SurfaceSizeOpt
ion.class);

surfaceSizeOption_1.setSurfaceSizeOption(true);

SurfaceSize surfaceSize_2 =

boundary_0.get(MeshValueManager.class).get(SurfaceSize.class)
;

RelativeMinimumSize relativeMinimumSize_2 =

127

Appendice

surfaceSize_2.getRelativeMinimumSize();

relativeMinimumSize_2.setPercentage(0.2);

RelativeTargetSize relativeTargetSize_2 =

surfaceSize_2.getRelativeTargetSize();

relativeTargetSize_2.setPercentage(0.5);

partDisplayer_3.getParts().setObjects(boundary_0);

partDisplayer_3.getParts().setObjects();

MeshPipelineController meshPipelineController_0 =

simulation_0.get(MeshPipelineController.class);

meshPipelineController_0.generateSurfaceMesh();

SurfaceRep surfaceRep_0 =

((SurfaceRep)
simulation_0.getRepresentationManager().getObject("Remeshed
Surface"));

partDisplayer_0.setRepresentation(surfaceRep_0);

128

Appendice

partDisplayer_2.setRepresentation(surfaceRep_0);

meshPipelineController_0.generateVolumeMesh();

FvRepresentation fvRepresentation_0 =

((FvRepresentation)
simulation_0.getRepresentationManager().getObject("Volume
Mesh"));

partDisplayer_0.setRepresentation(fvRepresentation_0);

partDisplayer_2.setRepresentation(fvRepresentation_0);

MeshManager meshManager_0 =

simulation_0.getMeshManager();

meshManager_0.convertTo2d(1.0E-6, new NeoObjectVector(new


Object[] {region_0}), true);

currentView_0.setInput(new DoubleVector(new double[]


{0.7500623504999999, 0.0, 0.0}), new DoubleVector(new
double[] {0.7500623504999999, 0.0, 20.41010520553702}), new
DoubleVector(new double[] {0.0, 1.0, 0.0}), -1.0, 0);

PhysicsContinuum physicsContinuum_0 =

129

Appendice

((PhysicsContinuum)
simulation_0.getContinuumManager().getContinuum("Physics 1
2D"));

physicsContinuum_0.enable(StationaryModel.class);

physicsContinuum_0.enable(SteadyModel.class);

physicsContinuum_0.enable(SingleComponentGasModel.class);

physicsContinuum_0.enable(SegregatedFlowModel.class);

physicsContinuum_0.enable(ConstantDensityModel.class);

physicsContinuum_0.enable(TurbulentModel.class);

physicsContinuum_0.enable(RansTurbulenceModel.class);

physicsContinuum_0.enable(KEpsilonTurbulence.class);

physicsContinuum_0.enable(RkeTwoLayerTurbModel.class);

physicsContinuum_0.enable(KeTwoLayerAllYplusWallTreatment.cla
ss);

130

Appendice

SingleComponentGasModel singleComponentGasModel_0 =

physicsContinuum_0.getModelManager().getModel(SingleComponent
GasModel.class);

Gas gas_0 =

((Gas) singleComponentGasModel_0.getMaterial());

ConstantMaterialPropertyMethod
constantMaterialPropertyMethod_0 =

((ConstantMaterialPropertyMethod)
gas_0.getMaterialProperties().getMaterialProperty(ConstantDen
sityProperty.class).getMethod());

constantMaterialPropertyMethod_0.getQuantity().setValue(1.225
);

ConstantMaterialPropertyMethod
constantMaterialPropertyMethod_1 =

((ConstantMaterialPropertyMethod)
gas_0.getMaterialProperties().getMaterialProperty(DynamicVisc
osityProperty.class).getMethod());

constantMaterialPropertyMethod_1.getQuantity().setValue(1.79E
-5);
131

Appendice

VelocityProfile velocityProfile_0 =

physicsContinuum_0.getInitialConditions().get(VelocityProfile
.class);

((ConstantVectorProfileMethod)
velocityProfile_0.getMethod()).getQuantity().setComponents(33
.0, 0.0, 0.0);

Region region_1 =

simulation_0.getRegionManager().getRegion("Region 1
2D");

Boundary boundary_10 =

region_1.getBoundaryManager().getBoundary("ingresso");

boundary_10.getConditions().get(InletVelocityOption.class).se
tSelected(InletVelocityOption.COMPONENTS);

VelocityProfile velocityProfile_1 =

boundary_10.getValues().get(VelocityProfile.class);

((ConstantVectorProfileMethod)
velocityProfile_1.getMethod()).getQuantity().setComponents(33
.0, 0.0, 0.0);

132

Appendice

partDisplayer_3.getParts().setObjects(boundary_10);

partDisplayer_3.getParts().setObjects();

StepStoppingCriterion stepStoppingCriterion_0 =

((StepStoppingCriterion)
simulation_0.getSolverStoppingCriterionManager().getSolverSto
ppingCriterion("Maximum Steps"));

stepStoppingCriterion_0.setMaximumNumberSteps(1100);

ForceCoefficientReport forceCoefficientReport_0 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

ForceCoefficientReport forceCoefficientReport_1 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

ForceCoefficientReport forceCoefficientReport_2 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

133

Appendice

ForceCoefficientReport forceCoefficientReport_3 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

ForceCoefficientReport forceCoefficientReport_4 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

ForceCoefficientReport forceCoefficientReport_5 =

simulation_0.getReportManager().createReport(ForceCoefficient
Report.class);

forceCoefficientReport_0.setPresentationName("Cl_totale");

forceCoefficientReport_1.setPresentationName("Cl_anteriore");

forceCoefficientReport_2.setPresentationName("Cl_posteriore")
;

forceCoefficientReport_3.setPresentationName("Cd_totale");

134

Appendice

forceCoefficientReport_4.setPresentationName("Cd_anteriore");

forceCoefficientReport_5.setPresentationName("Cd_posteriore")
;

forceCoefficientReport_0.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_0.getReferenceVelocity().setValue(33.0
);

forceCoefficientReport_0.getReferenceArea().setValue(0.3);

forceCoefficientReport_0.getDirection().setComponents(0.0,
1.0, 0.0);

Boundary boundary_11 =

region_1.getBoundaryManager().getBoundary("profilo
anteriore");

135

Appendice

Boundary boundary_12 =

region_1.getBoundaryManager().getBoundary("profilo
posteriore");

forceCoefficientReport_0.getParts().setObjects(boundary_11,
boundary_12);

forceCoefficientReport_1.getDirection().setComponents(0.0,
1.0, 0.0);

forceCoefficientReport_1.getParts().setObjects(boundary_11);

forceCoefficientReport_1.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_1.getReferenceVelocity().setValue(33.0
);

forceCoefficientReport_1.getReferenceArea().setValue(0.21);

136

Appendice

forceCoefficientReport_2.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_2.getReferenceVelocity().setValue(33.0
);

forceCoefficientReport_2.getReferenceArea().setValue(0.09);

forceCoefficientReport_2.getDirection().setComponents(0.0,
1.0, 0.0);

forceCoefficientReport_2.getParts().setObjects(boundary_12);

forceCoefficientReport_3.getParts().setObjects(boundary_11,
boundary_12);

forceCoefficientReport_3.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_3.getReferenceVelocity().setValue(33.0
);

137

Appendice

forceCoefficientReport_3.getReferenceArea().setValue(0.3);

forceCoefficientReport_4.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_4.getReferenceVelocity().setValue(33.0
);

forceCoefficientReport_4.getReferenceArea().setValue(0.21);

forceCoefficientReport_4.getParts().setObjects(boundary_11);

forceCoefficientReport_5.getParts().setObjects(boundary_12);

forceCoefficientReport_5.getReferenceDensity().setValue(1.225
);

forceCoefficientReport_5.getReferenceVelocity().setValue(33.0
);

forceCoefficientReport_5.getReferenceArea().setValue(0.09);
138

Appendice

MonitorPlot monitorPlot_0 =

simulation_0.getPlotManager().createMonitorPlot();

monitorPlot_0.setPresentationName("Cl_totale Plot");

ReportMonitor reportMonitor_0 =

forceCoefficientReport_0.createMonitor();

monitorPlot_0.getMonitors().addObjects(reportMonitor_0);

MonitorPlot monitorPlot_1 =

simulation_0.getPlotManager().createMonitorPlot();

monitorPlot_1.setPresentationName("Cl_anteriore Plot");

ReportMonitor reportMonitor_1 =

forceCoefficientReport_1.createMonitor();

monitorPlot_1.getMonitors().addObjects(reportMonitor_1);

MonitorPlot monitorPlot_2 =

simulation_0.getPlotManager().createMonitorPlot();

139

Appendice

monitorPlot_2.setPresentationName("Cl_posteriore Plot");

ReportMonitor reportMonitor_2 =

forceCoefficientReport_2.createMonitor();

monitorPlot_2.getMonitors().addObjects(reportMonitor_2);

MonitorPlot monitorPlot_3 =

simulation_0.getPlotManager().createMonitorPlot();

monitorPlot_3.setPresentationName("Cd_totale Plot");

ReportMonitor reportMonitor_3 =

forceCoefficientReport_3.createMonitor();

monitorPlot_3.getMonitors().addObjects(reportMonitor_3);

MonitorPlot monitorPlot_4 =

simulation_0.getPlotManager().createMonitorPlot();

monitorPlot_4.setPresentationName("Cd_anteriore Plot");

ReportMonitor reportMonitor_4 =

140

Appendice

forceCoefficientReport_4.createMonitor();

monitorPlot_4.getMonitors().addObjects(reportMonitor_4);

MonitorPlot monitorPlot_5 =

simulation_0.getPlotManager().createMonitorPlot();

monitorPlot_5.setPresentationName("Cd_posteriore Plot");

ReportMonitor reportMonitor_5 =

forceCoefficientReport_5.createMonitor();

monitorPlot_5.getMonitors().addObjects(reportMonitor_5);

PressureCoefficientFunction pressureCoefficientFunction_0
=

((PressureCoefficientFunction)
simulation_0.getFieldFunctionManager().getFunction("PressureC
oefficient"));

pressureCoefficientFunction_0.getReferenceDensity().setValue(
1.225);

141

Appendice

pressureCoefficientFunction_0.getReferenceVelocity().setValue
(33.0);

simulation_0.getSceneManager().createScalarScene("Scalar
Scene", "Outline", "Scalar");

Scene scene_1 =

simulation_0.getSceneManager().getScene("Scalar Scene
1");

scene_1.initializeAndWait();

PartDisplayer partDisplayer_5 =

((PartDisplayer) scene_1.getCreatorDisplayer());

partDisplayer_5.initialize();

PartDisplayer partDisplayer_4 =

((PartDisplayer)
scene_1.getDisplayerManager().getDisplayer("Outline 1"));

partDisplayer_4.initialize();

ScalarDisplayer scalarDisplayer_0 =

142

Appendice

((ScalarDisplayer)
scene_1.getDisplayerManager().getDisplayer("Scalar 1"));

scalarDisplayer_0.initialize();

PartDisplayer partDisplayer_6 =

((PartDisplayer) scene_1.getHighlightDisplayer());

partDisplayer_6.initialize();

CurrentView currentView_1 =

scene_1.getCurrentView();

currentView_1.setInput(new DoubleVector(new double[]


{0.7500623465, 0.0, 0.0}), new DoubleVector(new double[]
{0.7500623465, 0.0, 20.410105218811935}), new
DoubleVector(new double[] {0.0, 1.0, 0.0}), -1.0, 0);

partDisplayer_4.getParts().setObjects(region_1);

scalarDisplayer_0.getScalarDisplayQuantity().setFieldFunction
(pressureCoefficientFunction_0);

scalarDisplayer_0.setFillMode(1);

143

Appendice

simulation_0.getSceneManager().createVectorScene("Vector
Scene", "Outline", "Vector");

Scene scene_2 =

simulation_0.getSceneManager().getScene("Vector Scene
1");

scene_2.initializeAndWait();

PartDisplayer partDisplayer_8 =

((PartDisplayer) scene_2.getCreatorDisplayer());

partDisplayer_8.initialize();

PartDisplayer partDisplayer_7 =

((PartDisplayer)
scene_2.getDisplayerManager().getDisplayer("Outline 1"));

partDisplayer_7.initialize();

VectorDisplayer vectorDisplayer_0 =

((VectorDisplayer)
scene_2.getDisplayerManager().getDisplayer("Vector 1"));

vectorDisplayer_0.initialize();

144

Appendice

PartDisplayer partDisplayer_9 =

((PartDisplayer) scene_2.getHighlightDisplayer());

partDisplayer_9.initialize();

CurrentView currentView_2 =

scene_2.getCurrentView();

currentView_2.setInput(new DoubleVector(new double[]


{0.7500623465, 0.0, 0.0}), new DoubleVector(new double[]
{0.7500623465, 0.0, 20.410105218811935}), new
DoubleVector(new double[] {0.0, 1.0, 0.0}), -1.0, 0);

vectorDisplayer_0.setGlyphSize(new DoubleVector(new
double[] {0.1000000015, 0.3, 5.0, 1.0}));

simulation_0.getSimulationIterator().run();

XYPlot xYPlot_0 =

simulation_0.getPlotManager().createXYPlot();

xYPlot_0.refreshAndWait();

xYPlot_0.getParts().setObjects(boundary_11, boundary_12);

145

Appendice

YAxisType yAxisType_0 =

((YAxisType) xYPlot_0.getYAxes().getAxisType("Y Type


1"));

PrimitiveFieldFunction primitiveFieldFunction_0 =

((PrimitiveFieldFunction)
simulation_0.getFieldFunctionManager().getFunction("WallYplus
"));

yAxisType_0.setFieldFunction(primitiveFieldFunction_0);

simulation_0.saveState(resolvePath("risultato.sim"));

monitorPlot_0.export(resolvePath("Cl_totale.csv"));

monitorPlot_3.export(resolvePath("Cd_totale.csv"));

146

You might also like