0

結合された 2 つの 1D 移流分散反応方程式を解こうとしています。

∂[CO2]/∂t = -v∂[CO2] + D∂^2[CO2]/dx^2 - k([CO2]air - [CO2]w) - alpha([Ca2+]eq - [Ca2+]), 

∂[Ca2+]/∂t = -v∂[Ca2+] + D∂^2[Ca2+]/dx^2 + alpha([Ca2+]eq - [Ca2+]),

ここで、v、k、およびアルファは定数です。

Ca2+ の平衡濃度 ([Ca2+]Eq) は [CO2] に非線形に依存します。これを数式に組み込むために、CellVariable CaEq を作成しました。式は次のとおりです。

CO2Eqn = TransientTerm(var=CO2) == ConvectionTerm(coeff=-v, var=CO2) + \
    DiffusionTerm(coeff=D_L, var=CO2) - \
    k*ConcCO2Air + ImplicitSourceTerm(coeff=k, var=CO2) - \
    alpha*CaEq + \
    ImplicitSourceTerm(coeff=alpha, var=Ca)

CaEqn = TransientTerm(var=Ca) == ConvectionTerm(coeff=-v, var=Ca) +\
    DiffusionTerm(coeff=D_L, var=CO2) + \
    alpha*CaEq - \
    ImplicitSourceTerm(coeff=alpha, var=Ca)

eqn = CO2Eqn & CaEqn

そして、次の方法で CaEq を計算しています。

CaEq.setValue(concCaEqFromPCO2(numerix.array(pConc(CO2)), T_C)).

関数 concCaEqFromPCO2 は、ルート検索によって [CO2] と温度から [Ca2+]Eq を見つけます。

ソルバーを実行すると、次のエラーが表示されます。係数はベクトル値でなければなりません。これは、v が整数に設定されている場合に発生します。それをタプルに設定すると、alpha*CaEq: bad operand for unary -: 'tuple' の行で別のエラーが発生します。

これを解決する方法はありますか?または、より一般的には、変数の 1 つに非線形依存関係を組み込む簡単な方法はありますか?

4

1 に答える 1

0

あなたが報告しているエラーは、[Ca2+]Eq の非線形依存性とは何の関係もないようです。

  1. AConvectionTermにはベクトル係数が必要です。これを単一要素のタプルまたはリストとしてラップしても問題ありません。

  2. -(3,)は有効な Python ではありません。(-3,)結構です。

の非線形性を組み込むためのより効果的な方法があるかもしれませんがCaEq、確実に知るには、より多くの使用法を見る必要があります。ただし、それはエラーの原因ではありません。

于 2015-11-30T16:07:18.297 に答える