使用matlab进行球面坐标的传热

时间:2013-04-09 15:25:19

标签: matlab transfer heat

我想对半球应用热传导(热传导和对流)。它是球坐标系中的瞬态均匀传热。没有发热。半球的边界条件在Tinitial = 20度室温开始。外部环境温度为-30度。你可以想象半球是一种坚固的材料。此外,它是一种非线性模型,因为材料在冷冻后导热性会发生变化,这会改变温度曲线。

我希望在一定时间内找到该固体的温度曲线,直到中心温度达到-30度。

在这种情况下,温度取决于3个参数:T(r,theta,t)。半径,角度和时间。

1 /α(∂T(r,θ,t))/∂t= 1 / r ^ 2 *∂/∂r(r ^ 2(∂T(r,θ,t))/∂r) + 1 /(r ^ 2 *sinθ)∂/∂θ(sinθ(∂T(r,θ,t))/∂θ)

我使用matlab应用了有限差分法,但程序不计算半球内部节点的任何内容,只给出初始温度值(这里是Told)。您可以看到我用于内部节点的一些脚本。

% initial conditions
Tair    =   -30.0;               % Temperature of air
Tin     =    21; 

% setting initial values for grid
for i=1:(nodes)
    for j=1:(nodes)
Told(i,j)     =   Tin;
Tnew(i,j)     =   Tin;
frozen(i)   =   0;                      
latent(i)   =   Qs*mass(i)*Water/dt;    
k(i)        =   0.5;                    
cp(i)       =   cw;                     
W(i)        =   Water;                  
l(i)        =   0;                      
S(i)        =   1-Water;                
     end
end


%Simulation conditions
J       =    9;              % No. of space steps   
nodes   =   J+1;             % Number of nodes along radius or theta direction
dt      =0.1;


t       =   0;               % time index on start
tmax    =   7000;            % Time simmulation is supposed to run


R       =  d/2;

dr      =  (d/2)/J;         %  space steps in r direction

 y   =        pi/2;        % (theta) for hemisphere
dy      =  (pi/2)/J;       % space steps in Theta direction

    % Top surface condition for hemisphere
      i=nodes; 
        for j=1:1:(nodes-1) 

       Qcd_ot(i,j) = ((k(i)+ k(i-1))/2)*A(i-1)*(( Told(i,j)-Told(i-1,j))/(dr)); % heat conduction out of nod 

        Qcv(i,j) = h*(Tair-Told(i,j))*A(i); % heat transfer through convectioin on surface 

        Tnew(i,j) = ((Qcv(i,j)-Qcd_ot(i,j))/(mass(i)*cp(i))/2)*dt + Told(i,j); 
          end             %end of for loop 

  % Temperature profile for inner nodes

  for i=2:1:(nodes-1)     
    for j=2:1:(nodes-1)  

Qcd_in(i,j)=   ((k(i)+ k(i+1))/2)*A(i) *((2/R)*(( Told(i+1,j)-Told(i,j))/(2*dr)) + ((Told(i+1,j)-2*Told(i,j)+Told(i-1,j))/(dr^2)) + ((cot(y)/(R^2))*((Told(i,j+1)-Told(i,j))/(2*dy))) + (1/(R^2))*(Told(i,j+1)-2*Told(i,j)+ Told(i,j-1))/(dy^2));
Qcd_out(i,j)=  ((k(i)+ k(i-1))/2)*A(i-1)*((2/R)*(( Told(i,j)-Told(i-1,j))/(2*dr)) +((Told(i+1,j)-2*Told(i,j)+Told(i-1,j))/(dr^2)) + ((cot(y)/(R^2))*((Told(i,j)-Told(i,j-1))/(2*dy))) + (1/(R^2))*(Told(i,j+1)-2*Told(i,j)+ Told(i,j-1))/(dy^2));

Tnew(i,j)     =   (Qcd_in(i,j)-Qcd_out(i,j))/(mass(i)*cp(i)))*dt + Told(i,j);
    end           
end               

   %bottom of the hemisphere solid
  Tnew(:,nodes)=-30;



 Told=Tnew;
 t=t+dt;

编辑 *谢谢,现在脚本正在运行和计算。我可以看到模型系统的温度曲线。

但是,我想在2D或3D图中绘制这个半球温度曲线。此外,如果有可能,我想在一定时间内运行动画温度变化。我用于模拟和编写文件的代码是

     t=0;

    tmax=7000;
    ...................
    .....................
    ss=0;   % index for printouts

     %start simulation
     while t<tmax
   ss=ss+1;
  .............
  .................
   ................
    if ss==2000
    dlmwrite('d:\Results_for_model.txt',Tnew,'-append');
    ss=0;
    end


    end   % end of while loop

你有什么建议吗?因为在文本文件中,对于Tnew(i,j)值,在每10行之后,模型计算下一个dt值。因此,结果数据看起来像一团糟,每10行后,它会给出下一次的值结果。

有没有办法协调根据特定的行和列来写这个结果(因为需要一次又一次地组织大量的数据)?

并且我想在3d图中绘制这个温度曲线,在这种情况下是半球,我有Tnew(r,theta,t),但我很困惑如何表示这个温度曲线显示在半球图。我想听听你的建议。在此先感谢!!

1 个答案:

答案 0 :(得分:1)

准确地说,MATLAB为for loop构造定义的正确语法是

for index = values
    program statements
    ...
end

其中values具有以下形式之一:

initval:endval

initval:step:endval

valArray

您的代码被解析为initval:endval = 9:2,这意味着循环运行0次,导致无法计算。