Il metodo sviluppato è Hess_smith

Transcript

Il metodo sviluppato è Hess_smith
FLUIDODINAMICA E AERODINAMICA 2
sez A-K
A.A. 2005-06
Matricola 662442
NOME Cristiano
COGNOME Bombardieri
ELABORATO n° 1
Sviluppo di un metodo a pannelli per il calcolo della corrente
a potenziale attorno ad un profilo
SCHEMA DELLA RELAZIONE
•
Introduzione sintetica al metodo a pannelli utilizzato

•
Struttura del codice di calcolo


•
sottoprogrammi e loro descrizione
listato del codice
Validazione del codice


•
breve descrizione del metodo di Hess-Smith
esempi numerici e confronto con Xfoil
casi particolari (profili simmetrici, circonferenza)
Studio dell’errore


dipendenza dal tipo di discretizzazione (legge coseno ed equispaziata)
andamento dell’errore al variare del numero di pannelli
Introduzione sintetica al metodo a pannelli utilizzato
Il metodo a pannelli sviluppato implementa il metodo di Hess-Smith. Il codice è sviluppato con il
programma MATLAB.
Il metodo di Hess-Smith assume come incognita una distribuzione di sorgenti e vortici sul contorno
del profilo. Questi è opportunamente approssimato in tratti rettilinei (i pannelli). Sul singolo pannello
si considera una distribuzione di sorgenti di densità costante, ma variabile di pannello in pannello, e
una distribuzione di vortici di densità costante, uguale per tutti i pannelli. Pertanto, discretizzato il
profilo con N pannelli, si hanno N+1 incognite, N densità di sorgente σ e il valore di densità di
vortici γ. Occorrono dunque N+1 condizioni al contorno. N condizioni sono date dal fatto di
considerare il profilo (i pannelli quindi) linea di flusso e quindi impenetrabile; si impone la velocità
normale nulla sugli N pannelli (numericamente la si impone al centro del pannello). La restante c.c.
deriva dalla condizione di Kutta, che viene tradotta imponendo velocità normale nulla in un punto
esterno leggermente dopo il bordo d’uscita.
Per i conti analitici del metodo si rinvia alle dispense del corso.
Una volta risolto il sistema e calcolate le N densità di sorgente σ e il valore di γ si calcola il valore
della velocità tangente al contorno in corrispondenza dei punti di controllo. (vd testo per la formula,
16.2.16)
Applicando Bernouilli troviamo poi il coefficiente di pressione Cp considerato costante sul pannello.
Da questi si ricava inoltre il coefficiente di portanza Cl del profilo, facendo attenzione a scomporre
secondo le direzioni della velocità relativa asintotica.
Oppure possiamo calcolare il Cl dal teorema di Kutta-Joukowsky L=ρVΓ eguagliandolo a
L=½ρV2 c Cl , ottenendo Cl=2 Γ / Vc.
Il valore della circolazione è da definizione Γ=⌠Vt *ds, ed essendo la velocità tangente e costante
sul pannello e considerando inoltre corda e velocità asintotica unitarie abbiamo
N
Cl = 2 ∑ Vt j* Lj con L lunghezza del pannello j-esimo.
j=1
Nel codice il Cl calcolato in questo modo è indicato come CL_kj
Struttura del codice di calcolo
Per la scrittura del codice si è suddiviso il problema in più sottoprogrammi, in forma di funzione
(function) così da poterli richiamare agevolmente: in genere hanno come input il tipo di profilo
NACA scelto, e restituiscono dei valori che vengono utilizzati dagli altri sottoprogrammi.
La struttura è la seguente:
 scelto il profilo NACA (sono implementati solo profili NACA 4 e 5 cifre, più il profilo
circolare indicato con il codice -1) sono calcolati la sua linea media (mean camber line) e la
distribuzione degli spessori (thickness); in output si restituisce inoltre il disegno del profilo
(sottoprogramma: profili_naca) ;
 scelto il numero N di pannelli con cui discretizzare il profilo sono calcolati gli N+1 estremi
