首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PDE工具箱中使用随时间变化的热源

在PDE工具箱中使用随时间变化的热源
EN

Stack Overflow用户
提问于 2017-03-02 01:57:41
回答 1查看 1.5K关注 0票数 0

我的目标是在解决传热问题时应用时间依赖热源.

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

更多信息可以在这里找到:一类具有温度特性的传热问题的求解

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

我遵循这里的示例代码:薄板中的非线性传热,它给出了一种解决瞬态问题的方法,并且能够在每个时间点绘制热量数据。

把它应用到我的例子中的问题是,在这个例子中,源是一个恒值,贯穿整个区域和整个时间,并且与辐射和对流有关(在我的例子中,它们应该都是零),但是我需要给一个依赖于时间的源(由时变电流焦耳加热)。源可以有以下格式之一:

  1. 解析值:如1W/m^2的正值,在一个时间窗口内,如0< t< 1 ns,否则为0。
  2. 数值:数据由1xN矢量提供,其中N是时间点的数目。

源被限制在一个特定的区域,例如。0< x<1mm,0< y<1 mm。

我也看到过一个类似的问题,但没有答案:如何利用PDE工具箱中的变系数求解抛物型方程(Matlab)

有办法用PDE工具箱实现这一点吗?从头开始写代码会很复杂.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-04 02:50:27

您可以很容易地使用FEATool有限元Matlab工具箱定义和解决与时间相关的非线性PDE系数的问题,如下面的m脚本代码片段所示。请注意,热源(接收器)项f被缩放为f*(t>2500),这意味着它只有在t=2500之后才是活动的(因为开关表达式的计算结果要么为false,要么等于1(如果为真)。

代码语言:javascript
运行
复制
% 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。

Matlab FEATool非线性时变传热解

对于使用数值源项的第二点,在本例中可以创建和调用自己的外部函数,该函数对数据进行列表和内插,在这种情况下,它将类似于

代码语言:javascript
运行
复制
fea.phys.ht.eqn.coef{6,end}{1} = 'my_fun( t )';

在表单的Matlab路径上有一个可访问的Matlab函数my_fun.m

代码语言:javascript
运行
复制
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模型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42545480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档