我试图解决两个耦合的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'。
有没有办法解决这个问题?或者,更一般地说,是否有一种简单的方法可以将非线性依赖性纳入其中一个变量?
答案 0 :(得分:0)
您报告的错误似乎与[Ca2 +] Eq的非线性相关性无关。
ConvectionTerm
需要矢量系数。将其作为单个元素元组或列表包装就可以了。
-(3,)
无效的Python。 (-3,)
没问题。
可能有更有效的方法来合并CaEq
的非线性,但我需要看到更多的用法才能确定。不过,这不是你得到的错误的原因。