FVM in CFD 学习笔记_第13章_时域离散:瞬态项

学习自F. Moukalled, L. Mangani, M. Darwish所著The Finite Volume Method in Computational Fluid Dynamics - An Advanced Introduction with OpenFOAM and Matlab
Chapter 13 Temporal Discretization: The Transient Term

前面章节的讨论中均假设是稳态条件,所以无需对瞬态项进行离散。如果考虑瞬态现象的话,则相当于给问题增加了一个新的维度。然而,由于瞬态项的性质是抛物型的,故而不需要再额外定义时间域上的场,即,不像在空间域上需要用 ϕ i , i = 1 , 2 , . . . , N \phi_i,i=1,2,...,N ϕi,i=1,2,...,N那样子来离散节点值。一般来说,瞬态项的离散只需要额外存储一到两个时间层上的变量场即可,由所选择格式的数值精度而定。与稳态问题的另一个不同点是,瞬态系统是用时间步长推进方式来模拟的,即,以 t = t 0 t=t_0 t=t0时刻的初始条件开始,求解算法向前推进并找到 t 1 = t 0 + Δ t 1 t_1=t_0+\Delta t_1 t1=t0+Δt1时刻的解,这个找到的解再作为初始条件去找寻 t 2 = t 1 + Δ t 2 t_2=t_1+\Delta t_2 t2=t1+Δt2时刻的解,该过程不断重复直到达到所需的时刻为止。本章的重点是瞬态项离散的技术,将展示两种发展瞬态格式的方法。其一是使用Taylor展开来把瞬态项展开成节点值的形式,这在有限差分方法中非常奏效;其二是有限体积方法中常用的伪时间单元方法,和在对流项中的伪节点非常类似。将展示一些瞬态格式,并讨论它们的特性。

1 引言

对于瞬态模拟而言,控制方程的离散是在空间域和时间域上进行的。空间域上的空间离散和稳态问题一样,时间离散则要设置一个时间坐标轴,沿着该坐标轴来计算瞬态项的导数(有限差分方法)或积分(有限体积方法)值。

一般而言,某个变量 ϕ \phi ϕ的瞬态特性的表达式,或其时间演化,是由下述形式的方程控制的
∂ ( ρ ϕ ) ∂ t + L ( ϕ ) = 0 \frac{\partial (\rho \phi)}{\partial t}+L(\phi)=0 t(ρϕ)+L(ϕ)=0
其中 L ( ϕ ) L(\phi) L(ϕ)为空间算子,其包含了所有的非瞬态项(扩散项、对流项、源项,等), ∂ ( ρ ϕ ) / ∂ t {\partial (\rho \phi)}/{\partial t} (ρϕ)/t为瞬态算子,两者如下图所示。

在这里插入图片描述

在这里插入图片描述

在单元 C C C上对上式做积分,得
∫ V C ∂ ( ρ ϕ ) ∂ t d V + ∫ V C L ( ϕ ) d V = 0 \int_{V_C}\frac{\partial (\rho \phi)}{\partial t}dV+\int_{V_C}L(\phi)dV=0 VCt(ρϕ)dV+VCL(ϕ)dV=0
空间离散后,变为
∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0
其中 V C V_C VC为离散单元的体积, L ( ϕ C t ) L(\phi_C^t) L(ϕCt)为空间算子在某参考时刻 t t t的离散形式,可写成如下代数方程
L ( ϕ C t ) = a C ϕ C t + ∑ F ∼ N B ( C ) a F ϕ F t − b C L(\phi_C^t)=a_C\phi_C^t+\sum_{F\sim NB(C)}a_F\phi_F^t-b_C L(ϕCt)=aCϕCt+FNB(C)aFϕFtbC
在上上式中,当 t → ∞ t\rightarrow\infin t时其变为稳态离散方程。通过时间推进也能达到稳态,即, ϕ C t + Δ t = ϕ C t \phi_C^{t+\Delta t}=\phi_C^t ϕCt+Δt=ϕCt。这保证了瞬态问题在到达稳态时所获得的解,和直接由稳态问题求得的解,是一样的。

在瞬态项的离散中,最经典的法子是用有限差分法的思想,把 ∂ ( ρ ϕ ) / ∂ t {\partial (\rho \phi)}/{\partial t} (ρϕ)/t做Taylor级数展开,得到用离散点的值所表示的导数项形式。在本章中,将展示另一种与有限体积方法更为契合的方法,对 ∂ ( ρ ϕ ) / ∂ t {\partial (\rho \phi)}/{\partial t} (ρϕ)/t在时间单元上做积分,并转化为面通量的形式,这和对流格式的处理方法很像,只是现在离散是沿着时间轴进行的。

2 有限差分方法

在这里插入图片描述

如图,在瞬态空间中的网格是结构化的,所以对瞬态项使用有限差分方法是非常稀松平常的操作。在该方法中,空间算子 L ( ϕ ) L(\phi) L(ϕ)是在时刻 t t t离散的,而瞬态偏导数则可用时刻 t t t的Taylor展开而推导出不同的瞬态格式,其中的一些格式呈现如下。

2.1 前向Euler格式(Forward Euler Scheme)

为了估算瞬态项,所推导量的Taylor展开需要指定时间方向。这里,展开是针对时间向前进行的。对某函数 T T T,其在 t + Δ t t+\Delta t t+Δt时刻的值,可用其在时刻 t t t的值和导数值做Taylor级数展开,如下
T ( t + Δ t ) = T ( t ) + ∂ T ( t ) ∂ t Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 2 ! + . . . T(t+\Delta t)=T(t)+\frac{\partial T(t)}{\partial t}\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t^2}{2!}+... T(t+Δt)=T(t)+tT(t)Δt+t22T(t)2!Δt2+...
截去二阶以上项,得到
∂ T ( t ) ∂ t = T ( t + Δ t ) − T ( t ) Δ t + O ( Δ t ) \frac{\partial T(t)}{\partial t}=\frac{T(t+\Delta t)-T(t)}{\Delta t}+O(\Delta t) tT(t)=ΔtT(t+Δt)T(t)+O(Δt)
只有一阶精度,把上式中的 T T T替换成 ( ρ ϕ ) (\rho\phi) (ρϕ),并代入到 ∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0,离散方程变为
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^t}{\Delta t}V_C+L(\phi_C^t)=0 Δt(ρCϕC)t+Δt(ρCϕC)tVC+L(ϕCt)=0
在这里插入图片描述

该瞬态格式如上图所示,计算 t + Δ t t+\Delta t t+Δt时刻的 ( ρ C ϕ C ) (\rho_C \phi_C) (ρCϕC)是不需要求解方程组系统的。因为所有的空间项都是在旧时刻 t t t上衡量的,所以 t + Δ t t+\Delta t t+Δt时刻的 ϕ C \phi_C ϕC可直接由上个时间步的值显式算出。这样的格式属于显式瞬态格式。显式瞬态格式的主要特点是通过在时域推进便可获得解,而无需在每个时间层求解方程组系统。这样一来,求解效率非常高,且对计算网格的并行处理十分方便。然而鲜有商业软件采用该方法,因为其重大缺陷就是时间步长 Δ t \Delta t Δt极为受限,这将在下一小节详细展开。

把空间算子的离散代数方程代入到上式,可得完整的代数方程为
a C t + Δ t ϕ C t + Δ t + a C t ϕ C t = b C − ( a C ϕ C t + ∑ F ∼ N B ( C ) a F ϕ F t ) a_C^{t+\Delta t} \phi_C^{t+\Delta t} + a_C^t \phi_C^t = b_C-\left(a_C\phi_C^t+\sum_{F\sim NB(C)}a_F\phi_F^t\right) aCt+ΔtϕCt+Δt+aCtϕCt=bCaCϕCt+FNB(C)aFϕFt
其中
a C t + Δ t = ρ C t + Δ t V C Δ t a C t = − ρ C t V C Δ t \begin{aligned} a_C^{t+\Delta t} &= \frac{\rho_C ^{t+\Delta t}V_C}{\Delta t} \\ a_C^t &= -\frac{\rho_C^tV_C}{\Delta t} \end{aligned} aCt+ΔtaCt=ΔtρCt+ΔtVC=ΔtρCtVC
在上述方程中, a C t + Δ t a_C^{t+\Delta t} aCt+Δt a C t a_C^t aCt为对角系数,源自于瞬态项的离散, ϕ C t + Δ t \phi_C^{t+\Delta t} ϕCt+Δt ϕ C t \phi_C^t ϕCt为时间层 t + Δ t t+\Delta t t+Δt t t t上的值,而 a C a_C aC a F a_F aF b C b_C bC则是空间离散后的系数。

为了简化标记,在本章中,前一个时间步的变量值用上标 ∘ ^\circ 标记,前两个时间步的变量值用上标 ∘ ∘ ^{\circ\circ} 标记,若是没有上标,则表示当前时间步的变量值,除了在非定常项中乘到 ϕ C \phi_C ϕC上的系数是用上标 ∙ ^\bullet 来标记的。基于这些标记,上式写作
a C ∙ ϕ C + a C ∘ ϕ C ∘ = b C − ( a C ϕ C ∘ + ∑ F ∼ N B ( C ) a F ϕ F ∘ ) a_C^{\bullet} \phi_C + a_C^\circ \phi_C^\circ = b_C-\left(a_C\phi_C^\circ+\sum_{F\sim NB(C)}a_F\phi_F^\circ\right) aCϕC+aCϕC=bCaCϕC+FNB(C)aFϕF
其中
a C ∙ = ρ C V C Δ t a C ∘ = − ρ C ∘ V C Δ t \begin{aligned} a_C^{\bullet} &= \frac{\rho_C V_C}{\Delta t} \\ a_C^\circ &= -\frac{\rho_C^\circ V_C}{\Delta t} \end{aligned} aCaC=ΔtρCVC=ΔtρCVC
改写为如下形式
ϕ C = b C − [ ( a C + a C ∘ ) ϕ C ∘ + ∑ F ∼ N B ( C ) a F ϕ F ∘ ] a C ∙ \phi_C = \frac{b_C-\left[(a_C+a_C^\circ)\phi_C^\circ+\displaystyle\sum_{F\sim NB(C)}a_F\phi_F^\circ\right]}{a_C^{\bullet}} ϕC=aCbC(aC+aC)ϕC+FNB(C)aFϕF
显然,当前时间步的 ϕ \phi ϕ值是由显式关系算出来的,不需要求解方程组系统。

2.2 前向Euler格式的稳定性

数值格式的收敛性和稳定性最初是由Courant、Friedrichs、Lewy所探究的,他们表明,为了让差分方程的解收敛到原偏微分方程的解,数值格式中必须用到影响解的初始数据所包含的所有信息。该要求随后就变成了著名的CFL条件。

实际上,CFL条件可以被简单解释为,把系数所要满足的基本规则之一,即,反符号准则,扩展成把瞬态系数也包含在内。这样,正如 ϕ F \phi_F ϕF ϕ C \phi_C ϕC的“空间”邻居, ϕ C ∘ \phi_C^\circ ϕC也是 ϕ C \phi_C ϕC的“时间”邻居,那么反符号准则对他俩应该平等适用。注意对角线系数现在是 a C ∙ a_C^\bullet aC,其“时间”邻居的系数是 ( a C + a C ∘ ) (a_C+a_C^\circ) (aC+aC),反符号准则变为
a C + a C ∘ ≤ 0 a_C+a_C^\circ\le0 aC+aC0

