有限体积法求解二维方腔流(一)——动量方程和连续性方程的离散

1. 有限体积法求解二维方腔流–理论手册

1.1. 不可压缩流体控制方程

连续性方程
∇ ⋅ U = 0 (1) \nabla \cdot U=0 \tag{1} U=0(1)
动量方程
∂ U ∂ t + ∇ ⋅ ( U U ) = − ∇ p + ∇ ⋅ ( ν ∇ U ) (2) \frac{\partial U}{\partial t}+\nabla\cdot (UU)=-\nabla p + \nabla \cdot (\nu \nabla U) \tag{2} tU+(UU)=p+(νU)(2)
其中 p p p为真实压力与流体密度之比,量纲为 m 2 / s 2 m^2/s^2 m2/s2

上式中的扩散项为空间的二阶导数项,为了保证精度,对上式离散的空间精度也应至少满足二阶精度(Jasak, 1996, phd)

有限体积法对上式离散的第一步是积分:
∫ t t + Δ t [ ∂ ∂ t ∫ V P U d V + ∫ V P ∇ ⋅ ( U U ) d V ] d t = ∫ t t + Δ t [ − ∫ V P ∇ p d V + ∫ V P ∇ ⋅ ( ν ∇ U ) d V ] d t \int_t^{t+\Delta t}\left[ \frac{\partial }{\partial t}\int_{V_P} U dV + \int_{V_P}\nabla\cdot (UU) dV\right]dt=\int_t^{t+\Delta t}\left[ -\int_{V_P}\nabla p dV + \int_{V_P}\nabla \cdot (\nu \nabla U) dV \right]dt tt+Δt[tVPUdV+VP(UU)dV]dt=tt+Δt[VPpdV+VP(νU)dV]dt

1.2. 逐项离散

使用网格质心值代替网格平均值,有二阶精度,详情参考
∫ V p U d V = U P V P + ε ( Δ x 2 ) \int_{V_p} U dV = U_P V_P + \varepsilon(\Delta x^2) VpUdV=UPVP+ε(Δx2)

1.2.1. 非稳态项

∫ t t + Δ t ∂ ∂ t ∫ V P U d V d t ≈ U P t + Δ t − U P t Δ t Δ t V P = ( U P n + 1 − U P n ) V P \int_t^{t+\Delta t} \frac{\partial }{\partial t}\int_{V_P} U dVdt\approx \frac{U^{t+\Delta t}_P-U^t_P}{\Delta t} \Delta t V_P = (U_P^{n+1}-U_P^n) V_P tt+ΔttVPUdVdtΔtUPt+ΔtUPtΔtVP=(UPn+1UPn)VP

下文中以上标 ( n + 1 ) (n+1) (n+1)替代上标 ( t + Δ t ) (t+\Delta t) (t+Δt),以 n n n替代 t t t

1.2.2. 对流项

结合高斯散度定理,
∫ V P ∇ ⋅ ( U U ) d V = ∫ ∂ V P ( U U ) d S ≈ ∑ ( U U ) f S \int_{V_P}\nabla\cdot (UU) dV=\int_{\partial V_P} (UU) dS\approx\sum(UU)_f S VP(UU)dV=VP(UU)dS(UU)fS

注意上式中 ( U U ) f (UU)_f (UU)f为张量在面心上的平均值,二阶精度; S S S为矢量,将其乘积做线性化处理
∑ ( U U ) f S ≈ ∑ F f n U f n + 1 \sum(UU)_f S \approx \sum F^n_f U^{n+1}_f (UU)fSFfnUfn+1

其中 F f = S ⋅ U f F_f=S \cdot U_f Ff=SUf,为标量。本文中的面法向方向由内指向外,这与OpenFOAM中根据ownerneighbor来定义面法向的方式不同。对于二维情况, U = ( u , v ) U=(u,v) U=(u,v)
∑ F f n U f n + 1 = F w U w n + 1 + F e U e n + 1 + F s U s n + 1 + F n U n n + 1 \sum F_f^n U_f^{n+1}=F_wU_w^{n+1}+ F_eU_e^{n+1}+ F_sU_s^{n+1}+ F_nU_n^{n+1} FfnUfn+1=FwUwn+1+FeUen+1+FsUsn+1+FnUnn+1

F w = U w ⋅ S w = ( u w , v w ) ⋅ ( − h , 0 ) = − u w h = − u P + u W 2 h F_w=U_w\cdot S_w=(u_w,v_w)\cdot (-h,0)=-u_wh=-\frac{u_P+u_W}{2}h Fw=UwSw=(uw,vw)(h,0)=uwh=2uP+uWh

F e = U e ⋅ S e = ( u e , v e ) ⋅ ( h , 0 ) = u e h = u P + u E 2 h F_e=U_e\cdot S_e=(u_e,v_e)\cdot (h,0)=u_eh=\frac{u_P+u_E}{2}h Fe=UeSe=(ue,ve)(h,0)=ueh=2uP+uEh

