021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题

server/2024/10/19 10:20:57/

在这里插入图片描述

固体热传导方程

固体热传导的方程为:

ρ C p ( ∂ T ∂ t + u t r a n s ⋅ ∇ T ) + ∇ ⋅ ( q + q r ) = − α T d S d t + Q \rho C_p \left( \frac{\partial T}{\partial t} + \mathbf{u}_{\mathtt{trans}} \cdot \nabla T \right) + \nabla \cdot (\mathbf{q}+\mathbf{q}_r) = -\alpha T \frac{d \mathbf{S}}{dt} + \mathbf{Q} ρCp(tT+utransT)+(q+qr)=αTdtdS+Q

这里涉及的参数包括:

参数含义
ρ \rho ρ密度, k g / m 3 \mathtt{kg}/\mathtt{m}^3 kg/m3
C p C_p Cp比热容, J / k g ⋅ K \mathtt{J}/\mathtt{kg} \cdot \mathtt{K} J/kgK
T T T温度, K \mathtt{K} K
u t r a n s \mathbf{u}_{\mathtt{trans}} utrans位移速度, m / s \mathtt{m}/\mathtt{s} m/s
q \mathbf{q} q热流密度, W / m 2 \mathtt{W}/\mathtt{m}^2 W/m2
q r \mathbf{q}_r qr辐射热流密度, W / m 2 \mathtt{W}/\mathtt{m}^2 W/m2
α \alpha α热膨胀系数, K − 1 \mathtt{K}^{-1} K1
S \mathbf{S} S第二Piola-Kirchhoff 应力张量, P a \mathtt{Pa} Pa
Q \mathbf{Q} Q额外的热源, W / m 3 \mathtt{W}/\mathtt{m}^3 W/m3

将内部热传导的热流简化为传热系数与温差的乘积:

q = − k ∇ T \mathbf{q} = -k \nabla T q=kT

这里的 k k k热传导系数,单位是 W / m ⋅ K \mathtt{W}/\mathtt{m} \cdot \mathtt{K} W/mK

忽略热辐射、运动和应力张量等项,上述方程可以简化为:

ρ C p ∂ T ∂ t − ∇ ⋅ ( k ∇ T ) = Q \rho C_p \frac{\partial T}{\partial t} - \nabla \cdot (k \nabla T) = Q ρCptT(kT)=Q

通常只需要考虑以下量值:

参数含义
t t t时间自变量
x \mathbf{x} x空间自变量
T T T温度,传热方程积分应变量
Q Q Q热源,抽象为(通常是边界)单元的热载荷
ρ \rho ρ密度,物性,基本不随温度变化
k k k热传导系数,物性,随温度变化
C p C_p Cp比热容,物性,随温度变化

定义热扩散系数为

α = k ρ C p \alpha = \frac{k}{\rho C_p} α=ρCpk

积分传热方程时,可以考虑把对应的参数都设为1,此时,方程变为:

∂ T ∂ t ∗ − ∇ ⋅ ∇ T = Q / k \frac{\partial T}{\partial t^*} - \nabla \cdot \nabla T = Q/k tTT=Q/k

这里的 t ∗ t^* t是无量纲时间,定义为:

t ∗ = α t t^* = \alpha t t=αt

有限元求解过程

对中间有一个空洞的矩形区域,求解其热传导方程。

通过CSG建模,生成一个矩形区域,然后在中间挖去一个小矩形区域。先建一个函数:

matlab">function gg = blockWithCavityrect1 = [3 4 -0.5 0.5 0.5 -0.5 0.8 0.8 -0.8 -0.8];
rect2 = [3 4 -0.1 0.1 0.1 -0.1 0.4 0.4 -0.4 -0.4];
gd = [rect1', rect2'];
sf = 'R1 - R2';
ns = char('R1', 'R2')';gg = decsg(gd, sf, ns);

然后在计算程序中调用这个函数产生几何体。

matlab">%% model and geometry
g = blockWithCavity;
model = femodel(AnalysisType="thermalTransient",...Geometry=g);h = figure(1);
pdegplot(model,EdgeLabels="on");
xlim([-0.6,0.6])
ylim([-1,1])

在这里插入图片描述

按照前面说所说的,把参数都设为1,这样得到解,只会有时间尺度上的线性差异。

matlab">model.MaterialProperties = ...materialProperties(ThermalConductivity=1, ...MassDensity=1, ...SpecificHeat=1);

边界同样和初始条件(因为是时变问题)在程序中设定:

matlab">%% boundary conditions and initial conditionsmodel.EdgeBC(6) = edgeBC(Temperature=100);
model.EdgeLoad(1) = edgeLoad(Heat=-10);model.FaceIC = faceIC(Temperature=-10);

采取默认的网格:

