1
from fipy import *


nx = 50
dx = 1.
mesh = Grid1D(nx=nx, dx=dx)

phi = CellVariable(name="solution variable",
                   mesh=mesh,
                   value=0.)

D = 1.

valueLeft = 1
valueRight = 0

phi.constrain(valueRight, mesh.facesRight)
phi.constrain(valueLeft, mesh.facesLeft)

eqX = TransientTerm() == ExplicitDiffusionTerm(coeff=D)

timeStepDuration = 0.9 * dx**2 / (2 * D)
steps = 100

phiAnalytical = CellVariable(name="analytical value",
                             mesh=mesh)


viewer = Viewer(vars=(phi, phiAnalytical),
                    datamin=0., datamax=1.)
viewer.plot()

x = mesh.cellCenters[0]
t = timeStepDuration * steps

try:
    from scipy.special import erf
    phiAnalytical.setValue(1 - erf(x / (2 * numerix.sqrt(D * t))))
except ImportError:
    print "The SciPy library is not available to test the solution to \
the transient diffusion equation"

for step in range(steps):
     eqX.solve(var=phi,
               dt=timeStepDuration)

     viewer.plot()

1D 拡散問題である fipy の例のリストから例を実装しようとしています。しかし、結果をプロットとして表示することはできません。例のコードで提案されているように、ビューアーを正しく定義しました。まだ役に立ちません。解ベクトルは正常に実行されます。しかし、ビューア機能を使用してプロットすることはできません。誰でも助けることができますか?ありがとう!

4

1 に答える 1

0

あなたのコードは私のコンピューターで正常に動作します。おそらく、FiPy が使用するプロット ライブラリの問題です。

元の例が機能するかどうかを確認します (これを fipy フォルダーから実行するだけです)。

python examples/diffusion/mesh1D.py

そうでない場合は、プロジェクトの github ページhttps://github.com/usnistgov/fipyから FiPy をダウンロードして、もう一度サンプルを試してください。そうでない場合は、印刷ライブラリが正しくインストールされているかどうかを確認してください。

とにかく、使用しているプラ​​ットフォームと発生しているエラーを指定する必要があります。初めて、プロットライブラリにも問題がありました。

于 2015-04-10T09:43:52.083 に答える