1
我想在深度(h(t))隨時間變化的域上求解簡單的擴散方程(dT/dt = K d2T/dx2)。因此得到的等式是:FiPy - 域延伸/幀增長
dT/dt = K/h^2 d2T/dx2 + z/h dh/dt dT/dz
其中z現在是固定的0-> 1域。
新術語是幀平流,我試圖包括它,但我正在努力與空間依賴係數。
當我把它給了對流項之外:
mesh.cellCenters[0]*PowerLawConvectionTerm(...)
我得到這個錯誤:
TermMultiplyError: Must multiply terms by int or float
但是,如果我重新組織方程式,從而空間依賴性是對流項中:
PowerLawConvectionTerm(coeff=(mesh.cellCenters[0]**2,),...)
解決方程時出現不同的錯誤:
AssertionError: assert(len(id1) == len(id2) == len(vector))
什麼是包含這些術語的正確方法?我在某處做了一個愚蠢的錯誤嗎?
你是如何定義你的z?我正在使用'mesh.cellCenters [0]'(我現在在1D工作,但它將成爲垂直維度),我得到上面的AssertError。 我在這裏找到了一個解決方法[http://scicomp.stackexchange.com/questions/20784/diffusion-with-space-dependent-drift-in-fipy]你的組合'z * z_hat'變成'CellVariable(mesh = mesh,value = z)' - 有沒有更好的方法? h_t從字段本身計算'h_t = A * f(T)'在z = h,然後用於一個簡單的更新'h_new = h_old + dt * h_t'我猜你的分割源項的建議wouldn'在這裏工作? 謝謝! –