學習自F. Moukalled, L. Mangani, M. Darwish所著The Finite Volume Method in Computational Fluid Dynamics - An Advanced Introduction with OpenFOAM and Matlab Chapter 9 Gradient Computationhtml
FVM in CFD 學習筆記_第9章_梯度計算
在CFD的FVM的離散過程當中,在單元形心和麪形心處變量
ϕ
\phi
ϕ 的梯度是經常要用到的物理量,那麼如何由單元形心處的變量
ϕ
\phi
ϕ 來獲取單元形心和麪形心處的變量
ϕ
\phi
ϕ 的梯度
∇
ϕ
\nabla \phi
∇ ϕ 呢?本節便講講FVM in CFD中梯度的計算方法。web
1 笛卡爾網格上梯度的計算
因爲笛卡爾網格橫平豎直,有很好的正交特性,因此梯度的計算變得十分簡單快捷了,對於1維問題,且均勻網格,則面
e
e
e 上的變量梯度可直接得出:數組
(
∂
ϕ
∂
x
)
e
=
ϕ
E
−
ϕ
C
x
E
−
x
C
=
ϕ
E
−
ϕ
C
δ
x
e
\left(\frac{\partial\phi}{\partial x}\right)_e=\frac{\phi_E-\phi_C}{x_E-x_C}=\frac{\phi_E-\phi_C}{\delta x_e}
( ∂ x ∂ ϕ ) e = x E − x C ϕ E − ϕ C = δ x e ϕ E − ϕ C 單元形心
C
C
C 處的變量梯度也可得出
(
∂
ϕ
∂
x
)
C
=
ϕ
e
−
ϕ
w
x
e
−
x
w
=
ϕ
E
+
ϕ
C
2
−
ϕ
C
+
ϕ
W
2
Δ
x
C
=
ϕ
E
−
ϕ
W
2
Δ
x
C
\left(\frac{\partial\phi}{\partial x}\right)_C=\frac{\phi_e-\phi_w}{x_e-x_w}=\frac{\displaystyle \frac{\phi_E+\phi_C}{2}-\frac{\phi_C+\phi_W}{2}}{\Delta x_C}=\frac{\phi_E-\phi_W}{2 \Delta x_C}
( ∂ x ∂ ϕ ) C = x e − x w ϕ e − ϕ w = Δ x C 2 ϕ E + ϕ C − 2 ϕ C + ϕ W = 2 Δ x C ϕ E − ϕ W 這個常叫作「中心差分」,對於2維狀況,與此相似,可得
(
∂
ϕ
∂
x
)
C
=
ϕ
E
−
ϕ
W
x
E
−
x
W
,
(
∂
ϕ
∂
y
)
C
=
ϕ
N
−
ϕ
S
x
N
−
x
S
\left(\frac{\partial\phi}{\partial x}\right)_C=\frac{\phi_E-\phi_W}{x_E-x_W},\quad \left(\frac{\partial\phi}{\partial y}\right)_C=\frac{\phi_N-\phi_S}{x_N-x_S}
( ∂ x ∂ ϕ ) C = x E − x W ϕ E − ϕ W , ( ∂ y ∂ ϕ ) C = x N − x S ϕ N − ϕ S 當處理非正交網格或非結構網格時,狀況就複雜得多了,這就須要用到更加通用方法,即Green-Gauss梯度法和最小二乘梯度法等。app
2 Green-Gauss Gradient(格林-高斯梯度)
這是計算梯度方法中應用最廣的一個,即,單元形心處變量的梯度能夠由面形心處的變量值與面積矢量複合後相加和除以單元體積來獲取,用到的數學定理是Green-Gauss或梯度定理,即
∫
V
∇
ϕ
d
V
=
∮
∂
V
ϕ
d
S
⃗
⇒
∇
ϕ
‾
V
=
∮
∂
V
ϕ
d
S
⃗
⇒
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\int_V\nabla\phi dV=\oint_{\partial V}\phi d\vec S \Rightarrow \overline{\nabla\phi} V =\oint_{\partial V}\phi d\vec S \Rightarrow \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_f \vec S_f
∫ V ∇ ϕ d V = ∮ ∂ V ϕ d S
⇒ ∇ ϕ V = ∮ ∂ V ϕ d S
⇒ ∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f 即
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_f \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f 其中
V
C
V_C
V C 爲單元體積,
f
f
f 表明單元的某個面,而
S
⃗
f
\vec S_f
S
f 爲該面的面積矢量,面形心的變量值
ϕ
f
\phi_f
ϕ f 是未知的,仍舊須要計算出來,否則上面這個公式是用不了的。
ϕ
f
\phi_f
ϕ f 的計算方法有兩種,一是用緊緻框架(compact stencil)由面左右單元(所屬單元和鄰居單元,即面兩側單元)形心值來計算,二是用擴展框架(extended stencil)先用面的角點周圍單元上的值來獲得面的角點值,而後再由角點值來平均獲得面形心的值。框架
方法1:緊緻框架
對於上圖(a)和(b)所示的2維和3維狀況,一種最簡單的方法是直接由面兩側單元形心值平均來得到面上變量的值,即
ϕ
f
=
g
C
ϕ
C
+
(
1
−
g
C
)
ϕ
F
\phi_f=g_C\phi_C+(1-g_C)\phi_F
ϕ f = g C ϕ C + ( 1 − g C ) ϕ F 其中
g
C
g_C
g C 爲幾何權重係數,等於
g
C
=
∣
∣
r
⃗
F
−
r
⃗
f
∣
∣
∣
∣
r
⃗
F
−
r
⃗
C
∣
∣
=
d
F
f
d
F
C
g_C=\frac{||\vec r_F-\vec r_f||}{||\vec r_F-\vec r_C||}=\frac{d_{Ff}}{d_{FC}}
g C = ∣ ∣ r
F − r
C ∣ ∣ ∣ ∣ r
F − r
f ∣ ∣ = d F C d F f 其中
r
⃗
\vec r
r
爲距離矢量,而
d
d
d 爲兩點之間的距離值,若該面剛好位於兩單元中心的中間位置,則有
ϕ
f
=
ϕ
C
+
ϕ
F
2
\phi_f=\frac{\phi_C+\phi_F}{2}
ϕ f = 2 ϕ C + ϕ F 這個方法很是簡便易行,然而遺憾的是,只有當線段
C
F
CF
C F 和麪
S
⃗
f
\vec S_f
S
f 的交點與面
S
⃗
f
\vec S_f
S
f 的中心重合時(即上圖(a)(b)狀況),該方法才能保證2階精度,而大多數狀況下,直接由上式算得的梯度精度是無法保證的。ide
然而,對於一般的非正交網格和非結構網格來講,是沒有辦法來保證這個條件的,好比上圖中的(c)(d)狀況,網格的偏斜(非正交,skewness(non-conjunctionality))使得線段
C
F
CF
C F 和麪
S
⃗
f
\vec S_f
S
f 交點爲
f
′
f'
f ′ ,與面形心
f
f
f 是不重合的。此時,須要把插值獲得的
ϕ
f
′
\phi_{f'}
ϕ f ′ 修正以獲得
ϕ
f
\phi_f
ϕ f ,修正方程爲
ϕ
f
=
ϕ
f
′
+
c
o
r
r
e
c
t
i
o
n
=
ϕ
f
′
+
(
∇
ϕ
)
f
′
⋅
(
r
⃗
f
−
r
⃗
f
′
)
\phi_f=\phi_{f'}+correction=\phi_{f'}+(\nabla\phi)_{f'}\cdot(\vec r_f-\vec r_{f'})
ϕ f = ϕ f ′ + c o r r e c t i o n = ϕ f ′ + ( ∇ ϕ ) f ′ ⋅ ( r
f − r
f ′ ) 即,用梯度
(
∇
ϕ
)
f
′
(\nabla\phi)_{f'}
( ∇ ϕ ) f ′ 來修正,修正也能夠展開爲以下形式:
ϕ
f
=
g
C
{
ϕ
C
+
(
∇
ϕ
)
C
⋅
(
r
⃗
f
−
r
⃗
C
)
}
+
(
1
−
g
C
)
{
ϕ
F
+
(
∇
ϕ
)
F
⋅
(
r
⃗
f
−
r
⃗
F
)
}
=
ϕ
f
′
+
g
C
(
∇
ϕ
)
C
⋅
(
r
⃗
f
−
r
⃗
C
)
+
(
1
−
g
C
)
(
∇
ϕ
)
F
⋅
(
r
⃗
f
−
r
⃗
F
)
\phi_f=g_C\{\phi_C+(\nabla\phi)_C\cdot(\vec r_f-\vec r_C)\}+(1-g_C)\{ \phi_F+(\nabla\phi)_F\cdot(\vec r_f-\vec r_F) \}\\ \quad \\ =\phi_{f'}+g_C(\nabla\phi)_C\cdot(\vec r_f-\vec r_C)+(1-g_C)(\nabla\phi)_F\cdot(\vec r_f-\vec r_F)
ϕ f = g C { ϕ C + ( ∇ ϕ ) C ⋅ ( r
f − r
C ) } + ( 1 − g C ) { ϕ F + ( ∇ ϕ ) F ⋅ ( r
f − r
F ) } = ϕ f ′ + g C ( ∇ ϕ ) C ⋅ ( r
f − r
C ) + ( 1 − g C ) ( ∇ ϕ ) F ⋅ ( r
f − r
F ) 即,
{
ϕ
C
+
(
∇
ϕ
)
C
⋅
(
r
⃗
f
−
r
⃗
C
)
}
\{\phi_C+(\nabla\phi)_C\cdot(\vec r_f-\vec r_C)\}
{ ϕ C + ( ∇ ϕ ) C ⋅ ( r
f − r
C ) } 是把
C
C
C 處的值修正到
f
f
f 處,而
{
ϕ
F
+
(
∇
ϕ
)
F
⋅
(
r
⃗
f
−
r
⃗
F
)
}
\{ \phi_F+(\nabla\phi)_F\cdot(\vec r_f-\vec r_F) \}
{ ϕ F + ( ∇ ϕ ) F ⋅ ( r
f − r
F ) } 是把
F
F
F 處的值修正到
f
f
f 處,而後再作加權插值處理,就獲得了
ϕ
f
\phi_f
ϕ f 。svg
不難發現,
ϕ
f
\phi_f
ϕ f 的修正計算要用到
(
∇
ϕ
)
C
(\nabla\phi)_C
( ∇ ϕ ) C 和
(
∇
ϕ
)
F
(\nabla\phi)_F
( ∇ ϕ ) F ,而
(
∇
ϕ
)
C
(\nabla\phi)_C
( ∇ ϕ ) C 和
(
∇
ϕ
)
F
(\nabla\phi)_F
( ∇ ϕ ) F 則是用
ϕ
f
\phi_f
ϕ f 算得的,也就是說,這裏
ϕ
f
\phi_f
ϕ f 的計算是不能一蹴而就的,而是一個迭代計算的過程,可是過多的迭代反而會形成解的振盪,通常作兩次迭代就行了。函數
另外,
g
C
g_C
g C 是與點
f
′
f'
f ′ 的位置密切相關的,有三種選擇方式:學習
選擇1
點
f
′
f'
f ′ 就選擇在線段
C
F
CF
C F 和麪
S
⃗
f
\vec S_f
S
f 的交點處,以
n
⃗
\vec n
n
表明面積單位矢量,即,
n
⃗
=
S
⃗
f
/
∣
∣
S
⃗
f
∣
∣
\vec n=\vec S_f/||\vec S_f||
n
= S
f / ∣ ∣ S
f ∣ ∣ ,以
e
⃗
\vec e
e
表明沿着
C
F
CF
C F 的單位矢量,即
e
⃗
=
C
F
→
/
∣
∣
C
F
→
∣
∣
\vec e=\overrightarrow{CF}/||\overrightarrow{CF}||
e
= C F
/ ∣ ∣ C F
∣ ∣ ,則
f
′
f'
f ′ 的位置可由幾何關係算出,爲
r
⃗
f
′
=
(
r
⃗
f
−
r
⃗
C
)
⋅
n
⃗
e
⃗
⋅
n
⃗
e
⃗
+
r
⃗
C
=
r
⃗
f
⋅
n
⃗
e
⃗
⋅
n
⃗
e
⃗
\vec r_{f'}=\frac{(\vec r_f - \vec r_C) \cdot \vec n}{\vec e \cdot \vec n}\vec e+\vec r_C=\frac{\vec r_f \cdot \vec n}{\vec e \cdot \vec n}\vec e
r
f ′ = e
⋅ n
( r
f − r
C ) ⋅ n
e
+ r
C = e
⋅ n
r
f ⋅ n
e
其中,
(
r
⃗
f
−
r
⃗
C
)
⋅
n
⃗
(\vec r_f - \vec r_C) \cdot \vec n
( r
f − r
C ) ⋅ n
爲點
C
C
C 到面
S
⃗
f
\vec S_f
S
f 的垂直距離向量,分母
e
⃗
⋅
n
⃗
\vec e \cdot \vec n
e
⋅ n
爲該垂直向量與
C
F
→
\overrightarrow{CF}
C F
夾角的餘弦值
c
o
s
θ
cos\theta
c o s θ ,因而二者相除便獲得了
C
C
C 到
f
′
f'
f ′ 的向量
C
f
′
→
\overrightarrow{Cf'}
C f ′
,再與
r
⃗
C
\vec r_C
r
C 相加即是點
f
′
f'
f ′ 的位置矢量。 獲得
f
′
f'
f ′ 的位置後,能夠直接算出
g
C
g_C
g C 的值
g
C
=
∣
∣
r
⃗
F
−
r
⃗
f
′
∣
∣
∣
∣
r
⃗
F
−
r
⃗
C
∣
∣
=
d
F
f
′
d
F
C
g_C=\frac{||\vec r_F - \vec r_{f'}||}{||\vec r_F - \vec r_{C}||}=\frac{d_{Ff'}}{d_{FC}}
g C = ∣ ∣ r
F − r
C ∣ ∣ ∣ ∣ r
F − r
f ′ ∣ ∣ = d F C d F f ′ 計算流程以下:ui
計算
ϕ
f
′
\phi_{f'}
ϕ f ′ 使用
ϕ
f
′
=
g
C
ϕ
C
+
(
1
−
g
C
)
ϕ
F
\phi_{f'}=g_C\phi_C+(1-g_C)\phi_F
ϕ f ′ = g C ϕ C + ( 1 − g C ) ϕ F
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
′
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f'} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f ′ S
f 接下來用下面步驟來修正梯度場
更新
ϕ
f
\phi_{f}
ϕ f 使用
ϕ
f
=
ϕ
f
′
+
g
C
(
∇
ϕ
)
C
⋅
(
r
⃗
f
−
r
⃗
C
)
+
(
1
−
g
C
)
(
∇
ϕ
)
F
⋅
(
r
⃗
f
−
r
⃗
F
)
\phi_f=\phi_{f'}+g_C(\nabla\phi)_C\cdot(\vec r_f-\vec r_C)+(1-g_C)(\nabla\phi)_F\cdot(\vec r_f-\vec r_F)
ϕ f = ϕ f ′ + g C ( ∇ ϕ ) C ⋅ ( r
f − r
C ) + ( 1 − g C ) ( ∇ ϕ ) F ⋅ ( r
f − r
F )
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f
返回步驟3再迭代一次。
選擇2
點
f
′
f'
f ′ 就選擇在線段
C
F
CF
C F 的中點,至關於
g
C
=
0.5
g_C=0.5
g C = 0 . 5 ,這就使得計算簡單多了,其計算流程以下:
計算
ϕ
f
′
\phi_{f'}
ϕ f ′ 使用
ϕ
f
′
=
ϕ
C
+
ϕ
F
2
\displaystyle \phi_{f'}=\frac{\phi_C+\phi_F}{2}
ϕ f ′ = 2 ϕ C + ϕ F
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
′
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f'} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f ′ S
f 接下來用下面步驟來修正梯度場
更新
ϕ
f
\phi_{f}
ϕ f 使用
ϕ
f
=
ϕ
f
′
+
(
∇
ϕ
)
C
+
(
∇
ϕ
)
F
2
⋅
(
r
⃗
f
−
r
⃗
C
+
r
⃗
F
2
)
\displaystyle \phi_f=\phi_{f'}+\frac{(\nabla\phi)_C+(\nabla\phi)_F}{2}\cdot\left(\vec r_f-\frac{\vec r_C+\vec r_F}{2}\right)
ϕ f = ϕ f ′ + 2 ( ∇ ϕ ) C + ( ∇ ϕ ) F ⋅ ( r
f − 2 r
C + r
F )
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f
返回步驟3再迭代一次。
選擇3
點
f
′
f'
f ′ 的位置選擇要保證距離
f
f
′
ff'
f f ′ 是最短的,即,
f
f
′
ff'
f f ′ 是垂直於
C
F
CF
C F 的,這使得第1步迭代計算變得更加準確。
f
′
f'
f ′ 的位置計算很簡單,直接把向量
C
f
→
\overrightarrow {Cf}
C f
投影到
C
F
→
\overrightarrow {CF}
C F
上就妥了,即
r
⃗
f
′
=
r
⃗
C
+
r
⃗
C
f
⋅
r
⃗
C
F
r
⃗
C
F
⋅
r
⃗
C
F
(
r
⃗
F
−
r
⃗
C
)
\vec r_{f'}=\vec r_C+\frac{\vec r_{Cf} \cdot \vec r_{CF}}{\vec r_{CF} \cdot \vec r_{CF}}(\vec r_F-\vec r_C)
r
f ′ = r
C + r
C F ⋅ r
C F r
C f ⋅ r
C F ( r
F − r
C ) 其計算流程以下:
計算
r
⃗
f
′
\vec r_{f'}
r
f ′ 使用
r
⃗
f
′
=
r
⃗
C
+
r
⃗
C
f
⋅
r
⃗
C
F
r
⃗
C
F
⋅
r
⃗
C
F
(
r
⃗
F
−
r
⃗
C
)
\displaystyle\vec r_{f'}=\vec r_C+\frac{\vec r_{Cf} \cdot \vec r_{CF}}{\vec r_{CF} \cdot \vec r_{CF}}(\vec r_F-\vec r_C)
r
f ′ = r
C + r
C F ⋅ r
C F r
C f ⋅ r
C F ( r
F − r
C )
計算
g
C
g_C
g C 使用
g
C
=
∣
∣
r
⃗
F
−
r
⃗
f
′
∣
∣
∣
∣
r
⃗
F
−
r
⃗
C
∣
∣
\displaystyle g_C=\frac{||\vec r_F - \vec r_{f'}||}{||\vec r_F - \vec r_C||}
g C = ∣ ∣ r
F − r
C ∣ ∣ ∣ ∣ r
F − r
f ′ ∣ ∣
計算
ϕ
f
′
\phi_{f'}
ϕ f ′ 使用
ϕ
f
′
=
g
C
ϕ
C
+
(
1
−
g
C
)
ϕ
F
\phi_{f'}=g_C\phi_C+(1-g_C)\phi_F
ϕ f ′ = g C ϕ C + ( 1 − g C ) ϕ F
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
′
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f'} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f ′ S
f 接下來用下面步驟來修正梯度場
計算
∇
ϕ
f
′
\nabla\phi_{f'}
∇ ϕ f ′ 使用
∇
ϕ
f
′
=
g
C
∇
ϕ
C
+
(
1
−
g
C
)
∇
ϕ
F
\nabla\phi_{f'}=g_C\nabla\phi_C+(1-g_C)\nabla\phi_F
∇ ϕ f ′ = g C ∇ ϕ C + ( 1 − g C ) ∇ ϕ F
更新
ϕ
f
\phi_{f}
ϕ f 使用
ϕ
f
=
ϕ
f
′
+
∇
ϕ
f
′
⋅
(
r
⃗
f
−
r
⃗
f
′
)
\phi_f=\phi_{f'}+\nabla\phi_{f'}\cdot(\vec r_f-\vec r_{f'})
ϕ f = ϕ f ′ + ∇ ϕ f ′ ⋅ ( r
f − r
f ′ )
計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f
返回步驟5再迭代一次。
例1 上圖所示網格,單元形心
C
C
C 與其鄰近單元形心
F
1
F_1
F 1 到
F
6
F_6
F 6 的座標爲
C
(
13
,
11
)
,
F
1
(
4.5
,
9.5
)
,
F
2
(
8
,
3
)
,
F
3
(
17
,
3.5
)
,
F
4
(
22
,
10
)
,
F
5
(
16
,
20
)
,
F
6
(
7
,
18
)
C(13, 11), \quad F_1(4.5,9.5), \quad F_2(8,3), \quad F_3(17,3.5), \quad F_4(22,10), \quad F_5(16,20), \quad F_6(7,18)
C ( 1 3 , 1 1 ) , F 1 ( 4 . 5 , 9 . 5 ) , F 2 ( 8 , 3 ) , F 3 ( 1 7 , 3 . 5 ) , F 4 ( 2 2 , 1 0 ) , F 5 ( 1 6 , 2 0 ) , F 6 ( 7 , 1 8 ) 角點
n
1
n_1
n 1 到
n
2
n_2
n 2 的座標爲
n
1
(
9
,
14
)
,
n
2
(
8
,
8
)
,
n
3
(
12
,
5
)
,
n
4
(
17
,
9
)
,
n
5
(
17.5
,
14
)
,
n
6
(
12
,
17
)
n_1(9,14), \quad n_2(8,8), \quad n_3(12,5), \quad n_4(17,9), \quad n_5(17.5,14), \quad n_6(12,17)
n 1 ( 9 , 1 4 ) , n 2 ( 8 , 8 ) , n 3 ( 1 2 , 5 ) , n 4 ( 1 7 , 9 ) , n 5 ( 1 7 . 5 , 1 4 ) , n 6 ( 1 2 , 1 7 ) 變量
ϕ
\phi
ϕ 在單元形心的值爲
ϕ
C
=
167
,
ϕ
F
1
=
56.75
,
ϕ
F
2
=
35
,
ϕ
F
3
=
80
,
ϕ
F
4
=
252
,
ϕ
F
5
=
356
,
ϕ
F
6
=
151
\phi_C=167, \quad \phi_{F_1}=56.75, \quad \phi_{F_2}=35, \quad \phi_{F_3}=80, \quad \phi_{F_4}=252, \quad \phi_{F_5}=356, \quad\phi_{F_6}=151
ϕ C = 1 6 7 , ϕ F 1 = 5 6 . 7 5 , ϕ F 2 = 3 5 , ϕ F 3 = 8 0 , ϕ F 4 = 2 5 2 , ϕ F 5 = 3 5 6 , ϕ F 6 = 1 5 1 C單元的鄰近單元形心處變量
ϕ
\phi
ϕ 的梯度值
∇
ϕ
\nabla\phi
∇ ϕ 爲
∇
ϕ
F
1
=
10.5
i
+
5.5
j
,
∇
ϕ
F
2
=
4
i
+
9
j
,
∇
ϕ
F
3
=
4.5
i
+
18
j
,
∇
ϕ
F
4
=
11
i
+
23
j
,
∇
ϕ
F
5
=
21
i
+
17
j
,
∇
ϕ
F
6
=
19
i
+
8
j
\nabla\phi_{F_1}=10.5\bold i+5.5 \bold j ,\quad \nabla\phi_{F_2}=4\bold i+9 \bold j, \quad \nabla\phi_{F_3}=4.5\bold i+18 \bold j, \\ \nabla\phi_{F_4}=11 \bold i+23 \bold j, \quad \nabla\phi_{F_5}=21 \bold i+17 \bold j, \quad \nabla\phi_{F_6}=19\bold i+8 \bold j
∇ ϕ F 1 = 1 0 . 5 i + 5 . 5 j , ∇ ϕ F 2 = 4 i + 9 j , ∇ ϕ F 3 = 4 . 5 i + 1 8 j , ∇ ϕ F 4 = 1 1 i + 2 3 j , ∇ ϕ F 5 = 2 1 i + 1 7 j , ∇ ϕ F 6 = 1 9 i + 8 j 單元C的體積
V
C
=
76
V_C=76
V C = 7 6 求解單元C形心處的梯度值
∇
ϕ
C
\nabla\phi_C
∇ ϕ C ,使用以下方法: a. Green-Gauss方法,不含修正 b. Green-Gauss方法,含skewness correction,
f
′
f'
f ′ 選擇爲線段CF的中點
解法a. Green-Gauss方法求解
∇
ϕ
C
\nabla\phi_C
∇ ϕ C ,不含修正 計算面形心(2維狀況下就是面中心)座標值
x
f
1
=
(
x
n
1
+
x
n
2
)
/
2
=
(
9
+
8
)
/
2
=
8.5
y
f
1
=
(
y
n
1
+
y
n
2
)
/
2
=
(
14
+
8
)
/
2
=
11
x_{f_1}=(x_{n_1}+x_{n_2})/2=(9+8)/2=8.5 \\ y_{f_1}=(y_{n_1}+y_{n_2})/2=(14+8)/2=11
x f 1 = ( x n 1 + x n 2 ) / 2 = ( 9 + 8 ) / 2 = 8 . 5 y f 1 = ( y n 1 + y n 2 ) / 2 = ( 1 4 + 8 ) / 2 = 1 1 即
f
1
(
8.5
,
11
)
f_1(8.5, 11)
f 1 ( 8 . 5 , 1 1 ) 一樣方法算得單元C的其他面的形心座標
f
2
(
10
,
6.5
)
,
f
3
(
14.5
,
7
)
,
f
4
(
17.25
,
11.5
)
,
f
5
(
14.75
,
15.5
)
,
f
6
(
10.5
,
15.5
)
f_2(10, 6.5), \quad f_3(14.5, 7), \quad f_4(17.25, 11.5), \quad f_5(14.75, 15.5), \quad f_6(10.5,15.5)
f 2 ( 1 0 , 6 . 5 ) , f 3 ( 1 4 . 5 , 7 ) , f 4 ( 1 7 . 2 5 , 1 1 . 5 ) , f 5 ( 1 4 . 7 5 , 1 5 . 5 ) , f 6 ( 1 0 . 5 , 1 5 . 5 ) 計算面積矢量
S
⃗
f
1
\vec S_{f_1}
S
f 1
S
⃗
f
1
=
Δ
y
i
−
Δ
x
j
=
(
y
n
2
−
y
n
1
)
i
−
(
x
n
2
−
x
n
1
)
j
=
(
8
−
14
)
i
−
(
8
−
9
)
j
=
−
6
i
+
j
\vec S_{f_1}=\Delta y\bold i - \Delta x\bold j=(y_{n_2}-y_{n_1})\bold i - (x_{n_2}-x_{n_1}) \bold j \\ =(8-14)\bold i - (8-9) \bold j=-6\bold i + \bold j
S
f 1 = Δ y i − Δ x j = ( y n 2 − y n 1 ) i − ( x n 2 − x n 1 ) j = ( 8 − 1 4 ) i − ( 8 − 9 ) j = − 6 i + j 一樣方法算得其他面的面積矢量
S
⃗
f
2
=
−
3
i
−
4
j
S
⃗
f
3
=
4
i
−
5
j
S
⃗
f
4
=
5
i
−
0.5
j
S
⃗
f
5
=
3
i
+
5.5
j
S
⃗
f
6
=
−
3
i
+
3
j
\vec S_{f_2}=-3\bold i -4 \bold j \quad \vec S_{f_3}=4\bold i -5 \bold j \quad \vec S_{f_4}=5\bold i -0.5 \bold j \quad \vec S_{f_5}=3\bold i +5.5 \bold j \quad \vec S_{f_6}=-3\bold i +3 \bold j
S
f 2 = − 3 i − 4 j S
f 3 = 4 i − 5 j S
f 4 = 5 i − 0 . 5 j S
f 5 = 3 i + 5 . 5 j S
f 6 = − 3 i + 3 j 計算插值係數
g
C
1
g_{C_1}
g C 1
g
C
1
=
F
1
f
1
F
1
f
1
+
C
f
1
F
1
f
1
=
(
4.5
−
8.5
)
2
+
(
9.5
−
11
)
2
=
4.272
C
f
1
=
(
13
−
8.5
)
2
+
(
11
−
11
)
2
=
4.5
g_{C_1}=\frac{F_1 f_1}{F_1 f_1+Cf_1} \\ \quad \\ F_1 f_1=\sqrt{(4.5-8.5)^2+(9.5-11)^2}=4.272 \\ \quad \\ Cf_1=\sqrt{(13-8.5)^2+(11-11)^2}=4.5
g C 1 = F 1 f 1 + C f 1 F 1 f 1 F 1 f 1 = ( 4 . 5 − 8 . 5 ) 2 + ( 9 . 5 − 1 1 ) 2
= 4 . 2 7 2 C f 1 = ( 1 3 − 8 . 5 ) 2 + ( 1 1 − 1 1 ) 2
= 4 . 5 算得
g
C
1
=
0.487
g_{C_1}=0.487
g C 1 = 0 . 4 8 7 一樣,算得其它面的插值係數
g
C
2
=
0.427
,
g
C
3
=
0.502
,
g
C
4
=
0.538
,
g
C
5
=
0.492
,
g
C
6
=
0.455
g_{C_2}=0.427, \quad g_{C_3}=0.502, \quad g_{C_4}=0.538, \quad g_{C_5}=0.492, \quad g_{C_6}=0.455
g C 2 = 0 . 4 2 7 , g C 3 = 0 . 5 0 2 , g C 4 = 0 . 5 3 8 , g C 5 = 0 . 4 9 2 , g C 6 = 0 . 4 5 5 計算面形心的變量值
ϕ
f
\phi_f
ϕ f
ϕ
f
1
=
g
C
1
ϕ
C
+
(
1
−
g
C
1
)
ϕ
F
1
=
0.487
∗
167
+
(
1
−
0.487
)
∗
56.75
=
110.442
\phi_{f_1}=g_{C_1}\phi_C+(1-g_{C_1})\phi_{F_1}=0.487*167+(1-0.487)*56.75=110.442
ϕ f 1 = g C 1 ϕ C + ( 1 − g C 1 ) ϕ F 1 = 0 . 4 8 7 ∗ 1 6 7 + ( 1 − 0 . 4 8 7 ) ∗ 5 6 . 7 5 = 1 1 0 . 4 4 2 一樣算得其它面形心的變量值
ϕ
f
2
=
91.364
,
ϕ
f
3
=
123.674
,
ϕ
f
4
=
206.27
,
ϕ
f
5
=
263.012
,
ϕ
f
6
=
158.28
\phi_{f_2}=91.364, \quad \phi_{f_3}=123.674, \quad \phi_{f_4}=206.27, \quad \phi_{f_5}=263.012, \quad \phi_{f_6}=158.28
ϕ f 2 = 9 1 . 3 6 4 , ϕ f 3 = 1 2 3 . 6 7 4 , ϕ f 4 = 2 0 6 . 2 7 , ϕ f 5 = 2 6 3 . 0 1 2 , ϕ f 6 = 1 5 8 . 2 8 計算單元形心C處的梯度值
∇
ϕ
C
=
1
V
C
∑
f
=
1
6
ϕ
f
S
⃗
f
=
1
76
{
[
110.442
(
−
6
i
+
j
)
+
91.364
(
3
i
−
4
j
)
+
123.674
(
4
i
−
5
j
)
+
206.27
(
5
i
−
0.5
j
)
+
263.012
(
3
i
+
5.5
j
)
+
158.28
(
−
3
i
+
3
j
)
]
}
=
11.889
i
+
12.433
j
\nabla\phi_C = \frac{1}{V_C}\sum_{f=1}^6\phi_{f} \vec S_f \\ =\frac{1}{76}\left\{ \begin{bmatrix} 110.442(-6\bold i + \bold j)+91.364(3\bold i -4 \bold j)+123.674(4\bold i -5 \bold j) \\ +206.27(5\bold i -0.5 \bold j)+263.012(3\bold i +5.5 \bold j)+158.28(-3\bold i +3 \bold j) \end{bmatrix} \right\} \\ = 11.889 \bold i +12.433 \bold j
∇ ϕ C = V C 1 f = 1 ∑ 6 ϕ f S
f = 7 6 1 { [ 1 1 0 . 4 4 2 ( − 6 i + j ) + 9 1 . 3 6 4 ( 3 i − 4 j ) + 1 2 3 . 6 7 4 ( 4 i − 5 j ) + 2 0 6 . 2 7 ( 5 i − 0 . 5 j ) + 2 6 3 . 0 1 2 ( 3 i + 5 . 5 j ) + 1 5 8 . 2 8 ( − 3 i + 3 j ) ] } = 1 1 . 8 8 9 i + 1 2 . 4 3 3 j
解法b. Green-Gauss方法,含skewness correction,
f
′
f'
f ′ 選擇爲線段CF的中點 計算CF的中點
f
′
f'
f ′ 處的變量值,使用公式
ϕ
f
′
=
(
ϕ
C
+
ϕ
F
)
/
2
\displaystyle \phi_{f'}=(\phi_C+\phi_F)/2
ϕ f ′ = ( ϕ C + ϕ F ) / 2 ,得
ϕ
f
1
=
111.875
,
ϕ
f
2
=
101
ϕ
f
3
=
123.5
,
ϕ
f
4
=
209.5
,
ϕ
f
5
=
261.5
,
ϕ
f
6
=
159
\phi_{f_1}=111.875, \quad \phi_{f_2}=101 \quad \phi_{f_3}=123.5, \quad \phi_{f_4}=209.5, \quad \phi_{f_5}=261.5, \quad \phi_{f_6}=159
ϕ f 1 = 1 1 1 . 8 7 5 , ϕ f 2 = 1 0 1 ϕ f 3 = 1 2 3 . 5 , ϕ f 4 = 2 0 9 . 5 , ϕ f 5 = 2 6 1 . 5 , ϕ f 6 = 1 5 9 計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
′
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f'} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f ′ S
f ,得
∇
ϕ
C
=
1
V
C
∑
f
=
1
6
ϕ
f
S
⃗
f
=
1
76
{
[
111.875
(
−
6
i
+
j
)
+
101
(
3
i
−
4
j
)
+
123.5
(
4
i
−
5
j
)
+
209.5
(
5
i
−
0.5
j
)
+
261.5
(
3
i
+
5.5
j
)
+
159
(
−
3
i
+
3
j
)
]
}
=
11.510
i
+
11.854
j
\nabla\phi_C = \frac{1}{V_C}\sum_{f=1}^6\phi_{f} \vec S_f \\ =\frac{1}{76}\left\{ \begin{bmatrix} 111.875(-6\bold i + \bold j)+101(3\bold i -4 \bold j)+123.5(4\bold i -5 \bold j) \\ +209.5(5\bold i -0.5 \bold j)+261.5(3\bold i +5.5 \bold j)+159(-3\bold i +3 \bold j) \end{bmatrix} \right\} \\ = 11.510 \bold i + 11.854 \bold j
∇ ϕ C = V C 1 f = 1 ∑ 6 ϕ f S
f = 7 6 1 { [ 1 1 1 . 8 7 5 ( − 6 i + j ) + 1 0 1 ( 3 i − 4 j ) + 1 2 3 . 5 ( 4 i − 5 j ) + 2 0 9 . 5 ( 5 i − 0 . 5 j ) + 2 6 1 . 5 ( 3 i + 5 . 5 j ) + 1 5 9 ( − 3 i + 3 j ) ] } = 1 1 . 5 1 0 i + 1 1 . 8 5 4 j 接下來修正梯度值 計算
d
⃗
f
=
r
⃗
f
−
r
⃗
C
+
r
⃗
F
2
\displaystyle \vec d_f = \vec r_f-\frac{\vec r_C+\vec r_F}{2}
d
f = r
f − 2 r
C + r
F ,得
d
⃗
f
1
=
−
0.25
i
+
0.75
j
,
d
⃗
f
2
=
−
0.5
i
−
0.5
j
,
d
⃗
f
3
=
−
0.5
i
−
0.25
j
,
d
⃗
f
4
=
−
0.25
i
+
j
,
d
⃗
f
5
=
−
0.25
i
,
d
⃗
f
6
=
0.5
i
+
j
\vec d_{f_1}=-0.25\bold i + 0.75\bold j, \quad \vec d_{f_2}=-0.5\bold i -0.5\bold j, \quad \vec d_{f_3}=-0.5\bold i -0.25\bold j, \\ \vec d_{f_4}=-0.25\bold i + \bold j, \quad \vec d_{f_5}=-0.25\bold i, \quad \vec d_{f_6}=0.5\bold i + \bold j
d
f 1 = − 0 . 2 5 i + 0 . 7 5 j , d
f 2 = − 0 . 5 i − 0 . 5 j , d
f 3 = − 0 . 5 i − 0 . 2 5 j , d
f 4 = − 0 . 2 5 i + j , d
f 5 = − 0 . 2 5 i , d
f 6 = 0 . 5 i + j 更新
ϕ
f
\phi_{f}
ϕ f 使用
ϕ
f
=
ϕ
f
′
+
(
∇
ϕ
)
C
+
(
∇
ϕ
)
F
2
⋅
(
r
⃗
f
−
r
⃗
C
+
r
⃗
F
2
)
\displaystyle \phi_f=\phi_{f'}+\frac{(\nabla\phi)_C+(\nabla\phi)_F}{2}\cdot\left(\vec r_f-\frac{\vec r_C+\vec r_F}{2}\right)
ϕ f = ϕ f ′ + 2 ( ∇ ϕ ) C + ( ∇ ϕ ) F ⋅ ( r
f − 2 r
C + r
F ) ,得
ϕ
f
1
=
115.631
,
ϕ
f
2
=
91.909
ϕ
f
3
=
115.766
,
ϕ
f
4
=
224.113
ϕ
f
5
=
265.564
,
ϕ
f
6
=
176.554
\phi_{f_1}=115.631, \quad \phi_{f_2}=91.909 \quad \phi_{f_3}=115.766, \quad \phi_{f_4}=224.113 \quad \phi_{f_5}=265.564, \quad \phi_{f_6}=176.554
ϕ f 1 = 1 1 5 . 6 3 1 , ϕ f 2 = 9 1 . 9 0 9 ϕ f 3 = 1 1 5 . 7 6 6 , ϕ f 4 = 2 2 4 . 1 1 3 ϕ f 5 = 2 6 5 . 5 6 4 , ϕ f 6 = 1 7 6 . 5 5 4 計算
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 使用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f ,得
∇
ϕ
C
=
11.594
i
+
13.781
j
\nabla\phi_C = 11.594 \bold i + 13.781 \bold j
∇ ϕ C = 1 1 . 5 9 4 i + 1 3 . 7 8 1 j 再迭代一次修正過程,得
∇
ϕ
C
=
11.652
i
+
15.793
j
\nabla\phi_C = 11.652 \bold i + 15.793 \bold j
∇ ϕ C = 1 1 . 6 5 2 i + 1 5 . 7 9 3 j 若是繼續迭代修正,你會發現,這個值壓根不會收斂,並且會愈來愈大直至崩潰,也就是說,修正上一次兩次就OK了,既不會浪費時間,也不會讓值太離譜了。
方法2:擴展框架
因爲面是由角點構成的,因此用角點處的值的平均來算得面形心的值就理所固然了,那麼角點處的值要如何獲取呢?用圍繞該角點的單元形心處的值來加權平均計算便可。比較拗口哈,看下圖:
用
F
1
,
F
2
,
F
3
F_1, F_2, F_3
F 1 , F 2 , F 3 處的值來算得
n
1
n_1
n 1 處的值,用
F
2
,
F
3
,
F
4
F_2, F_3, F_4
F 2 , F 3 , F 4 處的值來算得
n
2
n_2
n 2 處的值,最後再用
n
1
,
n
2
n_1,n_2
n 1 , n 2 處的值來算得
f
f
f 處的值,便可。
角點處的值由圍繞角點的單元形心處的值加權平均算出,加權係數取爲距離的倒數(距離越遠,影響越小),即
ϕ
n
=
∑
k
=
1
N
B
(
n
)
ϕ
F
k
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
∑
k
=
1
N
B
(
n
)
1
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
\displaystyle \phi_n=\frac{\displaystyle \sum_{k=1}^{NB(n)}\frac{\phi_{F_k}}{||\vec r_n-\vec r_{F_k}||}}{\displaystyle \sum_{k=1}^{NB(n)} \frac{1}{{||\vec r_n-\vec r_{F_k}||}}}
ϕ n = k = 1 ∑ N B ( n ) ∣ ∣ r
n − r
F k ∣ ∣ 1 k = 1 ∑ N B ( n ) ∣ ∣ r
n − r
F k ∣ ∣ ϕ F k 其中
n
n
n 表明角點,
F
k
F_k
F k 表明鄰近單元,
N
B
(
n
)
NB(n)
N B ( n ) 爲圍繞角點
n
n
n 的單元總數,
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
||\vec r_n-\vec r_{F_k}||
∣ ∣ r
n − r
F k ∣ ∣ 爲角點到鄰近單元形心的距離。
角點值獲得後,面形心的值也可獲得,以2維問題爲例,
ϕ
f
\phi_f
ϕ f 爲
ϕ
f
=
ϕ
n
1
+
ϕ
n
2
2
\phi_f=\frac{\phi_{n1}+\phi_{n2}}{2}
ϕ f = 2 ϕ n 1 + ϕ n 2 緊接着,可算得單元形心的梯度
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 爲
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f 對於3維狀況,面形心的值
ϕ
f
\phi_f
ϕ f 由角點值的距離加權平均計算,即
ϕ
f
=
∑
k
=
1
n
b
(
f
)
ϕ
n
k
∣
∣
r
⃗
f
−
r
⃗
n
k
∣
∣
∑
k
=
1
n
b
(
f
)
1
∣
∣
r
⃗
f
−
r
⃗
n
k
∣
∣
\displaystyle \phi_f=\frac{\displaystyle \sum_{k=1}^{nb(f)}\frac{\phi_{n_k}}{||\vec r_f-\vec r_{n_k}||}}{\displaystyle \sum_{k=1}^{nb(f)} \frac{1}{{||\vec r_f-\vec r_{n_k}||}}}
ϕ f = k = 1 ∑ n b ( f ) ∣ ∣ r
f − r
n k ∣ ∣ 1 k = 1 ∑ n b ( f ) ∣ ∣ r
f − r
n k ∣ ∣ ϕ n k 而單元形心梯度值的計算方法照舊不變。
例2 與例1數據相同,用方法2:擴展框架 計算單元中心梯度值
用方法2:擴展框架計算單元中心梯度值 先計算角點與其周圍單元形心的距離值
d
n
F
k
=
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
d_{nF_k}=||\vec r_n-\vec r_{F_k}||
d n F k = ∣ ∣ r
n − r
F k ∣ ∣ ,得
d
n
1
C
=
5
,
d
n
1
F
6
=
4.472
,
d
n
1
F
1
=
6.364
d_{n_1C}=5, \quad d_{n_1F_6}=4.472, \quad d_{n_1F_1}=6.364
d n 1 C = 5 , d n 1 F 6 = 4 . 4 7 2 , d n 1 F 1 = 6 . 3 6 4
d
n
2
C
=
5.831
,
d
n
2
F
1
=
3.808
,
d
n
2
F
2
=
5
d_{n_2C}=5.831, \quad d_{n_2F_1}=3.808, \quad d_{n_2F_2}=5
d n 2 C = 5 . 8 3 1 , d n 2 F 1 = 3 . 8 0 8 , d n 2 F 2 = 5
d
n
3
C
=
6.083
,
d
n
3
F
2
=
4.472
,
d
n
3
F
3
=
5.220
d_{n_3C}=6.083, \quad d_{n_3F_2}=4.472, \quad d_{n_3F_3}=5.220
d n 3 C = 6 . 0 8 3 , d n 3 F 2 = 4 . 4 7 2 , d n 3 F 3 = 5 . 2 2 0
d
n
4
C
=
4.472
,
d
n
4
F
3
=
5.5
,
d
n
4
F
4
=
5.099
d_{n_4C}=4.472, \quad d_{n_4F_3}=5.5, \quad d_{n_4F_4}=5.099
d n 4 C = 4 . 4 7 2 , d n 4 F 3 = 5 . 5 , d n 4 F 4 = 5 . 0 9 9
d
n
5
C
=
5.408
,
d
n
5
F
4
=
6.021
,
d
n
5
F
5
=
6.185
d_{n_5C}=5.408, \quad d_{n_5F_4}=6.021, \quad d_{n_5F_5}=6.185
d n 5 C = 5 . 4 0 8 , d n 5 F 4 = 6 . 0 2 1 , d n 5 F 5 = 6 . 1 8 5
d
n
6
C
=
6.083
,
d
n
6
F
5
=
5
,
d
n
6
F
6
=
5.099
d_{n_6C}=6.083, \quad d_{n_6F_5}=5, \quad d_{n_6F_6}=5.099
d n 6 C = 6 . 0 8 3 , d n 6 F 5 = 5 , d n 6 F 6 = 5 . 0 9 9 用距離倒數做爲權係數,由角點周圍單元形心值獲取角點值,即
ϕ
n
=
∑
k
=
1
N
B
(
n
)
ϕ
F
k
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
∑
k
=
1
N
B
(
n
)
1
∣
∣
r
⃗
n
−
r
⃗
F
k
∣
∣
\displaystyle \phi_n=\frac{\displaystyle \sum_{k=1}^{NB(n)}\frac{\phi_{F_k}}{||\vec r_n-\vec r_{F_k}||}}{\displaystyle \sum_{k=1}^{NB(n)} \frac{1}{{||\vec r_n-\vec r_{F_k}||}}}
ϕ n = k = 1 ∑ N B ( n ) ∣ ∣ r
n − r
F k ∣ ∣ 1 k = 1 ∑ N B ( n ) ∣ ∣ r
n − r
F k ∣ ∣ ϕ F k 得
ϕ
n
1
=
131.008
,
ϕ
n
2
=
79.708
ϕ
n
3
=
87.317
,
ϕ
n
4
=
168.416
ϕ
n
5
=
254.144
,
ϕ
n
6
=
228.840
\phi_{n_1}=131.008, \quad \phi_{n_2}=79.708 \quad \phi_{n_3}=87.317, \quad \phi_{n_4}=168.416 \quad \phi_{n_5}=254.144, \quad \phi_{n_6}=228.840
ϕ n 1 = 1 3 1 . 0 0 8 , ϕ n 2 = 7 9 . 7 0 8 ϕ n 3 = 8 7 . 3 1 7 , ϕ n 4 = 1 6 8 . 4 1 6 ϕ n 5 = 2 5 4 . 1 4 4 , ϕ n 6 = 2 2 8 . 8 4 0 計算面形心處的變量值,用面角點值平均來獲取,例如
ϕ
f
1
=
(
ϕ
n
1
+
ϕ
n
2
)
/
2
\phi_{f1}=(\phi_{n1} + \phi_{n2})/2
ϕ f 1 = ( ϕ n 1 + ϕ n 2 ) / 2 ,得
ϕ
f
1
=
105.358
,
ϕ
f
2
=
83.512
ϕ
f
3
=
127.866
,
ϕ
f
4
=
211.280
ϕ
f
5
=
241.492
,
ϕ
f
6
=
179.924
\phi_{f_1}=105.358, \quad \phi_{f_2}=83.512 \quad \phi_{f_3}=127.866, \quad \phi_{f_4}=211.280 \quad \phi_{f_5}=241.492, \quad \phi_{f_6}=179.924
ϕ f 1 = 1 0 5 . 3 5 8 , ϕ f 2 = 8 3 . 5 1 2 ϕ f 3 = 1 2 7 . 8 6 6 , ϕ f 4 = 2 1 1 . 2 8 0 ϕ f 5 = 2 4 1 . 4 9 2 , ϕ f 6 = 1 7 9 . 9 2 4 計算單元中心梯度值,用
∇
ϕ
C
=
1
V
C
∑
f
−
n
b
(
C
)
ϕ
f
S
⃗
f
\displaystyle \nabla\phi_C = \frac{1}{V_C}\sum_{f-nb(C)}\phi_{f} \vec S_f
∇ ϕ C = V C 1 f − n b ( C ) ∑ ϕ f S
f ,得
∇
ϕ
C
=
11.446
i
+
11.767
j
\nabla\phi_C = 11.446 \bold i + 11.767 \bold j
∇ ϕ C = 1 1 . 4 4 6 i + 1 1 . 7 6 7 j
3 Least-Square Gradient(最小二乘梯度)
最小二乘法計算梯度,提供了更高的精度,以及更加靈活的選擇,用的框架點也更多,然而其須要計算較多的加權係數,固然計算消耗也比較大。
考慮上圖,單元
C
C
C 有第1層鄰近單元和第2層鄰近單元,那麼,若是單元形心的梯度
∇
ϕ
C
\nabla\phi_C
∇ ϕ C 是精確的話,有
ϕ
F
=
ϕ
C
+
(
∇
ϕ
)
C
⋅
(
r
⃗
F
−
r
⃗
C
)
\phi_F=\phi_C+(\nabla\phi)_C\cdot(\vec r_F - \vec r_C)
ϕ F = ϕ C + ( ∇ ϕ ) C ⋅ ( r
F − r
C ) 在最小二乘法中,設法讓上式算得的單元鄰近單元值的加權加和值最小,即找到以下函數的最小值
G
C
=
∑
k
=
1
N
B
(
C
)
{
w
k
[
ϕ
F
k
−
(
ϕ
C
+
(
∇
ϕ
)
C
⋅
r
⃗
C
F
k
)
]
2
}
=
∑
k
=
1
N
B
(
C
)
{
w
k
[
Δ
ϕ
k
−
(
Δ
x
k
(
∂
ϕ
∂
x
)
C
+
Δ
y
k
(
∂
ϕ
∂
y
)
C
+
Δ
z
k
(
∂
ϕ
∂
z
)
C
)
]
2
}
G_C=\sum_{k=1}^{NB(C)}\{ w_k[\phi_{F_k}-(\phi_C+(\nabla\phi)_C\cdot\vec r_{CF_k})]^2 \} \\ =\sum_{k=1}^{NB(C)}\left\{ w_k\left[\Delta\phi_k - \left( \Delta x_k\left(\frac{\partial\phi}{\p