matlab">%%
model = generateMesh(model);figure(2);
pdemesh(model);
title("Mesh with Quadratic Triangular Elements")
xlim([-0.6,0.6])
ylim([-1,1])

在这里插入图片描述

最后,调用fesolve函数求解:

matlab">%%tlist = 0:.1:5.0;
results = solve(model,tlist)

results语句后面没有分号,直接显示得到的结果:

results = TransientThermalResults - 属性:Temperature: [1232×51 double]SolutionTimes: [0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1 … ] (1×51 double)XGradients: [1232×51 double]YGradients: [1232×51 double]ZGradients: []Mesh: [1×1 FEMesh]

最后就是结果的可视化:

matlab">[qx,qy] = evaluateHeatFlux(results);figure(3)
c = pdeplot(results.Mesh,XYData=results.Temperature(:,end), ...Contour="on",...FlowData=[qx(:,end),qy(:,end)], ...ColorMap="hot");
xlim([-0.6,0.6])
ylim([-1,1])
axis equal
title(sprintf("t = %4.2f", results.SolutionTimes(end)))

在这里插入图片描述

实际上,也很容易利用与前面优化过程可视化相同的方法,将结果可视化成动画。

matlab">[qx,qy] = evaluateHeatFlux(results);fn = "cavity.gif";
if exist(fn, 'file')delete(fn);
endfigure(3)for i = 1:size(results.Temperature, 2)c = pdeplot(results.Mesh,XYData=results.Temperature(:,i), ...Contour="on",...FlowData=[qx(:,i),qy(:,i)], ...ColorMap="hot");xlim([-0.6,0.6])ylim([-1,1])axis equaltitle(sprintf("t = %4.2f", results.SolutionTimes(i)))exportgraphics(gca, fn, Resolution=100, Append=true);    
end

在这里插入图片描述

总结

利用统一框架,求解动态热传导方程的过程与求解静力学方程类似,同样是建立模型、设定参数、求解、可视化结果。

不是特别一样的在于,热传导方程的相似参数就只有一个,通过相似性分析,可以简化设定参数的过程,最后结果反应出来的只是时间尺度上的差异。通常而言, α \alpha α 是一个很小的量,因此传热的过程相对来说是比较慢的,通过无量纲化,计算步长比实际时间要小很多。


http://www.ppmy.cn/server/133019.html

相关文章

三子棋(C 语言)

目录 一、游戏设计的整体思路二、各个步骤的代码实现1. 菜单及循环选择的实现2. 棋盘的初始化和显示3. 轮流下棋及结果判断实现4. 结果判断实现 三、所有代码四、总结 一、游戏设计的整体思路 (1)提供一个菜单让玩家选择人机对战、玩家对战或者退出游戏…

探索 C# 的进阶特性

随着 C# 语言的不断演进,越来越多的特性被引入,提升了代码的可读性和性能。这些进阶特性为开发者提供了更多简洁而强大的工具,用来编写高效、优雅的代码。本文将介绍 C# 中的一些重要进阶特性,包括属性模式匹配、异常过滤器、记录…

学习索引时想到的问题

问题 在查询时,根据两个单独进行索引的字段进行查询,他的查询过程是什么样的? 答:数据库会先评估怎样使用索引是最快的(两个单独的索引和一个包含两个字段的复合索引会使用复合索引而不是用两个单独的索引,也有可能会…

用Python构建动态折线图:实时展示爬取数据的指南

背景/引言 随着大数据和人工智能的不断发展,实时数据分析变得越来越关键,尤其是在金融市场中。股市数据的实时可视化可以帮助投资者快速做出决策,避免错失良机。Python 凭借其强大的数据处理能力和丰富的可视化库,成为分析和展示…

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况,大专生,21年通过校招进入武汉某软件公司,干了差不多3个星期的功能测试,那年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

Flink CDC同步mysql数据到doris

前置参考 flink快速安装:Flink入门-CSDN博客 doris快速安装:Apache Doris快速安装-CSDN博客 Flink CDC简介 Flink CDC 是一个基于流的数据集成工具,旨在为用户提供一套功能更加全面的编程接口(API)。 该工具使得用户能…

C语言_指针_进阶

引言:在前面的c语言_指针初阶上,我们了解了简单的指针类型以及使用,下面我们将进入更深层次的指针学习,对指针的理解会有一个极大的提升。从此以后,指针将不再是难点,而是学习底层语言的一把利器。 本章重点…

《linux运维》之如何使用putty软件完成宿主机到虚拟机传递文件

背景 当虚拟机不具备外网环境时,无法使用下载及使用Xshell自带的xftp工具时,可使用Putty软件完成宿主机至虚拟机的文件传输 使用过程 1) 在Putty文件夹目录下输入cmd 2)进入命令行模式,使用命令 pscp 3) 将所传输的…