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