ryujimiyaの日記

C#を使って数値解析したい

時間領域FEMの高次吸収境界条件(Higher oder ABC)

時間領域FEMに適用可能な高次吸収境界条件(Higer oder absorbing boundary condition)の構成方法が下記の文献に記されていたので試してみました。

Dan Givoli , Beny Neta & Igor Patlashenko

"Finite element analysis of time-dependent semi-infinite wave-guides with high-order boundary treatment"

http://www.math.nps.navy.mil/~bneta/higdon_fe_pap.pdf

February 27, 2003

International Journal for Numerical Methods in Engineering

Volume 58, Issue 13, p.1955- 1983,

7 December 2003

 時間領域のスカラヘルムホルツ方程式

 ∇2 u - (1 / c0^2) d2 u / dt2  = 0 (1)

 c0:真空中の光速

HigdonのABC

 [  Π j = [1, J] ( d / dx + (1 / cj) d / dt )  ] u = 0 (2)

補助変数 φ j  (j = 1, ...., J - 1)を導入して書き換えると、

 ( d / dx + (1 / c1) d / dt ) u = φ1

 ( d / dx + (1 / c2) d / dt) φ1 = φ2

 ( d / dx + (1 / cJ) d / dt) φJ - 1 = 0

となります。または、

 φ0 = u  ( 定義)

 φJ = 0 ( 定義)

とすると

 ( d / dx + (1 / cj) d / dt )φ j - 1 = φ j  j = 1, ... J

と書くことができます。

φjは元のスカラヘルムホルツ方程式を満たすことを利用して、d / dxの項をd  / dyで表現すると、最終的には

 β0 d u / dt + d u / dx = φ1 (3)

 βj d φ j  / dt  -  α j d2 φ j - 1 / dt2 - d2 φ j - 1 / dy2 = φ j + 1 (4)

 α j = 1 / (c j ^2) - 1 / (c0^2)

 β0 = 1 / c1

 β j = 1 / c j  - 1 / c j  + 1

となります。

(1)、(3)、(4)が解く方程式です。

時間領域FEMでは、(1)に対する弱形式の境界積分に(3)を代入して、uとφ1の方程式を作り、(4)に対する弱形式と連立して解きます。

また文献に述べられていますが、

 (1)の弱形式から φ1を既知として、uを求める

 (4)の弱形式のj = 1の場合について、φ2を既知として、φ1を求める

 j = 2, ... J - 1 の場合について同様にしてφ2, ..., φJ - 1を求める

この一連の処理では、φ1等を既知と仮定したので誤差が含まれます。そこで、上記処理を反復することで精度を上げます。

実際反復処理を行わないと解が発散することがありました。なお、反復はもう1回だけ追加すれば充分のようです。

時間領域FEMの基本式は、文献の式(64)、式(65)に示されています。また時間方向に離散化した式は式(81)~式(91)に示されています。

 

H面導波管誘電体共振器の散乱係数の計算結果

比誘電率分布

f:id:ryujimiya:20130606022226p:plain

 

cj をすべてc0 とした場合の結果を示します。なお、励振はTE10モードをガウシアンパルス時間変化で励振しました。

 

1次ABC

f:id:ryujimiya:20130606022506p:plain

2次ABC

f:id:ryujimiya:20130606022530p:plain

3次ABC

f:id:ryujimiya:20130606022550p:plain

4次ABC

f:id:ryujimiya:20130606022611p:plain

5次ABC

f:id:ryujimiya:20130606022629p:plain

6次ABC

f:id:ryujimiya:20130606022653p:plain

 

ABCの波の速度をすべて光速としても、5次のABCにすると良好な結果が得られました。高次のABCにしても未知数はそれほど増えませんし、PMLのときのような時間ステップ毎のFEM行列構築もないので計算時間はそんなにかかりません。

時間領域FEMをいろいろ試してきましたが、いまのところ今回の高次ABCによる方法が一番利用できそうな方法のようです。

 

<補足>

文献では時間方向の離散化で、uの速度(時間微分)、加速度(2階の時間微分)を用いています。上で示した結果は速度、加速度を用いた式で計算した結果です。

ただ、文献に定式化が示されていなければ、uだけの式で計算していたと思います。

つまり、

 d2 u / dt2 = (u n + 1 - 2 u n + u n - 1) / ⊿t^2

 d u / dt = (u n + 1 - u n - 1) / (2⊿t)

 u = β u n + 1 + ( 1 - 2β) u n + β u n - 1

  β = 0.25

として計算していたと思います。こちらの方法で計算した結果を次に示します。

この場合、反復計算で用いるφ1等の初期値は、直前のステップの値を使用しました。

1次ABC

f:id:ryujimiya:20130606024204p:plain

2次ABC

f:id:ryujimiya:20130606024221p:plain

3次ABC

f:id:ryujimiya:20130606024251p:plain

4次ABC

f:id:ryujimiya:20130606024309p:plain

5次ABC

f:id:ryujimiya:20130606024325p:plain

6次ABC

f:id:ryujimiya:20130606024356p:plain