2

FiPy で次の式をコーディングする方法を考えていました。

問題の厄介な方程式

(誰かが興味を持っている場合は、このタイプのモデルから来ています). 右側の 3 番目の項を FiPy コードに変換するのに少し問題があります。この例では、A と B は両方とも変数です。

私はフォームの何かを試しました:

(ImplicitSourceTerm(coeff=chi_A) * (B.getGrad()) / \
 (numerix.sqrt(1 + lambda_ * (B.getGrad())^2))).getGrad()

しかし、変数ではないものを .getGrad() できないと思います。どんな助けでも大歓迎です。どうもありがとう!

4

1 に答える 1

2

問題の用語の表現は、明示的な表現にすぎません。用語を暗黙的に表す方法は 2 つあります。

の単一方程式A

Aのみが ( の単一の方程式) について解かれていると仮定するとA、問題の項は として表すことができますConvectionTerm

ConvectionTerm(coeff=chi_A * B.getGrad() / \
               numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=A)

このFAQを参照してください。

Aとの複数の方程式B

Aが (複数の方程式) と一緒に解かれている場合、問題の項が解かれている変数 (項の従属変数) としてのB拡散項になるように、方程式を結合することができます。B

DiffusionTerm(coeff=chi_A * A / \
              numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=B)

との方程式を結合する必要がありますAB

coupled_eqn = eqn_A & eqn_B

この例を参照してください。

この選択 (結合) は、問題の項Bの時間ステップの制限よりも明示的な時間ステップの制限の方が厳しいため、より適切Aです。

ノート

質問の構文(B.getGrad())^2が正しくありませんB.grad.mag**2

于 2016-09-06T09:37:50.857 に答える