根据散度定理
我会计算表面通量
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)
我得到4.958e+04 J/s received.
答案随着 x 分辨率而提高。
请注意,因为这使用了速度矢量,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)
同样,我会计算输入热通量(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
并且_orientedAreaProjections
经常出现,以至于我们应该将它们作为公共 API 的一部分。
[为清楚起见进行了编辑,以解决评论中出现的问题]