我想对半球应用热传导(热传导和对流)。它是球坐标系中的瞬态均匀传热。没有发热。半球的边界条件在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),但我很困惑如何表示这个温度曲线显示在半球图。我想听听你的建议。在此先感谢!!
答案 0 :(得分:1)
准确地说,MATLAB为for loop
构造定义的正确语法是
for index = values
program statements
...
end
其中values
具有以下形式之一:
initval:endval
initval:step:endval
valArray
您的代码被解析为initval:endval
= 9:2
,这意味着循环运行0次,导致无法计算。