0

FiPy (Python ライブラリ) を使用して、以下に示す pdes システムの結合を解決したいと考えています。以下のコードは機能しますが、正しい解決策は得られません。

p, q, r, s = 2, 1, 2, 0
Du, Dv = 0.0004, 0.04
mesh = Grid1D(nx=500, Lx=5.)

U = CellVariable(name = 'U',mesh=mesh, hasOld=True, value=1.)
V = CellVariable(name = 'V',mesh=mesh, hasOld=True, value=2.)

eqU = TransientTerm(var=U) == DiffusionTerm(coeff=Du, var=U) - U + (U**p)/(V**q)
eqV = TransientTerm(var=V) == DiffusionTerm(coeff=Dv, var=V) - V + (U**r)/(V**s)

viewerV = Viewer(vars=V)
viewerU = Viewer(vars=U)

timeStepDuration = 0.1
steps = 1000

eqn = eqU & eqV

for t in range(500): 
    U.updateOld()
    V.updateOld()
    eqn.solve(dt=1.e-3)
viewerV.plot()
viewerU.plot()

私が見たいくつかのコードに沿って、CellVariables を ImplicitSourceTerm に置き換えようとしましたが、ImplicitSourceTerm を p 乗することはこの方法では実行できないため、エラーが発生します。ただし、それを行う方法に関するドキュメントが見つかりません。

eqU = TransientTerm(var=U) == DiffusionTerm(coeff=Du, var=U) - ImplicitSourceTerm(var=U) + ((ImplicitSourceTerm(var=U)**p)/(ImplicitSourceTerm(var=V)**q))
eqV = TransientTerm(var=V) == DiffusionTerm(coeff=Dv, var=V) - ImplicitSourceTerm(var=V) + ((ImplicitSourceTerm(var=U)**r)/(ImplicitSourceTerm(var=V)**s))

U.value**p を上げようとしてもエラーが発生します。

4

1 に答える 1