曲面上的高階數值積分
簡介
基本思想就是將3D區域或者2D曲面上的重積分寫成累次積分的方式,再用高斯積分方法進行計算。
它需要找單變量非線性函數的根以及估計被積函數、指定點水平集函數及其積分。
Ω \Omega Ω 是三維區域,Ω h \Omega_h Ω h 是它的一個四面體剖分,Γ \Gamma Γ 是水平集函數L ( x ) L(x) L ( x ) 決定的一個曲面。T T T 是選定的一個四面體。
我們想要做的其實就是計算:
I − = ∫ T ∩ Ω − u ( x ) d x ; I 0 = ∫ T ∩ Γ u ( x ) d Γ
I^{-}=\int_{T \cap \Omega^{-}} u(\mathbf{x}) \mathrm{d} \mathbf{x} ; \quad I^{0}=\int_{T \cap \Gamma} u(\mathbf{x}) \mathrm{d} \Gamma
I − = ∫ T ∩ Ω − u ( x ) d x ; I 0 = ∫ T ∩ Γ u ( x ) d Γ
這裏的Ω − \Omega^- Ω − 表示水平集函數值爲負的一部分。
選定三個原點和正交的方向,建立座標系,使得四面體包含在其中,即
T ⊂ { x 0 + r n u + s n v + tnw ∣ r ∈ ( 0 , a ) , s ∈ ( 0 , b ) , t ∈ ( 0 , c ) }
T \subset\left\{\mathbf{x}_{0}+r \mathbf{n} \mathbf{u}+s \mathbf{n} \mathbf{v}+\operatorname{tnw} | r \in(0, a), s \in(0, b), t \in(0, c)\right\}
T ⊂ { x 0 + r n u + s n v + t n w ∣ r ∈ ( 0 , a ) , s ∈ ( 0 , b ) , t ∈ ( 0 , c ) }
如圖:
我們可以將重積分變成沿着三個方向各個方向的一維積分,再使用一維的高斯積分公式。關鍵的問題在於處理一維積分中被積函數的不連續性。
算法
以計算I − I^- I − 爲例,來介紹一下。
一個單變量函數在一點不連續,我們一般稱這個點爲“間斷”,記爲x 0 x_0 x 0 。如果在間斷的左右兩邊能夠找到足夠小的兩個區域,使得函數在( x 0 − ϵ , x 0 ] (x_0-\epsilon,x_0] ( x 0 − ϵ , x 0 ] 和[ x 0 , x 0 + ϵ ) [x_0,x_0+\epsilon) [ x 0 , x 0 + ϵ ) 上都是連續的,那麼這個間斷叫做非本質的間斷,否則叫做本質的間斷。
曲面在四面體的某個面上的跡就定義爲曲面和這個面的交線。
事實上,要算的積分就是:
I − = ∫ 0 c ∫ 0 b ∫ 0 a u ( r , s , t ) χ − ( r , s , t ) d r d s d t = ∫ 0 c ∫ 0 b ∫ 0 a f ( r , s , t ) d r d s d t = ∫ 0 c ∫ 0 b g ( s , t ) d s d t = ∫ 0 c h ( t ) d t
\begin{aligned} I^{-} &=\int_{0}^{c} \int_{0}^{b} \int_{0}^{a} u(r, s, t) \chi^{-}(r, s, t) \mathrm{d} r \mathrm{d} s \mathrm{d} t \\ &=\int_{0}^{c} \int_{0}^{b} \int_{0}^{a} f(r, s, t) \mathrm{d} r \mathrm{d} s \mathrm{d} t \\ &=\int_{0}^{c} \int_{0}^{b} g(s, t) \mathrm{d} s \mathrm{d} t \\ &=\int_{0}^{c} h(t) \mathrm{d} t \end{aligned}
I − = ∫ 0 c ∫ 0 b ∫ 0 a u ( r , s , t ) χ − ( r , s , t ) d r d s d t = ∫ 0 c ∫ 0 b ∫ 0 a f ( r , s , t ) d r d s d t = ∫ 0 c ∫ 0 b g ( s , t ) d s d t = ∫ 0 c h ( t ) d t
這裏的χ − ( x ) \chi^{-}(\mathbf{x}) χ − ( x ) 是我們要求積分的區域上的特徵函數。其中,
f ( r , s , t ) : = u ( r , s , t ) χ − ( r , s , t ) , g ( s , t ) : = ∫ 0 a f ( r , s , t ) d r , h ( t ) : = ∫ 0 b g ( s , t ) d s
f(r, s, t) :=u(r, s, t) \chi^{-}(r, s, t), \quad g(s, t) :=\int_{0}^{a} f(r, s, t) \mathrm{d} r, \quad h(t) :=\int_{0}^{b} g(s, t) \mathrm{d} s
f ( r , s , t ) : = u ( r , s , t ) χ − ( r , s , t ) , g ( s , t ) : = ∫ 0 a f ( r , s , t ) d r , h ( t ) : = ∫ 0 b g ( s , t ) d s
一維積分的計算可以將積分區域分爲分片連續的子區域,然後在每個子區域上使用高斯積分公式。
算法的關鍵步驟在於:
選好座標軸方向,以避免被積函數的本質間斷。
如果本質間斷不可避免,我們就要細分四面體
確認被積函數的非本質間斷
非本質間斷典型發生在座標系的第一個積分軸或者前兩個積分軸構成的平面穿過四面體的面面交線或者四面體某個面和曲面的交線。如圖所示,說明了非本質間斷的發生。
這t = t 0 t=t_0 t = t 0 處,就是非本質的間斷,而在t = 0 t=0 t = 0 處就是本質的間斷。
本質的間斷已確認只有在g ( s , t ) g(s,t) g ( s , t ) 和h ( t ) h(t) h ( t ) 中會發生,而且現在遇到的只有兩種情況。
第一種情況就是積分的方向和積分區域相切了,那麼積出來的被積函數在切點的地方就是本質的間斷,如上圖的t = 0 t=0 t = 0 的位置。這個情況比較容易避免,只要選擇座標系的軸垂直於曲面。
第二種本質間斷只存在於h ( t ) h(t) h ( t ) 中,它是對於最後一層積分而言,發生於曲面在T T T 的某個面上的“跡”和掃過的前兩個積分變量構成的平面的交點處,如圖所示。
如圖,積分掃到p p p 點的時候,就是一個本質間斷,這個時候,曲面的跡(紅線),和用來掃的那個面(褐綠色)叫四面體的面形成的曲線,是相切的,切點爲p p p 。
積分方向
第一個座標軸方向
爲了避免g ( s , t ) g(s,t) g ( s , t ) 的本質間斷,我們一般選第一個積分方向n u \mathbf{nu} n u 垂直於曲面。
n u \mathbf{nu} n u 可以選爲∇ L ( c ) \nabla L(c) ∇ L ( c ) ,c c c 是元的質心,這樣其實n u \mathbf{nu} n u 就已經很好地逼近了曲面的法向。
當然,n u \mathbf{nu} n u 也可以選爲四面體四個面的法向,但是這總會出一些問題,畢竟另外兩個方向組成的平面平行於四面體的某個面了。
第二個、第三個座標軸方向
n u \mathbf{nu} n u 選出來了,那麼n v , n w \mathbf{nv},\mathbf{nw} n v , n w 可以被參數化爲:
w w = w e 1 + 1 − w 2 e 2 n w = w w / ∣ w w ∣ n v = n u × n w
\begin{aligned} \mathbf{w}_{w} &=w \mathbf{e}_{1}+\sqrt{1-w^{2}} \mathbf{e}_{2} \\ \mathbf{n w} &=\mathbf{w}_{w} /\left|\mathbf{w}_{w}\right| \\ \mathbf{n v} &=\mathbf{n u} \times \mathbf{n w} \end{aligned}
w w n w n v = w e 1 + 1 − w 2 e 2 = w w / ∣ w w ∣ = n u × n w
這裏的e 1 , e 2 e_1,e_2 e 1 , e 2 是線性獨立的垂直於n u \mathbf{nu} n u 的向量,w ∈ [ − 1 , 1 ] w \in [-1,1] w ∈ [ − 1 , 1 ] 。
將h ( t ) h(t) h ( t ) 的積分平面寫作P = ( n u , n v ) P = (\mathbf{nu,nv}) P = ( n u , n v ) 。假定n F \mathbf{n_F} n F 是四面某個面(記爲F)上的法向量,那麼P P P 在其上的跡平行於w w , n F \mathbf{w_w,n_F} w w , n F 。假定γ F \gamma _F γ F 是曲線Γ \Gamma Γ 在F F F 上的跡,t F ( p ) t_F(p) t F ( p ) 是γ F \gamma_F γ F 在點p p p 出的切向量。
爲了避免第二種本質不連續性,w w w 的選擇要使得w w x n F w_wxn_F w w x n F 和γ F \gamma_F γ F 不相切於γ F \gamma_F γ F 的的任何點。
如果選一個w w w 值使得對任何的四面體的面,這種相切的情況都不發生,那麼這個w w w 值就說是容許的,否則稱爲是不容許的。不容許值之間的區間就叫做不容許區間。
我們要做的其實就是,儘量避開不容許的w w w 值。
爲了說明這個問題,我們定義一個新的函數:
ϕ ( t ) : = ( g ′ ( t ) × ( w w × n F ) )
\phi(t) :=\left(\mathbf{g}^{\prime}(t) \times\left(\mathbf{w}_{w} \times \mathbf{n}_{F}\right)\right)
ϕ ( t ) : = ( g ′ ( t ) × ( w w × n F ) )
這裏的g ( t ) g(t) g ( t ) 表示P P P 在F F F 上的跡的一個表達,其中t ∈ [ 0 , 1 ] t \in [0,1] t ∈ [ 0 , 1 ] ,那麼g ′ ( t ) g'(t) g ′ ( t ) 表示其切向。那麼ϕ ( t ) \phi(t) ϕ ( t ) 本質上就是γ F \gamma _F γ F 的在各點處的切向量和P P P 在F F F 的跡線的夾角的大小。
爲敘述方便,記P P P 在F F F 上的跡爲P F P_F P F
如上述,我們知道,若果w w w 是容許的,意味着P F P_F P F 不切γ F \gamma _F γ F 於任何的P F P _F P F 上的點,也就是ϕ ( t ) \phi(t) ϕ ( t ) 在[ 0 , 1 ] [0,1] [ 0 , 1 ] 上無根。由介值定理,我們知道w w w 不容許的一個充分條件就是,ϕ ( 0 ) ϕ ( 1 ) ≤ 0 \phi(0) \phi(1) \leq 0 ϕ ( 0 ) ϕ ( 1 ) ≤ 0 ,等價於:
( ( t 0 × ( w w × n F ) ) ⋅ n F ) ( ( t 1 × ( w w × n F ) ) ⋅ n F ) ≤ 0
\left(\left(\mathbf{t}_{0} \times\left(\mathbf{w}_{w} \times \mathbf{n}_{F}\right)\right) \cdot \mathbf{n}_{F}\right)\left(\left(\mathbf{t}_{1} \times\left(\mathbf{w}_{w} \times \mathbf{n}_{F}\right)\right) \cdot \mathbf{n}_{F}\right) \leq 0
( ( t 0 × ( w w × n F ) ) ⋅ n F ) ( ( t 1 × ( w w × n F ) ) ⋅ n F ) ≤ 0
把w w w_w w w 的表達式帶進去,得到:
( a 0 w + b 0 1 − w 2 ) ( a 1 w + b 1 1 − w 2 ) ≤ 0
\left(a_{0} w+b_{0} \sqrt{1-w^{2}}\right)\left(a_{1} w+b_{1} \sqrt{1-w^{2}}\right) \leq 0
( a 0 w + b 0 1 − w 2 ) ( a 1 w + b 1 1 − w 2 ) ≤ 0
這裏的a i = ( t i × ( e 1 × n F ) ) ⋅ n F a_{i}=\left(\mathbf{t}_{i} \times\left(\mathbf{e}_{1} \times \mathbf{n}_{F}\right)\right) \cdot \mathbf{n}_{F} a i = ( t i × ( e 1 × n F ) ) ⋅ n F 且b i = ( t i × ( e 2 × n F ) ) ⋅ n F , i = 0 , 1 b_{i}=\left(\mathbf{t}_{i} \times\left(\mathbf{e}_{2} \times \mathbf{n}_{F}\right)\right) \cdot \mathbf{n}_{F}, i=0,1 b i = ( t i × ( e 2 × n F ) ) ⋅ n F , i = 0 , 1 。令δ : = 1 − w 2 / w \delta :=\sqrt{1-w^{2}}/{w} δ : = 1 − w 2 / w ,那麼上式可以寫爲:
( a 0 + b 0 δ ) ( a 1 + b 1 δ ) ≤ 0
\left(a_{0}+b_{0} \delta\right)\left(a_{1}+b_{1} \delta\right) \leq 0
( a 0 + b 0 δ ) ( a 1 + b 1 δ ) ≤ 0
從這裏可以解出w w w 的不被容許空間,它的補是容許的,我們成爲候選區間。我們想要的w w w 應該從候選區間中去選。
找到了候選區間,爲了在候選區間中找到一個最好的w w w 值,另外,我們定義:
α ( w ) = max F ∈ F ( T ) { max p ∈ γ F ∣ ( w w ∣ w w ∣ × n F ) ⋅ t F ( p ) ∣ }
\alpha(w)=\max _{F \in \mathcal{F}(T)}\left\{\max _{\mathbf{p} \in \gamma_{F}}\left|\left(\frac{\mathbf{w} w}{\left|\mathbf{w}_{w}\right|} \times \mathbf{n}_{F}\right) \cdot \mathbf{t}_{F}(\mathbf{p})\right|\right\}
α ( w ) = F ∈ F ( T ) max { p ∈ γ F max ∣ ∣ ∣ ∣ ( ∣ w w ∣ w w × n F ) ⋅ t F ( p ) ∣ ∣ ∣ ∣ }
其實就體現了γ F \gamma _F γ F 在各點切線和P F P_F P F 夾角餘弦的絕對值的最大值。如果等於1就說明發生了相切的情況,是不容許的。另外,因爲α ( 1 ) = α ( − 1 ) \alpha(1)=\alpha(-1) α ( 1 ) = α ( − 1 ) ,那麼這個函數其實可以擴展爲整個實軸上的週期函數。
爲了評估a ( w ) a(w) a ( w ) ,我們必須求水平集函數一階導的極值,或者說水平集函數二階導的零點。爲簡單起見,我們假定γ F \gamma _F γ F 是凸的,那麼α ( w ) \alpha(w) α ( w ) 可以簡化爲:
α ( w ) = max F ∈ F ( T ) { max p ∈ I ( F ) ∣ ( w w ∣ w w ∣ × n F ) ⋅ t F ( p ) ∣ }
\alpha(w)=\max _{F \in \mathcal{F}(T)}\left\{\max _{p \in \mathcal{I}(F)}\left|\left(\frac{\mathbf{w}_{w}}{\left|\mathbf{w}_{w}\right|} \times \mathbf{n}_{F}\right) \cdot \mathbf{t}_{F}(\mathbf{p})\right|\right\}
α ( w ) = F ∈ F ( T ) max { p ∈ I ( F ) max ∣ ∣ ∣ ∣ ( ∣ w w ∣ w w × n F ) ⋅ t F ( p ) ∣ ∣ ∣ ∣ }
這裏的I ( F ) \mathcal{I}(F) I ( F ) 表示的是曲面Γ \Gamma Γ 和多邊形邊的交點。如果交點多於一個或者沒有交點,我們一般把它丟到不容許空間中去。
一般來講,如果P F P_F P F 和γ F \gamma _F γ F 越是垂直,那麼誤差越小,如下圖所示:
這裏,實線是α \alpha α 的值,而虛線是誤差。從中,我們可以看出二者的正相關關係。
我們在搜索使P F P_F P F 和γ F \gamma _F γ F 最垂直的w w w 時,因爲每個容許區間中的α \alpha α 都是當峯函數,所以我們一般採用0.618方法。
實際操作當中,我們一般是設定一個閾值,如果這個α \alpha α 的選定總是大於這個閾值,我們往往對該多面體進行二分。我們不能保證這種剖分是有限步終止的,所以我們往往在剖分尺度很小的情況下,使用積分規則和平面逼近。實際上,這種無限剖分的情況是很少發生的。
被積函數中的不連續性
第一層積分(關於f ( r , s , t ) f(r,s,t) f ( r , s , t ) )的間斷
爲了使用高斯積分規則,我們需要把積分的不連續點給找出來,將積分拆成間斷的。當然,這裏的間斷指的是非本質的間斷,本質的間斷已經在前面所述的方法中處理掉了。
關於f f f 的積分的間斷只會發生在四面體的四個面和曲面Γ \Gamma Γ 上,而在T ∩ Ω − T \cap \Omega^{-} T ∩ Ω − 中,事實上只有一個間斷,最後第一層的積分,可以寫爲:
∫ 0 a f ( r , s , t ) d r = ∑ i = 0 n ∫ r i r t + 1 f ( r , s , t ) d r \int_{0}^{a} f(r, s, t) \mathrm{d} r=\sum_{i=0}^{n} \int_{r_{i}}^{r_{t+1}} f(r, s, t) \mathrm{d} r ∫ 0 a f ( r , s , t ) d r = ∑ i = 0 n ∫ r i r t + 1 f ( r , s , t ) d r
關於g g g 積分的間斷
若定義後兩個座標向量構成的積分平面:
P = { x 0 + s n v + tnw ∣ s ∈ ( 0 , b ) and t ∈ ( 0 , c ) }
\mathcal{P}=\left\{\mathrm{x}_{0}+s \mathrm{nv}+\operatorname{tnw} | s \in(0, b) \text { and } t \in(0, c)\right\}
P = { x 0 + s n v + t n w ∣ s ∈ ( 0 , b ) and t ∈ ( 0 , c ) }
那麼,關於g ( s , t ) g(s,t) g ( s , t ) 的間斷,一般只發生在四面體的四條邊以及曲面在四個面上的跡到P \mathcal{P} P 的投影。
我們可以在每個間斷的區間上使用高斯積分規則:
∫ 0 b g ( s , t ) d s = ∑ j = 0 m ∫ s j s j + 1 g ( s , t ) d s
\int_{0}^{b} g(s, t) \mathrm{d} s=\sum_{j=0}^{m} \int_{s_{j}}^{s_{j+1}} g(s, t) \mathrm{d} s
∫ 0 b g ( s , t ) d s = j = 0 ∑ m ∫ s j s j + 1 g ( s , t ) d s
h ( t ) h(t) h ( t ) 的間斷
定義線段:
L = { x 0 + tnw ∣ t ∈ [ 0 , c ] }
\mathcal{L}=\left\{\mathrm{x}_{0}+\operatorname{tnw} | t \in[0, c]\right\}
L = { x 0 + t n w ∣ t ∈ [ 0 , c ] }
那麼,關於h ( t ) h(t) h ( t ) 的間斷髮生在四面體的四個頂點以及四面體的邊和曲面的交點在L \mathcal{L} L 上的投影。
同樣地,在間斷點處拆開寫積分,爲:
∫ 0 c h ( t ) d t = ∑ k = 0 l ∫ t k t k + 1 h ( t ) d t
\int_{0}^{c} h(t) \mathrm{d} t=\sum_{k=0}^{l} \int_{t_{k}}^{t_{k+1}} h(t) \mathrm{d} t
∫ 0 c h ( t ) d t = k = 0 ∑ l ∫ t k t k + 1 h ( t ) d t
曲面積分
曲面上的積分相對於三維區域上的積分就更爲簡單一些,遵從第二類曲面積分的投影計算,計算方式爲:
I 0 = ∫ T ∩ Γ u ( x ) d Γ = ∫ 0 c ∫ 0 b g ~ ( s , t ) d s d t = ∫ 0 c h ~ ( t ) d t
I^{0}=\int_{T \cap \Gamma} u(\mathrm{x}) \mathrm{d} \Gamma=\int_{0}^{c} \int_{0}^{b} \tilde{g}(s, t) \mathrm{d} s \mathrm{d} t=\int_{0}^{c} \tilde{h}(t) \mathrm{d} t
I 0 = ∫ T ∩ Γ u ( x ) d Γ = ∫ 0 c ∫ 0 b g ~ ( s , t ) d s d t = ∫ 0 c h ~ ( t ) d t
g ~ ( s , t ) : = { u ( r 0 , s , t ) ∣ ∇ L ( x ( r 0 , s , t ) ) ∣ ∣ n u ⋅ ∇ L ( x ( r 0 , s , t ) ) ∣ , if ∃ r 0 , s. t. x ( r 0 , s , t ) ∈ T and L ( x ( r 0 , s , t ) ) = 0 0 , otherwise
\tilde{g}(s, t) :=\left\{\begin{array}{ll}{u\left(r_{0}, s, t\right)} & {\frac{\left|\nabla L\left(\mathrm{x}\left(r_{0}, s, t\right)\right)\right|}{\left|\mathrm{nu} \cdot \nabla L\left(\mathrm{x}\left(r_{0}, s, t\right)\right)\right|},} & {\text { if } \exists r_{0}, \text { s. t. } \mathrm{x}\left(r_{0}, s, t\right) \in T \text { and } L\left(\mathrm{x}\left(r_{0}, s, t\right)\right)=0} \\ {0,} & {\text { otherwise }}\end{array}\right.
g ~ ( s , t ) : = { u ( r 0 , s , t ) 0 , ∣ n u ⋅ ∇ L ( x ( r 0 , s , t ) ) ∣ ∣ ∇ L ( x ( r 0 , s , t ) ) ∣ , otherwise if ∃ r 0 , s. t. x ( r 0 , s , t ) ∈ T and L ( x ( r 0 , s , t ) ) = 0
h ~ ( t ) : = ∫ 0 b g ~ ( s , t ) d s
\tilde{h}(t) :=\int_{0}^{b} \tilde{g}(s, t) \mathrm{d} s
h ~ ( t ) : = ∫ 0 b g ~ ( s , t ) d s
實施
在四面體和曲面交的區域和曲面上的任意精度的積分算法,被實現在了開源軟件PHG當中。PHG下載地址 。
主要程序寫在了文件quad-interface.c以及quad-interface.h當中,但是在phg的框架下,調用起來比較困難。
作者也寫了可以在非PHG環境中使用的外調函數phgQuadInterface2,它的調用方式是:
int phgQuadInterface2(DOF_USER_FUNC ls, int ls_order,
DOF_USER_FUNC ls_grad, FLOAT (*tet)[3],
DOF_USER_FUNC func, int dim, DOF_PROJ proj,
int quad_type, int quad_order,
FLOAT *res, FLOAT **prule_data);
可以閱讀test文件夾下的quad_test3.c,它是一個簡單的使用示例。
數值結果
p-收斂性測試
所謂的p-收斂性測試,就是說固定網格的剖分,我們來看誤差隨着高斯積分規則的階數的提高而呈現出指數型的減小。
考慮三個例子如下圖:
網格剖分成了1843塊:
三個圖中的曲面對應的水平集函數是:
L ( x , y , z ) = ( x − 1 2 ) 2 + ( y − 1 2 ) 2 + ( z − 1 2 ) 2 − 1 16
L(x, y, z)=\left(x-\frac{1}{2}\right)^{2}+\left(y-\frac{1}{2}\right)^{2}+\left(z-\frac{1}{2}\right)^{2}-\frac{1}{16}
L ( x , y , z ) = ( x − 2 1 ) 2 + ( y − 2 1 ) 2 + ( z − 2 1 ) 2 − 1 6 1
L ( x , y , z ) = 2 ( x − 1 2 ) 2 − 8 ( y − 1 2 ) 3 − 16 ( z − 1 2 ) 4 − 1 50
L(x, y, z)=2\left(x-\frac{1}{2}\right)^{2}-8\left(y-\frac{1}{2}\right)^{3}-16\left(z-\frac{1}{2}\right)^{4}-\frac{1}{50}
L ( x , y , z ) = 2 ( x − 2 1 ) 2 − 8 ( y − 2 1 ) 3 − 1 6 ( z − 2 1 ) 4 − 5 0 1
cos ( 4 γ x − 2 γ ) sin ( 4 γ y − 2 γ ) + cos ( 4 γ y − 2 γ ) sin ( 2 γ z − γ ) + cos ( 2 γ z − γ ) sin ( 4 γ x − 2 γ )
\cos (4 \gamma x-2 \gamma) \sin (4 \gamma y-2 \gamma)+\cos (4 \gamma y-2 \gamma) \sin (2 \gamma z-\gamma)+\cos (2 \gamma z-\gamma) \sin (4 \gamma x-2 \gamma)
cos ( 4 γ x − 2 γ ) sin ( 4 γ y − 2 γ ) + cos ( 4 γ y − 2 γ ) sin ( 2 γ z − γ ) + cos ( 2 γ z − γ ) sin ( 4 γ x − 2 γ )
結果如下:
可以看得出來,出差呈指數型下降。
h-收斂性測試
因爲上述的後兩種情況沒有解析解,我們值針對第一種情況來做h-收斂性測試。
所謂的h收斂性,就是說固定高斯積分的階數,隨着剖分的加密,誤差的收斂階。
結果如下:
一個橢圓界面問題的小例子
考慮橢圓界面問題:
通過有限元方法,變分可得:
a h ( u , v ) : = ∑ i = 1 2 ∫ Ω i a ∇ u ⋅ ∇ v d x − ∑ e ∈ I h ∫ ( { a ∇ u ⋅ n } [ v ] + β [ u ] { a ∇ v ⋅ n } ) d Γ + J 0 ( u , v ) + J 1 ( u , v ) J 0 ( u , v ) : = ∑ e ∈ I h γ 0 p 2 h e ∫ e [ u ] [ v ] d Γ J 1 ( u , v ) : = ∑ e ∈ I h γ 1 h e p 2 ∫ e [ a ∇ u ⋅ n ] [ a ∇ v ⋅ n ] d Γ
\begin{aligned} a_{h}(u, v) & :=\sum_{i=1}^{2} \int_{\Omega_{i}} a \nabla u \cdot \nabla v \mathrm{d} \mathbf{x}-\sum_{e \in \mathcal{I}_{h}} \int(\{a \nabla u \cdot \mathbf{n}\}[v]+\beta[u]\{a \nabla v \cdot \mathbf{n}\}) \mathrm{d} \Gamma+J_{0}(u, v)+J_{1}(u, v) \\ J_{0}(u, v) & :=\sum_{e \in \mathcal{I}_{h}} \frac{\gamma_{0} p^{2}}{h_{e}} \int_{e}[u][v] \mathrm{d} \Gamma \\ J_{1}(u, v) & :=\sum_{e \in \mathcal{I}_{h}} \frac{\gamma_{1} h_{e}}{p^{2}} \int_{e}[a \nabla u \cdot \mathbf{n}][a \nabla v \cdot \mathbf{n}] \mathrm{d} \Gamma \end{aligned}
a h ( u , v ) J 0 ( u , v ) J 1 ( u , v ) : = i = 1 ∑ 2 ∫ Ω i a ∇ u ⋅ ∇ v d x − e ∈ I h ∑ ∫ ( { a ∇ u ⋅ n } [ v ] + β [ u ] { a ∇ v ⋅ n } ) d Γ + J 0 ( u , v ) + J 1 ( u , v ) : = e ∈ I h ∑ h e γ 0 p 2 ∫ e [ u ] [ v ] d Γ : = e ∈ I h ∑ p 2 γ 1 h e ∫ e [ a ∇ u ⋅ n ] [ a ∇ v ⋅ n ] d Γ
F h ( v ) : = ∫ Ω f v d x + ∫ Γ g N { v } d Γ − β ∫ Γ g D { a ∇ v ⋅ n } d Γ + J D ( v ) + J N ( v ) J D ( v ) : = ∑ e ∈ I h γ 0 p 2 h e ∫ e g D [ v ] d Γ J N ( v ) : = ∑ e ∈ I h γ 1 h e p 2 ∫ e g N [ a ∇ v ⋅ n ] d Γ
\begin{aligned} F_{h}(v) & :=\int_{\Omega} f v \mathrm{d} \mathbf{x}+\int_{\Gamma} g_{N}\{v\} \mathrm{d} \Gamma-\beta \int_{\Gamma} g_{D}\{a \nabla v \cdot \mathbf{n}\} \mathrm{d} \Gamma+J_{D}(v)+J_{N}(v) \\ J_{D}(v) & :=\sum_{e \in \mathcal{I}_{h}} \frac{\gamma_{0} p^{2}}{h_{e}} \int_{e} g_{D}[v] \mathrm{d} \Gamma \\ J_{N}(v) & :=\sum_{e \in \mathcal{I}_{h}} \frac{\gamma_{1} h_{e}}{p^{2}} \int_{e} g_{N}[a \nabla v \cdot \mathbf{n}] \mathrm{d} \Gamma \end{aligned}
F h ( v ) J D ( v ) J N ( v ) : = ∫ Ω f v d x + ∫ Γ g N { v } d Γ − β ∫ Γ g D { a ∇ v ⋅ n } d Γ + J D ( v ) + J N ( v ) : = e ∈ I h ∑ h e γ 0 p 2 ∫ e g D [ v ] d Γ : = e ∈ I h ∑ p 2 γ 1 h e ∫ e g N [ a ∇ v ⋅ n ] d Γ
結果貼圖如下(後面一個圖是說明求積的階數在數值解精度上的影響):