47
Laborator 1 % Distributia vitezei la curgerea printr-o teava in regim Laminar si Turbulent % Acesta este un alt exemplu care ilustreaza calculul functiilor si trasarea graficelor in MATLAB. % Pentru curgere laminara, distributia vitezei este parabolica, unde u(r) este data de % u(r) = u_max*[1 -(r/R)^2] % Pentru distributia curgere turbulenta vitezei este data de % u(r) = u_max* (1 - r/R) *m % unde m = 1/7 pentru curgere turbulenta complet dezvoltata. % % La calculul acestor functii, vom ilustra abilitatile de lucru cu vectorii ale MATLAB-ului si citeva functii grafice simple 2-d din Matlab. %% Inceput clear all, close all, nfig = 0; % %% Definirea parametrilor problemei %Ql = 64.25; % debitul volumic (gal/min) %Q2 = Ql/15850; % transformarea Q in m^3/s Q2=2e-03; D = 1*0.0254; % diametrul tevii (inch transformati in m) R = D/2; % raza tevii (m) m = 1/7; % exponent in ecuatiile pentru curgere turbulenta % %% calculam citeva marimi auxiliare A = pi*R^2; % sectiunea decurgere a tevii u_ave = Q2/A; % viteza medie uL_max = 2*u_ave; % viteza max pentru curgere laminara uT_max = (m+1)*(m+2)*u_ave/2; % viteza max pentru curgere turbulenta % %% calculam distributia vitezei laminare si turbulente Nr = 101; 1

% Distributia vitezei la curgerea printr-o teava in … · Web view% Distributia vitezei la curgerea printr-o teava in regim Laminar ... ... Laborator 1

  • Upload
    others

  • View
    37

  • Download
    0

Embed Size (px)

Citation preview

Laborator 1

% Distributia vitezei la curgerea printr-o teava in regim Laminar si Turbulent% Acesta este un alt exemplu care ilustreaza calculul functiilor si trasarea graficelor in MATLAB.% Pentru curgere laminara, distributia vitezei este parabolica, unde u(r) este data de% u(r) = u_max*[1 -(r/R)^2]% Pentru distributia curgere turbulenta vitezei este data de% u(r) = u_max* (1 - r/R) *m% unde m = 1/7 pentru curgere turbulenta complet dezvoltata.%% La calculul acestor functii, vom ilustra abilitatile de lucru cu vectorii ale MATLAB-ului si citeva functii grafice simple 2-d din Matlab.

%% Inceputclear all, close all, nfig = 0;%%% Definirea parametrilor problemei%Ql = 64.25; % debitul volumic (gal/min)%Q2 = Ql/15850;% transformarea Q in m^3/sQ2=2e-03;D = 1*0.0254; % diametrul tevii (inch transformati in m)R = D/2; % raza tevii (m)m = 1/7; % exponent in ecuatiile pentru curgere turbulenta%%% calculam citeva marimi auxiliareA = pi*R^2; % sectiunea decurgere a teviiu_ave = Q2/A; % viteza medieuL_max = 2*u_ave; % viteza max pentru curgere laminarauT_max = (m+1)*(m+2)*u_ave/2; % viteza max pentru curgere turbulenta%%% calculam distributia vitezei laminare si turbulenteNr = 101; r = linspace(0,R,Nr); % discretizarea vectorului r uL = uL_max*(1 - (r/R).^2); % distributia vitezei laminareuT = uT_max*(1 - r/R).^m; % distributia vitezei turbulente%%% trasarea rezultatelor (ambele distributii pe acelasi grafic)nfig = nfig+1; figure(nfig)plot(r/R,uL,'r-',r/R,uT,'g--','LineWidth',2), gridtitle('Curgere\_teava\_Ro:Profilurile vitezei ptr regim laminar si turbulent');xlabel('Distanta radiala normalizata (r/R)'),ylabel('Viteza fluidului (m/s)')legend('Reg laminar','Reg turbulent')%%% In final, sa tiparim citeva rezultate finaleclc %Se sterge Command Window

1

fprintf(1,'\n***** Rezultate pentru problema vitezei de curgere in tevi *******\n\n')%fprintf(1,' Debitul volumic de curgere (gal/min): %10.3f \n',Ql)fprintf(1,' Debitul volumic: %10.3f m^3/s\n',Q2)fprintf(1,' Diametrul conductei: %10.2f inch/%10.3f cm\n',D/0.0254,D)fprintf(1,' Viteza medie: %10.2f m/s\n',u_ave)fprintf(1,' Viteza maxima in regim LAMINAR: %10.2f m/s\n',uL_max)fprintf(1,' Viteza maxima in regim TURBULENT: %10.2f m/s\n',uT_max)%% Sfirsitul programului

% Analiza Transferului de caldura: Teava Circulara Izolata termic% Calcul de functii si trasare de grafice in MATLAB % % Fisierul calculeaza si traseaza grafic variatia temperaturii intr-un domeniu inelar% pentru r_i < r < r_e, unde r_i si r_e sunt razele interioara si exterioara% ale unui solid inelar. Marginea interioara are o temperatura fixa, T_i. % Suprafata exterioara este expusa unui mediu convectiv, cu coeficientul de % transfer de caldura alpha si temperatura medie a fluidului T_inf. % % Se defineste o temperatura normalizata u astfel incat relatiile rezultate% evidentiaza doar trei parametri: lambda, alpha si r_e, si se analizeaza% o serie de cazuri pentru a determina efectul fiecaruia dintre ei% asupra distributiei de temperatura si asupra caldurii totale transmise % fata de cazul de referinta.

% Inceput clear all, close all, nfig = 0;

% Identificarea datelor de baza ale problemei: lambda_ref = 0.1; % conductivitatea termica a izolatiei (W/m-C) alpha_ref = 5; % coef de transfer de caldura ptr cazul de referinta (W/m^2-C) r_i = 0.01; % raza interioara a izolatiei (m) r_e_ref = 0.01635; % raza exterioara a izolatiei (m) (about 1/4 inch)

% Calculul distributiei de temperatura normalizata (se foloseste aritmetica vectorilor) Nr = 50; r = linspace(r_i,r_e_ref,Nr); u_ref = 1 - log(r/r_i)./(log(r_e_ref/r_i) + lambda_ref/(alpha_ref*r_e_ref));

% Calculul distributiei ptr cele trei cazuri separate de perturbatii% Cazul 1: conductivitate termica ridicata lambda_1 = 1.0; % conductivit termica mai mare (izolatie mai slaba) (W/m-

2

C) u_1 = 1 - log(r/r_i)./(log(r_e_ref/r_i) + lambda_1/(alpha_ref*r_e_ref)); % Cazul 2: coef de transfer de caldura mai ridicat alpha_2 = 50; % coef convectie mai ridicat (W/m^2-C) u_2 = 1 - log(r/r_i)./(log(r_e_ref/r_i) + lambda_ref/(alpha_2*r_e_ref)); % Cazul 3: mai multa izolatie r_e3 = 0.0608; % raza ext a izolatiei(m) (cca 2 inch) r_3 = linspace(r_i,r_e3,Nr); u_3 = 1 - log(r_3/r_i)./(log(r_e3/r_i) + lambda_ref/(alpha_ref*r_e3)); % % Trasarea graficelor nfig = nfig+1; figure(nfig) subplot(2,1,1),plot(r*100,u_ref,'r-',r*100,u_1,'g--',r*100,u_2,'b:','LineWidth',2),grid title('Distributia de temperatura normalizata problema tevii izolate') xlabel('Distanta radiala r (cm)'),ylabel('Temperatura normalizata u (-)') % Se stabileste dimensiunea axei x pentru prima figura v1 = axis; v1(2) = 1.65; axis(v1) legend('Caz de ref.','\lambda mai mare','\alpha mai mare','Location','Best') % subplot(2,1,2),plot(r*100,u_ref,'r-',r_3*100,u_3,'g--','LineWidth',2),grid xlabel('Distanta radiala r (cm)'),ylabel(' Temperatura normalizata u (-)') legend('Caz de ref.','r_e mai mare','Location','Best') % Se stabileste dimensiunea axei x pentru a doua figura v2 = axis; v2(2) = 6; axis(v2) % Calculul caldurii transmise in fiecare caz% Acesta se va calcula in doua moduri diferite doar ptr a arata ca ele sunt echivalente % q_cond = conductie si q_conv = convectie % Deoarece nu exista surse interne de caldura q_cond nu depinde de r (vezi cursul). % La limita din dreapta q_cond = q_conv. % % Cazul de referinta q_cond_ref = lambda_ref/(log(r_e_ref/r_i) + lambda_ref/(alpha_ref*r_e_ref)); q_conv_ref = alpha_ref*r_e_ref*u_ref(Nr); % Cazul 1 q_cond1 = lambda_1/(log(r_e_ref/r_i) + lambda_1/(alpha_ref*r_e_ref)); q_conv1 = alpha_ref*r_e_ref*u_1(Nr); % Cazul 2 q_cond2 = lambda_ref/(log(r_e_ref/r_i) + lambda_ref/(alpha_2*r_e_ref)); q_conv2 = alpha_2*r_e_ref*u_2(Nr); % Cazul 3 q_cond3 = lambda_ref/(log(r_e3/r_i) + lambda_ref/(alpha_ref*r_e3)); q_conv3 = alpha_ref*r_e3*u_3(Nr); % Calculam rapoartele caldurilor

