FiPy来源术语不依赖于浓度

时间:2015-11-29 00:05:03

标签: python fipy

我试图解决两个耦合的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和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的行上出现了不同的错误:一元的坏操作数 - :'tuple'。

有没有办法解决这个问题?或者,更一般地说,是否有一种简单的方法可以将非线性依赖性纳入其中一个变量?

1 个答案:

答案 0 :(得分:0)

您报告的错误似乎与[Ca2 +] Eq的非线性相关性无关。

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

  2. -(3,)无效的Python。 (-3,)没问题。

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