2. 有限体积法求解二维方腔流–求解
二维模拟区域尺寸为 x ∈ [ 0 , 0.1 ] , y ∈ [ 0 , 0.1 ] x\in [0,0.1], y\in [0,0.1] x∈[0,0.1],y∈[0,0.1],每一维各有 N N N个网格,网格长度为 h = 1 / N h=1/N h=1/N,网格体心间距 d = h d=h d=h,物理量均定义在网格体心。流体粘度为 ν \nu ν。待求物理量为速度矢量 U = [ u , v ] U=[u,v] U=[u,v]以及压力标量 p p p,上边界 x x x方向速度 u = 1 u=1 u=1, y y y方向速度 v = 0 v=0 v=0,其他三边 u = v = 0 u=v=0 u=v=0,四边的压力边界条件均为第二类边界条件即 ∂ p / ∂ x = ∂ p / ∂ y = 0 \partial p/ \partial x = \partial p/ \partial y =0 ∂p/∂x=∂p/∂y=0
离散格式:对流项中心差分,扩散项中心差分,压力项中心差分,非稳态项一阶欧拉
模拟区域左下角坐标为 ( 0 , 0 ) (0,0) (0,0),右上角坐标为 ( 1 , 1 ) (1,1) (1,1),网格全局编号从0开始,令网格 [ i , j ] [i,j] [i,j]表示该网格为 x x x方向的第 i i i个网格、 y y y方向的第 j j j个网格。对于二维,标量 S f S_f Sf为表面积,等于 h h h
2.1. 代码链接
2.2. 求解流程
- 给定 t 0 t_0 t0时刻网格值,所有网格 u = v = p = 0 u=v=p=0 u=v=p=0
- 根据 t 0 t_0 t0时刻的 u v uv uv计算系数 A P , A W , A E , A S , A N A_P,A_W,A_E,A_S,A_N AP,AW,AE,AS,AN,对应
update_coefficient
函数 - 根据 t 0 t_0 t0时刻的 p p p计算 u v uv uv,记为 u ∗ , v ∗ u^*,v^* u∗,v∗,对应
update_velo_GS
函数 - 进入内循环,循环次数 n C o r r nCorr nCorr
- 由 u ∗ , v ∗ u^*,v^* u∗,v∗计算 H b y A ∣ ∗ HbyA\big|^* HbyA∣∣∗,由t_0时刻速度更新 A P A_P AP,对应
update_HbyA_AP
函数 - 组建压力泊松方程,由 H b y A ∣ ∗ HbyA\big|^* HbyA∣∣∗计算 p p p,记为 p ∗ p^* p∗,对应
update_pressure_GS
函数 - 由 p ∗ p^* p∗更新速度,对应
update_velo_final
函数 - 计算连续性方程误差,对应
update_continuity_error
函数。开始下一次内循环
- 由 u ∗ , v ∗ u^*,v^* u∗,v∗计算 H b y A ∣ ∗ HbyA\big|^* HbyA∣∣∗,由t_0时刻速度更新 A P A_P AP,对应
- 时间推进,重复以上步骤
可以看出,以上步骤对应PISO算法
2.3. 注意事项
-
由 t 0 t_0 t0时刻推进到 t 1 t_1 t1时刻的过程中,假设求出了中间速度 U ∗ U^* U∗
- 系数 A P , A N A_P,A_N AP,AN均由 t 0 t_0 t0时刻的速度求解
HbyA
由最新速度 U ∗ U^* U∗更新
-
压力泊松方程中,不要忘记 V P V_P VP,推导过程中很容易忽视 V P ∇ p = ∑ p f S V_P \nabla p = \sum p_f S VP∇p=∑pfS,有了