在PDE工具箱中使用时间相关(热量)源

时间:2017-03-02 01:57:41

标签: matlab transient pde

我的目标是在解决传热问题时应用与时间有关的热源。

瞬态传导传热的偏微分方程是:

The partial differential equation for transient conduction heat transfer

可在此处找到更多信息:Solving a Heat Transfer Problem With Temperature-Dependent Properties

在我的情况下,所有参数都是常量,除了源项f需要随时间改变。

我按照这里的示例代码:Nonlinear Heat Transfer In a Thin Plate提供了解决瞬态问题的方法,并且我能够在每个时间点绘制热量数据。

将它应用于我的案例时的问题是,在示例中,源是整个区域和整个时间的常量值,并且与辐射和对流有关(在我的情况下,它们应该全部为零),但是我需要提供一个与时间相关的源(通过时变电流进行焦耳加热)。源可以采用以下格式之一:

  1. 分析:在诸如0 <0的时间窗内,诸如1W / m ^ 2的正值。 T&LT; 1 ns,否则为0。
  2. 数值:数据由1xN向量提供,其中N是时间点的数量。
  3. 并且源被限制在某个区域,例如。 0℃; x <1mm且0 < y <1 mm。

    我见过类似的问题,但没有回复:How to use a variable coefficient in PDE Toolbox to solve a parabolic equation (Matlab)

    有没有办法用PDE工具箱实现这个?从头开始编写代码会非常复杂......

1 个答案:

答案 0 :(得分:3)

您可以使用this轻松定义和解决时间相关和非线性PDE系数的问题,如下面的m脚本代码段所示。请注意,热源(接收器)术语 f 缩放为f*(t>2500),这意味着它仅在 t = 2500 之后才会激活(因为切换表达式评估) 0 如果为false或 1 ,如果为true)。

% Coefficents and problem definition from https://www.mathworks.com/help/pde/examples/nonlinear-heat-transfer-in-a-thin-plate.html
k=400;rho=8960;specificHeat=386;thick=.01;stefanBoltz=5.670373e-8;hCoeff=1;ta=300;emiss=.5;

% Set up 2D fea struct with geometry and grid.
fea.sdim = {'x' 'y'};
fea.geom = { gobj_rectangle( 0, 1, 0, 1 ) };
fea.grid = rectgrid( 10 );

% Add heat transfer physics mode.
fea = addphys( fea, @heattransfer );

fea.phys.ht.eqn.coef{1,end}{1} = rho*thick;      % Density eqn coefficient.
fea.phys.ht.eqn.coef{2,end}{1} = specificHeat;   % C_p eqn coefficient.
fea.phys.ht.eqn.coef{3,end}{1} = k*thick;        % Thermal condictivity.
f = sprintf( '%g*( %g - T ) + %g*( %g^4 - T^4 )', ...
             2*hCoeff, ta, 2*emiss*stefanBoltz, ta );
fea.phys.ht.eqn.coef{6,end}{1} = ['(',f,')*(t>2500)'];   % Heat source term.

fea.phys.ht.bdr.sel(1) = 1;  % Set prescribed temperature for boundary 1.
fea.phys.ht.bdr.coef{1,end}{1} = 1000;  
fea.phys.ht.bdr.sel(2:4) = 3;   % Isolation BCs for boundaries 2-4.

% Check, parse, and solve fea problem.
fea = parsephys( fea );
fea = parseprob( fea );
[fea.sol.u,t] = solvetime( fea, 'tstep', 50, 'tmax', 5000, 'init', {ta} );

% Postprocessing and visualization.
for i=1:size(fea.sol.u,2)
  T_top(i) = evalexpr( 'T', [.5;1-sqrt(eps)], fea, i );
end

subplot(1,2,1)
postplot( fea, 'surfexpr', 'T', 'title', 'T @ t=5000' )
subplot(1,2,2)
plot( t, T_top, 'r-' )
xlabel( 't' )
ylabel( 'T(0.5,1) @ t=5000' )
grid on

在这里的解决方案中,您可以看到顶部边缘的温度由于从下边界的热扩散直到t = 2500,其中散热器被激活而线性上升。

FEATool FEM Matlab Toolbox

关于数字源术语的第二点,在这种情况下,您可以创建并调用自己的外部函数,该函数对数据进行制表和插值,在这种情况下,它看起来像

fea.phys.ht.eqn.coef{6,end}{1} = 'my_fun( t )';

你可以在表格的Matlab路径上找到的某个Matlab函数my_fun.m

function [ val ] = my_fun( t )
data  = [7 42 -100  0.1];   % Example data.
times = [0 10   99 5000];   % Time points.
val = interp1( data, times, t );   % Interpolate data.

最后,虽然这里使用m-script Matlab代码定义模型,以便在StackOverflow上共享,但您可以轻松使用Matlab FEA GUI,甚至可以根据需要将GUI模型导出为m-script代码。