我正在尝试求解两个耦合的一维平流-分散-反应方程:
∂[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' 的行上会出现一个不同的错误。
有没有办法解决这个问题?或者,更一般地说,有没有一种简单的方法来结合对其中一个变量的非线性依赖?