fvm::ddt(rho, T)与rho*fvm::ddt(T)的区别
-
假设我又一个这样的方程:
$$\frac{\partial( \rho T)}{\partial t} = -\nabla \cdot (\vec{U}\rho T)$$其中$\rho$表示流体(比如水)的密度,根据状态方程及p,T计算出来。请问在离散的时候下面这两种写法的结果有什么区别?
-
fvm::ddt(rho, T) == -fvm::div(phi,T);
-
rho*fvm::ddt(T) == -fvm::div(phi,T);
-
-
我最近在更新rhoFoam系列求解器,做了更深的工作,发现ddt这一项还有点意思,假设$t$为当前时间步,欧拉格式:
-
在
runTime++
之前,fvc:ddt(T) =
$\frac{T^t-T^{t-\Delta t}}{\Delta t}$; -
在
runTime++
之后,如果T
进行TEqn.solve()
更新,fvc:ddt(T) =
$\frac{T^{t+\Delta t}-T^{t}}{\Delta t}$ -
在
runTime++
之后,如果T
没有进行TEqn.solve()
之类的更新,fvc:ddt(T) = 0
,因为$T^{t+\Delta t}=T^t$, 同时T.oldTime()
也是$T^t$。,
主要是代码中的
vf
,vf.oldTime()
需要跟时间步对一下。所以
fvm::ddt(rho, T)
还需要考虑rhoEqn
是否更新:-
如果在
runTime++
之后,进行了rhoEqn.solve()
,那么fvm::ddt(rho, T) =
$\frac{\rho^{t+\Delta t} T^{t+\Delta t}-\rho^{t} T^{t}}{\Delta t}$ -
如果在
runTime++
之后,没有进行rhoEqn.solve()
,那么fvm::ddt(rho, T) =
$\frac{\rho^{t} T^{t+\Delta t}-\rho^{t-\Delta t} T^{t}}{\Delta t}$ -
前者看起来更耦合在一起
二者都不同于
rho*fvm::ddt(T)
,因为其等于$\rho^{t+\dt}\frac{ T^{t+\Delta t}-T^{t}}{\Delta t}$(进行了rhoEqn.solve()
),或$\rho^{t} \frac{T^{t+\Delta t}- T^{t}}{\Delta t}$(没进行rhoEqn.solve()
) -
-
@东岳 太感谢了!您这次来了一个非常透彻的分析,我的疑问已全部被解决。
-