結合された 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 つに非線形依存関係を組み込む簡単な方法はありますか?