2.2.1 瞬态-对流情况的稳定性

在这里插入图片描述

如上图,对于一维纯对流问题,流动方向向右,使用迎风格式把变量插值到单元面上去,则单元 C C C的离散方程中的系数 a C a_C aC a C ∘ a_C^\circ aC
a C = m ˙ e ∘ = ρ C ∘ u C ∘ Δ y C a C ∘ = − ρ C ∘ V C Δ t = − ρ C ∘ Δ x C Δ y C Δ t \begin{aligned} a_C&=\dot m_e^\circ=\rho_C^\circ u_C^\circ \Delta y_C \\ a_C^\circ&=-\frac{\rho_C^\circ V_C}{\Delta t}=-\frac{\rho_C^\circ \Delta x_C \Delta y_C}{\Delta t} \end{aligned} aCaC=m˙e=ρCuCΔyC=ΔtρCVC=ΔtρCΔxCΔyC
因此,CFL条件为
a C + a C ∘ ≤ 0 ⇒ ρ C ∘ u C ∘ Δ y C − ρ C ∘ Δ x C Δ y C Δ t ≤ 0 a_C+a_C^\circ\le0 \Rightarrow \rho_C^\circ u_C^\circ \Delta y_C-\frac{\rho_C^\circ \Delta x_C \Delta y_C}{\Delta t}\le0 aC+aC0ρCuCΔyCΔtρCΔxCΔyC0

Δ t ≤ Δ x C u C ∘ \Delta t\le\frac{\Delta x_C}{u_C^\circ} ΔtuCΔxC
对于对流控制的流动,定义CFL数为
C F L c o n v = ∣ v C ∘ ∣ Δ t Δ x C CFL^{conv}=\frac{|\bold v_C^\circ|\Delta t}{\Delta x_C} CFLconv=ΔxCvCΔt
这意味着为了数值稳定性,CFL数应该满足
C F L c o n v ≤ 1 CFL^{conv}\le1 CFLconv1

2.2.2 瞬态-扩散情况的稳定性

在这里插入图片描述

对于纯扩散问题,CFL数的表达式是不同的。因此,分析如上图所示的一维纯扩散问题。

使用线性插值廓线,单元 C C C的离散方程中的系数 a C a_C aC a C ∘ a_C^\circ aC
a C = Γ e ϕ Δ y C δ x e + Γ w ϕ Δ y C δ x w a C ∘ = − ρ C ∘ V C Δ t = − ρ C ∘ Δ x C Δ y C Δ t \begin{aligned} a_C&=\frac{\Gamma_e^\phi \Delta y_C}{\delta x_e} + \frac{\Gamma_w^\phi \Delta y_C}{\delta x_w} \\ a_C^\circ&=-\frac{\rho_C^\circ V_C}{\Delta t}=-\frac{\rho_C^\circ \Delta x_C \Delta y_C}{\Delta t} \end{aligned} aCaC=δxeΓeϕΔyC+δxwΓwϕΔyC=ΔtρCVC=ΔtρCΔxCΔyC
因此,CFL条件需要
a C + a C ∘ ≤ 0 ⇒ Γ e ϕ Δ y C δ x e + Γ w ϕ Δ y C δ x w − ρ C ∘ Δ x C Δ y C Δ t ≤ 0 a_C+a_C^\circ\le0 \Rightarrow \frac{\Gamma_e^\phi \Delta y_C}{\delta x_e} + \frac{\Gamma_w^\phi \Delta y_C}{\delta x_w}-\frac{\rho_C^\circ \Delta x_C \Delta y_C}{\Delta t}\le0 aC+aC0δxeΓeϕΔyC+δxwΓwϕΔyCΔtρCΔxCΔyC0

Δ t ≤ ρ C ∘ Δ x C Γ e ϕ δ x e + Γ w ϕ δ x w \Delta t\le\frac{\rho_C^\circ\Delta x_C}{\dfrac{\Gamma_e^\phi}{\delta x_e} + \dfrac{\Gamma_w^\phi}{\delta x_w}} ΔtδxeΓeϕ+δxwΓwϕρCΔxC
若网格均匀,且扩散系数为常数,则上式变为
Δ t ≤ ρ C ∘ ( Δ x C ) 2 2 Γ C ϕ \Delta t\le\frac{\rho_C^\circ(\Delta x_C)^2}{2\Gamma_C^\phi} Δt2ΓCϕρC(ΔxC)2
对于扩散控制的问题,定义CFL数为
C F L d i f f = Γ C ϕ Δ t ρ C ∘ ( Δ x C ) 2 CFL^{diff}=\frac{\Gamma_C^\phi\Delta t}{\rho_C^\circ(\Delta x_C)^2} CFLdiff=ρC(ΔxC)2ΓCϕΔt
这意味着为了数值稳定性,CFL数应该满足
C F L d i f f ≤ 1 2 CFL^{diff}\le \frac{1}{2} CFLdiff21

2.2.3 瞬态-对流-扩散情况的稳定性

在这里插入图片描述

对于多维非定常对流扩散问题,基于上一章(第12章)的推导,系数 a C a_C aC a C ∘ a_C^\circ aC
a C = ∑ f ∼ n b ( C ) ( Γ f ϕ E f d C F + ∣ ∣ m ˙ f ∘ , 0 ∣ ∣ ) a C ∘ = − ρ C ∘ V C Δ t \begin{aligned} a_C&=\sum_{f\sim nb(C)}\left( \Gamma_f^\phi\frac{E_f}{d_{CF}} + ||\dot m_f^\circ,0|| \right) \\ a_C^\circ&=-\frac{\rho_C^\circ V_C}{\Delta t} \end{aligned} aCaC=fnb(C)(ΓfϕdCFEf+m˙f,0)=ΔtρCVC
CFL条件变为
a C + a C ∘ ≤ 0 ⇒ ∑ f ∼ n b ( C ) ( Γ f ϕ E f d C F + ∣ ∣ m ˙ f ∘ , 0 ∣ ∣ ) − ρ C ∘ V C Δ t ≤ 0 a_C+a_C^\circ\le0 \Rightarrow \sum_{f\sim nb(C)}\left( \Gamma_f^\phi\frac{E_f}{d_{CF}} + ||\dot m_f^\circ,0|| \right) -\frac{\rho_C^\circ V_C}{\Delta t} \le0 aC+aC0fnb(C)(ΓfϕdCFEf+m˙f,0)ΔtρCVC0
即如下对时间步长的限制关系
Δ t ≤ ρ C ∘ V C ∑ f ∼ n b ( C ) ( Γ f ϕ E f d C F + ∣ ∣ m ˙ f ∘ , 0 ∣ ∣ ) \Delta t \le \frac{\rho_C^\circ V_C}{\displaystyle\sum_{f\sim nb(C)}\left( \Gamma_f^\phi\frac{E_f}{d_{CF}} + ||\dot m_f^\circ,0|| \right) } Δtfnb(C)(ΓfϕdCFEf+m˙f,0)ρCVC
上式通常是显式瞬态格式的稳定性要求,实际上,之前对一维区域的纯对流和纯扩散的条件,可以视作是上式的特例。比如一维扩散问题,有均匀网格单元尺度 Δ x \Delta x Δx,常密度 ρ \rho ρ,均匀扩散系数 Γ ϕ \Gamma^\phi Γϕ,上式变为
Δ t ≤ ρ C ∘ V C ∑ f ∼ n b ( C ) ( Γ f ϕ E f d C F + ∣ ∣ m ˙ f ∘ , 0 ∣ ∣ ) = ρ C ∘ Δ x C Δ y C ( Γ e ϕ + Γ w ϕ ) Δ y C Δ x C = ρ C ∘ ( Δ x C ) 2 2 Γ C ϕ \Delta t \le \frac{\rho_C^\circ V_C} {\displaystyle\sum_{f\sim nb(C)}\left( \Gamma_f^\phi \frac{E_f}{d_{CF}} + ||\dot m_f^\circ,0|| \right) }= \frac{\rho_C^\circ \Delta x_C \Delta y_C} {(\Gamma_e^\phi+\Gamma_w^\phi) \dfrac{\Delta y_C}{\Delta x_C} }= \frac{\rho_C^\circ(\Delta x_C)^2}{2\Gamma_C^\phi} Δtfnb(C)(ΓfϕdCFEf+m˙f,0)ρCVC=(Γeϕ+Γwϕ)ΔxCΔyCρCΔxCΔyC=2ΓCϕρC(ΔxC)2
而对于纯对流的一维问题,使用迎风格式离散对流项,流体从左向右流动,则其变为了
Δ t ≤ ρ C ∘ V C ∑ f ∼ n b ( C ) ( Γ f ϕ E f d C F + ∣ ∣ m ˙ f ∘ , 0 ∣ ∣ ) = ρ C ∘ Δ x C Δ y C ρ C ∘ u C ∘ Δ y C = Δ x C u C ∘ \Delta t \le \frac{\rho_C^\circ V_C} {\displaystyle\sum_{f\sim nb(C)}\left( \Gamma_f^\phi \frac{E_f}{d_{CF}} + ||\dot m_f^\circ,0|| \right) }= \frac{\rho_C^\circ \Delta x_C \Delta y_C}{\rho_C^\circ u_C^\circ \Delta y_C }=\frac{\Delta x_C}{u_C^\circ} Δtfnb(C)(ΓfϕdCFEf+m˙f,0)ρCVC=ρCuCΔyCρCΔxCΔyC=uCΔxC
稳定性限制条件是严格的,且限制性很强,它迫使在求解瞬态问题时采用非常小的时间步长。这样做的后果是,尽管每个时间步的计算消耗很小(相比于每个时间步要求解方程组系统而言),然而CFL条件使得必须求解很多时间步才能推进到终了时刻。这样一来,每个时间步减少的计算量的优势就毫无意义了,因为反而需要更多的时间步来求解了。此外,CFL条件表明,如果通过减小网格尺度来提高空间精度的话,那么会更进一步地减小为保证稳定性所能使用的最大时间步长。

下面会看到,这样的限制条件对于隐式格式来说并不存在,因为其瞬态项的符号总是合适的。

2.3 后向Euler格式(Backward Euler Scheme)

