0

我正在尝试求解两个耦合的一维平流-分散-反应方程:

∂[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 和 alpha 是常数。

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' 的行上会出现一个不同的错误。

有没有办法解决这个问题?或者,更一般地说,有没有一种简单的方法来结合对其中一个变量的非线性依赖?

4

1 回答 1

0

您报告的错误似乎与 [Ca2+]Eq 的非线性相关性没有任何关系。

  1. AConvectionTerm需要一个向量系数。将其包装为单个元素元组或列表就可以了。

  2. -(3,)不是有效的 Python。(-3,)很好。

可能有更有效的方法来合并 的非线性CaEq,但我需要看到更多的用法才能确定。不过,这不是您遇到错误的原因。

于 2015-11-30T16:07:18.297 回答