Professional Documents
Culture Documents
1 Introduzione 8
4.1 Introduzione 21
1
4.2.2
Definizione
dei
punti
di
controllo
23
passaggio....29
5.1 Introduzione 37
6.1 Introduzione 39
2
7.2
Impostazione
del
modello
CAD
....50
7.4 Definizione del set di famiglia iniziale: DOE (Design of experiment) ..53
Bibliografia .93
Appendice A ..94
Appendice B 104
Appendice C 115
3
Indice
delle
figure
Figura 4.11: Introduzione delle relazioni per la parametrizzazione delle curve ...30
4
Figura
4.17:
Profilo
anteriore
e
posteriore
..34
Figura 6.1: Modifica da apportare alla macro per limportazione del modello ....40
Figura 7.2: Finestra per la definizione di avvio del driver di Catia ..50
Figura 7.12: Esportazione dei file di report del calcolo CFD ...62
5
Figura
8.3:
Scatter
chart
Cl-Cd
..67
6
Indice
delle
tabelle
7
Capitolo
1
-
Introduzione
1 Introduzione
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.
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).
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.
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.
10
Capitolo
2
Aerodinamica
dellalettone
Al
variare
dell'angolo
d'attacco
del
profilo
rispetto
alla
corrente,
varier
la
posizione
del
centro
di
pressione.
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).
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.
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.
13
Capitolo
2
Aerodinamica
dellalettone
14
Capitolo
3
Approccio
alla
procedura
di
ottimizzazione
15
Capitolo
3
Approccio
alla
procedura
di
ottimizzazione
16
Capitolo
3
Approccio
alla
procedura
di
ottimizzazione
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.
17
Capitolo
3
Approccio
alla
procedura
di
ottimizzazione
Workflow
Run
Logs
Design
Space
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.
Nel
presente
paragrafo
verr
definito
il
flusso
logico
allinterno
del
workflow
di
figura
3.3
utilizzato
per
lottimizzazione
dellalettone.
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.
20
Capitolo
4
Modello
parametrico
per
la
definizione
della
geometria
4.1 Introduzione
21
Capitolo
4
Modello
parametrico
per
la
definizione
della
geometria
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 !
! = !,! () !
!!!
!
! = !,! () !
!!!
!
! = !,! () !
!!!
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.
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
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
Inoltre ! definito:
( ! min ( ! )
! =
min ( ! )
! = !"#_!"#$% !
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
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.
27
Capitolo
4
Modello
parametrico
per
la
definizione
della
geometria
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.
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.
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.
29
Capitolo
4
Modello
parametrico
per
la
definizione
della
geometria
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
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
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
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.
34
Capitolo
4
Modello
parametrico
per
la
definizione
della
geometria
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.
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.1 Introduzione
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.
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.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 sequenza delle fasi che si susseguono durante lanalisi CFD sono le seguenti:
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.
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.
Face
2
Face
4
Face
7
Face
9
Ingresso
Profilo
anteriore
Profilo
posteriore
Uscita
40
Capitolo
6
Analisi
CFD
dellalettone
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.
41
Capitolo
6
Analisi
CFD
dellalettone
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.
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:
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.
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.
45
Capitolo
6
Analisi
CFD
dellalettone
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.
46
Capitolo
6
Analisi
CFD
dellalettone
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.
47
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
48
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
49
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
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.
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.
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
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
Allinterno del DOE possibile scegliere diverse sequenze come mostrato in figura 7.5.
53
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
Nelle
procedure
di
ottimizzazione
condotte
nel
presente
lavoro
si
sono
utilizzate
due
tipi
di
sequenze:
54
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
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.
55
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
Nella
figura
7.6
mostrato
il
settaggio
nel
caso
dellottimizzazione
eseguita
con
lalgoritmo
genetico
MOGA
II.
57
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
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.
58
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
59
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
60
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
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.
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.
62
Capitolo
7
Procedura
di
ottimizzazione
in
modeFRONTIER
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.
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
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
65
Capitolo
8
Analisi
dei
risultati
66
Capitolo
8
Analisi
dei
risultati
67
Capitolo
8
Analisi
dei
risultati
68
Capitolo
8
Analisi
dei
risultati
Numero design Cd Cl
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.
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.
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.
75
Capitolo
8
Analisi
dei
risultati
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
79
Capitolo
8
Analisi
dei
risultati
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
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.
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:
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
Mentre
le
design
table
history
e
la
scatter
chart
ottenute
in
questa
ottimizzazione
sono
rappresentate
nelle
figure
8.8,
8.9
e
8.10.
84
Capitolo
8
Analisi
dei
risultati
85
Capitolo
8
Analisi
dei
risultati
Configurazione Cd Cl
Mentre
le
design
table
history
e
la
scatter
chart
ottenute
in
questa
ottimizzazione
sono
rappresentate
nelle
figure
8.11,
8.12
e
8.13.
86
Capitolo
8
Analisi
dei
risultati
87
Capitolo
8
Analisi
dei
risultati
88
Capitolo
8
Analisi
dei
risultati
89
Capitolo
8
Analisi
dei
risultati
90
Capitolo
9
Conclusioni
e
sviluppi
futuri
9.1 Conclusioni
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.
91
Capitolo
9
Conclusioni
e
sviluppi
futuri
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
93
Appendice
Appendice A
clear all
close all
%%%%% 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'))';
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
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');
%%%%% 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'))';
dist_ventre_norm=[];
for i=1:3
dist_ventre_norm(i,:)=(dist_ventre(i,:)-
min_ventre(i,1))./min_ventre(i,1);
end
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');
%%%%% 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'))';
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
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');
%%%%% 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'))';
dist_ventreflap_norm=[];
for i=1:3
dist_ventreflap_norm(i,:)=(dist_ventreflap(i,:)-
min_ventreflap(i,1))./min_ventreflap(i,1);
end
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');
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')
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')
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);
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')
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);
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;
%ap1=70.682;
%ap2=82.113;
%ap3=101.197;
dzap1=ap1-70.682;
dzap2=ap2-82.113;
dzap3=ap3-101.197;
104
Appendice
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);
%ap1v=-63.12;
%ap2v=-107.137;
%ap3v=-51.574;
105
Appendice
dzap1v=ap1v+63.12;
dzap2v=ap2v+107.137;
dzap3v=ap3v+51.574;
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);
%ap1f=29;
%ap2f=27;
%ap3f=26;
dzap1f=ap1f-29;
dzap2f=ap2f-27;
dzap3f=ap3f-26;
107
Appendice
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);
%ap1fv=-39;
%ap2fv=-38;
%ap3fv=-34;
dzap1fv=ap1fv+39;
dzap2fv=ap2fv+38;
dzap3fv=ap3fv+34;
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')
u=0:(B(1,15)/1000):B(1,15);
z=interp1(x,y,u);
l=interp1(xv,yv,u);
for b=1:(1001)
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
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)
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
if controllo+controllo_2==2
112
Appendice
controllo_forma=1
else
controllo_forma=0
end
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
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.*;
115
Appendice
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();
117
Appendice
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();
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();
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();
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 =
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