2
enter image description here翻譯2- d的PDE和條件成準確Fipy碼
圖像包括控制方程,初始和邊界condition.It descripe板和流體之間的熱傳遞的問題。 我不知道如何使用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()
我發現它失敗了。我不知道哪裏出了問題,我會歡迎任何幫助;非常感謝! 順便說一句,我想要得到的最終圖像就像enter image description here ......很多thx!
謝謝!你是說通過定義邊界作爲源項可以避免掃描的方式嗎?我可以將邊界條件添加到'for'循環中進行更新,如:對於範圍(步驟)中的i:Ts.faceGrad.constrain([ - 1. * Bi *(Tf.value-Ts.value)],mesh.face sBottom);; eq1 = TransientTerm(var = Ts)== DiffusionTerm(Ds,var = Ts); eq2 = TransientTerm(var = Tf )== DiffusionTerm(Df,var = Tf)-Exponent ialConvectionTerm([[1.],[0]],var = Tf)+ ImplicitSourceTerm(c,var = Tf)--ImplicitSourceTerm(c,var = Ts); eq = eq1&eq2; eq.solve(dt = dt)viewer.plot() –
清掃可能不是必需的。我認爲您的方程/邊界條件中不存在任何非線性依賴關係。線性相關性應該由耦合求解來處理。我不認爲在循環中反覆調用'.constrain()'是個好主意。我寫的資料是我們現在對一般邊界條件的最佳建議。 – jeguyer
我已經瞭解了這個方法。但是這個問題的原型是**從一個長方體的底部到液體頂部的熱傳遞**,所以我編寫了'mask =(m.facesTop * m.faceNormals)。發散 dPR = m._cellDistances [m.facesTop.value] [0] Af = m._faceAreas [m.facesTop.value] [0] coeff_top = mask * Df [1,1] * Af /(1+ dpr)',並使用'eq1 = TransientTerm(var = Ts)== DiffusionTerm(coeff = Ds,var = Ts)\ + ImplicitSourceTerm(coeff = top_coeff * -Bi,var = Tf)\ - 第一個等式的ImplicitSourceTerm(coeff = bottom_coeff * -Bi,var = Ts)'但它不適用...哪裏錯了? –