为了推出后向Euler格式,把在时刻 t − Δ t t-\Delta t tΔt的函数 T T T值用在时刻 t t t的函数 T T T值做Taylor级数展开,有
T ( t − Δ t ) = T ( t ) − ∂ T ( t ) ∂ t Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 2 ! + . . . T(t-\Delta t)=T(t)-\frac{\partial T(t)}{\partial t}\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t^2}{2!}+... T(tΔt)=T(t)tT(t)Δt+t22T(t)2!Δt2+...
整理后,有
∂ T ( t ) ∂ t = T ( t ) − T ( t − Δ t ) Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 + . . . \frac{\partial T(t)}{\partial t}=\frac{T(t)-T(t-\Delta t)}{\Delta t}+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t}{2}+... tT(t)=ΔtT(t)T(tΔt)+t22T(t)2Δt+...
把上式中的 T T T替换成 ( ρ ϕ ) (\rho\phi) (ρϕ),并代入到 ∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0,离散方程变为
( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t}}{\Delta t}V_C+L(\phi_C^t)=0 Δt(ρCϕC)t(ρCϕC)tΔtVC+L(ϕCt)=0
接下来,引入空间离散项的代数方程,并根据之前设置的上标,瞬态标量方程的完整代数形式为
( a C ∙ + a C ) ϕ C + ∑ F ∼ N B ( C ) a F ϕ F = b C − a C ∘ ϕ C ∘ (a_C^{\bullet}+a_C) \phi_C +\sum_{F\sim NB(C)}a_F\phi_F =b_C-a_C^\circ\phi_C^\circ (aC+aC)ϕC+FNB(C)aFϕF=bCaCϕC
其中
a C ∙ = ρ C V C Δ t a C ∘ = − ρ C ∘ V C Δ t \begin{aligned} a_C^{\bullet} &= \frac{\rho_C V_C}{\Delta t} \\ a_C^\circ &= -\frac{\rho_C^\circ V_C}{\Delta t} \end{aligned} aCaC=ΔtρCVC=ΔtρCVC
其架构如下图所示,显然,空间算子是在和新时间系数相同的时间层上计算的,所以,求解新时刻的 ϕ \phi ϕ场是需要求解方程组系统的。这种需要求解方程组系统的解法便是隐式格式。
在这里插入图片描述

从上式中可以看出, a C a_C aC a C ∘ a_C^\circ aC的符号是相反的(满足反号准则,即对角系数和邻居系数符号是相反的),这样便可保证 ϕ C \phi_C ϕC是由其 当前时间步的空间邻近点的值 和 前一时间步 t − Δ t t-\Delta t tΔt的时间邻近点的值 所限定的。这也意味着该格式总是稳定的,而不管用的是何种时间步长,从而可以用很大的时间步长向前快速推进。纵然如此,其并非是理想格式,因为其精度较低,这种格式获得的解精确性差,除非用很小的时间步长才好,这让其使用起来颇为尴尬。若采用大时间步长来提高计算效率,则获得的解精度很差。若使用小时间步长来获得精确解,则计算效率会非常低下。

2.4 Crank-Nicolson格式

在Crank-Nicolson格式中,为了获得瞬态项更加精确的近似,采用了在 t − Δ t t-\Delta t tΔt时刻的函数 T T T值和在 t + Δ t t+\Delta t t+Δt时刻的函数 T T T值的展开形式,同样是用 t t t时刻的量来展开的,即
T ( t + Δ t ) = T ( t ) + ∂ T ( t ) ∂ t Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 2 ! + ∂ 3 T ( t ) ∂ t 3 Δ t 3 3 ! + . . . T ( t − Δ t ) = T ( t ) − ∂ T ( t ) ∂ t Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 2 ! − ∂ 3 T ( t ) ∂ t 3 Δ t 3 3 ! + . . . \begin{aligned} T(t+\Delta t)=T(t)+\frac{\partial T(t)}{\partial t}\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t^2}{2!}+\frac{\partial^3 T(t)}{\partial t^3}\frac{\Delta t^3}{3!}+... \\ T(t-\Delta t)=T(t)-\frac{\partial T(t)}{\partial t}\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t^2}{2!}-\frac{\partial^3 T(t)}{\partial t^3}\frac{\Delta t^3}{3!}+... \end{aligned} T(t+Δt)=T(t)+tT(t)Δt+t22T(t)2!Δt2+t33T(t)3!Δt3+...T(tΔt)=T(t)tT(t)Δt+t22T(t)2!Δt2t33T(t)3!Δt3+...
两式相减,得
∂ T ( t ) ∂ t = T ( t + Δ t ) − T ( t − Δ t ) 2 Δ t + O ( Δ t 2 ) \frac{\partial T(t)}{\partial t}=\frac{T(t+\Delta t)-T(t-\Delta t)}{2\Delta t}+O(\Delta t^2) tT(t)=2ΔtT(t+Δt)T(tΔt)+O(Δt2)
注意,偏导的精度的阶数为 O ( Δ t 2 ) O(\Delta t^2) O(Δt2),因为二阶偏导被完全消掉了。

把上式中的 T T T替换成 ( ρ ϕ ) (\rho\phi) (ρϕ),并代入到 ∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0,离散方程变为
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t − Δ t 2 Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^{t-\Delta t}}{2\Delta t}V_C+L(\phi_C^t)=0 2Δt(ρCϕC)t+Δt(ρCϕC)tΔtVC+L(ϕCt)=0
接下来,引入空间离散项的代数方程,并根据之前设置的上标,瞬态标量方程的完整代数形式为
a C ∙ ϕ C = b C − ( a C ϕ C ∘ + ∑ F ∼ N B ( C ) a F ϕ F ∘ ) − a C ∘ ∘ ϕ C ∘ ∘ a_C^{\bullet} \phi_C = b_C-\left(a_C\phi_C^\circ+\sum_{F\sim NB(C)}a_F\phi_F^\circ\right) - a_C^{\circ\circ} \phi_C^{\circ\circ} aCϕC=bCaCϕC+FNB(C)aFϕFaCϕC
其中
a C ∙ = ρ C V C 2 Δ t a C ∘ ∘ = − ρ C ∘ ∘ V C 2 Δ t \begin{aligned} a_C^{\bullet} &= \frac{\rho_C V_C}{2\Delta t} \\ a_C^{\circ\circ} &= -\frac{\rho_C^{\circ\circ} V_C}{2\Delta t} \end{aligned} aCaC=2ΔtρCVC=2ΔtρCVC
其架构如下图所示,显然,这个格式是显示算法,因为 ( ρ ϕ ) t + Δ t (\rho\phi)^{t+\Delta t} (ρϕ)t+Δt的获取只用到了旧时刻的值。然而现在需要存储两个旧时刻的值,但空间离散算子还是只需要其中一个旧时刻的值就好了。
在这里插入图片描述

对于CN格式的稳定性分析,可以把其最初的方程做些许修改来进行,使用如下近似:
ϕ ∘ ≈ ϕ + ϕ ∘ ∘ 2 \phi^\circ\approx\frac{\phi+\phi^{\circ\circ}}{2} ϕ2ϕ+ϕ
代数方程变为
a C ∙ ϕ C + 0.5 ( a C ϕ C + ∑ F ∼ N B ( C ) a F ϕ F ) = b C − 0.5 ( ( a C + 2 a C ∘ ∘ ) ϕ C ∘ ∘ + ∑ F ∼ N B ( C ) a F ϕ F ∘ ∘ ) a_C^{\bullet} \phi_C+0.5\left(a_C\phi_C+\sum_{F\sim NB(C)}a_F\phi_F\right) = b_C-0.5\left((a_C+2a_C^{\circ\circ})\phi_C^{\circ\circ}+\sum_{F\sim NB(C)}a_F\phi_F^{\circ\circ}\right) aCϕC+0.5aCϕC+FNB(C)aFϕF=bC0.5(aC+2aC)ϕC+FNB(C)aFϕF
如此一来,稳定性条件就变成了
a C + 2 a C ∘ ∘ ≤ 0 a_C+2a_C^{\circ\circ} \le 0 aC+2aC0
对于一维瞬态对流问题,有
Δ t ≤ 2 ρ C ∘ ∘ V C m ˙ e ∘ = 2 ρ C ∘ ∘ Δ x C Δ y C ρ C ∘ u C ∘ Δ y C ≈ 2 Δ x C ∣ v e ∘ ∣ \Delta t\le \frac{2\rho_C^{\circ\circ}V_C}{\dot m_e^\circ}=\frac{2\rho_C^{\circ\circ}\Delta x_C\Delta y_C}{\rho_C^\circ u_C^\circ \Delta y_C}\approx\frac{2\Delta x_C}{|\bold v_e^\circ|} Δtm˙e2ρCVC=ρCuCΔyC2ρCΔxCΔyCve2ΔxC
其中对流项是用迎风格式离散的。使用前面定义的对流CFL数,上式变为
C F L c o n v ≤ 2 CFL^{conv} \le 2 CFLconv2
这个CFL数的最大限制可要比正向Eluer格式的大了,非常惬意,然而精度的提升则是更有意义,因为其让精确解的获取无需通过诉诸于更小的时间步长来实现,尤其是其把二阶导数都从误差中消掉了。随后章节中将展开更为详细的精确性分析。

2.5 实现细节