F s = U s ⋅ S s = ( u s , v s ) ⋅ ( 0 , − h ) = − v s h = − v P + v S 2 h F_s=U_s\cdot S_s=(u_s,v_s)\cdot (0,-h)=-v_sh=-\frac{v_P+v_S}{2}h Fs=UsSs=(us,vs)(0,h)=vsh=2vP+vSh

F n = U n ⋅ S n = ( u n , v n ) ⋅ ( 0 , h ) = v n h = v P + v N 2 h F_n=U_n\cdot S_n=(u_n,v_n)\cdot (0,h)=v_nh=\frac{v_P+v_N}{2}h Fn=UnSn=(un,vn)(0,h)=vnh=2vP+vNh

上式中 U f n + 1 U_f^{n+1} Ufn+1的获取是有限体积法中的关键。介绍几种常用格式:

  • 一阶迎风
    ϕ e = { ϕ P F e > 0 ϕ E F e < 0 \phi_e=\left\{ \begin{matrix} \phi_P & F_e>0 \\ \phi_E & F_e<0 \end{matrix} \right. ϕe={ ϕPϕEFe>0Fe<0

  • 二阶迎风
    ϕ e = { 0.5 ( 3 ϕ P − ϕ W ) F e > 0 0.5 ( 3 ϕ E − ϕ E E ) F e < 0 \phi_e=\left\{ \begin{matrix} 0.5(3\phi_P-\phi_W) & F_e>0 \\ 0.5(3\phi_E-\phi_{EE}) & F_e<0 \end{matrix} \right. ϕe={ 0.5(3ϕPϕW)0.5(3ϕEϕEE)Fe>0Fe<0

  • 中心差分
    ϕ e = ϕ P + ϕ E 2 \phi_e=\frac{\phi_P+\phi_E}{2} ϕe=2ϕP+ϕE

上式中 ϕ \phi ϕ为标量,下标 W , E W,E W,E分别为 P P P网格的左和右邻居网格, e e e表示 P P P网格的右面。如果不是六面体网格(三维)或矩形网格(二维),则上述格式需要修正。

OpenFOAM自带cavity算例中,system/fvSchemes-divSchemes-div(phi,U)使用的离散格式是Gauss linear,其中phi是已知值,所以线性插值仅是应用于变量U,换句话说,cavity默认的对流项离散方式是中心差分

按照中心差分, U f = ( U N + U P ) / 2 U_f=(U_N+U_P)/2 Uf=(UN+UP)/2
U w n + 1 = U P n + 1 + U W n + 1 2 U_w^{n+1}=\frac{U_P^{n+1}+U_W^{n+1}}{2} Uwn+1=2UPn+1+UWn+1

U e n + 1 = U P n + 1 + U E n + 1 2 U_e^{n+1}=\frac{U_P^{n+1}+U_E^{n+1}}{2} Uen+1=2UPn+1+UEn+1

U s n + 1 = U P n + 1 + U S n + 1 2 U_s^{n+1}=\frac{U_P^{n+1}+U_S^{n+1}}{2} Usn+1=2UPn+1+USn+1

U n n + 1 = U P n + 1 + U N n + 1 2 U_n^{n+1}=\frac{U_P^{n+1}+U_N^{n+1}}{2} Unn+1=2UPn+1+UNn+1

∑ F f n U f n + 1 = ( − u w n h ) U w n + 1 + ( u e n h ) U e n + 1 + ( − v s n h ) U s n + 1 + ( v n n h ) U n n + 1 = h 4 [ − ( u P n + u W n ) ( U P n + 1 + U W n + 1 ) + ( u P n + u E n ) ( U P n + 1 + U E n + 1 ) − ( v P n + v S n ) ( U P n + 1 + U S n + 1 ) + ( v P n + v N n ) ( U P n + 1 + U N n + 1 ) ] = h 4 [ ( u E n − u W n + v N n − v S n ) U P n + 1 − ( u P n + u W n ) U W n + 1 + ( u P n + u E n ) U E n + 1 − ( v P n + v S n ) U S n + 1 + ( v P n + v N n ) U N n + 1 ] \sum F^n_fU^{n+1}_f = (-u_w^n h)U_w^{n+1} + (u_e^n h)U_e^{n+1} + (-v_s^n h)U_s^{n+1} + (v_n^n h)U_n^{n+1} \\ =\frac{h}{4}\left[ -(u_P^n+u_W^n)(U^{n+1}_P+U^{n+1}_W)+(u_P^n+u_E^n)(U^{n+1}_P+U^{n+1}_E)-(v_P^n+v_S^n)(U^{n+1}_P+U^{n+1}_S)+(v_P^n+v_N^n)(U^{n+1}_P+U^{n+1}_N)\right] \\ =\frac{h}{4}\left[ (u_E^n-u_W^n+v_N^n-v_S^n)U^{n+1}_P -(u_P^n+u_W^n)U^{n+1}_W+(u_P^n+u_E^n)U^{n+1}_E-(v_P^n+v_S^n)U^{n+1}_S+(v_P^n+v_N^n)U^{n+1}_N \right] FfnUfn+1=(uwnh)Uwn+1+(uenh)Uen+1+(vsnh)Usn+1+(vnnh)Unn+1=4h[(uPn+u

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值