具有非恒定容量的传导 - 扩散热2D模型

时间:2015-09-23 13:17:07

标签: python fipy

我花了很长时间研究稳态近似的二维热传导扩散模型。

PDE http://mathurl.com/p3rfqer.png

为简单起见,考虑层流剪切薄膜,即底部零速度和恒定速度增加。

shear http://mathurl.com/p6e3hau.png

热容量可能在整个温度范围内保持恒定或线性增加。

边界条件是恒定的入口温度(左)和恒定的输入通量(顶部),而所有外表面都被迫没有梯度。

请参阅代码here

当使用恒定热容量时,输入功率等于输出功率。

input = 50.00e3 W
ouput = 50.00e3 W

当使用非恒定的热容量时,它们显着不同。热容量越大,温度越大,输入和输出就越多。

input = 50.00e3 W
ouput = 33.78e3 W

引入可变速度系数(此处为v * c * rho),如fipy FAQ(仅明确显示扩散项的示例)中所述。网格分辨率不会改变输出功率。所以我认为这不是网格问题。我也试过添加一个瞬态项并解决一个非常高的时间步骤,这不会改变解决方案。

我担心在定义对流项时我做了一些非常错误的事情,但是找不到错误。另外我很困惑,如果fipy能够将theta(rank = 0单元格变量)和velocity(rank = 1单元格变量)混合,然后将它们转换为面变量,这是对流术语所必需的。

1 个答案:

答案 0 :(得分:1)

根据分歧定理

divergence theorem http://mathurl.com/oz3wd3c.png

我会用

计算表面通量
var express = require('express');
var router = express.Router();

//setting up the get route as above

module.exports = router;

我得到Cp = mymodel.fluid.capacity(solution, use_constant_cp) veloc = fipy.CellVariable(mesh=mesh, value=0., rank=1, name='velocity') veloc[0] = mymodel.shear * mesh.y R = ((Cp * solution * veloc).faceValue.dot(mesh._orientedAreaProjections) * mesh.facesRight * mymodel.fluid.rho).sum() L = ((Cp * solution * veloc).faceValue.dot(mesh._orientedAreaProjections) * mesh.facesLeft * mymodel.fluid.rho).sum() print "{:.3e} J/s received.".format((R+L).value) 答案会因x分辨率而提高。

请注意,因为它使用了速度矢量,4.958e+04 J/s received.是通量输入,而L是通量输出,因此我们添加它们以获得差异。 R向量指向所有外部面的域,因此当通量进入域时点积为正,而当退出时为点积。因为我们在整个外部边界上进行整合,所以你可以写一下

_orientedAreaProjections

同样,我会用J_dot_n = ((Cp * solution * veloc).faceValue.dot(mesh._orientedAreaProjections) * (mesh.facesLeft + mesh.facesRight) * mymodel.fluid.rho).sum() print "{:.3e} J/s received.".format(J_dot_n.value) 计算输入热通量。

我认为你计算的是

http://mathurl.com/qzn7wbk.png

如果你想计算散度定理的体积积分形式,你可以这样做,但它会

(mymodel.flux * mesh._faceAreas * mesh.facesTop).sum()

velocF = fipy.FaceVariable(mesh=mesh, value=0., rank=1, name='velocity') velocF[0] = mymodel.shear * mesh.faceCenters[1] ((Cp * solution).faceValue * velocF * mymodel.fluid.rho).divergence.cellVolumeAverage * mesh.cellVolumes.sum() _faceAreas经常出现,我们应该将它们作为公共API的一部分。

[编辑清楚地解决评论中提出的问题]