CN格式也可以通过把前向和后向Euler格式相加而推出,如下
Forward Euler → ( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t Δ t V C + L ( ϕ C t ) = 0 Backward Euler → ( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t Δ t V C + L ( ϕ C t ) = 0 \begin{aligned} & \text{Forward~Euler} \rightarrow \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^t}{\Delta t}V_C+L(\phi_C^t)=0 \\ & \text{Backward~Euler} \rightarrow \frac{(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t}}{\Delta t}V_C+L(\phi_C^t)=0 \end{aligned} Forward EulerΔt(ρCϕC)t+Δt(ρCϕC)tVC+L(ϕCt)=0Backward EulerΔt(ρCϕC)t(ρCϕC)tΔtVC+L(ϕCt)=0
两者相加
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t Δ t V C + ( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t Δ t V C + 2 L ( ϕ C t ) = 0 → ( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t − Δ t 2 Δ t V C + L ( ϕ C t ) = 0 \begin{aligned} &\frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^t}{\Delta t}V_C+ \frac{(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t}}{\Delta t}V_C+2L(\phi_C^t)=0 \\ \rightarrow &\frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^{t-\Delta t}}{2\Delta t}V_C+L(\phi_C^t)=0 \end{aligned} Δt(ρCϕC)t+Δt(ρCϕC)tVC+Δt(ρCϕC)t(ρCϕC)tΔtVC+2L(ϕCt)=02Δt(ρCϕC)t+Δt(ρCϕC)tΔtVC+L(ϕCt)=0
即Crank-Nicolson格式

该方程指明了CN格式的简单实现方法,即,在隐式框架下的两步法来实现。第一步是后向Euler格式,用于隐式找到 ( ρ ϕ ) t (\rho\phi)^t (ρϕ)t
( ρ C ϕ C ) t + Δ t V C L ( ϕ C t ) = ( ρ C ϕ C ) t − Δ t (\rho_C \phi_C)^{t}+\frac{\Delta t}{V_C}L(\phi_C^t)=(\rho_C \phi_C)^{t-\Delta t} (ρCϕC)t+VCΔtL(ϕCt)=(ρCϕC)tΔt
然后在第2步中,显式算得 t + Δ t t+\Delta t t+Δt时刻的CN值
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t Δ t V C = − L ( ϕ C t ) = ( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t Δ t V C ⇒ ( ρ C ϕ C ) t + Δ t = 2 ( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t \begin{aligned} & \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^t}{\Delta t}V_C=-L(\phi_C^t)= \frac{(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t}}{\Delta t}V_C \\ \Rightarrow & (\rho_C \phi_C)^{t+\Delta t}=2(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t} \end{aligned} Δt(ρCϕC)t+Δt(ρCϕC)tVC=L(ϕCt)=Δt(ρCϕC)t(ρCϕC)tΔtVC(ρCϕC)t+Δt=2(ρCϕC)t(ρCϕC)tΔt
在该推导过程中,假设瞬态时间步长 Δ t \Delta t Δt分为了两个等长的局部时间步长 Δ t l o c a l \Delta t_{local} Δtlocal,且 Δ t l o c a l \Delta t_{local} Δtlocal为设置时间步长 Δ t \Delta t Δt的一半。

值得注意的是,尽管CN格式是二阶精度,但是它仍旧是显式格式,且受限于CFL条件,如前所示。

2.6 Adams-Moulton格式

二阶Adams-Moulton格式的发展需要把 T T T在时刻 t − Δ t t-\Delta t tΔt t − 2 Δ t t-2\Delta t t2Δt的值使用Taylor级数展开成 t t t时刻的形式,即
T ( t − 2 Δ t ) = T ( t ) − ∂ T ( t ) ∂ t 2 Δ t + ∂ 2 T ( t ) ∂ t 2 4 Δ t 2 2 ! + . . . T ( t − Δ t ) = T ( t ) − ∂ T ( t ) ∂ t Δ t + ∂ 2 T ( t ) ∂ t 2 Δ t 2 2 ! + . . . \begin{aligned} T(t-2\Delta t)&=T(t)-\frac{\partial T(t)}{\partial t}2\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{4\Delta t^2}{2!}+... \\ T(t-\Delta t)&=T(t)-\frac{\partial T(t)}{\partial t}\Delta t+\frac{\partial^2 T(t)}{\partial t^2}\frac{\Delta t^2}{2!}+... \end{aligned} T(t2Δt)T(tΔt)=T(t)tT(t)2Δt+t22T(t)2!4Δt2+...=T(t)tT(t)Δt+t22T(t)2!Δt2+...
从上面两个式子出发,想办法把二阶偏导项消掉,得
∂ T ( t ) ∂ t = 3 T ( t ) − 4 T ( t − Δ t ) + T ( t − 2 Δ t ) 2 Δ t \frac{\partial T(t)}{\partial t}=\frac{3T(t)-4T(t-\Delta t)+T(t-2\Delta t)}{2\Delta t} tT(t)=2Δt3T(t)4T(tΔt)+T(t2Δt)
把上式中的 T T T替换成 ( ρ ϕ ) (\rho\phi) (ρϕ),并代入到 ∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0,离散方程变为
3 ( ρ C ϕ C ) t − 4 ( ρ C ϕ C ) t − Δ t + ( ρ C ϕ C ) t − 2 Δ t 2 Δ t V C + L ( ϕ C t ) = 0 \frac{3(\rho_C \phi_C)^t-4(\rho_C \phi_C)^{t-\Delta t}+(\rho_C \phi_C)^{t-2\Delta t}}{2\Delta t}V_C+L(\phi_C^t)=0 2Δt3(ρCϕC)t4(ρCϕC)tΔt+(ρCϕC)t2ΔtVC+L(ϕCt)=0
接下来,引入空间离散项的代数方程,并根据之前设置的上标,瞬态标量方程的完整代数形式为
( a C ∙ + a C ) ϕ C + ∑ F ∼ N B ( C ) a F ϕ F = b C − a C ∘ ϕ C ∘ − a C ∘ ∘ ϕ C ∘ ∘ (a_C^{\bullet}+a_C) \phi_C +\sum_{F\sim NB(C)}a_F\phi_F = b_C-a_C^{\circ}\phi_C^\circ - a_C^{\circ\circ} \phi_C^{\circ\circ} (aC+aC)ϕC+FNB(C)aFϕF=bCaCϕCaCϕC
其中
a C ∙ = 3 ρ C V C 2 Δ t a C ∘ = − 2 ρ C ∘ V C Δ t a C ∘ ∘ = ρ C ∘ ∘ V C 2 Δ t \begin{aligned} a_C^{\bullet} &= \frac{3\rho_C V_C}{2\Delta t} \\ a_C^{\circ} &= -\frac{2\rho_C^{\circ} V_C}{\Delta t} \\ a_C^{\circ\circ} &= \frac{\rho_C^{\circ\circ} V_C}{2\Delta t} \end{aligned} aCaCaC=2Δt3ρCVC=Δt2ρCVC=2ΔtρCVC
显然, a C ∘ ∘ a_C^{\circ\circ} aC系数是正值,所以 ϕ C ∘ ∘ \phi_C^{\circ\circ} ϕC的增加会导致 ϕ C \phi_C ϕC的减小。由于 a C ∘ a_C^\circ aC系数是负的,所以若 a C ∘ a_C^\circ aC较大,则可略微削减该不利影响。如此看来,尽管该格式是稳定的,然而其是无界的,在某些情况下会出现非物理振荡。

3 有限体积方法

有限体积方法对瞬态项的离散 和 对流项的离散 非常相似,只是积分是在时域单元而非空间单元上进行的,如下图所示。

在这里插入图片描述

对式 ∂ ( ρ C ϕ C ) ∂ t V C + L ( ϕ C t ) = 0 \frac{\partial (\rho_C \phi_C)}{\partial t}V_C+L(\phi_C^t)=0 t(ρCϕC)VC+L(ϕCt)=0在时间区间 [ t − Δ t / 2 , t + Δ t / 2 ] [t-\Delta t/2, t+\Delta t/2] [tΔt/2,t+Δt/2]做积分,即
∫ t − Δ t / 2 t + Δ t / 2 ∂ ( ρ C ϕ C ) ∂ t V C d t + ∫ t − Δ t / 2 t + Δ t / 2 L ( ϕ C t ) d t = 0 \int_{t-\Delta t/2}^{t+\Delta t/2}\frac{\partial (\rho_C \phi_C)}{\partial t}V_Cdt+\int_{t-\Delta t/2}^{t+\Delta t/2}L(\phi_C^t)dt=0 tΔt/2t+Δt/2t(ρCϕC)VCdt+tΔt/2t+Δt/2L(ϕCt)dt=0
V C V_C VC作为常数处理,则第1项变为面通量差分形式,第2项用积分中值定理来做体积分,得
V C ( ρ C ϕ C ) t + Δ t / 2 − V C ( ρ C ϕ C ) t − Δ t / 2 + L ( ϕ C t ) Δ t = 0 V_C(\rho_C \phi_C)^{t+\Delta t/2}-V_C(\rho_C \phi_C)^{t-\Delta t/2}+L(\phi_C^t)\Delta t=0 VC(ρCϕC)t+Δt/2VC(ρCϕC)tΔt/2+L(ϕCt)Δt=0
该半离散瞬态方程可写成更加标准的形式,两边都除以 Δ t \Delta t Δt,得
( ρ C ϕ C ) t + Δ t / 2 − ( ρ C ϕ C ) t − Δ t / 2 Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t+\Delta t/2}-(\rho_C \phi_C)^{t-\Delta t/2}}{\Delta t}V_C+L(\phi_C^t)=0 Δt(ρCϕC)t+Δt/2(ρCϕC)tΔt/2VC+L(ϕCt)=0
为了得到完全离散方程,需要用插值廓线把在 t + Δ t / 2 t+\Delta t/2 t+Δt/2 t − Δ t / 2 t-\Delta t/2 tΔt/2处的面值用 t t t t − Δ t t-\Delta t tΔt等处的单元值来表示。该廓线的选择可从对流项离散中汲取灵感。选择不同的廓线,毫无疑问会影响到方法的精确性和稳定性。基于此,需要说一下,空间算子的积分是时域二阶精度的,但是空间算子本身的精度(空间精度)则是由其离散时所采用的格式所决定的。

不管是使用的哪种廓线,通量都可用新值和旧值线性化为
F l u x T = F l u x C ϕ C + F l u x C ∘ ϕ C ∘ + F l u x V FluxT=FluxC\phi_C+FluxC^\circ\phi_C^\circ+FluxV FluxT=FluxCϕC+FluxCϕC+FluxV
其中上标 ∘ ^\circ 仍旧代表旧值。完成该线性化处理后,代数方程的相关系数更替为下式,即可
a C ← a C + F l u x C b C ← b C − F l u x C ∘ ϕ C ∘ − F l u x V \begin{aligned} a_C & \leftarrow a_C+FluxC \\ b_C & \leftarrow b_C-FluxC^\circ\phi_C^\circ-FluxV \end{aligned} aCbCaC+FluxCbCFluxCϕCFluxV
接下来展示某些廓线形式下的离散过程。

3.1 一阶瞬态格式

一阶隐式和显示Euler格式,可分别通过采用迎风和背风瞬态插值廓线来构造,如下。

3.2 一阶隐式Euler格式

在这里插入图片描述

使用一阶迎风插值廓线,即得到瞬态一阶隐式Euler格式。如上图所示,在时间单元面处的 ρ ϕ \rho\phi ρϕ值,等于迎风单元形心值,即
( ρ C ϕ C ) t + Δ t / 2 = ( ρ C ϕ C ) t ( ρ C ϕ C ) t − Δ t / 2 = ( ρ C ϕ C ) t − Δ t (\rho_C \phi_C)^{t+\Delta t/2}=(\rho_C \phi_C)^{t}\quad\quad (\rho_C \phi_C)^{t-\Delta t/2}=(\rho_C \phi_C)^{t-\Delta t} (ρCϕC)t+Δt/2=(ρCϕC)t(ρCϕC)tΔt/2=(ρCϕC)tΔt
那么半离散方程为
( ρ C ϕ C ) t − ( ρ C ϕ C ) t − Δ t Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t}-(\rho_C \phi_C)^{t-\Delta t}}{\Delta t}V_C+L(\phi_C^t)=0 Δt(ρCϕC)t(ρCϕC)tΔtVC+L(ϕCt)=0
即一阶隐式Euler格式,线性化后的相关系数为
F l u x C = ρ C V C Δ t F l u x C ∘ = − ρ C ∘ V C Δ t F l u x V = 0 \begin{aligned} FluxC &= \frac{\rho_C V_C}{\Delta t} \\ FluxC^\circ &= -\frac{\rho_C^\circ V_C}{\Delta t} \\ FluxV &= 0 \end{aligned} FluxCFluxCFluxV=ΔtρCVC=ΔtρCVC=0

3.2.1 数值扩散

由于这是一阶格式,那么,基于前面对流格式中获得的知识,该格式会产生数值扩散。可通过在时刻 t t t的Taylor级数展开,将其恢复到最初控制方程的形式,来确定数值扩散的值,即
( ρ ϕ ) t − Δ t = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 + O ( Δ t 3 ) (\rho \phi)^{t-\Delta t}=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2}+O(\Delta t^3) (ρϕ)tΔt=(ρϕ)tt(ρϕ)tΔt+t22(ρϕ)t2Δt2+O(Δt3)
调整为
( ρ ϕ ) t − ( ρ ϕ ) t − Δ t Δ t = ∂ ( ρ ϕ ) ∂ t ∣ t − ( Δ t 2 ) ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t − O ( Δ t 2 ) \frac{(\rho \phi)^{t}-(\rho \phi)^{t-\Delta t}}{\Delta t}= \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t -\left(\frac{\Delta t}{2}\right)\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t-O(\Delta t^2) Δt(ρϕ)t(ρϕ)tΔt=t(ρϕ)t(2Δt)t22(ρϕ)tO(Δt2)
把上式代入到离散格式中,得
∂ ( ρ ϕ ) ∂ t ∣ t + 1 V C L ( ϕ C t ) = ( Δ t 2 ) ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t ⏟ Numerical diffusion term + O ( Δ t 2 ) \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t+\frac{1}{V_C}L(\phi_C^t)= \underbrace{\left(\frac{\Delta t}{2}\right)\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t}_\text{Numerical~diffusion~term}+O(\Delta t^2) t(ρϕ)t+VC1L(ϕCt)=Numerical diffusion term (2Δt)t22(ρϕ)t+O(Δt2)
实际上,给方程添加了个数值扩散项,且其与时间步长成正比,这跟对流格式中的迎风格式是相似的。所以呢,这个格式是无条件稳定的,其可对大时间步长产生稳定解。