dei pannelli, in output si restituiscono le coordinate degli estremi e il disegno del profilo
discretizzato confrontato con il profilo; è possibile inoltre scegliere il tipo di discretizzazione,
secondo la legge del coseno –infittisce i nodi al bordo d’attacco e al bordo d’uscita- oppure in
modo equispaziato (sottoprogramma: discr_pannelli) ;
 una volta note le coordinate dei nodi, sono calcolati i valori necessari per il metodo di HessSmith, come per es. il punto di controllo, la lunghezza dei pannelli, i versori dei pannelli, il
pannello aggiuntivo per soddisfare la condizione di Kutta (sottoprogramma:
caratt_pannelli_and_kutta) ;
 gli output sono infine richiamati dal programma principale (main) che implementa il metodo
di Hess-Smith e restituisce il valore del Cl –calcolato in due modi- e i grafici dell’andamento
del Cp e delle velocità
(programma: hess_smith )
Alcune note ai programmi
profili_naca: le leggi –o equazioni- per la costruzione dello spessore (thickness, yt) del profilo NACA
sono corrette per garantire la chiusura del profilo al bordo d’uscita secondo la legge yt=yt*(1-x^100),
che praticamente non altera il profilo e permette la chiusura yt(1)=0;
discr_pannelli: è possibile usare una discretizzazione equispaziata inserendo negli input la stringa
equi=1, altrimenti il programma usa le legge coseno di default, non è necessario specificarla;
prof_circolare: è un sottoprogramma che discretizza la circonferenza di diametro unitario in N
pannelli, è usata per verificare il codice, viene richiamata con la codifica -1;
Ulteriori note e commenti dei sottoprogrammi sono riportati nel codice stesso
Di seguito si riporta il listato dei programmi con relative note
function[x,yc,yt]=profili_naca(nome_profilo)
%metodo numerico per la creazione dei profili NACA della serie 4 e 5
%inserito il profilo ritorna le ordinate della linea media yc (mean camber line)
%e la distribuzione degli spessori yt
%
%sintax: [yc,yt]=profili_naca(codice_profilo)
%i.e. 2412, 23012....la circonferenza è -1
%la corda è discretizzata in mille punti con legge coseno
N=1000;
for i=1:(N+1)
x(i)= 0.5*(1+cos((i-1)*2*pi/N));
end
if nome_profilo==-1
%circonferenza
[x,yt]=prof_circolare(100); %con oltre 100 pannelli non si capisce il disegno
yc=zeros(1,101);
return
end
if nome_profilo<10000 & nome_profilo>999 %cosi è della serie 4
m=floor(nome_profilo/1000);
p=floor(nome_profilo/100)-10*m;
t=nome_profilo-1000*m-100*p;
m=m/100;
p=p/10;
t=t/100;
for i=1:length(x)
if x(i)<=p
yc(i)=m/(p^2)*(2*p*x(i)-x(i)^2);
else
yc(i)=m/((1-p)^2)*((1-2*p)+2*p*x(i)-x(i)^2);
end
end
else if nome_profilo<999
%per profili simmetrici tipo 00
m=0;
p=floor(nome_profilo/100);
t=nome_profilo-100*p;
t=t/100;
for i=1:length(x)
yc(i)=0;
end
else if nome_profilo>9999 & nome_profilo<100000
%profili serie 5
prime_cifre=floor(nome_profilo/100);
if prime_cifre==210
p=0.05;
m=0.058;
k=361.4;
elseif prime_cifre==220
p=0.1;
m=0.126;
k=51.64;
elseif prime_cifre==230
p=0.15;
m=0.2025;
k=15.957;
elseif prime_cifre==240
p=0.2;
m=0.29;
k=6.643;
elseif prime_cifre==250
p=0.25;
m=0.391;
k=3.23;
else error('le prime cifre non corrispondo a quelle std')
return
end
for i=1:length(x)
if x(i)<=m
yc(i)=k/6*(x(i)^3-3*m*x(i)^2+m^2*(3-m)*x(i));
else
yc(i)=k/6*m^3*(1-x(i));
end
end
t=nome_profilo-prime_cifre*100;
t=t/100;
else
error('errore: il profilo deve avere 4 o 5 cifre')
return
end
end
end
f='t/0.2*(0.2969*sqrt(x)-0.126*x-0.35160*x.^2+0.2843*x.^3-0.1015*x.^4)';
yt=eval(f);
yt=yt.*(1-x.^100); %correzione per la chiusura del profilo
plot(x,yc,x,yc+yt,x,yc-yt)
legend('mean camber line','dorso','ventre')
xlabel('corda adimensionale')
ylabel('ordinata adimensionale')
nomestringa=num2str(nome_profilo);
title(strcat('Profilo NACA', nomestringa))
axis([-0.05 1.1 -0.5 0.5])
%modificare gli assi per miglior visualizzazione
_______________________________________________________________________________
function[x,y]=prof_circolare(N)
%disegna il poligono regolare di N lati inscritto in una circonferenza di raggio unitario
%restituisce le coordinate (x,y) dei vertici
%
%sintax: [x,y]=prof_circolare(N)
for i=1:(N+1)
x(i)= cos((i-1)*2*pi/N); %prendo le x con legge coseno altrimenti circonferenza addio
end
y=sqrt(1-x.^2); %equazione della circonferenza
for i=1:round(N/2)
y(i)=-y(i); %per la parte negativa
end
x=0.5*(x+1); %traslazione del profilo, e lo rendo di raggio unitario
y=0.5*y;
%serve per la verifica del profilo circolare
figure
plot(x,y,'-*')
grid on,hold on
title(strcat('circonferenza discretizzata in-',num2str(N),'pannelli'))
axis equal
return
_______________________________________________________________________________
function[xpann,ypann]=discr_pannelli(nome_profilo,N,equi)
%discretizzazione del profilo in N pannelli, inserito il profilo ritorna le coordinate
%dei nodi (estremi dei pannelli), l'ultimo nodo coincide con il primo
%
%sintax: [xpann,ypann]=discr_pannelli(nome_profilo,N,equi)
%
%NOTE: equi=1 per indicare una discretizzazione equispaziata altrimenti esegue di
%default una discretizzazione con legge coseno,cioè non bisogna inserire un altro input
%inoltre indicando nome_profilo il numero negativo -1 viene discretizzato un profilo
%circolare(cioè la circonferenza) per verificare il metodo di Hess-Smith
if N<3
error('devi avere almeno 3 pannelli, a meno che non stai negando il 5 postulato')
end
if nome_profilo==-1 %verifica circonferenza
[xpann,ypann]=prof_circolare(N); %discretizzato con il coseno a prescindere
return
end
%condizione per stabilire la legge di discretizzazione
if nargin==3 & equi==1 %così posso dargli anche solo 2 input per il default
for i=1:floor(N/2)+1
x(i)=1-(i-1)/round(N/2); %legge per l’equispaziatura
end
x=[x fliplr(x(1:round(N/2)))]; %metto il round per il caso N dispari, cosi non
prende lo zero
disp('hai selezionato una discretizzazione equispaziata') %messaggio di conferma
else
%legge coseno
for i=1:(N+1)
x(i)= 0.5*(1+cos((i-1)*2*pi/N));
end
end
%il programma è quasi identico a profili_naca
Il calcolo del profilo, yc e yt è identico al programma profili_naca, pertanto si evita la trascrizione. Vi
è una modifica finale per la scrittura corretta delle coordinate dei pannelli. Nonostante il programma
sia quasi indentico si è voluto crearne uno a parte in quanto il programma profili_naca è più che altro
un disegno del profilo necessario per il confronto, infatti usa 1000 punti a prescindere.
f='t/0.2*(0.2969*sqrt(x)-0.126*x-0.35160*x.^2+0.2843*x.^3-0.1015*x.^4)';
yt=eval(f);
yt=yt.*(1-x.^100); %correzione per la chiusura
%scrivo in output le coordinate dei nodi
%le yt siccome vanno dal ventre al dorso (senso orario dal bordo uscita)
%prima devo sottrarle al camber poi le sommo
xpann=x;
ypann=yc+yt;
for i=1:round(max(size(x))/2)
ypann(i)=yc(i)-yt(i);
end
figure
plot(xpann,ypann,'-*r')
grid on
title(strcat('discretizzazione con ',' ',num2str(N),'-pannelli'))
axis([-0.05 1.1 -0.6 0.6])
figure
[yc,yt]=profili_naca(nome_profilo);
hold on
plot(xpann,ypann,'-*b')
legend('pannelli')
title('confronto profilo-pannelli')
axis([-0.05 1.2 -0.6 0.6])
return
_____________________________________________________________________________________________________
function[lunghezza,xpann,ypann,xcontr,ycontr,n_pann,t_pann]=
caratt_pannelli_and_kutta(nome_profilo,N,equi)
%dati gli estremi dei pannelli che approssimano il profilo, oppurtunamente
%richiamati, calcola le caratteristiche dei pannelli
%-lunghezza,versori normale e tangente,punto di controllo,pannello di Kutta-necessari per
%poi implementare il metodo di Hesse-Smith
%equi= specifica il tipo di discretizzazione, inserire 1 per avere nodi
%equispaziati in x, altrimenti di default usa legge del coseno
if nargin==3
equi=equi;
else
equi=0;
end
[xpann,ypann]=discr_pannelli(nome_profilo,N,equi);
grid on
%calcolo le caratteristiche dei
for i =1:N
pannelli
lunghezza(i)=sqrt((ypann(i+1)-ypann(i))^2 + (xpann(i+1)-xpann(i))^2);
xcontr(i)=0.5*(xpann(i+1)+xpann(i)); %punto di controllo del pannello a metà pannello
ycontr(i)=0.5*(ypann(i+1)+ypann(i));
deltay(i)=ypann(i+1)-ypann(i);
deltax(i)=xpann(i+1)-xpann(i);
sin_teta(i)=deltay(i)/lunghezza(i);
cos_teta(i)=deltax(i)/lunghezza(i);
n_pann(i,:)=[-sin_teta(i),cos_teta(i)] ;
t_pann(i,:)=[cos_teta(i),sin_teta(i)] ;
%versore normale del pannelo [nx,ny]
%versore tangenete del pannello [tx,ty]
end
%calcolo del pannello aggiuntico per soddisfare la condizione di Kutta
%velocità normale su questo pannello (uscente dal bordo d'uscita) nulla
%prendo il punto di controllo sulla bisettrice dei pannelli 1 e N e
%lunghezza del pannello di kutta come la media dei pannelli 1 e N
bisett=0.5*(asin(sin_teta(1))+asin(sin_teta(end)));
teta_kutta=(-asin(sin_teta(1))+bisett);
lunghezza(N+1)=(lunghezza(1)+lunghezza(N))/2;
xcontr_kutta= 1+lunghezza(N+1)/2;
ycontr_kutta=tan(teta_kutta)*(xcontr_kutta-1);
hold on
plot(xcontr_kutta,ycontr_kutta,'+')
%aggiornamento dati nei vettori che ora hanno dimensioni N+2
%l'ultimo è appunto riferito al pannello di Kutta
xpann=[xpann 1+2*(xcontr_kutta-1)];
ypann=[ypann 2*ycontr_kutta];
xcontr=[xcontr xcontr_kutta];
ycontr=[ycontr ycontr_kutta];
sin_teta(N+1)=(ypann(N+2)) / lunghezza(N+1); %essendo ypann(N+1)=0
cos_teta(N+1)=(xpann(N+2)-1) / lunghezza(N+1); %esssendo xpann(N+1)=1
n_pann(N+1,:)= [-sin_teta(N+1),cos_teta(N+1)];
t_pann(N+1,:)= [cos_teta(N+1),sin_teta(N+1)];
hold on
plot(xpann(N+2),ypann(N+2),'*b')
return
________________________________________________________________________________
%Metodo a pannelli di Hesse-Smith per il calcolo delle caratteristiche
%aerodinamiche di un profilo NACA serie 4,5
%è un metodo a potenziale, per cui a rigore non si ha resistenza, tuttavia
%viene calcolata come indice dell'approsimazione.
%In input si richede il tipo di profilo, il numero di pannelli e l’angolo di attacco
%in output si restituiscono il valore del CL, l’andamento del Cp e delle velocità.
%Per lanciare il programma digitare hess_smith nel command windows di MATLAB
clear all,close all
nome_profilo=input('inserisci nome del profilo NACA...');
N=input('inserire il numero di pannelli...');
aoa=input('inserire angolo di attacco...');
equi=input('digitare 1 per avere discretizzazione equispaziata, altrimenti invio...');
%N=100;
%aoa=6;
%nome_profilo=2415;
%equi=0;
%%%%%%%%%%%% HANDS OFF %%%%%%%%%%%%%
aoa=aoa*pi/180;
U=1;
%for N=40:5:150
%per eventuale ciclo for per variare valori interessanti
[lunghezza,xpann,ypann,xcontr,ycontr,n_pann,t_pann]=caratt_pannelli_and_kutta(nome_profil
o,N,equi);
%inizializzo le sottomatrici, quelle che servono che scopro essere una
aic_v=zeros(N+1,1);
for i=1:N+1
%punti di controllo compreso kutta
for j=1:N
%pannelli
%%distanza del punto di controllo i dagli estremi del pannello j per tutti i
pannelli j
r1=sqrt((xpann(j)-xcontr(i))^2 + (ypann(j)-ycontr(i))^2);
r2=sqrt((xpann(j+1)-xcontr(i))^2 + (ypann(j+1)-ycontr(i))^2);
teta1=atan2((ycontr(i)-ypann(j)) ,(xcontr(i)-xpann(j)));
teta2=atan2((ycontr(i)-ypann(j+1)) ,(xcontr(i)-xpann(j+1)));
%occhio ai segni perche a volte prende il complementare
if teta2-teta1>3.15 %valore leggermente>pi
teta2=teta2-2*pi; %provare pi oppure 2pi
end
%u_s , v_s componenti della velocità della sorgente
u_s=0.5/pi*log(r1/r2);
if i==j %velocità autoindotte, vd testo
u_s=0;
v_s=0.5;
else
u_s=0.5/pi*log(r1/r2);
v_s=0.5/pi*(teta2-teta1);
end
%passo al sistema globale con la matrice di rotazione T
T=[t_pann(j,:)', n_pann(j,:)'];
vel_globale=T * [u_s; v_s];
u_s=vel_globale(1);
v_s=vel_globale(2);
%velocità indotte dal vortice v sono ortogonali a quelle della sorgente
u_v=v_s;
v_v=-u_s;
%calcolo le componenti delle sottomatrici
aic_s(i,j)=u_s*n_pann(i,1) + v_s*n_pann(i,2);
aic_v(i)=aic_v(i)+ u_v*n_pann(i,1) + v_v*n_pann(i,2);
%espressioni per il calcolo finale della velocità U
aic_s_U(i,j)=u_s*t_pann(i,1) + v_s*t_pann(i,2);
aic_v_U(i,j)=u_v*t_pann(i,1) + v_v*t_pann(i,2);
%costruisco matrici di verifica casomai faccio errori a moltiplicare versori
%u_vs(i,j)=u_v;
%v_vs(i,j)=v_v;
end
%velocità tangenziale Ut pannello della corrente asintotica cui andrà poi sommata la
velocità indotta
Ut_pann(i)=U*([cos(aoa), sin(aoa)]*t_pann(i,:)');
%termine noto rhs
rhs(i)= -U*([cos(aoa), sin(aoa)]*n_pann(i,:)');
end
%assemblaggio matrice d'influenza aerodinamica AIC
AIC=[aic_s aic_v];
%SOLUZIONE-finalmente: distribuzione di sorgenti s e vortice uniforme v
distr=AIC\rhs';
%calcolo della velocità su ogni pannello [formula finale 16.2.16]
sigma=distr(1:N);
gamma=distr(N+1);
sorg=zeros(N,1);
vortex=zeros(N,1);
for i=1:N
for j=1:N
sorg(i)=sorg(i)+sigma(j)*(aic_s_U(i,j));
vortex(i)=vortex(i)+(aic_v_U(i,j));
end
Ut(i)=Ut_pann(i)+sorg(i)+gamma*vortex(i); %velocità U effettiva su ogni pannello
end
%%%%%%%%%%%%% CALCOLO DEI COEFFICIENTI DI INTERESSE %%%%%%%%%%%%
%coefficiente di pressione Cp,i Cp<0 danno portanza,quindi me li aspetto sul dorso almeno
Cp=1-(Ut./U).^2;
[Cp_min,pos_min]=min(Cp); %al Cp_min si ha max velocità <=> min pressione
[Cp_max,pos_max]=max(Cp); %Cp_max dovrebbe essere teoricamente 1(=> è punto di ristagno)
x_Cp_min=xcontr(pos_min), y_Cp_min=ycontr(pos_min);
x_Cp_max=xcontr(pos_max); y_Cp_max=ycontr(pos_max);
%calcolo la circolazione come da definizione, cioè integrale Ut*ds
circolazione=sum(Ut.*lunghezza(1:N));
%coefficiente di portanza cl e resistenza cd, la resistenza è nulla, Cd è un indicatore
dell'errore di approx
for i=1:N
cl(i)= -Cp(i)*lunghezza(i)*(n_pann(i,2));
cd(i)= -Cp(i)*lunghezza(i)*(n_pann(i,1));
end
cl=sum(cl); cd=sum(cd);
%questi sono cl e cd relativi alla direzione corda del profilo, devo riferirli alla
velocità asintotica inclinata alpha
CL=cl*cos(aoa)-cd*sin(aoa)
CD=cl*sin(aoa)+cd*cos(aoa)
%oppure da Kutta-Joukowsky eguaglio le portanze ottenendo CL=2*circolazone/(corda*Uinf)
CL_kj=2*circolazione
%%%%%%%%%%%%% GRAFICI DI INTERESSE %%%%%%%%%%%%%%
%grafico il profilo e l'andamento del Cp
%però siccome il Cp è in genere negativo sul dorso allora inverto gli assi
%però allora devo invertire anche il profilo altrimenti è capovolto
figure(3)
[x,yc,yt]=profili_naca(nome_profilo);
figure(4)
plot(x_Cp_min,-y_Cp_min,'*r',x_Cp_max,y_Cp_max,'or',xcontr(1:round(N/2)),Cp(1:round(N/2)),'b',...
xcontr(round(N/2):end-1),Cp(round(N/2):end),'r',x,-yc+yt,'k',x,-yc-yt,'k')
grid on, hold on
nomestringa=num2str(aoa*180/pi);
title(strcat('andamento delle pressioni ad alpha-',nomestringa,'gradi'))
legend('punto di minima pressione','punto di ristagno','pressione ventre','pressione
dorso')
axis ([-0.2 1.2 Cp_min max(Cp)])
set(gca,'Ydir','reverse')
figure(5)
plot(aoa*180/pi,CL,'*')
title('curva CL-alpha')
xlabel('alpha [deg]')
ylabel('CL')
hold on
figure(6)
plot(N,CD,'*b')
hold on
grid on
title('andamento errore al variare di N con legge coseno')
xlabel('N')
ylabel('errore (è il CD)')
%end
figure(7)
plot(xcontr(1:round(N/2)),abs(Ut(1:round(N/2))),'b',...
xcontr(round(N/2):end-1),abs(Ut(round(N/2):end)),'r')
grid on
xlabel('corda adimensionalizzata')
ylabel('Velocità [m/s]')
title(strcat('andamento delle velocità incidenza -',nomestringa,'-gradi'))
legend('ventre','dorso')
Una volta nota la distribuzione di Cp, si individua il punto di minima pressione (max velocità) e il
punto di ristagno (Cp=1 , velocità nulla) che vengono mostrati nei grafici.
Particolare attenzione al calcolo del Cl del profilo: noto il Cl su ogni pannello (= - Cp*lunghezza) si
calcolano le sue componenti prima secondo la normale e parallela alla corda, poi queste componenti
(entrambe) vanno a loro volta scomposte secondo la direzione della velocità asintotica.
Il valore del Cd è un indicatore dell’errore, pertanto dovrà essere quasi nullo, si spera!
La variabile CL_kj indica il CL calcolato dalla circolazione.
Validazione del codice
Per verificare la bontà del codice, si confrontano alcuni risultati ottenuti con il programma X-FOIL
Esempio: profilo NACA 2415 , incidenza 5 deg, discretizzato con N=100 pannelli
confronto profilo­pannelli
pannelli
0.5
0.4
ordinata adimensionale
0.3
0.2
0.1
0
­0.1
­0.2
­0.3
­0.4
­0.5
0
0.2
0.4
0.6
corda adimensionale
0.8
1
1.2
andamento delle pressioni ad alpha­5gradi
­2
punto di minima pressione
punto di ristagno
pressione ventre
pressione dorso
­1.5
­1
­0.5
0
0.5
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Otteniamo:
CL=0.8722
CL_kj=0.8728
e un errore Cd=-6.1984e-005
Con X-FOIL (ovviamente caso inviscido) otteniamo: CL= 0.8775
Oppure lo stesso profilo posto a incidenza 10 otteniamo otteniamo:
CL=1..4816; CL_kj= 1.4820
errore Cd= -2.8035e-004
Con X-FOIL si ottiene: CL=1.4871
In entrambi i casi il codice fornisce risultati accurati al centesimo (rispetto a X-FOIL).
Possiamo inoltre verificare la bontà del codice andando a confrontare i risultati del codice per
soluzioni note, ad es. il caso del cilindro e dei profili simmetrici investiti a incidenza nulla in cui
sappiamo non avere alcuna portanza.
Circonferenza:
oltre a non esserci nessuna forza deviatrice, conosciamo l’andamento della velocità sul contorno.
Detto teta l’angolo rispetto alla direzione della Vas , sappiamo essere Vt = 2 Vas sin(teta);
con velocità massima pari al doppio della velocità asintotica nel punto della circonferenza posto 90°
rispetto alla direzione della V, cioè a x=0.5 rispetto al sistema di riferimento seguente.
circonferenza discretizzata in­100pannelli
0.5
0.4
0.3
0.2
0.1
0
­0.1
­0.2
­0.3
­0.4
­0.5
0
0.2
0.4
0.6
0.8
1
Inserendo il profilo circolare nel codice otteniamo infatti:
CL = -2.5479e-016
Cp_min= -3  velocità tangenziale doppio di quella asintoica Cp= 1- (Vt/Vas)2
x_Cp_min=0.5
andamento delle pressioni ad alpha­0gradi
­3
punto di minima pressione
punto di ristagno
pressione ventre
pressione dorso
­2.5
­2
­1.5
­1
­0.5
0
0.5
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Nonostante il grafico mostri un unico punto di ristagno e un unico punto di minima pressione,
andando a vedere i valori che assume Cp si notano i due valori Cp=-3 in posizioni opposte e
analogamente per il punto di ristagno (Cp=1) esattamente a poppa e a prua.
Confrontando il grafico della velocità con quella teorica, e scalando oppurtunamente le ascisse (x=cos
teta) si nota l’identico andamento dei grafici
andamento delle velocità sulla circonferenza
2
ventre
dorso
teorica
1.8
1.6
Velocità [m/s]
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0
0.1
0.2
0.3
0.4
0.5
0.6
corda adimensionalizzata
0.7
0.8
0.9
1
Nota: la circonferenza è sicuramente simmetrica rispetto a qualsiasi incidenza, il metodo però prevede
anche un pannello aggiuntivo per la condizione di Kutta, il cui estremo di origine è posto a (1;0)
essendo il bordo d’uscita derivante dal profilo. Questo rende simetrico il profilo circolare solo a
incidenza nulla; quella appunto usata per la verifica del metodo appena fatta.
Profili simmetrici:
andiamo ora a studiare alcuni profili simmetrici , es NACA 0012, 0015, investiti a incidenza nulla. e
verifichiamo che sia nullo il CL.
NACA 0012: andamento delle pressioni ad alpha­0gradi
­0.5
NACA 0015: andamento delle pressioni ad alpha­0gradi
­0.6
punto di minima pressione
punto di ristagno
pressione ventre
pressione dorso
punto di minima pressione
punto di ristagno
pressione ventre
pressione dorso
­0.4
­0.2
0
0
0.2
0.4
0.5
0.6
0.8
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Otteniamo in entrambi i casi un CL dell’ordine di 10-18, praticamente nullo
I risultati ottenuti prescindono dal numero di panneli, come è lecito aspettarsi essendo qualsiasi
discretizzazione del profilo simmetrica rispetto alla direzione della velocità asintotica
Infatti anche con soli N=5 pannelli si ha un CL dell’ordine di 10-16.
Essendo necessaria una circolazione (e quindi un vortice) per avere una forza deviatrice possiamo
andare a vedere il valore che assume sia la distribuzione di vortici (variabile gamma nel codice) sia
quello della circolazione Γ (variabile circolazione) aspettandoci che siano entrambi nulli.
Richiamando le variabile il codice ci fornisce i valori
gamma= 2.0734e-017
circolazione= 0
che dimostrano ulteriormente la bontà del codice
Studio dell’errore
1
Nella discretizzazione del profilo è possibile scegliere tra una discretizzazione equispaziata e una con
legge coseno. Grafichiamo l’andamento dell’errore (inteso come Cd) in funzione del numero di
pannelli N nei due casi. Prendendo sempre NACA 2415 a incidenza nulla partendo con N=3 pannelli
fino a N=40 abbiamo:
andamento errore al variare di N
0.2
* * errore (è il CD)
0.15
equi
coseno 0.1
0.05
0
­0.05
0
5
10
15
20
N
25
30
35
40
L’andamento dell’errore con legge coseno è molto migliore rispetto al caso equispaziato; in entrambi
i casi si nota che l’errore dipende dalla scelta di un numero pari o dispari di pannelli: è sempre
migliore un numero pari di pannelli (così che la discretizzazione cade esattamente sul bordo d’attacco
che viene approssimata appuntito).
Analizziamo in dettaglio l’andamento dell’errore nel caso migliore, cioè con legge coseno, e
cerchiamo empiricamente di capire con che legge l’errore tende (se tende) a zero.
Partiamo da N=30 pannelli che sembra il valore oltre il quale il caso pari e dispari si allineano lungo
un eventuale asintoto (probabilmente oltre questo valore l’approssimazione del bordo d’attacco come
aguzzo-pannelli pari- o come pannello verticale-pannelli dispari- non influisce oltremodo nell’errore),
fino a 150 pannelli.
Pe capire con quale ordine rispetto a N l’errore tende a zero, grafichiamo in scala logaritmica l’errore
e le funzioni N-1 , N-2 .
­3
2.5
andamento errore al variare di N con legge coseno
x 10
errore (è il CD)
2
1.5
1
0.5
0
20
40
60
80
N
100
120
140
160
­1
10
N­1
N­2
real
­2
10
­3
10
­4
10
1
10
2
10
Dalla scala logaritmica sembrerebbe che l’errore tenda a zero con un ordine compreso tra N-1 e N-2.
Per stabilire l’ordine esatto basta risolvere CD= 1 / Nx, da cui
x = - log(Cd) / log(N)
che fornisce valori compresi tra 1.66 e 1.72.
Calcolando lo stesso per altri profili e variando l’incidenza si ottiene un esponente x compreso tra
1.61 e 1.88 .
Nel caso di discretizzazione equispaziata x è compreso tra 1.3 e 1.5 , cioè converge più lentamente.