28/06/13 15.24 C:\Users\gaetano\Dropbox\Bosch\APC\2009-10\pfr_non_isot.m 1 of 3
%calcolo della dinamica di un reattore tubolare non isotermo
%parametri numerici M=40;
N=30;
lung=10;
raggio=.1;
dx=lung/(N-1);
dR=raggio/(M-1+.5);
%parametri fisici V=100;
Cour=1;
tfin=lung/V*1.5;
k0=1e+5;
alfa=0.001;
EasuR=3000;
DHsurCp=-200 % -10;
Tiniz=300;
T_inf=300;
dt=0.1*dx/V; % dt=dx/V corrisponde a C=1
%condizione iniziale(assenza di reagenti) u=zeros(M,N);
T=Tiniz*ones(M,N);
%condizione al contorno uin=1;
Tin=300 % 400;
%u(1:M/2,1)=uin*ones(M/2,1);
u(1:M,1)=uin*ones(M,1);
T(1:M,1)=Tin*ones(M,1);
% condizione di scambio in parete Hsulambda=0 % 5000;
%
SUBPLOT(1,2,1), surf(u) view(-205,30)
SUBPLOT(1,2,2), surf(T) view(-205,30)
%griglia lungo la coordinata radiale r(1)=dR/2;
for i=2:M
r(i)=i*dR-dR/2;
end;
unosur=1./r;
%coefficienti numerici, termini diffusivi adtdR2=alfa*dt/(dR*dR);
adtRdR=alfa*dt/dR*unosur;
%coefficiente numerico, termine convettivo cour=V*dt/dx;
%calcolo dei coefficienti della matrice tridiagonale indipendenti da x e t
%equazione di bilancio della specie i=1;
a(i)=0;
aT(i)=0;
c(i)=-adtdR2-adtRdR(i);
cT(i)=-adtdR2-adtRdR(i);
% b(i) cambia nel corso del calcolo; non così bT(i) bT(i)=1+adtdR2+adtRdR(i);
28/06/13 15.24 C:\Users\gaetano\Dropbox\Bosch\APC\2009-10\pfr_non_isot.m 2 of 3
for i=2:M-1
a(i)=-adtdR2;
aT(i)=-adtdR2;
% b(i) cambia nel corso del calcolo; non così bT(i) bT(i)=1+2*adtdR2+adtRdR(i);
c(i)=-adtdR2-adtRdR(i);
cT(i)=-adtdR2-adtRdR(i);
end;
i=M;
c(i)=0;
cT(i)=0;
a(i)=-adtdR2;
aT(i)=-adtdR2;
% b(i) cambia nel corso del calcolo; non così bT(i)
bT(i)=1+adtdR2+alfa*dt/dR*Hsulambda+alfa*dt*unosur(i)*Hsulambda;
% parte costante del termine dT(M)
contorno=(alfa*dt/dR*Hsulambda+alfa*dt*unosur(i)*Hsulambda)*T_inf;
%ciclo di integrazione nel tempo for t=0:dt:tfin
uold=u;
Told=T;
%ciclo di integrazione lungo x for j=2:N
%calcolo dei coefficienti della matrice tridiagonale dipendenti da x e t
%e del termine noto i=1;
EasRT=EasuR/Told(i,j-1);
S1=sorgT(uold(i,j-1),EasRT,k0);
b(i)=1+adtdR2+adtRdR(i)-S1*dt;
% bT(i) non cambia;
d(i)=uold(i,j)-cour*(uold(i,j)-uold(i,j-1));
dT(i)=Told(i,j)-cour*(Told(i,j)-Told(i,j-1))+dt*DHsurCp*S1*u(i,j);
for i=2:M-1
EasRT=EasuR/Told(i,j-1);
S1=sorgT(uold(i,j-1),EasRT,k0);
b(i)=1+2*adtdR2+adtRdR(i)-S1*dt;
% bT(i) non cambia;
d(i)=uold(i,j)-cour*(uold(i,j)-uold(i,j-1));
dT(i)=Told(i,j)-cour*(Told(i,j)-Told(i,j-1))+dt*DHsurCp*S1*u(i,j);
end;
i=M;
EasRT=EasuR/Told(i,j-1);
S1=sorgT(uold(i,j-1),EasRT,k0);
b(i)=1+adtdR2-S1*dt;
% bT(i) non cambia;
d(i)=uold(i,j)-cour*(uold(i,j)-uold(i,j-1));
dT(i)=Told(i,j)-cour*(Told(i,j)-Told(i,j-1))+dt*DHsurCp*S1*u(i,j)+contorno;
%soluzione implicita lungo r uj=Thomas(a,b,c,d,M);
Tj=Thomas(aT,bT,cT,dT,M);
for i=1:M
u(i,j)=uj(i);
T(i,j)=Tj(i);
end end;
28/06/13 15.24 C:\Users\gaetano\Dropbox\Bosch\APC\2009-10\pfr_non_isot.m 3 of 3
SUBPLOT(1,2,1), surf(u) view(-205,30)
SUBPLOT(1,2,2), surf(T) view(-205,30)
t pause end
% Calcolo del grado di concersione complessivo Integ=0;
for i=1:M
Integ=Integ+u(i,N)*r(i);
end
Qu=2*pi*V*Integ*dR;
Qu0=pi*V*raggio*raggio*uin;
x=(Qu0-Qu)/Qu0