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()) - 
 - 
							
							
							
							
@东岳 太感谢了!您这次来了一个非常透彻的分析,我的疑问已全部被解决。
 - 
	
李 李东岳 被引用 于这个主题