3.3 一阶显示Euler格式

在这里插入图片描述

使用一阶背风插值廓线,即可得到瞬态一阶显示Euler格式,如上图所示,在时间单元面处的 ρ ϕ \rho\phi ρϕ值,等于背风单元形心值,即
( ρ C ϕ C ) t + Δ t / 2 = ( ρ C ϕ C ) t + Δ t ( ρ C ϕ C ) t − Δ t / 2 = ( ρ C ϕ C ) t (\rho_C \phi_C)^{t+\Delta t/2}=(\rho_C \phi_C)^{t+\Delta t}\quad\quad (\rho_C \phi_C)^{t-\Delta t/2}=(\rho_C \phi_C)^{t} (ρCϕC)t+Δt/2=(ρCϕC)t+Δt(ρCϕC)tΔt/2=(ρCϕC)t
那么半离散方程为
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^{t}}{\Delta t}V_C+L(\phi_C^t)=0 Δt(ρCϕC)t+Δt(ρCϕC)tVC+L(ϕCt)=0
即一阶显式Euler格式,线性化后的相关系数为
F l u x C = ρ C V C Δ t F l u x C ∘ = − ρ C ∘ V C Δ t F l u x V = 0 \begin{aligned} FluxC &= \frac{\rho_C V_C}{\Delta t} \\ FluxC^\circ &= -\frac{\rho_C^\circ V_C}{\Delta t} \\ FluxV &= 0 \end{aligned} FluxCFluxCFluxV=ΔtρCVC=ΔtρCVC=0
注意,现在新时刻是 t + Δ t t+\Delta t t+Δt,空间算子则是在旧时刻 t t t上衡量的,这样一来,右端项就完全已知了,可以直接用来得到 t + Δ t t+\Delta t t+Δt时刻的 ρ ϕ \rho\phi ρϕ,而不需要求解线性代数方程组。这是显式格式。

3.3.1 数值反扩散

基于 t t t时刻做Taylor展开
( ρ ϕ ) t + Δ t = ( ρ ϕ ) t + ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 + O ( Δ t 3 ) (\rho \phi)^{t+\Delta t}=(\rho \phi)^t+\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2}+O(\Delta t^3) (ρϕ)t+Δt=(ρϕ)t+t(ρϕ)tΔt+t22(ρϕ)t2Δt2+O(Δt3)
调整为
( ρ ϕ ) t + Δ t − ( ρ ϕ ) t Δ t = ∂ ( ρ ϕ ) ∂ t ∣ t + ( Δ t 2 ) ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t + O ( Δ t 2 ) \frac{(\rho \phi)^{t+\Delta t}-(\rho \phi)^{t}}{\Delta t}= \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t +\left(\frac{\Delta t}{2}\right)\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t +O(\Delta t^2) Δt(ρϕ)t+Δt(ρϕ)t=t(ρϕ)t+(2Δt)t22(ρϕ)t+O(Δt2)
把上式代入到离散格式中,得
∂ ( ρ ϕ ) ∂ t ∣ t + 1 V C L ( ϕ C t ) = − ( Δ t 2 ) ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t ⏟ Numerical anti-diffusion term + O ( Δ t 2 ) \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t+\frac{1}{V_C}L(\phi_C^t)= -\underbrace{\left(\frac{\Delta t}{2}\right)\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t}_\text{Numerical~anti-diffusion~term}+O(\Delta t^2) t(ρϕ)t+VC1L(ϕCt)=Numerical anti-diffusion term (2Δt)t22(ρϕ)t+O(Δt2)
现在二阶差分项的符号是负的,类似于负扩散或反扩散,廓线上有压缩效应,这与对流格式中的背风格式非常像。反扩散项也是和时间步长呈正比关系的。当其与迎风对流格式联合起来,且Courant数为1的时候,对流项的数值扩散和 C F L c o n v = 1 CFL^{conv}=1 CFLconv=1的显式Euler格式的数值反扩散,两者幅值相等且符号相反,因此两者相互抵消,产生了近乎精确的解。尽管如此,确保 C F L c o n v = 1 CFL^{conv}=1 CFLconv=1是不切实际的,而且简单的一维网格也并非是实际问题的再现。

与反扩散效应相关的问题是数值不稳定性,其随着 Δ t \Delta t Δt的增加而增加,因此需要对时间步长施加较强的限制,可以通过负邻近系数准则来评估最大稳定时间步。

3.4 二阶瞬态Euler格式

与对流格式类似,二阶瞬态格式可通过线性插值廓线来构造。可选用对称廓线(中心差分)来产生Crank-Nicolson(CN)格式,也可选择迎风(二阶迎风格式)来产生Adams-Moulton格式,即,著名的隐式格式,二阶迎风Euler(Second Order Upwind Euler(SOUE))。

3.5 Crank-Nicolson(中心差分廓线)

在这里插入图片描述

采用在迎风和背风节点之间的线性插值来计算 ρ ϕ \rho\phi ρϕ值,便可获得上图所示的Crank-Nicolson格式。

对于均匀时间步,其数学表达式为
( ρ C ϕ C ) t + Δ t / 2 = 1 2 ( ρ C ϕ C ) t + Δ t + 1 2 ( ρ C ϕ C ) t ( ρ C ϕ C ) t − Δ t / 2 = 1 2 ( ρ C ϕ C ) t + 1 2 ( ρ C ϕ C ) t − Δ t \begin{aligned} & (\rho_C \phi_C)^{t+\Delta t/2}=\frac12(\rho_C \phi_C)^{t+\Delta t}+\frac12(\rho_C \phi_C)^{t} \\ & (\rho_C \phi_C)^{t-\Delta t/2}=\frac12(\rho_C \phi_C)^{t}+\frac12(\rho_C \phi_C)^{t-\Delta t} \end{aligned} (ρCϕC)t+Δt/2=21(ρCϕC)t+Δt+21(ρCϕC)t(ρCϕC)tΔt/2=21(ρCϕC)t+21(ρCϕC)tΔt
那么半离散方程为
( ρ C ϕ C ) t + Δ t − ( ρ C ϕ C ) t − Δ t 2 Δ t V C + L ( ϕ C t ) = 0 \frac{(\rho_C \phi_C)^{t+\Delta t}-(\rho_C \phi_C)^{t-\Delta t}}{2\Delta t}V_C+L(\phi_C^t)=0 2Δt(ρCϕC)t+Δt(ρCϕC)tΔtVC+L(ϕCt)=0
即一阶显式Euler格式,线性化后的相关系数为
F l u x C = ρ C V C 2 Δ t F l u x C ∘ = 0 F l u x V = − ρ C ∘ ∘ V C 2 Δ t ϕ C ∘ ∘ \begin{aligned} FluxC &= \frac{\rho_C V_C}{2\Delta t} \\ FluxC^\circ &= 0 \\ FluxV &= -\frac{\rho_C^{\circ\circ} V_C}{2\Delta t}\phi_C^{\circ\circ} \end{aligned} FluxCFluxCFluxV=2ΔtρCVC=0=2ΔtρCVCϕC
该格式是由 t t t t − Δ t t-\Delta t tΔt时刻的值直接显式算得 t + Δ t t+\Delta t t+Δt时刻的值,所以是显式格式。其稳定性受CFL限制。

跟在有限差分框架中讲过的那样,上式可改写成两步走的样子,即,一阶隐式Euler步,和,插值形式的修正显式Euler步。

3.5.1 数值精度

基于 t t t时刻做Taylor展开
( ρ ϕ ) t + Δ t = ( ρ ϕ ) t + ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 + ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 3 6 + O ( Δ t 4 ) ( ρ ϕ ) t − Δ t = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 3 6 + O ( Δ t 4 ) (\rho \phi)^{t+\Delta t}=(\rho \phi)^t+\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2} +\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^3}{6} +O(\Delta t^4) \\ (\rho \phi)^{t-\Delta t}=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2} -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^3}{6} +O(\Delta t^4) (ρϕ)t+Δt=(ρϕ)t+t(ρϕ)tΔt+t22(ρϕ)t2Δt2+t33(ρϕ)t6Δt3+O(Δt4)(ρϕ)tΔt=(ρϕ)tt(ρϕ)tΔt+t22(ρϕ)t2Δt2t33(ρϕ)t6Δt3+O(Δt4)
两式相减,得
( ρ ϕ ) t + Δ t − ( ρ ϕ ) t − Δ t 2 Δ t = ∂ ( ρ ϕ ) ∂ t ∣ t + ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 2 6 − O ( Δ t 3 ) \frac{(\rho \phi)^{t+\Delta t}-(\rho \phi)^{t-\Delta t}}{2\Delta t}= \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t +\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^2}{6} -O(\Delta t^3) 2Δt(ρϕ)t+Δt(ρϕ)tΔt=t(ρϕ)t+t33(ρϕ)t6Δt2O(Δt3)
把上式代入到离散格式中,得
∂ ( ρ ϕ ) ∂ t ∣ t + 1 V C L ( ϕ C t ) = − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 2 6 + O ( Δ t 3 ) \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t+\frac{1}{V_C}L(\phi_C^t)= -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^2}{6} +O(\Delta t^3) t(ρϕ)t+VC1L(ϕCt)=t33(ρϕ)t6Δt2+O(Δt3)
表明该格式具有二阶精度,第三项是色散项,会导致不稳定性。

3.6 二阶迎风Euler(SOUE)格式

在这里插入图片描述