3

ratio1 = [q_cond1/q_cond_ref q_conv1/q_conv_ref]; ratio2 = [q_cond2/q_cond_ref q_conv2/q_conv_ref]; ratio3 = [q_cond3/q_cond_ref q_conv3/q_conv_ref]; clc; %Se sterge fereastra Command fprintf(1,'\n Rezultate finale pentru problema tevii izolate \n\n') fprintf(1,' Cazul #1 (lambda mai mare) : q_cond1/q_cond_ref = %6.3f si q_conv1/q_conv_ref = %6.3f \n',ratio1) fprintf(1,' Cazul #2 (alpha mai mare) : q_cond2/q_cond_ref = %6.3f si q_conv2/q_conv_ref = %6.3f \n',ratio2) fprintf(1,' Cazul #3 (Izolatie mai groasa): q_cond3/q_cond_ref = %6.3f si q_conv3/q_conv_ref = %6.3f \n',ratio3)

% Sfarsit

% Aplicatie de Mecanica fluidelor ilustrand curgerea cu frecare printr-o teava % % Scopul acestei probleme esta de a calcula si trasa grafic viteza % de iesire dintr-o teava legata la un rezervor. Problema e neliniara % datorita dependentei coeficientului de frecare de viteza de curgere % Ecuatia ce descrie fenomenul este: % w^2 = 2g(h+L)/(1 + fL/D) % unde lambda este coeficientul de frecare (dat de relatia Swamee-Jain) % % Vom folosi trei dimensiuni de tevi si diferite lungimi de teava pentru a % determina w de L. Ne asteptam ca w sa creasca cu L deoarece creste inaltimea % coloanei de lichid (h + L). Cu toate acestea, la cresterea lui L, frecarea% in teava tinde sa reduca viteza w. De asemeni dorim sa vedem influenta % diametrului tevii D, unde cresterea lui D ar trebui sa reduca efectul frecarii. % Inceput clear all, close all, nfig = 0; global DD h LL g visc rugoz %{ % Date initiale pentru problema - IP D = [0.0518 0.0874 0.1342]; % diametre diferite de tevi (ft) h = 5; % inaltimea lichidului din rezervor (ft) g = 32.2; % acceleratia gravitationala(ft/s^2) visc = 1.21e-5; % viscositatea apei la 60 F (ft^2/s) rugoz = 1.5e-4; % rugozitatea tevii de otel (ft) NL = 50; L = linspace(1/12,20,NL)'; % stabilim variabila independenta (lungimea tevii) (ft)%} % % Date initiale pentru problema - SI

4

% D = [0.01578864 0.02663952 0.04090416]; % diametre diferite de tevi (m) D = 0.0254*[1/2 1 3/2]; %Tevi de 1/2", 1" si 3/2" h = 1; % inaltimea lichidului din rezervor (m) g = 9.806; % acceleratia gravitationala(m/s^2) visc = 0.1124127e-5; % viscozitatea apei la 15 C (m^2/s) rugoz = 0.4572e-4; % rugozitatea tevii de otel (m) NL = 51; L = linspace(0,5,NL)'; % stabilim variabila independenta (lungimea tevii) L(m)%

% Initiem un ciclu dupa numarul de diametre de tevi ND = length(D); w = zeros(NL,ND); for n = 1:ND DD = D(n);% Se pregateste textul pentru legenda st(n,:)= sprintf('d =%6.1f mm',DD*1e03);% Folosim fzero pentru a-l calcula pe w pentru fiecare pereche de valori L si D (folosind valoarea anterioara a lui w drept valoare initiala) wo = sqrt(2*g*h); % valoare initiala a lui w pentru L = 0 m LL = L(1); w(1,n) = fzero('Teava_Curg_Frecare_f',wo); for i = 2:NL LL = L(i); w(i,n) = fzero('Teava_Curg_Frecare_f',w(i-1,n)); end end % % Trasarea rezultatelor nfig = nfig+1; figure(nfig); shg plot(L,w(:,1),'r-',L,w(:,2),'b--',L,w(:,3),'g:','LineWidth',2) title('Viteza de iesire in functie de lungimea tevii') xlabel('Lungimea tevii L(m)'),ylabel('Viteza de iesire w(m/s)'), grid % legend('Teava Sch 40 de 1/2"','Teava Sch 40 de 1"','Teava Sch 40 de 1-1/2" ') legend(char(st),'Location','Best')% % calculam Re si lambda Re = zeros(NL,ND); lambda = zeros(NL,ND); for n = 1:ND Re(:,n) = w(:,n)*D(n)/visc; % Nr Reynolds Rug_rel = rugoz/D(n); % rugozitatea relativa lambda(:,n) = 0.25./(log10(Rug_rel/3.7 + 5.74./Re(:,n).^0.9)).^2; % coeficientul de frecare end %for% % Trasarea rezultatelor nfig = nfig+1; figure(nfig); shg plot(L,Re(:,1),'r-',L,Re(:,2),'b--',L,Re(:,3),'g:','LineWidth',2) title('Numarul Reynolds in functie de lungimea tevii')

5

xlabel('Lungimea tevii L(m)'),ylabel('Numarul Reynolds'), grid legend(char(st),'Location','Best')% nfig = nfig+1; figure(nfig); shg plot(L,lambda(:,1),'r-',L,lambda(:,2),'b--',L,lambda(:,3),'g:','LineWidth',2) title('Coeficientul de frecare in functie de lungimea tevii') xlabel('Lungimea tevii L(m)'),ylabel('Coeficientul de frecare \lambda'), grid legend(char(st),'Location','Best') % Sfarsit

% Fisier functie folosit de FZERO % Calculeaza F(V) = V^2 - 2g(h+L)/(1 + lambda*L/D) % unde lambda e coeficientul de frecare (dupa Swamee-Jain) function F = Functie(V) global DD h LL g visc rugoz Re = V*DD/visc; % Numarul Reynolds Rug_rel = rugoz/DD; % rugozitate relativa lambda = 0.25/(log10(Rug_rel/3.7 + 5.74/Re^0.9))^2; % coeficientul de frecare F = V^2 - 2*g*(h+LL)/(1 + lambda*LL/DD); % Sfarsit

6

Laborator 2

% Temperatura regimului stationar in functie de intensitatea curentului într-o bara conductiva

% Exemplu de aflare a radacinilor - fct fzero% Programul afla temperatura în regim stationar pentru o bara circular conductiva% care e incalzita intern de un curent electric prin efect Ohm si care cedeaza energie prin% convectie si radiatie. Analiza este facuta pe unitatea de lungime a barei sau sirmei.% Pentru trasarea unui grafic T in functie de I, se variaza intensitatea curentului într-un domeniu dat.% % Scopul problemei este de a arata modul de rezolvare a ecuatiilor neliniare folosind% rutine MATLAB fzero. Se prezinta de asemenea cum, intr-u ciclu simplu, se poate face % un studiu în functie de o singura variabila - in acest caz, se foloseste un domeniu de % valori ale curentului, I, pentru a arata cum variaza temperatura regim stat în functie de I. Pentru % fiecare valoare a lui I, trebuie rezolvata o ecuatie neliniara de bilant energetic (se foloseste % fzero pentru aceasta) pentru a determina valoarea corecta a temperaturii regimului stationar.% % Se obtine de asemenea si un tabel cu rezultate care arata diferitele elemente componente % ale ecuatiei de bilant energetic pentru fiecare valoare a lui I.% % Nota: La calculul transferului de caldura prin radiatie, calculele trebuie facute % folosind temperaturi absolute. Cu toate acestea, graficul final si tabelul afiseaza % temperaturile in C - transformarea unitatilor de masura este facuta de comenzile plot si fprintf.% % Ideea de baza pentru aceasta problema este din Exemplul 1.3 pg. 17-19 % din Fundamentals of Heat and Mass Transfer, de Incropera and DeWitt % 5th Ed (2002, John Wiley & Sons).

% Inceput clear all; close all; nfig = 0; global D emiss R_L sig h Tinf Tsur Isq % % Stabilirea parametrilor problemei

7

D = 0.001; % diametrul sirmei (m) emiss = 0.8; % emisivitatea (adimensionala) R_L = 0.4; % rezistenta electrica pe unitatea de lungime (ohm/m) sig = 5.67e-8; % constant Stefan-Boltzmann (W/m^2-K^4) h = 100; % coef de transfer convectiv de caldura (W/m^2-K) Tinf = 25+273.15; % temperatura medie a fluidului(K) Tsur = Tinf; % temperatura ambianta pentru transferul radiant de caldura (K)% NI = 21; I = linspace(0,10,NI); % se stab dom de variatie a curentului (Amps) Tss = zeros(size(I)); % aloca spatiu pentru memorarea temperaturilor reg stat Isq = I(1)*I(1); % I^2 pentru prima val a curentului Tg = Tinf; % estimarea initiala a lui Tss pentru primul curent Tss(1) = fzero('Bara_Conductiva_f',Tg); % aflarea Tss reale pentru prima val a lui I% Nota: Pasul de mai sus nu a fost neaprat necesar deoarece pentru acest caz, deoarece pentru I = 0 % si Tsur = Tinf, Tss = Tinf (astfel incat am fi putut pune pur si simplu Tss(1) = Tinf., % Oricum pentru cazul general, acest lucru nu este valabil... % % Aflarea temperaturii reg stat pentru fiecare curent (implicit) for n = 2:NI Isq = I(n)*I(n); Tss(n) = fzero('Bara_Conductiva_f',Tss(n-1)); end % % Aflarea temperaturii reg stat pentru fiecare curent neglijand TQ prin radiatie (explicit) Tssa = Tinf + I.*I*R_L/(h*pi*D); % aceasta aprox este în general slaba% % plot Tss vs I nfig = nfig+1; figure(nfig) plot(I,Tss-273.15,'r-',I,Tssa-273.15,'b--','LineWidth',2), grid on rr = axis; rr(3) = 20; axis(rr); title({'Temperatura regimului stationar';'în functie de intensitatea curentului'}) xlabel('Curentul I [A]'),ylabel('Temperatura regim stationar T_ss [^oC]') legend('T_{ss} cu radiatie','T_{ss} fara radiatie')% % % Calculul componentelor din ec de bilant (obs folosirea 'punctului aritmetic' unde este cazul) A = pi*D; % aria suprafetei unitare (pe metru liniar) gen = I.*I*R_L; % fluxul de energie generata conv = h*A*(Tss - Tinf); % fluxul eliminat prin convectie rad = emiss*sig*A*(Tss.^4 - Tsur^4); % fluxul eliminat prin radiatie bal = (gen - conv - rad); % ecuatia de bilant energetic în regim

8

stationar% % Scrierea tabelului cu rezultate fprintf(1,'\n\n') fprintf(1,' Rezultate finale ale Programului Bara_conductiva_Ro.m \n') fprintf(1,'\n') fprintf(1,' Parameteri generali ai problemei \n') fprintf(1,' Diametrul sirmei (m): %8.3f \n',D) fprintf(1,' Emisivitatea (adimensionala): %8.2f \n',emiss) fprintf(1,' Rezistenta electrica specifica (ohm/m): %8.2f \n',R_L) fprintf(1,' Constanta Stefan-Boltzmann (W/m^2-K^4): %9.2e \n',sig) fprintf(1,' Coef de transfer convectiv de caldura (W/m^2-K): %8.2f \n',h) fprintf(1,' Temperatura medie a fluidului (C): %8.2f \n',Tinf-273.15) fprintf(1,' Temperatura ambianta (C): %8.2f \n',Tsur-273.15) fprintf(1,'\n') fprintf(1,' Componentele din ecuatia de bilant energetic în functie de curent \n') fprintf(1,' I Generare Convectie Radiatie Bilant Temp stat \n') fprintf(1,' (A) (W/m) (W/m) (W/m) (W/m) (C) \n') for n = 1:NI fprintf(1,' %5.1f %8.2f %8.2f %8.2f %8.3f %8.2f \n', ... I(n),gen(n),conv(n),rad(n),bal(n),Tss(n)-273.15) end %for% Sfirsitul problemei

% Fisier functie pentru a fi folosit cu Bara_Conductiva_Ro.m % % Acest fisier calculeaza pur si simplu o functie de forma F(T). E folosit de% rutina fzero pentru a afla valoarea lui T astfel incit F(T) = 0. Functia % reprezinta de fapt ecuatia de bilant energetic in regim stationar. function F = eqnfile(T) global D emiss R_L sig h Tinf Tsur Isq %variabile din progamul principal A = pi*D; % aria suprafetei unitare (pe metru liniar) gen = Isq*R_L; % fluxul de energie generata conv = h*A*(T - Tinf); % fluxul eliminat prin convectie rad = emiss*sig*A*(T^4 - Tsur^4); % fluxul eliminat prin radiatie F = (gen - conv - rad); % ecuatia de bilant energetic în regim stationar% % Sfirsitul functiei

%Calculul nivelului de lichid in doua rezervoare legate9

%Tanks K Pao - Cap.6%Programul foloseste fuctia din fisierul auxiliar Rezervor4_f.m

%Inceput clear all, close all, nfig = 0;

%Conditii initialeT=[0;30];h0=[2;1.5];

%Rezolvare[T,h] = ode45('Rezervor4_f',T,h0);

%Graficplot(T,h,'.-'),grid,legend('Rezervor 1','Rezervor 2','Location','Best');title('Variatia nivelului de lichid in doua rezervoare legate'),xlabel('Timpul, s'),ylabel('Inaltimea, m')% Sfarsit

%Functie apelata de programul Rezervor4.mfunction dh = Rezervor4(t,h)dh=zeros(2,1);

%ConstanteA1=1; A2=1; %Ariile sectiunilor transversale ale rezervoarelor [m2]Q1=0.2; Q2=0.4; %Debitele care intra in rezervoare [m3/s]R1=2; R2=1.5; R3=1; %Rezistentele fluidodinamice ale robinetelor

% Marimi calculateD=R1*R2+R2*R3+R3*R1;a1=(R2+R3)/D; a2=(R1+R3)/D; a3=R3/D;

dh(1)=(Q1-a1*h(1)+a3*h(2))/A1;dh(2)=(Q2-a2*h(2)+a3*h(1))/A2;% Sfarsit

% Simularea unui sistem de curgere a fluidelor (Studiul de Caz B - Cazul 1)

% Fisierul simuleaza un sistem format dintr-un rezervor simplu % File prepared by J. R. White, UMass-Lowell (updated for Ver 5.1 March 1998)

% Inceput clear all, close all, nfig = 0;%% definirea variabilelor globale folosite de rutina ODE global c1nl c1l c2nl c2l

10

%% Marimi de intrare pentru simulare too = 0; tff = 25; % Momentul initial si final al simularii (min)%{ rho = 1000; % densitatea apei (kg/m^3) g = 35332; % constanta gravitationala (m/min^2) wio = 861.8; % debitul de intrare de referinta (kg/min) ho = 3.05; % inaltimea de referinta a fluidului în rezervor (m) a = 0.4645; % aria suprafetei rezervorului (m^2) ae = 0.001858; % aria tevii de iesire (m^2) %} rho = 1000; % densitatea apei (kg/m^3) g = 35332; % constanta gravitationala (m/min^2) wio = 860; % debitul de intrare de referinta (kg/min) ho = 3; % inaltimea de referinta a fluidului în rezervor (m) a = 0.45; % aria suprafetei rezervorului (m^2) ae = 0.00186; % aria tevii de iesire (m^2) % variatii dw1 = 0.1*wio; % variatie de 10% dw2 = 0.5*wio; % variatie de 50%% coef neliniar c1nl = -ae*sqrt(2*g)/a; % coeficientii liniari r = sqrt(2*g*ho)/(rho*g*ae); c = rho*a; c1l = -1/(r*c); %% simulare neliniara - raspunsuri impuls & treapta #1 y1o = ho+dw1/c; c2nl = wio/c; [t1i,y1i] = ode23('Rezervor1_f_nl',[too,tff],y1o); y1o = ho; c2nl = (wio+dw1)/c; [t1s,y1s] = ode23('Rezervor1_f_nl',[too,tff],y1o);%% simulare liniara - raspunsuri impuls & treapta #1 y1o = dw1/c; c2l = 0; [t2i,y2i] = ode23('Rezervor1_f_l',[too,tff],y1o); y2i = ho+y2i; y1o = 0; c2l = dw1/c; [t2s,y2s] = ode23('Rezervor1_f_l',[too,tff],y1o); y2s = ho+y2s;%% Trasarea graficelor pentru perturbatia #1 nfig = nfig+1; figure(nfig) subplot(2,2,1),plot(t1i,y1i,'r',t2i,y2i,'b:','LineWidth', 1.5),grid title('Raspuns impuls (10%)'); xlabel('Timpul (min)'),ylabel('Inaltimea (m)'); legend('NL','L'); subplot(2,2,2),plot(t1s,y1s,'r',t2s,y2s,'b:','LineWidth', 1.5),grid title('Raspuns treapta (10%)'); xlabel('Timpul (min)'),ylabel('Inaltimea (m)'); legend('NL','L');

11

%% simulare neliniara - raspunsuri impuls & treapta #2 y1o = ho+dw2/c; c2nl = wio/c; [t1i,y1i] = ode23('Rezervor1_f_nl',[too,tff],y1o); y1o = ho; c2nl = (wio+dw2)/c; [t1s,y1s] = ode23('Rezervor1_f_nl',[too,tff],y1o);%% simulare liniara - impulse & step responses #2 y1o = dw2/c; c2l = 0; [t2i,y2i] = ode23('Rezervor1_f_l',[too,tff],y1o); y2i = ho+y2i; y1o = 0; c2l = dw2/c; [t2s,y2s] = ode23('Rezervor1_f_l',[too,tff],y1o); y2s = ho+y2s; %% Trasarea graficelor pentru perturbatia #2 subplot(2,2,3),plot(t1i,y1i,'r',t2i,y2i,'b:','LineWidth', 1.5),grid title('Raspuns impuls (50%)'); xlabel('Timpul (min)'),ylabel('Inaltimea (m)'); legend('NL','L'); subplot(2,2,4),plot(t1s,y1s,'r',t2s,y2s,'b:','LineWidth', 1.5),grid title('Raspuns treapta (50%)'); xlabel('Timpul (min)'),ylabel('Inaltimea (m)'); legend('NL','L');%{% Graficele în domeniul frecventelor pentru model liniarizat b = r; a = [r*c 1]; sys1 = tf(b,a); w = logspace(-2,2,200); % domeniul frecventelor (rad/min) nfig = nfig+1; figure(nfig) bode(sys1,w),xlabel('Frecventa (rads/min)') nfig = nfig+1; figure(nfig) subplot(2,1,1),nichols(sys1,w) subplot(2,1,2),nyquist(sys1,w) [Re,Im] = nyquist(sys1,w); Resys1(:,1) = Re(1,1,:); Imsys1(:,1) = Im(1,1,:);%}% end of simulation

% Model liniar pentru rezervor simplu (from Case Study B)% function xdot = tank1l(t,x) global c1l c2l xdot = c1l*x+c2l;

% Model neliniar pentru rezervor simplu (from Case Study B)% function xdot = tank1nl(t,x)

12

global c1nl c2nl xdot = c1nl*sqrt(x)+c2nl;

13

Laborator 3

% Transferul de caldura intr-o nervura circulara (Metoda tirului)%% Acest fisier rezolva problema transferului de caldura intr-o nervura circulara folosind % Metoda tirului. Problema de baza e definita de ecuatia:%% x^2*u'' + x*u' - ALF2*x^2*u = 0 unde ALF2 = 2*h*r_vf^2/[k*delta_n]%% cu C.L. u(a) = 1 si u'(b) = 0% si a = r_p/r_vf si b = r_vf/r_vf = 1%% unde u = temperatura normalizata = [T(r) - T_inf]/[T_p - T_inf]% x = distanta normalizata = r/r_vf%% cu r_p, r_vf = raza interioara respectiv exterioara a nervurii % delta_n = grosimea nervurii% si h, lambda, T_p, si T_inf sunt toate date (fixate)%% Din solutia normalizata se pot construi distributiile absolute:% T(r) = T_inf + u(x)[T_p - T_inf]% T'(r) = u'(x)[T_p - T_inf]/r_vf%% EDO de ordinul 2 de mai sus e transformata intr-un set de doua EDO de ord 1 % in format standard (vez Nerv_Circ_tir_f.m) si apoi rezolvate ca PVI ca parte % a algoritmului Metodei tirului.%% Inceput clear all, close all, nfig = 0;%% Marimi de intrare pentru problema% r_p = 1/12; r_vf = 1.5/12; % raza interioara respectiv exterioara a nervurii (ft)% delta_n = .0625/12; % grosimea nervurii (ft)% T_p = 200; T_inf = 70; % temperatura peretelui si a mediului amb (F)% h = 20; % coeficientul de transfer de caldura (BTU/hr-ft^2-F)% lambda = 75; % conductivitatea termica (BTU/hr-ft-F)

% % SI% r_p = 0.0252984; r_vf = 0.0381; % raza interioara respectiv exterioara a nervurii (m)% delta_n = 0.001587398; % grosimea nervurii (m)% T_p = 93.33333; T_inf = 21.11111; % temperatura peretelui si a mediului amb (C)% h = 113.56; % coeficientul de transfer de caldura (W/m^2-C)

14

% lambda = 129.8032; % conductivitatea termica (W/m-C)

% SI r_p = 0.025; r_vf = 0.04; % raza interioara respectiv exterioara a nervurii (m) delta_n = 0.001; % grosimea nervurii (m) T_p = 95; T_inf = 20; % temperatura peretelui si a mediului amb (C) h = 115; % coeficientul de transfer de caldura (W/m^2-C) lambda = 130; % conductivitatea termica (W/m-C)

% Constante calculate a = r_p/r_vf; b = r_vf/r_vf; alf_2 = (2*h*r_vf*r_vf)/(lambda*delta_n); alpha = sqrt(alf_2); Q_ideal = 2*pi*h*(r_vf*r_vf-r_p*r_p)*(T_p-T_inf);%% Scriem marimile de intrare in fisierul de rezultate fis = fopen('Nerv_Circ_tir.txt','w'); fprintf(fis,'*** Nerv_Circ_tir.txt *** Date si rezultate \n'); fprintf(fis,'\n\tMARIMI DE INTRARE PENTRU PROBLEMA \n'); fprintf(fis,'Raza interioara si exterioara: r_p = %6.2f m; \tr_vf = %5.2f m \n',r_p,r_vf); fprintf(fis,'Grosimea nervurii: delta_n = %6.4f m \n',delta_n); fprintf(fis,'Temp peretelui si a mediului amb: T_p = %6.2f C; \tT_inf = %5.2f C \n',T_p,T_inf); fprintf(fis,'Coef de transfer de caldura: h = %6.2f W/m^2-C \n',h); fprintf(fis,'Conductivitatea termica: lambda = %6.2f W/m-C \n',lambda);%% initializarea constantelor si parametrilor de iterare tol1 = 1e-6; tol2 = 1e-5; err = 1; icnt = 1; icntmax = 10; alf_vechi = 1; upbex = 0;%% start bucla (ptr diverse valori ale lui alf = upa pina la convergenta) fprintf(fis,'\n\tDATE DE ITERARE METODA TIRULUI \n'); optiuni = odeset('RelTol',tol1); while err > tol2 & icnt <= icntmax fprintf(fis,'Iteratia #%i \n',icnt); fprintf(fis,'Estimarea pantei initiale = %12.4e \n',alf_vechi); upa = alf_vechi; z0 = [1.0 alf_vechi]'; [x,z] = ode23('Nerv_Circ_tir_f',[a b],z0,optiuni,alpha); [nr,nc] = size(z); e1 = z(nr,2)-upbex; err = e1; fprintf(fis,'Eroarea absoluta la a 2a C.L. = %12.4e \n',err);%% estimarea unei noi valori pentru alf (daca e necesar)

15

if err > tol2 alf_p = 1.01*alf_vechi; z0 = [1.0 alf_p]'; [x,z] = ode23('Nerv_Circ_tir_f',[a b],z0,optiuni,alpha); [nr,nc] = size(z); e2 = z(nr,2)-upbex; deda = (e2-e1)/(0.01*upa); alf_nou = upa-e1/deda; icnt = icnt+1; alf_vechi = alf_nou; end %if end %while if icnt >= icntmax disp(' Atentie - s-a atins nr maxim de iteratii !!!'); end%% S-a obt solutia (urmeaza calcule suplimentare si trasare grafic)% Calc caldurii transmise (conductie) & a randam. nervurii Q_efectiv = -lambda*(2*pi*a*delta_n)*(T_p-T_inf)*z(1,2); T_vf = T_inf + (T_p-T_inf)*z(nr,1); rand_n = Q_efectiv/Q_ideal; fprintf(fis,'\n\tMETODA TIRULUI - REZULTATE FINALE \n'); fprintf(fis,'Temp perete (C) = %8.2f \n',T_p); fprintf(fis,'Temp mediului ambiant (C) = %8.2f \n',T_inf); fprintf(fis,'Temp virf nervura (C) = %8.2f \n',T_vf); fprintf(fis,'Q ideala (W) = %8.2f \n',Q_ideal); fprintf(fis,'Q efectiva (W) = %8.2f \n',Q_efectiv); fprintf(fis,'Randamentul nervurii = %8.2f \n',rand_n);%% Trasarea distributiei normalizate nfig = nfig+1; figure(nfig) subplot(2,1,1),plot(x,z(:,1),'r-','LineWidth',1.5) title('Distributia normalizata de temp pentru nervura circulara (Metoda tirului)') grid,ylabel('Temperatura normalizata') subplot(2,1,2),plot(x,z(:,2),'k-','LineWidth',1.5) title('Gradientul normalizat de temp pentru nervura circulara (Metoda tirului)') grid,xlabel('Distanta normalizata'),ylabel('Gradientul de temp')%% Inchiderea fisierului de rezultate fclose(fis);% Sfirsitul simularii

% Ecuatiile pentru problema nervurii circulare (Metoda tirului) % (apelata de Nerv_Circ_tir.m)

function zp = fct_nerv_circ_tir(x,z,flag,alpha) zp = zeros(length(z),1); zp(1) = z(2); zp(2) = -z(2)/x + alpha*alpha*z(1);

% sfirsitul functiei

16

% Transferul de caldura intr-o nervura circulara (Solutia Analitica)%% Acest fisier rezolva problema transferului de caldura intr-o nervura circulara folosind % functii Bessel modificate. Problema de baza e definita de ecuatia:%% x^2*u'' + x*u' - ALF2*x^2*u = 0 unde ALF2 = 2*h*r_vf^2/[k*delta_n]%% cu C.L. u(a) = 1 si u'(b) = 0% si a = r_p/r_vf si b = r_vf/r_vf = 1%% unde u = temperatura normalizata = [T(r) - T_inf]/[T_p - T_inf]% x = distanta normalizata = r/r_vf%% cu r_p, r_vf = raza interioara respectiv exterioara a nervurii % delta_n = grosimea nervurii% si h, lambda, T_p, si T_inf sunt toate date (fixate)%% Din solutia normalizata se pot construi distributiile absolute:% T(r) = T_inf + u(x)[T_p - T_inf]% T'(r) = u'(x)[T_p - T_inf]/r_vf%% Inceput clear all, close all, nfig = 0;%% Marimi de intrare pentru problema% r_p = 1/12; r_vf = 1.5/12; % raza interioara respectiv exterioara a nervurii (ft)% delta_n = .0625/12; % grosimea nervurii (ft)% T_p = 200; T_inf = 70; % temperatura peretelui si a mediului amb (F)% h = 20; % coeficientul de transfer de caldura (BTU/hr-ft^2-F)% lambda = 75; % conductivitatea termica (BTU/hr-ft-F)

% SI% r_p = 0.0252984; r_vf = 0.0381; % raza interioara respectiv exterioara a nervurii (m)% delta_n = 0.001587398; % grosimea nervurii (m)% T_p = 93.33333; T_inf = 21.11111; % temperatura peretelui si a mediului amb (F)% h = 113.56; % coeficientul de transfer de caldura (W/m^2-C)% lambda = 129.8032; % conductivitatea termica (W/m-C)

17

% SI r_p = 0.025; r_vf = 0.04; % raza interioara respectiv exterioara a nervurii (m) delta_n = 0.001; % grosimea nervurii (m) T_p = 95; T_inf = 20; % temperatura peretelui si a mediului amb (C) h = 115; % coeficientul de transfer de caldura (W/m^2-C) lambda = 130; % conductivitatea termica (W/m-C)

% Constante calculate a = r_p/r_vf; b = r_vf/r_vf; alf2 = (2*h*r_vf*r_vf)/(lambda*delta_n); alpha = sqrt(alf2); Q_ideal = 2*pi*h*(r_vf*r_vf-r_p*r_p)*(T_p-T_inf);%% Scriem marimile de intrare in fisierul de rezultate fis = fopen('Nerv_Circ_a.txt','w'); fprintf(fis,'\n *** Nerv_Circ_a.txt *** Date si rezultate\n'); fprintf(fis,'\n MARIMI DE INTRARE PENTRU PROBLEMA \n'); fprintf(fis,' Raza interioara si exterioara: r_p = %6.2f m \t r_vf = %5.2f m \n',r_p,r_vf); fprintf(fis,'Grosimea nervurii: delta_n = %6.4f m \n',delta_n); fprintf(fis,'Temp peretelui si a mediului amb: T_p = %6.2f C \t T_inf = %5.2f C \n',T_p,T_inf); fprintf(fis,'Coef de transfer de caldura: h = %6.2f W/m^2-C \n',h); fprintf(fis,'Conductivitatea termica: lambda = %6.2f W/m-C \n',lambda);%% Definirea domeniului solutiilor x = linspace(a,b,50); [nr,nc] = size(x);

% Evaluarea constantelor din ecuatia temperaturii a1 = besselk(1,alpha*b); a2 = besseli(1,alpha*b); b1 = besseli(0,alpha*a); b2 = besselk(0,alpha*a); numitor = a1*b1+a2*b2;

% Crearea temp normalizate si a gradientului u = (a1*besseli(0,alpha*x) + a2*besselk(0,alpha*x))/numitor; up = alpha*(a1*besseli(1,alpha*x) - a2*besselk(1,alpha*x))/numitor;

% Calc caldurii transmise (conductie) & a randam. nervurii Q_efectiv = -lambda*(2*pi*a*delta_n)*(T_p-T_inf)*up(1); T_vf = T_inf + (T_p-T_inf)*u(nc); rand_n = Q_efectiv/Q_ideal; fprintf(fis,'\n SOLUTIA ANALITICA - REZULTATE FINALE \n'); fprintf(fis,'Temp perete (C) = %8.2f \n',T_p); fprintf(fis,'Temp mediului ambiant (C) = %8.2f \n',T_inf); fprintf(fis,'Temp vf nerv (C) = %8.2f \n',T_vf);

18

fprintf(fis,'Q ideala (W) = %8.2f \n',Q_ideal); fprintf(fis,'Q reala (W) = %8.2f \n',Q_efectiv); fprintf(fis,'Randamentul nervurii = %8.2f \n',rand_n);

% Trasarea distributiei nfig = nfig+1; figure(nfig) subplot(2,1,1) plot(x,u,'r-','LineWidth',1.5),title('Distributia normalizata de temp pentru nervura cilindrica (Analitic)') grid,ylabel('Temperatura') subplot(2,1,2) plot(x,up,'b-','LineWidth',1.5),title('Gradientul normalizat de temp pentru nervura cilindrica (Analitic)') grid,xlabel('Distanta normalizata '),ylabel('Gradientul de temp')

% Inchiderea fisierului de rezultate fclose(fis);% Sfirsitul simularii

% Transferul de caldura intr-o nervura circulara (Solutia Analitica)%% Acest fisier rezolva problema transferului de caldura intr-o nervura circulara folosind % functii Bessel modificate. Problema de baza e definita de ecuatia:%% x^2*u'' + x*u' - ALF2*x^2*u = 0 unde ALF2 = 2*h*r_vf^2/[k*delta_n]%% cu C.L. u(a) = 1 si u'(b) = 0% si a = r_p/r_vf si b = r_vf/r_vf = 1%% unde u = temperatura normalizata = [T(r) - T_inf]/[T_p - T_inf]% x = distanta normalizata = r/r_vf%% cu r_p, r_vf = raza interioara respectiv exterioara a nervurii % delta_n = grosimea nervurii% si h, lambda, T_p, si T_inf sunt toate date (fixate)%% Din solutia normalizata se pot construi distributiile absolute:% T(r) = T_inf + u(x)[T_p - T_inf]% T'(r) = u'(x)[T_p - T_inf]/r_vf%% Inceput clear all, close all, nfig = 0;%% Marimi de intrare pentru problema

19

% r_p = 1/12; r_vf = 1.5/12; % raza interioara respectiv exterioara a nervurii (ft)% delta_n = .0625/12; % grosimea nervurii (ft)% T_p = 200; T_inf = 70; % temperatura peretelui si a mediului amb (F)% h = 20; % coeficientul de transfer de caldura (BTU/hr-ft^2-F)% lambda = 75; % conductivitatea termica (BTU/hr-ft-F)

% SI% r_p = 0.0252984; r_vf = 0.0381; % raza interioara respectiv exterioara a nervurii (m)% delta_n = 0.001587398; % grosimea nervurii (m)% T_p = 93.33333; T_inf = 21.11111; % temperatura peretelui si a mediului amb (F)% h = 113.56; % coeficientul de transfer de caldura (W/m^2-C)% lambda = 129.8032; % conductivitatea termica (W/m-C)

% SI r_p = 0.025; r_vf = 0.04; % raza interioara respectiv exterioara a nervurii (m) delta_n = 0.001; % grosimea nervurii (m) T_p = 95; T_inf = 20; % temperatura peretelui si a mediului amb (C) h = 115; % coeficientul de transfer de caldura (W/m^2-C) lambda = 130; % conductivitatea termica (W/m-C)

% Constante calculate a = r_p/r_vf; b = r_vf/r_vf; alf2 = (2*h*r_vf*r_vf)/(lambda*delta_n); alpha = sqrt(alf2); Q_ideal = 2*pi*h*(r_vf*r_vf-r_p*r_p)*(T_p-T_inf);%% Scriem marimile de intrare in fisierul de rezultate fis = fopen('Nerv_Circ_a.txt','w'); fprintf(fis,'\n *** Nerv_Circ_a.txt *** Date si rezultate\n'); fprintf(fis,'\n MARIMI DE INTRARE PENTRU PROBLEMA \n'); fprintf(fis,' Raza interioara si exterioara: r_p = %6.2f m \t r_vf = %5.2f m \n',r_p,r_vf); fprintf(fis,'Grosimea nervurii: delta_n = %6.4f m \n',delta_n); fprintf(fis,'Temp peretelui si a mediului amb: T_p = %6.2f C \t T_inf = %5.2f C \n',T_p,T_inf); fprintf(fis,'Coef de transfer de caldura: h = %6.2f W/m^2-C \n',h); fprintf(fis,'Conductivitatea termica: lambda = %6.2f W/m-C \n',lambda);%% Definirea domeniului solutiilor x = linspace(a,b,50); [nr,nc] = size(x);

20

% Evaluarea constantelor din ecuatia temperaturii a1 = besselk(1,alpha*b); a2 = besseli(1,alpha*b); b1 = besseli(0,alpha*a); b2 = besselk(0,alpha*a); numitor = a1*b1+a2*b2;

% Crearea temp normalizate si a gradientului u = (a1*besseli(0,alpha*x) + a2*besselk(0,alpha*x))/numitor; up = alpha*(a1*besseli(1,alpha*x) - a2*besselk(1,alpha*x))/numitor;

% Calc caldurii transmise (conductie) & a randam. nervurii Q_efectiv = -lambda*(2*pi*a*delta_n)*(T_p-T_inf)*up(1); T_vf = T_inf + (T_p-T_inf)*u(nc); rand_n = Q_efectiv/Q_ideal; fprintf(fis,'\n SOLUTIA ANALITICA - REZULTATE FINALE \n'); fprintf(fis,'Temp perete (C) = %8.2f \n',T_p); fprintf(fis,'Temp mediului ambiant (C) = %8.2f \n',T_inf); fprintf(fis,'Temp vf nerv (C) = %8.2f \n',T_vf); fprintf(fis,'Q ideala (W) = %8.2f \n',Q_ideal); fprintf(fis,'Q reala (W) = %8.2f \n',Q_efectiv); fprintf(fis,'Randamentul nervurii = %8.2f \n',rand_n);

% Trasarea distributiei nfig = nfig+1; figure(nfig) subplot(2,1,1) plot(x,u,'r-','LineWidth',1.5),title('Distributia normalizata de temp pentru nervura cilindrica (Analitic)') grid,ylabel('Temperatura') subplot(2,1,2) plot(x,up,'b-','LineWidth',1.5),title('Gradientul normalizat de temp pentru nervura cilindrica (Analitic)') grid,xlabel('Distanta normalizata '),ylabel('Gradientul de temp')

% Inchiderea fisierului de rezultate fclose(fis);% Sfirsitul simularii

% Transferul de caldura intr-o nervura circulara (Solutia Analitica)%% Acest fisier rezolva problema transferului de caldura intr-o nervura circulara folosind % functii Bessel modificate. Problema de baza e definita de ecuatia:%% x^2*u'' + x*u' - ALF2*x^2*u = 0 unde ALF2 = 2*h*r_vf^2/[k*delta_n]%

21

% cu C.L. u(a) = 1 si u'(b) = 0% si a = r_p/r_vf si b = r_vf/r_vf = 1%% unde u = temperatura normalizata = [T(r) - T_inf]/[T_p - T_inf]% x = distanta normalizata = r/r_vf%% cu r_p, r_vf = raza interioara respectiv exterioara a nervurii % delta_n = grosimea nervurii% si h, lambda, T_p, si T_inf sunt toate date (fixate)%% Din solutia normalizata se pot construi distributiile absolute:% T(r) = T_inf + u(x)[T_p - T_inf]% T'(r) = u'(x)[T_p - T_inf]/r_vf%% Inceput clear all, close all, nfig = 0;%% Marimi de intrare pentru problema% r_p = 1/12; r_vf = 1.5/12; % raza interioara respectiv exterioara a nervurii (ft)% delta_n = .0625/12; % grosimea nervurii (ft)% T_p = 200; T_inf = 70; % temperatura peretelui si a mediului amb (F)% h = 20; % coeficientul de transfer de caldura (BTU/hr-ft^2-F)% lambda = 75; % conductivitatea termica (BTU/hr-ft-F)

% SI% r_p = 0.0252984; r_vf = 0.0381; % raza interioara respectiv exterioara a nervurii (m)% delta_n = 0.001587398; % grosimea nervurii (m)% T_p = 93.33333; T_inf = 21.11111; % temperatura peretelui si a mediului amb (F)% h = 113.56; % coeficientul de transfer de caldura (W/m^2-C)% lambda = 129.8032; % conductivitatea termica (W/m-C)

% SI r_p = 0.025; r_vf = 0.04; % raza interioara respectiv exterioara a nervurii (m) delta_n = 0.001; % grosimea nervurii (m) T_p = 95; T_inf = 20; % temperatura peretelui si a mediului amb (C) h = 115; % coeficientul de transfer de caldura (W/m^2-C) lambda = 130; % conductivitatea termica (W/m-C)

% Constante calculate a = r_p/r_vf; b = r_vf/r_vf;

22

alf2 = (2*h*r_vf*r_vf)/(lambda*delta_n); alpha = sqrt(alf2); Q_ideal = 2*pi*h*(r_vf*r_vf-r_p*r_p)*(T_p-T_inf);%% Scriem marimile de intrare in fisierul de rezultate fis = fopen('Nerv_Circ_a.txt','w'); fprintf(fis,'\n *** Nerv_Circ_a.txt *** Date si rezultate\n'); fprintf(fis,'\n MARIMI DE INTRARE PENTRU PROBLEMA \n'); fprintf(fis,' Raza interioara si exterioara: r_p = %6.2f m \t r_vf = %5.2f m \n',r_p,r_vf); fprintf(fis,'Grosimea nervurii: delta_n = %6.4f m \n',delta_n); fprintf(fis,'Temp peretelui si a mediului amb: T_p = %6.2f C \t T_inf = %5.2f C \n',T_p,T_inf); fprintf(fis,'Coef de transfer de caldura: h = %6.2f W/m^2-C \n',h); fprintf(fis,'Conductivitatea termica: lambda = %6.2f W/m-C \n',lambda);%% Definirea domeniului solutiilor x = linspace(a,b,50); [nr,nc] = size(x);

% Evaluarea constantelor din ecuatia temperaturii a1 = besselk(1,alpha*b); a2 = besseli(1,alpha*b); b1 = besseli(0,alpha*a); b2 = besselk(0,alpha*a); numitor = a1*b1+a2*b2;

% Crearea temp normalizate si a gradientului u = (a1*besseli(0,alpha*x) + a2*besselk(0,alpha*x))/numitor; up = alpha*(a1*besseli(1,alpha*x) - a2*besselk(1,alpha*x))/numitor;

% Calc caldurii transmise (conductie) & a randam. nervurii Q_efectiv = -lambda*(2*pi*a*delta_n)*(T_p-T_inf)*up(1); T_vf = T_inf + (T_p-T_inf)*u(nc); rand_n = Q_efectiv/Q_ideal; fprintf(fis,'\n SOLUTIA ANALITICA - REZULTATE FINALE \n'); fprintf(fis,'Temp perete (C) = %8.2f \n',T_p); fprintf(fis,'Temp mediului ambiant (C) = %8.2f \n',T_inf); fprintf(fis,'Temp vf nerv (C) = %8.2f \n',T_vf); fprintf(fis,'Q ideala (W) = %8.2f \n',Q_ideal); fprintf(fis,'Q reala (W) = %8.2f \n',Q_efectiv); fprintf(fis,'Randamentul nervurii = %8.2f \n',rand_n);

% Trasarea distributiei nfig = nfig+1; figure(nfig) subplot(2,1,1) plot(x,u,'r-','LineWidth',1.5),title('Distributia normalizata de temp pentru nervura cilindrica (Analitic)') grid,ylabel('Temperatura') subplot(2,1,2)

23

plot(x,up,'b-','LineWidth',1.5),title('Gradientul normalizat de temp pentru nervura cilindrica (Analitic)') grid,xlabel('Distanta normalizata '),ylabel('Gradientul de temp')

% Inchiderea fisierului de rezultate fclose(fis);% Sfirsitul simularii

24

Laborator 4

% Transfer 1-D de caldura în bara finita (HT Example 10.1 in Class Notes)%% Solutia analitica folosind separarea variabilelor pentru urmatoarea problema:% ut(x,t) = alf*uxx(x,t) cu u(0,t) = 0 u(L,t) = 0 u(x,0) = f(x)% unde u(x,0) = f(x) = x if 0 < x <L/2 % L-x if L/2 < x < L

% Inceput clear all, close all

% Datele problemei alf = 1.0; % cm^2/s difuzivitate termica L = 50; % cm ul = 0; % C temp fixa a capatului din stinga ur = 0; % C temp initiala a capatului din dreapta Nx = 101; % numarul de valori x x = linspace(0,L,Nx)';% vector de puncte pentru calculul functiei n_max = 50; % numarul max de termeni nenuli din suma tol = 0.001; % toleranta maxima la calculul dezvoltarii in serie % calc coeficientilor lambda = n*pi/L si C = (4*L/n*pi)*sin(n*pi/2) pentru n = 1,3,5,... lambda = zeros(1,n_max); C = zeros(1,n_max); cc = 4*L/(pi^2); dd = pi/L; for m = 1:n_max n = 2*m-1; C(m) = cc*sin(n*pi/2)/(n^2); lambda(m) = n*dd; end

% calculul dezvoltarii in serie pentru diferite momente de timp tt = [0 25 100 250 500]; %Momentele de timp pentru care se determina distributia Nt = length(tt); ut = zeros(Nx,Nt); %Matricea temperaturilor

for i = 1:Nt %i reprezinta momentul de timp t = tt(i); cc = -alf*t; max_rel_err = 1.0; n = 0; u = zeros(size(x)); %Vector coloana ce contine temperatura u ptr un t while max_rel_err > tol && n < n_max n = n+1; un = C(n)*exp(cc*lambda(n)^2)*sin(lambda(n)*x); %Vector coloana ce contine termenul n al sumei ptr un t u = u + un; rel_err = un(2:Nx-1)./u(2:Nx-1); max_rel_err = max(abs(rel_err)); end %while ut(:,i) = u; %Vectorul u se memoreaza in coloana i a matricii ut disp([num2str(n),' termeni necesari pentru convergenta la t = ',num2str(t),' s'])

25

end %for

% trasarea curbelor u(x,t) pentru diferite momente de timp figure(1) v = [0 L 0 25]; plot(x,ut),axis(v) title('Distributia de temperatura in bara pentru diferite momente de timp') grid,xlabel('Distanta (cm)'),ylabel('Temperatura (C)') for i = 1:Nt, gtext(['t = ',num2str(tt(i)),' s']), end

% Sfarsit

% Transfer 1-D de caldura în bara finita (HT Example 10.2 in Class Notes)% % Solutia analitica folosind separarea variabilelor pentru urmatoarea problema: % ut(x,t) = alf*uxx(x,t) with u(0,t) = ul u(L,t) = ur u(x,0) = u0 % are o solutie data de% u(x,t) = v(x,t) + w(x) % unde v(x,t) este solutia tranzitorie iar w(x) este solutia stationara

% Inceput clear all, close all % Datele problemei alf = 0.0001; % m^2/s difuzivitate termica ul = 100; % C temp fixa a capatului din stinga ur = 400; % C temp fixa a capatului din dreapta u0 = 70; % C temp initiala uniforma a barei L = 1; % m lungimea barei maxt = 50; % numarul max de termeni din dezvoltare tol = 0.001; % toleranta maxima la calculul dezvoltarii in serie nfig = 0; % contor figuri

% Solutia stationara w(x) Nx = 101; x = linspace(0,L,Nx)'; w = (ur-ul)*x/L + ul;

% v(x,t) este data de o serie infinita % calculul termenilor pentru n = 1,2,3,4,5,...,max cc1 = 600*L/pi; cc2 = 60/pi; for n = 1:maxt lam(n) = n*pi/L; c(n) = (1/n)*(cc1*(-1)^n + cc2*((-1)^n-1)); end %for

% definirea momentelor de timp si initializarea distributiei spatiu-timp opt = menu('Optiuni pentru grafic?','Creati distributia la 5 momente de timp', ...

26

'Creati un film cu Nt cadre'); switch opt case 1 % folosit pentru trasarea instantaneelor Nt = 5; tt = [0 50 250 1000 5000]; case 2 % folosit pentru continuitatea filmului Nt = input('Introduceti numarul de cadre pentru film (5-100): '); if Nt < 5, Nt = 5; end if Nt > 100, Nt = 100; end tt = linspace(0,5000,Nt); end%% start ciclu pentru momentele de timp u = zeros(Nx,Nt); for j = 1:Nt t = tt(j); cc = -alf*t; mrerr = 1.0; n = 0; v = zeros(size(x)); while mrerr > tol & n < maxt n = n+1; vn = c(n)*sin(lam(n)*x).*exp(cc*lam(n)*lam(n)); v = v + vn; rerr = vn(2:Nx-1)./v(2:Nx-1); mrerr = max(abs(rerr)); end u(:,j) = v + w; disp([num2str(n),' termeni necesari pentru convergenta la t = ',num2str(t),' s']) end

% trasarea curbelor pentru diferite momente de timp(daca opt = 1) switch opt case 1 nfig = nfig+1; figure(nfig) plot(x,u) axis([0 1 0 400]); title('Temperatura barei la diferite momente de timp') grid,xlabel('Distanta (m)'),ylabel('Temperatura (C)') for j = 1:Nt, gtext(['t = ',num2str(tt(j)),' s']), end%% film cu variatia in timp (daca opt = 2) case 2 nfig = nfig+1; figure(nfig) plot(x,u(:,1)); axis([0 L 0 400]); M = moviein(Nt); for j = 1:Nt plot(x,u(:,j)); axis([0 L 0 400]); M(:,j) = getframe; end%% reafisarea cadrelor filmului de Nd ori pentru a-l incetini% disp(' ')% Nd = input('Introduceti o intirziere pentru a incetini filmul (1-10): ');% if Nd < 1 Nd = 1; end% if Nd > 10 Nd = 10; end

27

% index = ones(Nd,Nt); % for i = 2:Nt, index(:,i) = i*index(:,i); end% M2 = M(:,index);

% Rularea filmului inca o data movie(M,0); hold on; plot(x,u(:,1)); grid on; title('Temperatura barei pentru momentul initial si final (Example 10.2)'); xlabel('Distanta (m)'),ylabel('Temperatura (C)'); gtext('initiala'),gtext('finala') hold off end

% Sfarsit

% Transfer 1-D de caldura în bara finita (HT Example 10.3 in Class Notes) % % Solutia analitica folosind separarea variabilelor pentru urmatoarea problema:% ut(x,t) = alf*uxx(x,t) % unde % u(L,t) = g(t) = ur*exp(-mu*t) -- temperatura în atenuare la capatul din dreapta% u(0,t) = ul -- temp fixa la capatul din stanga % u(x,0) = f(x) = (ur-ul)x/L + ul -- profil liniar % are o solutie data de% u(x,t) = v(x,t) + w(x) % unde v(x,t) este solutia tranzitorie iar w(x) este solutia stationara%% Pentru aproximarea solutiei v(x,t) se foloseste metoda dezvoltarii in% serie de functii proprii (vezi notele de curs).

% Inceput clear all, close all% % Datele problemei alf = 0.0001; % m^2/s difuzivitate termica L = 1; % m lungimea barei ul = 100; % C temp fixa a capatului din stinga ur = 400; % C temp initiala a capatului din dreapta maxt = 80; % numarul max de termeni din dezvoltare tol = 0.001; % toleranta maxima la calculul dezvoltarii in serie nfig = 0; % contor figuri imu = menu('Alegeti rata de atenuare a temp capatului din dreapta ', ... 'Rata lenta (mu = 0.001 1/s)', ... 'Rata rapida (mu = 0.005 1/s)'); if imu == 1, mu = .001; end

28

if imu == 2, mu = .005; end

% vectorul de puncte pentru calculul functiei Nx = 101; x = linspace(0,L,Nx)';

% w(x)este solutia stationara w = ul*(L-x)/L;

% se calc ln, ano si cn for n = 1:maxt ln(n) = n*pi/L; ano(n) = (2*ur/(pi*n))*(-1)^(n+1); cn(n) = (2*alf*ur*ln(n)/L)*(-1)^(n+1); end

% definirea momentelor de timp si initializarea distributiei spatiu-timp Nt = 5; tt = [0 600 1200 2400 4800]; %(timp in secunde) u = zeros(Nx,Nt);%% start ciclu pentru momentele de timp for j = 1:Nt t = tt(j); bb = -mu*t; cc = -alf*t; v = zeros(Nx,1); n = 0; mrerr = 1.0; while mrerr > tol & n < maxt n = n+1; k1 = exp(bb); k2 = exp(cc*ln(n)*ln(n)); k3 = alf*ln(n)*ln(n); vn = (ano(n)*k2 + cn(n)*(k1-k2)/(k3-mu))*sin(ln(n)*x); v = v + vn; rerr = vn(2:Nx-1)./v(2:Nx-1); mrerr = max(abs(rerr)); end u(:,j) = v + w; disp([num2str(n),' termeni necesari pentru convergenta la t = ',num2str(t),' s']) end%% stabilirea culorii si markerului pentru crearea graficelor Ncm = 6; scm = ['r-'; % magenta solid 'g:'; % cyan dotted 'b-'; % red solid 'm:'; % green dotted 'c-'; % blue solid 'y:']; % yellow dotted

% trasarea curbelor pentru diferite momente de timp st = zeros(Nt,9); if Nt < 6 nfig = nfig+1; figure(nfig) for j = 1:Nt h(j) = plot(x,u(:,j),scm(j,:)); hold on st(j,:) = sprintf('%5.1f min',tt(j)/60);

29

end hold off axis([0 1 0 400]); title('Temperatura barei in timp cu g(t) = u_r*exp(-\mu*t)') grid,xlabel('Distanta (m)'),ylabel('Temperatura (C)') legend(h,char(st),'Location','Best') text(0.04,20,['\mu = ',num2str(mu),' 1/s']) end%% Sfarsit

% Transfer de caldura 1-D in Perete plan (Placa de cupru) % % Programul implementeaza solutia analitica folosind metoda Separarii Variabilelor% pentru o problema relativ simpla de transfer de caldura. Rezultatul metodei% e o dezvoltare in serie infinita, iar scopul aici e de a calcula si trasa % distributia T(x,t) data de seria infinita. % % Modelul fizic al problemei e transferul 1-D de caldura in spatiu si timp printr-un perete plan. % Peretele are o temperatura initiala constanta de 100 C. La momentul t = 0, fata% din stinga e adusa la (0 C) iar fata din dreapta e perfect izolata (T' = 0)% Objectivul simularii e de a calcula si vizualiza profilul de temperatura in% spatiu-timp in perete (in acest caz, o placa de cupru de 10 cm grosime). % Inceputclear all, close all, nfig = 0; % datele problemei alf = 1.15; % cm^2/s difuzivitatea termica pentru cupru L = 10; % cm grosimea placii Ti = 100; % C temp initiala in placa

Nx = 101; % numarul de valori x x = linspace(0,L,Nx)'; % vectorul de puncte pentru calculul functiei nmax = 50; % numarul max de term nenuli din dezvoltare tol = 0.001; % toleranta de stop la calculul seriei % calculul ln = (2n-1)*pi/2L si an = 4*Ti/(2n-1)*pi) ptr n = 1,2,3,... ln = zeros(1,nmax); an = zeros(1,nmax); d = pi/(2*L); c = 4*Ti/pi; for n = 1:nmax ln(n) = (2*n-1)*d; an(n) = c/(2*n-1); end %for

30

% Alegerea tipului de grafic care va fi trasatic = menu('Alegeti tipul de grafic', ... 'T(x) pentru diferite momente de timp (grafic 2-D)', ... 'T(x,t) in diferite grafice de tip suprafata (grafice 3-D)'); % Calculul dezvoltarii in series pentru diferite momente de timp if ic == 1 tt = [0 1 5 15 30 60]; % acesta e pentru graficul 2-Delse tt = linspace(0,120,49); % acesta e pentru graficele 3-D (mai multe momente de timp) end %ifNt = length(tt); T = zeros(Nx,Nt); % Calculul temperaturii initiale cunoscute T(:,1) = Ti*ones(size(x)); % Ciclu pentru restul momentelor de timp for j = 2:Nt t = tt(j); cc = -alf*t; mrerr = 1.0; n = 0; Tx = zeros(size(x)); while mrerr > tol & n < nmax n = n+1; Txn = an(n)*exp(cc*ln(n)*ln(n))*sin(ln(n)*x); Tx = Tx + Txn; i = find(Tx); rerr = Txn(i)./Tx(i); mrerr = max(abs(rerr)); end %while T(:,j) = Tx; disp([num2str(n),' termeni necesari pentru convergenta la t = ',num2str(t),' s']) end %for % ***** Crearea graficului 2-D ***** if ic == 1 % Alegerea culorilor si simbolurilor pentru graficul 2-D Ncm = 6; scm = ['k-'; % black solid 'g-'; % green dotted 'b-'; % blue solid 'm:'; % magenta dotted 'c-'; % cyan solid 'r:']; % red dotted % Trasarea curbelor T(x,t) pentru diferite momente nfig = nfig+1; figure(nfig) for j = 1:Nt h(j) = plot(x,T(:,j),scm(j,:),'LineWidth',2); hold on st(j,:) = sprintf('%5.1f sec',tt(j)); end %for

31

title('Profilul temperaturii in placa la diferite momente') grid,xlabel('Distanta (cm)'),ylabel('Temperatura (\circC)') legend(h,char(st)) end %if % ***** Crearea de diferite grafice 3-D ***** if ic == 2 %Primul grafic nfig = nfig+1; figure(nfig) surf(tt,x,T), shading interp, colorbar, view(60,30), hold on axis('tight'), colormap('jet') [cc,hh] = contour3(tt,x,T, [80 60 40 20 10 5]); clabel(cc), set(hh,'EdgeColor','k') title('Distributia T(x,t) in placa de cupru') ylabel('Pozitia x (cm)'), xlabel('Timpul (sec)') zlabel('Temperatura (\circC)'), hold off %Al doilea grafic nfig = nfig+1; figure(nfig) surf(tt,x,T), shading interp, colorbar, view(2), hold on [cc,hh] = contour3(tt,x,T, [80 60 40 20 10 5]); clabel(cc), set(hh,'EdgeColor','k') axis('tight') title('Distributia T(x,t) in placa de cupru') ylabel('Pozitia x (cm)'), xlabel('Timpul (sec)') zlabel('Temperatura (\circC)'), hold off %R gtext('Temperatura (C)') end %if % Sfarsit

32