2

在此处输入图像描述

该图像包括控制方程、初始条件和边界条件。它描述了板与流体之间的传热问题。我不知道如何使用 fipy 对包含 var 的二维问题和边界条件进行编码。这是我的尝试。

from fipy import *
import numpy as np
#constant
Pe=2400
le_L=1/20000
L_l=20000
alphas=1
alphaf=1
a=1/Pe+le_L
b=1/Pe+L_l
Bi=0.4
c=Bi/Pe*L_l
#generate
mesh=Grid2D(dx=1,dy=1)
Ts=CellVariable(mesh=mesh,name='Ts',value=900)
Tf=CellVariable(mesh=mesh,name='Tf',value=300)
#condition
Ts.faceGrad.constrain([0.],mesh.facesLeft)
Ts.faceGrad.constrain([0.],mesh.facesRight)
Ts.faceGrad.constrain([-1.*Bi*(Tf.value-Ts.value)],mesh.facesBottom)
Ts.faceGrad.constrain([0.],mesh.facesTop)

Tf.constrain(300,mesh.facesLeft)
Tf.grad.constrain(0,mesh.facesRight)



a=CellVariable(mesh=mesh,rank=1)
a[:]=1

#eq
eq1=TransientTerm(var=Ts)==DiffusionTerm(coeff=[[a,b]],var=Ts)
eq2=TransientTerm(var=Tf)==DiffusionTerm(coeff=[[a,0]],var=Tf)-       
ExponentialConvectionTerm(a,var=Tf)+ImplicitSourceTerm(c,var=Tf)-         
ImplicitSourceTerm(c,var=Ts)

eq=eq1&eq2

#solve
dt=0.1
steps=100
viewer=Viewer(vars=(Ts,Tf),datamax=1000,datamin=0)
for i in range(steps):
eq.solve(dt=dt)
viewer.plot()

我发现它失败了。我不知道哪里出了问题。我欢迎任何帮助;非常感谢!顺便说一句,我希望得到的最终图像就像在这里输入图像描述 ......很多谢谢!

4

1 回答 1

1

[编辑以修复一般边界条件]

以下运行并似乎给出了您正在寻找的性质的结果:

from fipy import *
import numpy as np
#constant
Pe=2400.
le_L=1./20000.
L_l=20000.
alphasx=alphasy=1.
alphaf=1.
Bi=0.4
c=Bi/Pe*L_l

Dsxx = alphasx
Dsyy = alphasy * L_l**2
Ds = 1./Pe * le_L * (1./alphaf) * Variable([[alphasx, 0.], 
                                            [0., alphasy * L_l**2]])

Df = Variable([[1./Pe * le_L, 0],
               [0., 0.]])

#generate
mesh=Grid2D(Lx=1.,Ly=1.,nx=100, ny=100)
Ts=CellVariable(mesh=mesh,name='Ts',value=900.)
Tf=CellVariable(mesh=mesh,name='Tf',value=900.)
#condition
bottom_mask = (mesh.facesBottom * mesh.faceNormals).divergence
dPR = mesh._cellDistances[mesh.facesBottom.value][0]
Af = mesh._faceAreas[mesh.facesBottom.value][0]
bottom_coeff = bottom_mask * Ds[1,1] * Af / (1 + dPR)

Tf.constrain(300,mesh.facesLeft)



#eq
eq1=(TransientTerm(var=Ts)==DiffusionTerm(coeff=Ds,var=Ts)
     + ImplicitSourceTerm(coeff=bottom_coeff * -Bi, var=Tf)
     - ImplicitSourceTerm(coeff=bottom_coeff * -Bi, var=Ts))
eq2=(TransientTerm(var=Tf)==DiffusionTerm(coeff=Df,var=Tf)
    -ExponentialConvectionTerm(coeff=[[1.], [0]],var=Tf)
     +ImplicitSourceTerm(c,var=Tf)
     -ImplicitSourceTerm(c,var=Ts))

eq=eq1&eq2

#solve
dt=0.01
steps=100
viewer=Viewer(vars=(Ts,Tf),datamax=1000,datamin=0)
for i in range(steps):
    eq.solve(dt=dt)
    viewer.plot()
  • 我更改了一些系数以与您提供的数学一致。
  • 我将扩散系数固定为 FiPy 预期的各向异性扩散形状
  • 我将很多整数更改为浮点数,因为整数在 FiPy 中效果不佳
  • 我提供了一个域来解决(您的网格中只有一个单元格,使得空间变化不可能)
  • 我减少了时间步长
  • 我介绍了我们知道如何处理一般边界条件的最佳方法。这很丑,但我认为这是对的。

您可能还需要引入扫描来解释方程和边界条件之间的非线性相关性。

于 2017-09-26T15:47:41.050 回答