APPENDICE B
In questa appendice sono riportati tutti i programmi che sono stati sviluppati nel corso di questo lavoro di tesi.
I programmi principali sono: “Design” e “Trim” che come si osserva dai listati sottostanti sono stati entrambi realizzati adoperando il comando “function”; perché questi hanno elementi comuni e ciò ha permesso di eliminare delle inutili ripetizioni nella stesura dei due codici.
Il programma denominato “Design” si occupa della determinazione della sezione dell’ugello di scarico.
Per poter funzionare correttamente il programma “Design” deve caricare dei dati che sono contenuti nel file “Design_input” in particolare in esso è definito il punto di progetto dalla cui scelta dipende la dimensione della sezione dell’ugello di scarico.
L’ultima operazione che viene svolta dal programma “Design” è la generazione di un file di uscita denominato “Design_output” nel quale sono memorizzati oltre alla sezione dell’ugello di scarico i dati necessari al funzionamento del programma “Trim” e del modello di simulazione.
A
SIn più in “Design_output” sono memorizzate le grandezze termodinamiche a monte e valle dei componenti che formano il motore, così da fornire all’utente la condizione di regime occupata dal motore per il punto di progetto fissato.
Come ovvio cambiando i dati che costituiscono il punto di progetto si ottengono valori differenti della dimensione della sezione dell’ugello di scarico.
Il programma chiamato “Trim” determina i dati necessari per poter inizializzare il modello dinamico.
Come il programma “Design” anche questo per poter funzionare deve caricare dei dati che sono contenuti nel file “Trim_input”.
Il file “Trim_input” contiene i dati della quota (H) e del mach (M) che rappresentano la condizione di volo oltre alla condizione di regime del compressore data da N
O_ N
O. In aggiunta a questi dati ne servono altri che provengono dal file “Design_input” e
“Design_output”.
In particolare da “Design_input” sfrutta tutti i dati in esso memorizzati tranne quelli che
definiscono il punto di progetto ad esclusione del rapporto di pressione del compressore
(
Πdesc); mentre del file “Design_output” usa tutti i dati in esso registrati.
Il codice “Trim” termina con la generazione file chiamato “Trim_output” nel quale sono memorizzati i dati necessari per inizializzare il modello dinamico.
Inoltre in questo file sono registrati tutte le grandezze termodinamiche a monte a valle dei componenti del propulsore che rappresentano la condizione di stazionaria occupata del propulsore all’istante iniziale della simulazione per la condizione di volo e di regime del compressore che sono stati fissati.
Il programma grafix serve per tradurre i risultati della simulazione in grafici.
Programmi Principali:
Design
Design_input % carico dati [out]=isaSI(quotades);
TemperaturAmbiente=out(1);
PressioneAmbiente=out(2);
a=out(4);% Velocità del suono
%
[Tt2,Pt2]=presadaria(TemperaturAmbiente,PressioneAmbiente,Mdes);
%
[Tt3,Pt3]=compressoredes(Tt2,Pt2,N_Ndes);
%
[fdes,Pt4]=cameradicombustionedes(Tt3,Pt3);
lamdat=(1-(Cpa*(Tt3-Tt2))./(Cpg*(1+fdes)*Rmeccanico*Rturbina*Tmax))^(1/mg);
%
[Tt5,Pt5]=turbina(lamdat,Tmax,Pt4);
%
[T6,lamdae,Vs,P6]=ugellodiscarico(PressioneAmbiente,Pt5,Tt5);
v=Mdes*a;% Velocità di volo
rho6=P6./(R*T6);% Densità del gas combusto a valle dell'ugello di scarico As=Tdes./(rho6*Vs*(Vs-v)+(P6-PressioneAmbiente));% Area della sezione dello
% ugello di scarico
Qgasdes=rho6*As*Vs;% Portata dei gas combusti
Qariades=Qgasdes./(1+fdes);% Portata d'aria in ingresso nel compressore Pt2des=Pt2;
Tt2des=Tt2;
Qdes=Qariades;
%
% Scrittura dei dati da acquisire
%
% Nome del file di output fname=['Design_output.m'];
fid=fopen(fname,'w');
frewind(fid);
fprintf(fid,'%s \n','% ');
commento='% Area sezione dell''ugello di scarico ';
fprintf(fid,'As = %1.5g; %s \n',As,commento);
fprintf(fid,'Tt2des = %1.7g; %s \n',Tt2des,'% [K] ');
fprintf(fid,'Pt2des = %1.10g; %s \n',Pt2des,'% [Pa] ');
commento1='% [Kg/s] Portata in ingresso compressore';
fprintf(fid,'Qdes = %1.7g; %s \n',Qdes,commento1);
%
%Scrittura dati aggiunti
%
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Ulteriori dati del motore in condizione di design ');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Temperature [K]');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% Tt2= ',num2str(Tt2)]);
fprintf(fid,'%s \n',['% Tt3= ',num2str(Tt3)]);
fprintf(fid,'%s \n',['% Tt4= ',num2str(Tmax)]);
fprintf(fid,'%s \n',['% Tt5= ',num2str(Tt5)]);
fprintf(fid,'%s \n',['% T6 = ',num2str(T6)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Pressioni [Pa]');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% Pt2= ',num2str(Pt2)]);
fprintf(fid,'%s \n',['% Pt3= ',num2str(Pt3)]);
fprintf(fid,'%s \n',['% Pt4= ',num2str(Pt4)]);
fprintf(fid,'%s \n',['% Pt5= ',num2str(Pt5)]);
fprintf(fid,'%s \n',['% P6 = ',num2str(P6)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Rapporti di pressione');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% compressore= ',num2str(Lcompressoredes)]);
fprintf(fid,'%s \n',['% turbina= ',num2str(lamdat)]);
fprintf(fid,'%s \n',['% ugello di scarico= ',num2str(lamdae)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Altre grandezze');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['%Velocità di scarico = ',num2str(Vs)]);
fprintf(fid,'%s \n',['%Densità dei gas combusti= ',num2str(rho6),'% [Kg/m^3]']);
fprintf(fid,'%s \n',['%Portata d''aria= ',num2str(Qariades),'% [Kg/s]']);
fprintf(fid,'%s \n',['%Portata dei gas combusti= ',num2str(Qgasdes),'% [Kg/s]']);
fprintf(fid,'%s \n',['%fdes= ',num2str(fdes),'%[-]']);
fclose(fid);
%
clear Pt2 Pt3 Pt4 Pt5 P6 clear Tt2 Tt3 Tmax Tt5 T6
clear rho6 Vs fdes Qgasdes Qariades lamdae lamdat quotades Mdes Tdes clear N_Ndes a TemperaturAmbiente PressioneAmbiente v
Trim
Trim_input;
[out]=isaSI(H);
TemperaturAmbiente=out(1);
PressioneAmbiente=out(2);
[Tt2,Pt2]=presadaria(TemperaturAmbiente,PressioneAmbiente,M);
% Determinazione della temperatura e dellapressione totale a valle della
% presa d'aria
%
[Tt3,Pt3,QariaRif,Lcompressore]=compressore(Tt2,Pt2,No_No);
% Determinazione dela temperatura e pressione totale a valle del
% compressore. In più si calcola Qariarif proveniente dalla retta di regime
% del compressore.
%
epsilon=1;c=0;fo=0;P6= PressioneAmbiente;
% Il ciclo iterativo while serve per poter associare alla portata d'aria
% determinata dalla retta di regime del compressore un valore ben preciso
% di fo.
% Avendo due soluzioni che soddisfano alla mia richiesta devo inserire una
% seconda condizione che deve essere verificata affinché si scarti la
% soluzione non desiderata.
%
while epsilon >= 0.001 | P6 == PressioneAmbiente fo=fo+0.0001;c=c+1;
[Tt4,Pt4]=cameradicombustione(Tt3,Pt3,fo);
% Determinazione della pressione e della temperatura totale in uscita % dalla camera di combustione
%
Lturbinatrim=(1-(Cpa*(Tt3-Tt2))/(Cpg*(1+fo)*Rmeccanico*Rturbina*Tt4))^(1/mg);
% determinazione del rapporto di pressione della turbina tramite % l’uguaglianza di Wt=Wc.
%
[Tt5,Pt5]=turbina(Lturbinatrim,Tt4,Pt4);
% Determinazione della pressione e temperatura totale a valle della % turbina
%
[T6,lamdae,Vs,P6]=ugellodiscarico(PressioneAmbiente,Pt5,Tt5);
% Determinazione della pressione,temperatura e velocità di scarico a % valle dell'ugello di scarico.
rho6=P6/(R*T6);% Densità del gas combusto Qgaso=rho6*As*Vs;% Portata del gas combusto
Qariao=Qgaso/(1+fo);% Portata d'aria in ingresso del compressore epsilon=(QariaRif-Qariao)/QariaRif;
if c>= 10000
disp('La simulazione è stata interrotta per paura che si sia') disp('verificato un ciclo infinito')
break end end
No=Ndes*sqrt(Tt2des/Tt2)*No_No;% Numero dei giri iniziali
%
% Scrittura dei dati da acquisire
%
% Nome del file di output fname=['Trim_output.m'];
fid=fopen(fname,'w');
frewind(fid);
fprintf(fid,'%s \n','% ');
commento='% Portata dei gas combusti ';
fprintf(fid,'Qgaso = %1.6g; %s \n',Qgaso,commento);
fprintf(fid,'fo = %1.7g; %s \n',fo,'% [-] ');
commento1='% [giri/s] Numero dei giri iniziali';
fprintf(fid,'No = %1.7g; %s \n',No,commento1);
%
% Scrittura di dati aggiuntivi
%
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Ulteriori dati del motore in condizione di trim ');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Temperature [K]');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['%Tt2= ',num2str(Tt2)]);
fprintf(fid,'%s \n',['%Tt3= ',num2str(Tt3)]);
fprintf(fid,'%s \n',['%Tt4= ',num2str(Tt4)]);
fprintf(fid,'%s \n',['%Tt5= ',num2str(Tt5)]);
fprintf(fid,'%s \n',['%T6 = ',num2str(T6)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Pressioni [Pa]');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% Pt2= ',num2str(Pt2)]);
fprintf(fid,'%s \n',['% Pt3= ',num2str(Pt3)]);
fprintf(fid,'%s \n',['% Pt4= ',num2str(Pt4)]);
fprintf(fid,'%s \n',['% Pt5= ',num2str(Pt5)]);
fprintf(fid,'%s \n',['% P6 = ',num2str(P6)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Rapporti di pressione');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% compressore= ',num2str(Lcompressore)]);
fprintf(fid,'%s \n',['% turbina= ',num2str(Lturbinatrim)]);
fprintf(fid,'%s \n',['% ugello di scarico= ',num2str(lamdae)]);
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n','% Altre grandezze');
fprintf(fid,'%s \n','% ');
fprintf(fid,'%s \n',['% Velocità di scarico = ',num2str(Vs)]);
fprintf(fid,'%s \n',['% Densità dei gas combusti= ',num2str(rho6),'% [Kg/m^3]']);
fprintf(fid,'%s \n',['% Portata d''aria= ',num2str(Qariao),'% [Kg/s]']);
fprintf(fid,'%s \n',['% Portata dei gas combusti= ',num2str(Qgaso),'% [Kg/s]']);
fclose(fid);
%
clear Tt2 Tt3 Tt4 Tt5 T6 clear Pt2 Pt3 Pt4 Pt5 P6
clear rho6 Vs Qariao lamdae Lcompressore QariaRif epsilon c
Programmi di ausilio a quelli principali:
Sono riportati i listati dei programmi che i codici Design e Trim devono richiamare, affinchè possano caricare i dati necessari per poter funzionare correttamente.
Design_input
global ma mg Hf Tt2des Pt2des Q1 Q2 N1 N2 Pi1 Pi2 Cpg Cpm gammag global Lpresadaria Lcompressoredes Rcompressore Rcameracombustione global Rturbina Reffusore Qdes gamma Tmax
%
% Costante universale per i gas perfetti
%
R=287.05;% [J/KgK]
%
% Rapporto tra i calori specifici
%
gamma=1.4;% aria
gammag=1.33;% gas combusti ma=(1-gamma)/gamma;
mg=(1-gammag)/gammag;
%
% Calori specifici
%
Cpa=1000.5;% [J/KgK] a pressione costante aria Cpg=1147;% [J/KgK] a pressione costante gas Cpm=(Cpa+Cpg)/2;% [J/KgK] calore specifico medio
%
% Rendimenti
%
Rcompressore=1;% compressore Rturbina=1;% turbina
Rmeccanico=1;%rendimento meccanico Reffusore=1;% effusore
Rcameracombustione=1;% camera di combustione
%
% Rapporto di pressione della presa d'aria
%
Lpresadaria=1;
%
% Potere calorifico del carburante
%
Hf=4.4*10^7;%[J/Kg]
%
% Temperatura massima di uscita dalla camera di combustione
%
Tmax=1800;% [K]
%
% Momento di inerzia assiale delle parti rotanti del motore
%
Inerzia=15;% [Kg*m^2]
%
% Parametri della mappa semplificata del compressore
%
Q1=1;Q2=0.4; N1=1;N2=0.65; Pi1=1;Pi2=0.25;% Pi2=1/Lcompressoredes
%
% Dati di Design
%
quotades=0 ;%[m] 0<=Quota di volo<=20000 Mdes=0.3024;% 0<=Mach di volo<=1 Tdes= 35086;% [N] Spinta
Lcompressoredes=4;
Ndes=2500;% [giri/sec]
N_Ndes=1;%Il punto prescelto in fase di design deve essere sempre in N_Ndes=1
Trim_input
%
% Si richiama le costanti del neccessari per per rendere funzionante
% il programma Trim
%
Design_input;
%
% Dati di Ingresso
%
H=2000;% [m] 0<=Quota di volo<=20000 M=0.4;% 0<=Mach di volo<=1
No_No=0.9;% 0.65<= No_No<=1
%
% Si richiama i dati generati dal programma Design necessari per la
% determinazione del Trim
%
Design_output;
clear quotades Mdes Tdes Ndes=2500 N_Ndes=1
Sotto Programmi:
Questa sezione contiene tutti i programmi che formano i file Design e Trim.
isaSI
function [out]=isasi(H);
% Standar Atmosphere function
% T p rho mu ni a
%
% SEA LEVEL VALUES
%
% Pressure 101325 [Pa ]; 2116.7 [lbf/ft2 ]
% Density 1,225 [Kg/m3 ]; 0.002378 [slug/ft3 ]
% Temperature 288.2 [K ]; 518 [R ]
% Speed of Sound 340.3 [m/s ]; 1116.4 [ft/s ]
% Viscosity (dinamic)(mu) 1.789e-5 [Kg/m/s ]; 3.737e-7 [slug/ft/s]
% Kinematic Viscosity (ni) 1.460e-5 [m2/s ]; 1.5723e-4 [ft2/s ]
% Thermal Conductivity 0.0253 [J/m/s/K]; 3.165e-3 [lb/s/oR ]
%
% Specific Heat Cp 1005 [J/Kg/K]; 6005 [ft lbf/slug/R]
% Specific Heat Cv 717.98 [J/Kg/K]; 4289 [ft lbf/slug/R]
% Constant definition
R=287.05; % Perfect gas constant [J/Kg/K] (1715.7 ft lbf/slug/R) g=9.80665; % Gravitational Acceleration [m/s2] (32.174 ft/s2)
beta=1.458e-6; % parameter of the Sutherland law [mu=beta*T^(3/2)/(T+S)]
S=110.4; % parameter of the Sutherland law [mu=beta*T^(3/2)/(T+S)]
gamma=1.4; % Ratio of Specific Heats
% Sea level conditions
T0=288.15; % Temperature [K]
p0=101325; % Pressure [Pa]
rho0=1.225; % Density [Kg/m3]
% Stratosphere conditions (h = 11000 m ) Hs=11000;
Ts=216.65;
ps=p0*(1-0.0065*Hs/T0)^(g/R/0.0065);
rhos=rho0*(1-0.0065*Hs/T0)^(g/R/0.0065-1);
% 20000 m conditions H20=20000;
T20=Ts;
p20=ps*exp(-g/R/Ts*(H20-Hs));
rho20=rhos*exp(-g/R/Ts*(H20-Hs));
if H<11000 T=T0-0.0065*H;
p=p0*(1-0.0065*H/T0)^(g/R/0.0065);
rho=rho0*(1-0.0065*H/T0)^(g/R/0.0065-1);
%mu=beta*T^(3/2)/(T+S);
a=sqrt(gamma*R*T);
% ni=mu/rho;
else if H<20000 T=Ts;
p=ps*exp(-g/R/Ts*(H-Hs));
rho=rhos*exp(-g/R/Ts*(H-Hs));
%mu=beta*T^(3/2)/(T+S);
a=sqrt(gamma*R*T);
% ni=mu/rho;
else
T=T20+0.001*(H-H20);
p=p20*(1+0.001*(H-H20)/T20)^(-g/R/0.001);
rho=rho20*(1+0.001*(H-H20)/T20)^(-g/R/0.001-1);
mu=beta*T^(3/2)/(T+S);%end
a=sqrt(gamma*R*T);
% ni=mu/rho;
end end
out=[T,p,rho,a];
Presadaria
function[Tt2,Pt2]=presadaria(Ta,Pa,M) global ma Lpresadaria gamma
m=-ma;
Pta=Pa*(1+((gamma-1)/2)*M^2)^(1/m);
Pt2=Pta*Lpresadaria;
Tt2=Ta*(1+((gamma-1)/2)*M^2);
Compressoredes
function[Tt3,Pt3]=compressoredes(Tt2,Pt2,N_Ndes) global Lcompressoredes ma Rcompressore N1 N2 Pi1 Pi2 m=-ma;
Pstar=Pi1+((Pi2-Pi1)/(N2-N1))*(N_Ndes-N1);
Lcompressore=Lcompressoredes*Pstar;
Pt3=Pt2*Lcompressore;
Tt3=Tt2+Tt2*(Lcompressore^m-1)/Rcompressore;
Compressore
function[Tt3,Pt3,QariaRif,Lcompressore]=compressore(Tt2,Pt2,No_No) global Lcompressoredes ma Rcompressore N1 N2 Pi1 Pi2 Q1 Q2 Qdes global Tt2des Pt2des
m=-ma;
Pstar=Pi1+((Pi2-Pi1)/(N2-N1))*(No_No-N1);
Qstar=Q1+((Q2-Q1)/(N2-N1))*(No_No-N1);
Lcompressore=Lcompressoredes*Pstar;
Pt3=Pt2*Lcompressore;
Tt3=Tt2+Tt2*(Lcompressore^m-1)./Rcompressore;
QariaRif=Qstar*Qdes*(sqrt(Tt2des./Tt2))*(Pt2./Pt2des);
Cameradicombustionedes
function[fdes,Pt4]=cameradicombustionedes(Tt3,Pt3) global Cpm Hf Rcameracombustione Tmax
fdes=Cpm*(Tmax-Tt3)/(Hf*Rcameracombustione);
Pt4=Pt3;
Cameradicombustione
function[Tt4,Pt4]=cameradicombustione(Tt3,Pt3,fo) global Cpm Hf Rcameracombustione
Tt4=(Cpm*Tt3+fo*Hf*Rcameracombustione)/Cpm;
Pt4=Pt3;
Turbina
function[Tt5,Pt5]=turbina(lamdat,Tt4,Pt4) global mg Rturbina
Pt5=Pt4/lamdat;
Tt5=Tt4-Tt4*Rturbina*(1-lamdat^mg);
Ugellodiscarico
function[T6,lamdae,Vs,P6]=ugellodiscarico(Pa,Pt5,Tt5) global gammag Reffusore Cpg mg
Pcr=Pt5*(2/(1+gammag))^(gammag/(gammag-1));
if Pcr >= Pa P6=Pcr;
else P6=Pa;
end
lamdae=Pt5/P6;
T6=Tt5-Tt5*Reffusore*(1-lamdae^mg);
Vs=sqrt(2*Cpg*(Tt5-T6));
Programmi di grafica
In questa sezione è riportato il codice del programma che produce i grafici dei risultati ottenuti dalla simulazione.
Graficix
%
altezza=666;
larghezza=500;
y=33;
h=figure (1);set(h,'Position',[600,y-24,larghezza,altezza]);
subplot(3,1,3)
plot(tempo,Q_GAS,'+ g',tempo,Q_GAS1,'* b'),legend('Q_G_A_S','G_G_A_S_1'),grid subplot(3,1,2)
plot(tempo,Q_GAS,'+g'),legend('Q_G_A_S'),grid subplot(3,1,1)
plot(tempo,Q_GAS1,'* b'),legend('G_G_A_S_1'),grid xlabel('Tempo [s]')
%
h=figure(2);set(h,'Position',[500,y-18,larghezza,altezza]);
subplot(6,1,1)
plot(tempo,f),ylabel('Q_f_u_e_l/Q_a_r_i_a [-]') subplot(6,1,2)
plot(tempo,TT2),ylabel('T_t_2 [K]') subplot(6,1,3)
plot(tempo,TT3),ylabel('T_t_3 [K]') subplot(6,1,4)
plot(tempo,TT4),ylabel('T_t_4 [K]') subplot(6,1,5)
plot(tempo,TT5),ylabel('T_t_5 [K]') subplot(6,1,6)
plot(tempo,T6),xlabel('Tempo [s]'),ylabel('T_6 [K]')
%
h=figure(3);set(h,'Position',[400,y-12,larghezza,altezza]);
subplot(6,1,1)
plot(tempo,f),ylabel('Q_f_u_e_l/Q_a_r_i_a [-]') subplot(6,1,2)
plot(tempo,PT2),ylabel('P_t_2 [Pa]') subplot(6,1,3)
plot(tempo,PT3),ylabel('P_t_3 [Pa]') subplot(6,1,4)
plot(tempo,PT3),ylabel('P_t_4 [Pa]') subplot(6,1,5)
plot(tempo,PT5),ylabel('P_t_5 [Pa]') subplot(6,1,6)
plot(tempo,P6),xlabel('Tempo [s]'),ylabel('P_6 [Pa]')
%
h=figure(4);set(h,'Position',[100,y-6,larghezza,altezza]);
subplot(3,1,1)
plot(tempo,Lcompressor),ylabel('\Pi_c [-]'),grid subplot(3,1,2)
plot(tempo,Lturbina_reale),ylabel('\Pi_t [-]'),grid subplot(3,1,3)
plot(tempo,LEFFUSORE),xlabel('Tempo [s]'),ylabel('\Pi_e [-]'),grid figure(5)
subplot(3,1,1)
plot(tempo,f),ylabel('Q_f_u_e_l/Q_a_r_i_a [-]') subplot(3,1,2)
plot(tempo,Q_ARIA),ylabel('Q_a_r_i_a [Kg/s]') subplot(3,1,3)
plot(tempo,Q_GAS1),ylabel('Q_g_a_s [Kg/s]')
% figure(6) subplot(6,1,1)
plot(tempo,f),ylabel('Q_f_u_e_l/Q_a_r_i_a [-]') subplot(6,1,2)
plot(tempo,WT),ylabel('W_t [Joule]') subplot(6,1,3)
plot(tempo,WC),ylabel('W_c [Joule]') subplot(6,1,4)
plot(tempo,DeltaW),ylabel('\DeltaW [Joule]') subplot(6,1,5)
plot(tempo,Giri),ylabel('GIRI [rpm]') subplot(6,1,6)
plot(tempo,T),ylabel('SPINTA [N]')