使用上图所示的二阶迎风插值廓线,面 ρ ϕ \rho\phi ρϕ值的近似为
( ρ C ϕ C ) t + Δ t / 2 = 3 2 ( ρ C ϕ C ) t − 1 2 ( ρ C ϕ C ) t − Δ t ( ρ C ϕ C ) t − Δ t / 2 = 3 2 ( ρ C ϕ C ) t − Δ t − 1 2 ( ρ C ϕ C ) t − 2 Δ t \begin{aligned} & (\rho_C \phi_C)^{t+\Delta t/2}=\frac32(\rho_C \phi_C)^{t}-\frac12(\rho_C \phi_C)^{t-\Delta t} \\ & (\rho_C \phi_C)^{t-\Delta t/2}=\frac32(\rho_C \phi_C)^{t-\Delta t}-\frac12(\rho_C \phi_C)^{t-2\Delta t} \end{aligned} (ρCϕC)t+Δt/2=23(ρCϕC)t21(ρCϕC)tΔt(ρCϕC)tΔt/2=23(ρCϕC)tΔt21(ρCϕC)t2Δt
那么半离散方程为
3 ( ρ C ϕ C ) t − 4 ( ρ C ϕ C ) t − Δ t + ( ρ C ϕ C ) t − 2 Δ t 2 Δ t V C + L ( ϕ C t ) = 0 \frac{3(\rho_C \phi_C)^t-4(\rho_C \phi_C)^{t-\Delta t}+(\rho_C \phi_C)^{t-2\Delta t}}{2\Delta t}V_C+L(\phi_C^t)=0 2Δt3(ρCϕC)t4(ρCϕC)tΔt+(ρCϕC)t2ΔtVC+L(ϕCt)=0
这是隐式二阶迎风Euler(SOUE)格式,该格式中需要存储两个旧时刻的 ρ ϕ \rho\phi ρϕ值,其线性化系数为
F l u x C = 3 ρ C V C 2 Δ t F l u x C ∘ = − 2 ρ C ∘ V C Δ t F l u x V = ρ C ∘ ∘ V C ϕ C ∘ ∘ 2 Δ t \begin{aligned} FluxC &= \frac{3\rho_C V_C}{2\Delta t} \\ FluxC^{\circ} &= -\frac{2\rho_C^{\circ} V_C}{\Delta t} \\ FluxV &= \frac{\rho_C^{\circ\circ} V_C\phi_C^{\circ\circ}}{2\Delta t} \end{aligned} FluxCFluxCFluxV=2Δt3ρCVC=Δt2ρCVC=2ΔtρCVCϕC

3.6.1 数值精度

基于 t t t时刻做Taylor展开
( ρ ϕ ) t − Δ t = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 3 6 + O ( Δ t 4 ) ( ρ ϕ ) t − 2 Δ t = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t 2 Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t 4 Δ t 2 2 − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t 8 Δ t 3 6 + O ( Δ t 4 ) \begin{aligned} (\rho \phi)^{t-\Delta t}&=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2} -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^3}{6} +O(\Delta t^4) \\ (\rho \phi)^{t-2\Delta t}&=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t2\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{4\Delta t^2}{2} -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{8\Delta t^3}{6} +O(\Delta t^4) \end{aligned} (ρϕ)tΔt(ρϕ)t2Δt=(ρϕ)tt(ρϕ)tΔt+t22(ρϕ)t2Δt2t33(ρϕ)t6Δt3+O(Δt4)=(ρϕ)tt(ρϕ)t2Δt+t22(ρϕ)t24Δt2t33(ρϕ)t68Δt3+O(Δt4)
第一个式子乘以4并与第二个式子相减去,得
3 ( ρ C ϕ C ) t − 4 ( ρ C ϕ C ) t − Δ t + ( ρ C ϕ C ) t − 2 Δ t 2 Δ t = ∂ ( ρ ϕ ) ∂ t ∣ t − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 2 3 − O ( Δ t 3 ) \frac{3(\rho_C \phi_C)^t-4(\rho_C \phi_C)^{t-\Delta t}+(\rho_C \phi_C)^{t-2\Delta t}}{2\Delta t}= \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^2}{3}-O(\Delta t^3) 2Δt3(ρCϕC)t4(ρCϕC)tΔt+(ρCϕC)t2Δt=t(ρϕ)tt33(ρϕ)t3Δt2O(Δt3)
把上式代入到离散格式中,得
∂ ( ρ ϕ ) ∂ t ∣ t + 1 V C L ( ϕ C t ) = ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 2 3 + O ( Δ t 3 ) \left.\frac{\partial (\rho \phi)}{\partial t}\right|_t+\frac{1}{V_C}L(\phi_C^t)= \left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^2}{3} +O(\Delta t^3) t(ρϕ)t+VC1L(ϕCt)=t33(ρϕ)t3Δt2+O(Δt3)
表明其有二阶精度,虽然有第三项数值色散项,但没有数值扩散效应。

3.7 FV方法的初始条件

在这里插入图片描述
有限体积公式的实现是非常直接的,只是初始条件不好处理。如上图所示,第一个时间单元为边界时间单元,所以它没有迎风邻近点。而是把下面的单元面处的值用来表示面上的值(有点拗口,这句话意思是说,本来要用这个下边面的邻近迎风点的值来表征面上值,但是没有这个迎风点,所以只好用面上值来代替了,刚好呢边界面的值是已知的),这就导致梯度实际上只有正确数值的一半。因为计算差分的时候用的是 ϕ C t i n i t i a l + Δ t / 2 \phi_C^{t_{initial}+\Delta t/2} ϕCtinitial+Δt/2 ϕ C t i n i t i a l \phi_C^{t_{initial}} ϕCtinitial,刚好是相距了 Δ t / 2 \Delta t/2 Δt/2,所以如果是把它们除以完整时间步长 Δ t \Delta t Δt的话,是会导致不容忽视的初始误差。

为了说明这个问题,采用一阶隐式Euler格式,写出第一个时间单元的离散方程,有
( ρ C ϕ C ) t i n i t i a l + Δ t / 2 − ( ρ C ϕ C ) t i n i t i a l Δ t V C + L ( ϕ C t i n i t i a l + Δ t / 2 ) = 0 \frac{(\rho_C \phi_C)^{t_{initial}+\Delta t/2}-(\rho_C \phi_C)^{t_{initial}}}{\Delta t}V_C+L(\phi_C^{t_{initial}+\Delta t/2})=0 Δt(ρCϕC)tinitial+Δt/2(ρCϕC)tinitialVC+L(ϕCtinitial+Δt/2)=0
对于第一个时间单元,迎风插值推出的梯度是由在 t i n i t i a l + Δ t / 2 t_{initial}+\Delta t/2 tinitial+Δt/2 t i n i t i a l t_{initial} tinitial时刻的 ρ ϕ \rho\phi ρϕ值相减再除以 Δ t \Delta t Δt得到的。然而,对于常规单元,比如第二个单元来说,其梯度实际上是由 t i n i t i a l + 3 Δ t / 2 t_{initial}+3\Delta t/2 tinitial+3Δt/2 t i n i t i a l + Δ t / 2 t_{initial}+\Delta t/2 tinitial+Δt/2时刻的 ρ ϕ \rho\phi ρϕ值相减再除以 Δ t \Delta t Δt得到的。两种梯度算法的差别巨大,不管是何种格式,用上式作为梯度的起始计算都会产生较大的初始误差,并严重影响后续时间步的计算。如果采用下图所示的时间单元,则可很好地避免该错误,此时有限差分和有限体积方法都是相同的(相当于错位了半个时间网格)。
在这里插入图片描述

采用该方法,跨过时间区间 [ t i n i t i a l + Δ t / 2 , t i n i t i a l + 3 Δ t / 2 ] [t_{initial}+\Delta t/2,t_{initial}+3\Delta t/2] [tinitial+Δt/2,tinitial+3Δt/2]的第一个单元的迎风值为
( ρ C ϕ C ) t i n i t i a l + 3 Δ t / 2 = ( ρ C ϕ C ) t i n i t i a l + Δ t ( ρ C ϕ C ) t i n i t i a l + Δ t / 2 = ( ρ C ϕ C ) t i n i t i a l \begin{aligned} (\rho_C \phi_C)^{t_{initial}+3\Delta t/2} &= (\rho_C \phi_C)^{t_{initial}+\Delta t} \\ (\rho_C \phi_C)^{t_{initial}+\Delta t/2} &= (\rho_C \phi_C)^{t_{initial}} \end{aligned} (ρCϕC)tinitial+3Δt/2(ρCϕC)tinitial+Δt/2=(ρCϕC)tinitial+Δt=(ρCϕC)tinitial
代入到半离散格式中,有
( ρ C ϕ C ) t i n i t i a l + Δ t − ( ρ C ϕ C ) t i n i t i a l Δ t V C + L ( ϕ C t i n i t i a l + Δ t ) = 0 \frac{(\rho_C \phi_C)^{t_{initial}+\Delta t} -(\rho_C \phi_C)^{t_{initial}}}{\Delta t}V_C+L(\phi_C^{t_{initial}+\Delta t})=0 Δt(ρCϕC)tinitial+Δt(ρCϕC)tinitialVC+L(ϕCtinitial+Δt)=0
这与任何内部单元的形式都是一样的。

4 非均匀时间步长

前面讲的都是均匀时间步长,在实际应用中常使用的是变时间步长,即,通过在每个时间步选择不违反CFL条件的最大许用时间步长,来减小计算消耗。

对于一阶格式来说,时间步长变化与否对其离散格式并无影响。对二阶瞬态格式来说就并非如此了,因为在它们的框架中用到了两个时间层次的值。对于Crank-Nicolson瞬态格式的两步法实现而言,只需要把两步中每步的时间步长做更改即可,这当然会影响到离散的精度了,因为其不再是在时间单元的中心了。对其它的二阶方法来说,插值廓线需要加以更改,以便适应不相等的时间步长。下面讲下非均匀瞬态网格上标准CN和SOUE格式对瞬态项的离散方法。尽管有限体积和有限差分方法在均匀网格上的代数方程是一样的,然而在可变时间步长的情况下则未必如此。

4.1 非均匀时间步长的有限差分方法

4.1.1 Crank-Nicolson格式

