我目前正在學(xué)習(xí)如何使用 FiPy,并最終想用它來解決一些生物學(xué)問題。我一直在嘗試實(shí)施以下描述真菌菌絲生長的 PDE 系統(tǒng):PDE系統(tǒng)我可以毫無問題地實(shí)現(xiàn)這個(gè)系統(tǒng),只要我忽略了第四個(gè)方程 dsi/dt 中si 隨時(shí)間的變化取決于p 在空間 abs(dp/dx) 上的絕對(duì)變化。這是我沒有 abs() 的代碼:現(xiàn)在,我試著簡單地寫eqsi = (TransientTerm(var=si)== DiffusionTerm(var=si,coeff=Di*m)- DiffusionTerm(var=p,coeff=Da*m*si) + ImplicitSourceTerm(var=si,coeff=c1*m*se) - ImplicitSourceTerm(var=si,coeff=c2*v*p) - abs(ConvectionTerm(var=p,coeff=[[c4*Da]]*(m*si))))這(預(yù)期)給出了一個(gè)錯(cuò)誤:“abs()的錯(cuò)誤操作數(shù)類型:'PowerLawConvectionTerm'”我試圖通過添加另一個(gè) CellVariable dpdx 來解決這個(gè)問題:dpdx= CellVariable(name="dpdx",mesh=mesh,hasOld=True,value=0.)eqdpdx= (dpdx == ConvectionTerm(var=p,coeff=[[1]]))eqsi = (TransientTerm(var=si)== DiffusionTerm(var=si,coeff=Di*m)- DiffusionTerm(var=p,coeff=Da*m*si) + ImplicitSourceTerm(var=si,coeff=c1*m*se) - ImplicitSourceTerm(var=si,coeff=c2*v*p) - abs(dpdx)*c4*Da*m*si)然后給出錯(cuò)誤“ValueError:具有多個(gè)元素的數(shù)組的真值不明確。使用 a.any() 或 a.all()”,這可能是由于 eqdpdx 不是導(dǎo)函數(shù)這一事實(shí)造成的?我的問題是:是否可以使用 ConvectionTerm 執(zhí)行數(shù)學(xué)運(yùn)算?我能以某種方式表達(dá) p 的絕對(duì)變化嗎?而且,我如何表達(dá)像 eqdpdx (或任何動(dòng)態(tài)參數(shù))這樣隨空間變化的非導(dǎo)數(shù)函數(shù)?我查看了 FiPy 手冊(cè)但找不到解決方案 - 如果我的問題微不足道或已在其他地方得到解答,我深表歉意。
1 回答

回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
了解 FiPyTerms
是什么很重要。它們是可離散化為線性代數(shù)的 PDE 部分的人類可讀表達(dá)式。如果您將一些潛在的非線性函數(shù)應(yīng)用于該線性代數(shù),那么它就不再是線性代數(shù)了。不支持這種用途,我不確定它是怎么回事。
幸運(yùn)的是,您不需要它。dp/dx 不是ConvectionTerm
,它是漸變。我會(huì)把這個(gè)詞寫成
- ImplicitSourceTerm(coeff=c4*Da*m*p.grad.mag, var=si)
作為旁注,一維方程是魔鬼的工作。他們每次都會(huì)讓你誤入歧途。您可以像我們?cè)谑謨?cè)中那樣使用 nabla 表示法,也可以使用 Einstein 表示法,但請(qǐng)始終牢記您的表達(dá)式是標(biāo)量還是矢量(或張量或...)。
添加回答
舉報(bào)
0/150
提交
取消