我的目标是在解决传热问题时应用时间依赖热源.
瞬态导热传热的偏微分方程是:
更多信息可以在这里找到:一类具有温度特性的传热问题的求解
在我的情况下,所有参数都是常量,除了源项f需要随时间变化。
我遵循这里的示例代码:薄板中的非线性传热,它给出了一种解决瞬态问题的方法,并且能够在每个时间点绘制热量数据。
把它应用到我的例子中的问题是,在这个例子中,源是一个恒值,贯穿整个区域和整个时间,并且与辐射和对流有关(在我的例子中,它们应该都是零),但是我需要给一个依赖于时间的源(由时变电流焦耳加热)。源可以有以下格式之一:
源被限制在一个特定的区域,例如。0< x<1mm,0< y<1 mm。
我也看到过一个类似的问题,但没有答案:如何利用PDE工具箱中的变系数求解抛物型方程(Matlab)
有办法用PDE工具箱实现这一点吗?从头开始写代码会很复杂.
发布于 2017-09-04 02:50:27
您可以很容易地使用FEATool有限元Matlab工具箱定义和解决与时间相关的非线性PDE系数的问题,如下面的m脚本代码片段所示。请注意,热源(接收器)项f被缩放为f*(t>2500)
,这意味着它只有在t=2500之后才是活动的(因为开关表达式的计算结果要么为false,要么等于1(如果为真)。
% 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。
对于使用数值源项的第二点,在本例中可以创建和调用自己的外部函数,该函数对数据进行列表和内插,在这种情况下,它将类似于
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脚本Matlab代码定义的,以便在StackOverflow上共享,但是如果需要的话,您可以很容易地使用Matlab,甚至可以像m脚本代码一样导出GUI模型。
https://stackoverflow.com/questions/42545480
复制相似问题