在这里插入图片描述
如上图所示,为了推倒非均匀时间步长时的CN格式,把 t + Δ t t+\Delta t t+Δt t − Δ t ∘ t-\Delta t^\circ tΔt时刻的值 ρ ϕ \rho\phi ρϕ t t t时刻的值和偏导做Taylor级数展开,得
( ρ ϕ ) t + Δ t = ( ρ ϕ ) t + ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 + ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t Δ t 3 6 + . . . ( ρ ϕ ) t − Δ t ∘ = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t Δ t ∘ + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t ( Δ t ∘ ) 2 2 − ∂ 3 ( ρ ϕ ) ∂ t 3 ∣ t ( Δ t ∘ ) 3 6 + . . . \begin{aligned} (\rho \phi)^{t+\Delta t}&=(\rho \phi)^t+\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2} +\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{\Delta t^3}{6} +... \\ (\rho \phi)^{t-\Delta t^\circ}&=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t^\circ +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{(\Delta t^\circ)^2}{2} -\left.\frac{\partial^3 (\rho \phi)}{\partial t^3}\right|_t\frac{(\Delta t^\circ)^3}{6} +... \end{aligned} (ρϕ)t+Δt(ρϕ)tΔt=(ρϕ)t+t(ρϕ)tΔt+t22(ρϕ)t2Δt2+t33(ρϕ)t6Δt3+...=(ρϕ)tt(ρϕ)tΔt+t22(ρϕ)t2(Δt)2t33(ρϕ)t6(Δt)3+...
把第一个式子乘上 ( Δ t ∘ ) 2 (\Delta t^\circ)^2 (Δt)2,把第二个式子乘上 Δ t 2 \Delta t^2 Δt2,并两式相减,得到
∂ ( ρ ϕ ) ∂ t ∣ t ≈ ( Δ t ∘ ) 2 ( ρ ϕ ) t + Δ t − [ ( Δ t ∘ ) 2 − Δ t 2 ] ( ρ ϕ ) t − Δ t 2 ( ρ ϕ ) t − Δ t ∘ Δ t ( Δ t ∘ ) 2 + Δ t ∘ Δ t 2 \left.\frac{\partial(\rho\phi)}{\partial t}\right|_t \approx \frac{(\Delta t^\circ)^2(\rho \phi)^{t+\Delta t}-[(\Delta t^\circ)^2-\Delta t^2](\rho \phi)^t-\Delta t^2(\rho \phi)^{t-\Delta t^\circ}} {\Delta t(\Delta t^\circ)^2+\Delta t^\circ\Delta t^2} t(ρϕ)tΔt(Δt)2+ΔtΔt2(Δt)2(ρϕ)t+Δt[(Δt)2Δt2](ρϕ)tΔt2(ρϕ)tΔt
那么半离散方程为
( Δ t ∘ ) 2 ( ρ ϕ ) − [ ( Δ t ∘ ) 2 − Δ t 2 ] ( ρ ϕ ) ∘ − Δ t 2 ( ρ ϕ ) ∘ ∘ Δ t Δ t ∘ ( Δ t + Δ t ∘ ) V C + L ( ϕ C ∘ ) = 0 \frac{(\Delta t^\circ)^2(\rho \phi)- [(\Delta t^\circ)^2-\Delta t^2](\rho \phi)^\circ- \Delta t^2(\rho \phi)^{\circ\circ}} {\Delta t\Delta t^\circ(\Delta t+\Delta t^\circ)} V_C+L(\phi_C^\circ)=0 ΔtΔt(Δt+Δt)(Δt)2(ρϕ)[(Δt)2Δt2](ρϕ)Δt2(ρϕ)VC+L(ϕC)=0
空间项展开,最后的代数方程为
a C ∙ ϕ C = b C − ( a C ϕ C ∘ + ∑ F ∼ N B ( C ) a F ϕ F ∘ ) − a C ∘ ϕ C ∘ − a C ∘ ∘ ϕ C ∘ ∘ a_C^{\bullet} \phi_C = b_C-\left(a_C\phi_C^\circ+\sum_{F\sim NB(C)}a_F\phi_F^\circ\right) - a_C^{\circ} \phi_C^{\circ} - a_C^{\circ\circ} \phi_C^{\circ\circ} aCϕC=bCaCϕC+FNB(C)aFϕFaCϕCaCϕC
其中
a C ∙ = Δ t ∘ Δ t ( Δ t + Δ t ∘ ) ρ C V C a C ∘ = Δ t − Δ t ∘ Δ t Δ t ∘ ρ C ∘ V C a C ∘ ∘ = − Δ t Δ t ∘ ( Δ t + Δ t ∘ ) ρ C ∘ ∘ V C \begin{aligned} a_C^{\bullet} &= \frac{\Delta t^\circ}{\Delta t(\Delta t+\Delta t^\circ)}\rho_C V_C \\ a_C^{\circ} &= \frac{\Delta t-\Delta t^\circ}{\Delta t\Delta t^\circ}\rho_C^\circ V_C \\ a_C^{\circ\circ} &= -\frac{\Delta t}{\Delta t^\circ(\Delta t+\Delta t^\circ)}\rho_C^{\circ\circ} V_C \end{aligned} aCaCaC=Δt(Δt+Δt)ΔtρCVC=ΔtΔtΔtΔtρCVC=Δt(Δt+Δt)ΔtρCVC
显然,对 Δ t = Δ t ∘ \Delta t=\Delta t^\circ Δt=Δt,这些系数跟之前推倒的均匀时间步长的系数是吻合的。

4.1.2 Adams-Moulton(或SOUE)格式

在这里插入图片描述

如上图所示,Adams-Moulton格式,即SOUE格式,在非均匀时间步长情况下的形式,可把 t − Δ t t-\Delta t tΔt t − Δ t − Δ t ∘ t-\Delta t-\Delta t^\circ tΔtΔt时刻的值 ρ ϕ \rho\phi ρϕ t t t时刻的值和偏导做Taylor级数展开,得
( ρ ϕ ) t − Δ t = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t Δ t + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t Δ t 2 2 + O ( Δ t 3 ) ( ρ ϕ ) t − Δ t − Δ t ∘ = ( ρ ϕ ) t − ∂ ( ρ ϕ ) ∂ t ∣ t ( Δ t + Δ t ∘ ) + ∂ 2 ( ρ ϕ ) ∂ t 2 ∣ t ( Δ t + Δ t ∘ ) 2 2 + O ( Δ t 3 ) \begin{aligned} (\rho \phi)^{t-\Delta t}&=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t\Delta t +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{\Delta t^2}{2} +O(\Delta t^3) \\ (\rho \phi)^{t-\Delta t-\Delta t^\circ}&=(\rho \phi)^t-\left.\frac{\partial (\rho \phi)}{\partial t}\right|_t(\Delta t+\Delta t^\circ) +\left.\frac{\partial^2 (\rho \phi)}{\partial t^2}\right|_t\frac{(\Delta t+\Delta t^\circ)^2}{2} +O(\Delta t^3) \end{aligned} (ρϕ)tΔt(ρϕ)tΔtΔt=(ρϕ)tt(ρϕ)tΔt+t22(ρϕ)t2Δt2+O(Δt3)=(ρϕ)tt(ρϕ)t(Δt+Δt)+t22(ρϕ)t2(Δt+Δt)2+O(Δt3)
把第一个式子乘上 ( Δ t + Δ t ∘ ) 2 / Δ t 2 {(\Delta t+\Delta t^\circ)^2}/{\Delta t^2} (Δt+Δt)2/Δt2,并减去第二个式子,得到
∂ ( ρ ϕ ) ∂ t ∣ t ≈ 1 Δ t [ ( 1 + Δ t Δ t + Δ t ∘ ) ( ρ ϕ ) t − ( 1 + Δ t Δ t ∘ ) ( ρ ϕ ) t − Δ t + ( Δ t 2 Δ t ∘ ( Δ t + Δ t ∘ ) ) ( ρ ϕ ) t − Δ t − Δ t ∘ ] \left.\frac{\partial(\rho\phi)}{\partial t}\right|_t \approx \frac{1}{\Delta t}\left[ \left( 1+\frac{\Delta t}{\Delta t+\Delta t^\circ} \right)(\rho \phi)^t- \left( 1+\frac{\Delta t}{\Delta t^\circ} \right)(\rho \phi)^{t-\Delta t}+ \left( \frac{\Delta t^2}{\Delta t^\circ(\Delta t+\Delta t^\circ)} \right)(\rho \phi)^{t-\Delta t-\Delta t^\circ} \right] t(ρϕ)tΔt1[(1+Δt+ΔtΔt)(ρϕ)t(1+ΔtΔt)(ρϕ)tΔt+(Δt(Δt+Δt)Δt2)(ρϕ)tΔtΔt]
那么半离散方程为
( 1 Δ t + 1 Δ t + Δ t ∘ ) ( ρ C ϕ C ) V C − ( 1 Δ t + 1 Δ t ∘ ) ( ρ C ϕ C ) ∘ V C + ( Δ t Δ t ∘ ( Δ t + Δ t ∘ ) ) ( ρ C ϕ C ) ∘ ∘ V C + L ( ϕ C ) = 0 \left( \frac{1}{\Delta t}+\frac{1}{\Delta t+\Delta t^\circ} \right)(\rho_C \phi_C)V_C- \left(\frac{1}{\Delta t} +\frac{1}{\Delta t^\circ} \right)(\rho_C \phi_C)^{\circ}V_C+ \left( \frac{\Delta t}{\Delta t^\circ(\Delta t+\Delta t^\circ)} \right)(\rho_C \phi_C)^{\circ\circ}V_C +L(\phi_C)=0 (Δt1+Δt+Δt1)(ρCϕC)VC(Δt1+Δt1)(ρCϕC)VC+(Δt(Δt+Δt)Δt)(ρCϕC)VC+L(ϕC)=0
空间项展开,最后的代数方程为
( a C ∙ + a C ) ϕ C + ∑ F ∼ N B ( C ) a F ϕ F = b C − a C ∘ ϕ C ∘ − a C ∘ ∘ ϕ C ∘ ∘ (a_C^{\bullet}+a_C) \phi_C +\sum_{F\sim NB(C)}a_F\phi_F = b_C-a_C^{\circ}\phi_C^\circ - a_C^{\circ\circ} \phi_C^{\circ\circ} (aC+aC)ϕC+FNB(C)aFϕF=bCaCϕCaCϕC
其中
a C ∙ = ( 1 Δ t + 1 Δ t + Δ t ∘ ) ρ C V C a C ∘ = − ( 1 Δ t + 1 Δ t ∘ ) ρ C ∘ V C a C ∘ ∘ = Δ t Δ t ∘ ( Δ t + Δ t ∘ ) ρ C ∘ ∘ V C \begin{aligned} a_C^{\bullet} &= \left( \frac{1}{\Delta t}+\frac{1}{\Delta t+\Delta t^\circ} \right) \rho_C V_C \\ a_C^{\circ} &= -\left(\frac{1}{\Delta t} +\frac{1}{\Delta t^\circ} \right) \rho_C^{\circ} V_C \\ a_C^{\circ\circ} &= \frac{\Delta t}{\Delta t^\circ(\Delta t+\Delta t^\circ)} \rho_C^{\circ\circ} V_C \end{aligned} aCaCaC=(Δt1+Δt+Δt1)ρCVC=(Δt1+Δt1)ρCVC=Δt(Δt+Δt)ΔtρCVC
同样地,若 Δ t = Δ t ∘ \Delta t=\Delta t^\circ Δt=Δt,则这些系数跟之前推导的均匀时间步长的系数是吻合的。

4.2 非均匀时间步长的有限体积方法

根据FVM中的术语,时间单元的长度定义为 Δ t \Delta t Δt,而两个相继时间单元的形心间的距离定义为为 δ t \delta t δt。对于均匀网格步长,它们俩是相等的,即 Δ t = δ t \Delta t=\delta t Δt=δt,而且有限差分方法中两个相续计算流场间的时间差为 Δ t \Delta t Δt,等于有限体积法中的时间差 δ t \delta t δt。对于非均匀时间步长,有限差分方法仍旧是 Δ t \Delta t Δt,而有限体积方法则变成 δ t = ( Δ t + Δ t ∘ ) / 2 \delta t=(\Delta t+\Delta t^\circ)/2 δt=(Δt+Δt)/2,这导致两者的公式是不同的。

和在有限差分方法中类似,在非均匀时间步长中,当前和旧时刻的值影响着格式的插值廓线和有限体积离散。这跟在结构化的非均匀网格上把对流项写成廓线形式非常相像。将用CN和SOUE格式来阐明该流程,把该思想推广到其它廓线上也是非常方便的。

4.2.1 Crank-Nicolson格式

在这里插入图片描述

