WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

PDE Wärmeleitung - Schleife?

 

Kojote
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.07.09
Wohnort: Stockholm
Version: ---
     Beitrag Verfasst am: 17.02.2010, 15:24     Titel: PDE Wärmeleitung - Schleife?
  Antworten mit Zitat      
Hallo Matlab-Profis,

könntet Ihr bitte mal einen Blick auf mein nachfolgendes Programm, zur Berechnung der instationären Wärmeleitung durch eine mehrschichtige Wand, werfen.

Musste leider feststellen, dass das Programm nicht so funktioniert wie gewuenscht. Es gibt immer wieder groessere Abweichungen. Bin mit der Lösung der if-Schleife im letzten Teil nicht zufrieden und denke auch hier liegt der Fehler.

Wäre super, wenn mir jemand helfen könnte eine bessere Lösung zu finden. Bin nicht gerade der Profi in Matlab und es ist auch nicht gerade mein Fachgebiet.

Ueber sonstige Hinweise zum Code wäre ich Euch natuerlich auch sehr dankbar.

Code:

clc
clear all;
%-----------------------------Input----------------------------------------
% Inputs
L1=0.05;                          % wall thickness(m)1.Layer
k1=5.0;                           % conductivity(W/m-K)1.Layer
rho1=2000;                        % density(kg/m^3)1.Layer                  
cp1=200;                          % specific heat capacity(J/kg-K)1.Layer
L2=0.10;                          % wall thickness(m)2.Layer
k2=1.7;                           % conductivity(W/m-K)2.Layer
rho2=3000;                        % density(kg/m^3) 2.Layer
cp2=100;                          % specific heat capacity(J/kg-K)2.Layer                            
T_ini=293.2;                      % initial temperature(K)
T_inf=273.2;                      % external temperature(K)
h=500;                            % heat transfer coefficient(K)

%-----------------------------Time stepping--------------------------------
% Setup time steps
M=81;                            % number of time steps
t=40;
DELTA_t=t/(M-1);                 % time step duration(s)
for j=1:M
    time(j)=(j-1)*DELTA_t;
end

%-----------------------------Grid-----------------------------------------
%Setup grid
N1=10;                              % number of nodes 1.Layer
N2=15;                              % number of nodes 2.Layer
L=L1+L2;                            % complete lenght (m)
N=N1+N2;                            % complete number of nodes

DELTA_x1=L1/(N1);                   % distance between adjacent nodes 1.Layer(m)
DELTA_x2=L2/(N2-1);                 % distance between adjacent nodes 2.Layer(m)

x1=0:DELTA_x1:L1;                   % position of each node 1.Layer(m)
x2=L1+DELTA_x2:DELTA_x2:L1+L2;      % position of each node 2.Layer(m)
x=[x1 x2];                          % position of each node(m)

%--------------------------Stability criterion-----------------------------

DELTA_t_crit_N=DELTA_x2*rho2*cp2/(2*(k2/DELTA_x2+h));
if DELTA_t > DELTA_t_crit_N
    disp(' ')
    disp('Time step exeeds the limit');
    return
end

%----------------------Initial wall temperatures---------------------------
%Initial wall temperatures T(i,1)
for i=1:N  
   T(i,1)=T_ini;      
end

% Step trough time
for j=1:(M-1)    
    % Heat flux condition(q=n*(-k*dT/dx))[W/m^2]
    T(1,j+1)=T(1,j)+2*k1*(T(2,j)-T(1,j))*DELTA_t/(rho1*cp1*DELTA_x1^2);
   
    for i=2:(N-1)
        if i<=N1
         rho=rho1;
         cp=cp1;
         k=k1;
         DELTA_x=DELTA_x1;
        else
         rho=rho2;
         cp=cp2;
         k=k2;
         DELTA_x=DELTA_x2;
        end
       
         T(i,j+1)=T(i,j)+k1*(T(i-1,j)+T(i+1,j)-2*T(i,j))*DELTA_t/(rho1*cp1*DELTA_x^2);
    end
       
    % Heat flux condition(q=n*(-k*dT/dx))[W/m^2] + heat transfer coefficient(hout*(Tinf-T))[W/(m^2*K]
    T(N,j+1)=T(N,j)+(2*k1*(T(N-1,j)-T(N,j))/(rho1*cp1*DELTA_x^2)+2*h*(T_inf-T(N,j))/(rho1*cp1*DELTA_x))*DELTA_t;
   
end

%-----------------------------Plot-----------------------------------------
plot(time,T)
figure
plot(x,T)
figure
g=T(:,M);  
plot(x,g)
 


Besten Dank bereits im Voraus.

Viele Gruesse
Kojote_
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2010, 08:06     Titel:
  Antworten mit Zitat      
Natürlich wäre es einfacher pdepe zu benutzen, aber wahrscheinlich widerspricht das der Aufgabenstellung.

Im Mittelteil verwendest du rho1,cp1 und k1 statt rho cp und k. An der 2 Grenze stehen ebenfalls die falschen Konstanten (rho1,k1,cp1 statt rho2,k2,cp2). Außerdem ist die Berechnung des Wärmestroms an der Grenze zwischen den beiden Schichten so nicht ganz korrekt.
Da muss sowas wie
k1*(T(i-1) - T(i)) + k2(T(i+1) - T(i))
stehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kojote
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.07.09
Wohnort: Stockholm
Version: ---
     Beitrag Verfasst am: 18.02.2010, 10:36     Titel:
  Antworten mit Zitat      
Hallo Thomas84,

besten Dank fuer deine Hinweise.

Fuer die falschen Konstanten muss ich mich entschuldigen, dies hatte ich beim präparieren des Codes fuers Forum uebersehen. Natuerlich muessen diese so wie Du geschrieben hast gesetzt werden.

Wie Du schon richtig erkannt hast, wiederspricht die Nutzung von pdepe der Aufgabenstellung.

Der Tipp fuer die Berechnung des Wärmestroms an der Grenze zwischen den beiden Schichten stimmt natuerlich, daran hatte ich ueberhaupt nicht gedacht.

Allerdings bin ich gerade ziemlich ratlos, wie ich dies in meinen Code einbinden könnte. Wobei ich wieder bei dem Problem mit der if-Schleife wäre.

Hättest Du hier evtl. auch noch einen Tipp fuer mich.
Besten Dank bereits im Voraus.

Viele Gruesse

Kojote_
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2010, 18:40     Titel:
  Antworten mit Zitat      
entweder du berechnest das Grenzelement noch mal seperat.
Code:

if i == N1
T(j+1,i) = ...
end
 


oder du erstellst einen Vektor für jede Materialkonstante.

Code:

k = [ones(1,N1)*k1,ones*(1,N2)*k2];

...

T(j+1,i) = T(j,i) - 2*k(i)*T(j,i) + k(i-1)*T(j,i-1) + k(i+1)*T(j,i+1) ....
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Kojote
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.07.09
Wohnort: Stockholm
Version: ---
     Beitrag Verfasst am: 21.02.2010, 12:25     Titel:
  Antworten mit Zitat      
Hallo Thomas84,

besten Dank.

Vor allem der zweite Hinweis hat mich jetzt ein ganzes Stueck weiter gebracht.

Damit möchte ich diesen Beitrag beendet.

Beste Gruesse

Kojote
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.