亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 FiPy 中使用 ConvectionTerm() 或 DiffusionTerm()

在 FiPy 中使用 ConvectionTerm() 或 DiffusionTerm()

慕森王 2023-02-12 19:12:57
我目前正在學習如何使用 FiPy,并最終想用它來解決一些生物學問題。我一直在嘗試實施以下描述真菌菌絲生長的 PDE 系統:PDE系統我可以毫無問題地實現這個系統,只要我忽略了第四個方程 dsi/dt 中si 隨時間的變化取決于p 在空間 abs(dp/dx) 上的絕對變化。這是我沒有 abs() 的代碼:現在,我試著簡單地寫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))))這(預期)給出了一個錯誤:“abs()的錯誤操作數類型:'PowerLawConvectionTerm'”我試圖通過添加另一個 CellVariable dpdx 來解決這個問題: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)然后給出錯誤“ValueError:具有多個元素的數組的真值不明確。使用 a.any() 或 a.all()”,這可能是由于 eqdpdx 不是導函數這一事實造成的?我的問題是:是否可以使用 ConvectionTerm 執行數學運算?我能以某種方式表達 p 的絕對變化嗎?而且,我如何表達像 eqdpdx (或任何動態參數)這樣隨空間變化的非導數函數?我查看了 FiPy 手冊但找不到解決方案 - 如果我的問題微不足道或已在其他地方得到解答,我深表歉意。
查看完整描述

1 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

了解 FiPyTerms是什么很重要。它們是可離散化為線性代數的 PDE 部分的人類可讀表達式。如果您將一些潛在的非線性函數應用于該線性代數,那么它就不再是線性代數了。不支持這種用途,我不確定它是怎么回事。

幸運的是,您不需要它。dp/dx 不是ConvectionTerm,它是漸變。我會把這個詞寫成

- ImplicitSourceTerm(coeff=c4*Da*m*p.grad.mag, var=si)

作為旁注,一維方程是魔鬼的工作。他們每次都會讓你誤入歧途。您可以像我們在手冊中那樣使用 nabla 表示法,也可以使用 Einstein 表示法,但請始終牢記您的表達式是標量還是矢量(或張量或...)。


查看完整回答
反對 回復 2023-02-12
  • 1 回答
  • 0 關注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號