如上图所示,CN格式可以通过把面上的 ρ ϕ \rho\phi ρϕ值用该面两侧的主节点 ρ ϕ \rho\phi ρϕ值的平均来获得,即
( ρ C ϕ C ) t − Δ t / 2 = Δ t ∘ Δ t + Δ t ∘ ( ρ C ϕ C ) t + Δ t Δ t + Δ t ∘ ( ρ C ϕ C ) t − ( Δ t ∘ + Δ t ) / 2 ( ρ C ϕ C ) t − Δ t / 2 − Δ t ∘ = Δ t ∘ ∘ Δ t ∘ + Δ t ∘ ∘ ( ρ C ϕ C ) t − ( Δ t ∘ + Δ t ) / 2 + Δ t ∘ Δ t ∘ + Δ t ∘ ∘ ( ρ C ϕ C ) t − Δ t ∘ − ( Δ t + Δ t ∘ ∘ ) / 2 \begin{aligned} (\rho_C \phi_C)^{t-\Delta t/2}&=\frac{\Delta t^\circ}{\Delta t+\Delta t^\circ}(\rho_C \phi_C)^t+ \frac{\Delta t}{\Delta t+\Delta t^\circ}(\rho_C \phi_C)^{t-(\Delta t^\circ+\Delta t)/2} \\ (\rho_C \phi_C)^{t-\Delta t/2-\Delta t^\circ}&=\frac{\Delta t^{\circ\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} (\rho_C \phi_C)^{t-(\Delta t^\circ+\Delta t)/2}+ \frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} (\rho_C \phi_C)^{t-\Delta t^\circ-(\Delta t+\Delta t^{\circ\circ})/2} \end{aligned} (ρCϕC)tΔt/2(ρCϕC)tΔt/2Δt=Δt+ΔtΔt(ρCϕC)t+Δt+ΔtΔt(ρCϕC)t(Δt+Δt)/2=Δt+ΔtΔt(ρCϕC)t(Δt+Δt)/2+Δt+ΔtΔt(ρCϕC)tΔt(Δt+Δt)/2
那么半离散方程为
Δ t ∘ Δ t + Δ t ∘ V C Δ t ( ρ C ϕ C ) + ( Δ t Δ t + Δ t ∘ − Δ t ∘ ∘ Δ t ∘ + Δ t ∘ ∘ ) V C Δ t ( ρ C ϕ C ) ∘ − Δ t ∘ Δ t ∘ + Δ t ∘ ∘ V C Δ t ( ρ C ϕ C ) ∘ ∘ + L ( ϕ C ∘ ) = 0 \begin{aligned} \frac{\Delta t^\circ}{\Delta t+\Delta t^\circ}\frac{V_C}{\Delta t}(\rho_C \phi_C) &+ \left( \frac{\Delta t}{\Delta t+\Delta t^\circ} - \frac{\Delta t^{\circ\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} \right)\frac{V_C}{\Delta t}(\rho_C \phi_C)^{\circ}\\ &-\frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}}\frac{V_C}{\Delta t} (\rho_C \phi_C)^{\circ\circ}+ L(\phi_C^\circ)=0 \end{aligned} Δt+ΔtΔtΔtVC(ρCϕC)+(Δt+ΔtΔtΔt+ΔtΔt)ΔtVC(ρCϕC)Δt+ΔtΔtΔtVC(ρCϕC)+L(ϕC)=0
推得CN格式在非均匀时间步长时的线性化系数为
F l u x C = Δ t ∘ Δ t + Δ t ∘ ρ C V C Δ t F l u x C ∘ = ( Δ t Δ t + Δ t ∘ − Δ t ∘ ∘ Δ t ∘ + Δ t ∘ ∘ ) ρ C ∘ V C Δ t F l u x V = − Δ t ∘ Δ t ∘ + Δ t ∘ ∘ ρ C ∘ ∘ V C ϕ C ∘ ∘ Δ t \begin{aligned} FluxC &=\frac{\Delta t^\circ}{\Delta t+\Delta t^\circ}\frac{\rho_C V_C}{\Delta t} \\ FluxC^\circ &=\left( \frac{\Delta t}{\Delta t+\Delta t^\circ} - \frac{\Delta t^{\circ\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} \right)\frac{\rho_C^\circ V_C}{\Delta t} \\ FluxV &= -\frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}}\frac{\rho_C^{\circ\circ} V_C \phi_C^{\circ\circ}}{\Delta t} \end{aligned} FluxCFluxCFluxV=Δt+ΔtΔtΔtρCVC=(Δt+ΔtΔtΔt+ΔtΔt)ΔtρCVC=Δt+ΔtΔtΔtρCVCϕC
和在固定时间步长中一样,该显式方法需要存储前两个时间步的值。此外,令 Δ t = Δ t ∘ = Δ t ∘ ∘ \Delta t=\Delta t^\circ=\Delta t^{\circ\circ} Δt=Δt=Δt即可将其恢复到均匀时间步长的公式。

4.2.2 Adams-Moulton(或SOUE)格式

在这里插入图片描述

如上图所示,采用二阶迎风插值廓线,把在 t + Δ t / 2 t+\Delta t/2 t+Δt/2 t − Δ t / 2 t-\Delta t/2 tΔt/2面上的 ρ ϕ \rho\phi ρϕ值可表示为
( ρ C ϕ C ) t + Δ t / 2 = ( ρ C ϕ C ) t + Δ t Δ t + Δ t ∘ [ ( ρ C ϕ C ) t − ( ρ C ϕ C ) t − ( Δ t ∘ + Δ t ) / 2 ] ( ρ C ϕ C ) t − Δ t / 2 = ( ρ C ϕ C ) t − ( Δ t ∘ + Δ t ) / 2 + Δ t ∘ Δ t ∘ + Δ t ∘ ∘ [ ( ρ C ϕ C ) t − ( Δ t ∘ + Δ t ) / 2 − ( ρ C ϕ C ) t − Δ t ∘ − ( Δ t + Δ t ∘ ∘ ) / 2 ] \begin{aligned} (\rho_C \phi_C)^{t+\Delta t/2}&=(\rho_C \phi_C)^t+ \frac{\Delta t}{\Delta t+\Delta t^\circ}\left[(\rho_C \phi_C)^t-(\rho_C \phi_C)^{t-(\Delta t^\circ+\Delta t)/2}\right] \\ \\ (\rho_C \phi_C)^{t-\Delta t/2}&=(\rho_C \phi_C)^{t-(\Delta t^\circ+\Delta t)/2}+ \frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} \left[(\rho_C \phi_C)^{t-(\Delta t^\circ+\Delta t)/2}-(\rho_C \phi_C)^{t-\Delta t^\circ-(\Delta t+\Delta t^{\circ\circ})/2}\right] \end{aligned} (ρCϕC)t+Δt/2(ρCϕC)tΔt/2=(ρCϕC)t+Δt+ΔtΔt[(ρCϕC)t(ρCϕC)t(Δt+Δt)/2]=(ρCϕC)t(Δt+Δt)/2+Δt+ΔtΔt[(ρCϕC)t(Δt+Δt)/2(ρCϕC)tΔt(Δt+Δt)/2]
那么半离散方程为
( 1 + Δ t Δ t + Δ t ∘ ) V C Δ t ( ρ C ϕ C ) − ( 1 + Δ t Δ t + Δ t ∘ + Δ t ∘ Δ t ∘ + Δ t ∘ ∘ ) V C Δ t ( ρ C ϕ C ) ∘ + Δ t ∘ Δ t ∘ + Δ t ∘ ∘ V C Δ t ( ρ C ϕ C ) ∘ ∘ + L ( ϕ C ) = 0 \begin{aligned} \left( 1+ \frac{\Delta t}{\Delta t+\Delta t^\circ} \right)\frac{V_C}{\Delta t}(\rho_C \phi_C) &- \left( 1+ \frac{\Delta t}{\Delta t+\Delta t^\circ}+\frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}} \right)\frac{V_C}{\Delta t}(\rho_C \phi_C)^{\circ}\\ &+\frac{\Delta t^{\circ}}{\Delta t^\circ+\Delta t^{\circ\circ}}\frac{V_C}{\Delta t} (\rho_C \phi_C)^{\circ\circ}+ L(\phi_C)=0 \end{aligned} (1+Δt+ΔtΔt)ΔtVC(ρCϕC)(1+Δt+ΔtΔt+Δt+ΔtΔt)ΔtVC(ρCϕC)+Δt+ΔtΔtΔtVC(ρCϕC)+L(ϕC)=0
推得SOUE格式在非均匀时间步长时的线性化系数为
F l u x C = ( 1 Δ t + 1 Δ t + Δ t ∘ ) ρ C V C F l u x C ∘ = − ( 1 Δ t + 1 Δ t + Δ t ∘ + Δ t ∘ / Δ t Δ t ∘ + Δ t ∘ ∘ ) ρ C ∘ V C F l u x V = Δ t ∘ / Δ t Δ t ∘ + Δ t ∘ ∘ ρ C ∘ ∘ V C ϕ C ∘ ∘ \begin{aligned} FluxC &= \left( \frac{1}{\Delta t}+ \frac{1}{\Delta t+\Delta t^\circ} \right)\rho_C V_C \\ FluxC^{\circ} &= -\left( \frac{1}{\Delta t}+ \frac{1}{\Delta t+\Delta t^\circ}+\frac{\Delta t^{\circ}/\Delta t}{\Delta t^\circ+\Delta t^{\circ\circ}} \right) \rho_C^{\circ} V_C \\ FluxV &= \frac{\Delta t^{\circ}/\Delta t}{\Delta t^\circ+\Delta t^{\circ\circ}}\rho_C^{\circ\circ} V_C\phi_C^{\circ\circ} \end{aligned} FluxCFluxCFluxV=(Δt1+Δt+Δt1)ρCVC=(Δt1+Δt+Δt1+Δt+ΔtΔt/Δt)ρCVC=Δt+ΔtΔt/ΔtρCVCϕC
与固定时间步情况类似,该方法是隐式的,其需要求解方程组系统来获得在每个时间步上的 ϕ \phi ϕ值。令 Δ t = Δ t ∘ = Δ t ∘ ∘ \Delta t=\Delta t^\circ=\Delta t^{\circ\circ} Δt=Δt=Δt即可将其恢复到均匀时间步长的公式。

5 代码讲解

5.1 uFVM

在uFVM中,瞬态项的离散时通过有限体积方法在隐式框架下完成的。用一阶后向Euler格式所得到的的瞬态通量的组装过程如下:

%
theDensityField = cfdGetMeshField(['Density' theFluidTag]);
density = theDensityField.phi(iElements);
density_old = theDensityField.phi_old(iElements);

volumes = [theMesh.elements(iElements).volume]';

theFluxes.FLUXCE(iElements) = volumes .* density / dt;
theFluxes.FLUXCEOLD(iElements) = - volumes .* density_old / dt;
theFluxes.FLUXTE(iElements) = theFluxes.FLUXCE .* phi;
theFluxes.FLUXTEOLD(iElements) = theFluxes.FLUXCEOLD .* phi_old ;

即,一阶隐式Euler格式的线性化后的相关系数的计算和组装工作
F l u x C = ρ C V C Δ t F l u x C ∘ = − ρ C ∘ V C Δ t F l u x V = 0 \begin{aligned} FluxC &= \frac{\rho_C V_C}{\Delta t} \\ FluxC^\circ &= -\frac{\rho_C^\circ V_C}{\Delta t} \\ FluxV &= 0 \end{aligned} FluxCFluxCFluxV=ΔtρCVC=ΔtρCVC=0

5.2 OpenFOAM

to be continued…

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值