thomas-fermi方程式のfemによる解法

22

Click here to load reader

Upload: dc1394

Post on 14-Jul-2015

836 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Thomas-Fermi方程式のFEMによる解法

@dc1394 2015/10/14 Rev. 2.0

Thomas-Fermi方程式のFEMによる解法

Page 2: Thomas-Fermi方程式のFEMによる解法

Thomas-Fermi方程式の数値解法上の困難

Thomas-Fermi方程式(以後T-F方程式と呼ぶ)は、

であり、境界条件は、y(0) = 1, y(∞) = 0である。

この境界条件は、この方程式を数値的に解く上で何も言っていないのと同じである。

この方程式は原点に特異点を持つので原点から解けない。また当然ながらコンピュータは無限大を扱えない。

Page 3: Thomas-Fermi方程式のFEMによる解法

原点に十分近い点での境界値

仕方がないので、y(x)のMaclaurin展開を用いて、原点に十分近い点Δxでの境界値を決定する。

論文[1]によれば、y(x)のMaclaurin展開は、

であり、またy(x)の微分y’(x)は、

である。ここで、B = y’(0)であり、同論文によれば、

である。

なお、このy(Δx)とy’(Δx)を使って、T-F方程式を初期値問題として数値的に解こうとしても遠方で発散する。

[1] M. A. Noor and S. T. Mohyud-Din. Homotopy Perturbation Method for Solving Thomas-Fermi Equation Using Pade Approximants. International Journal of Nonlinear Science, 8(2009):27-31.

Page 4: Thomas-Fermi方程式のFEMによる解法

遠方での境界値

次に遠方での境界値を決定する。文献[1]によれば遠方で漸進的に、

と書いてあるが、この近似は粗すぎる。ここで、論文[2]

によれば、やはり遠方で漸進的に、

とある。ここで、λ = 3.886, x0 = 5.2415である。

[1] R.G.パール, W.ヤング 『原子・分子の密度汎関数法』シュプリンガー・フェアラーク東京(1996)

[2] M. Desaix, D. Anderson, and M. Lisak, Eur. J. Phys. 25 (2004) 699.

Page 5: Thomas-Fermi方程式のFEMによる解法

T-F方程式の問題

これで、原点にごく近い点での境界値と、遠方での境界値が分かったことになる。

つまり、常微分方程式の2点境界値問題に帰着したので、次に有限要素による離散化を考えてみる。

T-F方程式は非線形常微分方程式であり、離散化にも工夫が必要である。

ここで、以下のような線形常微分方程式について考えてみよう。

Page 6: Thomas-Fermi方程式のFEMによる解法

β(x)を用いた反復法

この方程式は線形常微分方程式であり、有限要素による離散化によって、[K]{u} = {F}という形式の連立1

次方程式に帰着でき、解ける。

ここでもし、β(x)を次のように置くならば、

(1)式を解くことによって得たy(x)から、(2)式によってβ(x)を得て、それからまた(1)式を解くことによってy(x)

を得て…という反復法によって解ける(T-F方程式を直接離散化するなどの別の方法もあるだろうが、SCF法の練習になるので、この方法を採用する)。

Page 7: Thomas-Fermi方程式のFEMによる解法

初期関数y0(x)

この方法でT-F方程式を解くには、y(x)の初期関数y0(x)が必要である。

ここで、まずT-F方程式を適合点への狙い撃ち法

で解き(常微分方程式の解法には、補外法の一種であるBulirsch-Stoer法を用いる)、その解をy0(x)

とする。

Bulirsch-Stoer法は本(たとえば[1])を参考に自分で実装しても良いのだが、ここではBoost.Odeintを使う。

[1] William H. Press, William T. Vetterling, Saul A. Teukolsky, Brian P. Flannery 『ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ』 技術評論社(1993)

Page 8: Thomas-Fermi方程式のFEMによる解法

適合点への狙い撃ち法の問題

著者のコードでは、狙い撃ち法の適合点を、ユーザーが指定できるようにしている(適合点の値は、概ね10.0~15.0程度でないと収束しない)。

なお、適合点での狙い撃ち法は、適合点で値が「異なる」ので、精度の高い解が得られないが、初期関数y0(x)とするには十分である。

x 原点に十分近い点から解いたy(x) 遠方から解いたy(x)

4.98 0.0788376

4.99 0.0785983

5.00 0.0783599 0.0792299

5.01 0.0789933

5.02 0.0787575

Page 9: Thomas-Fermi方程式のFEMによる解法

1次混合

入力と出力が一致する解を得るために、最も簡単な1

次混合法を使う。

すなわち、i + 1段階での改善された入力関数yi+1in

は、i段階でのyiinとyi

outを用いて、次式で与えられる。

ここでαはパラメータであり、著者のコードでは、このパラメータをユーザーが指定できるようにしている(α= 0.05程度としないと収束しない)。

混合法には、 GR-Pulay法などのより高度な方法もあるが、1反復あたりの計算時間が短いので、今の場合は1次混合法で十分である。

Page 10: Thomas-Fermi方程式のFEMによる解法

反復法の収束の判定

yiは(数値計算上は)ベクトルと見なせる。ここで、yi

outとyiinの差の大きさをNormRDと適当に名付け、

NormRD = |yiout – yi

in|と定義する。

このNormRDがある閾値(criterion)未満になった場合(NormRD < criterion)、収束したと判定する。

著者のコードでは、criterionを、ユーザーが指定できるようにしてある(10-13程度が限界のようである)。

Page 11: Thomas-Fermi方程式のFEMによる解法

有限要素による離散化

最も単純な1次要素によって、T-F方程式を離散化する(2次要素は、試してみたが収束しなかった)。

連立1次方程式を解くにはIntel Math Kernel

Library (Intel MKL)を使う。

1次要素だと、連立1次方程式[K]{u} = {F}の[K]が対称正定値三重対角行列になるので、[K]は2次元配列を使わなくても、単に配列を2つ用意するだけで済む。これはメモリの節約になる。

Page 12: Thomas-Fermi方程式のFEMによる解法

フローチャート

初期関数y0(x), [K]の生成

β(x), {f}の生成

[K], {f}に境界条件処理

Intel MKLによりy(x)を求める

終了

収束したか?

YES

NO

Page 13: Thomas-Fermi方程式のFEMによる解法

T-F方程式の数値解とエネルギー

以上の解法で得たT-F方程式の数値解は、文献[1]に載っている、T-F方程式の解の数表と「ほぼ」一致している。従って、バグは残っていないと判断した。

T-F方程式の解から得られる中性原子のエネルギーは、Zを原子番号として、

である。ここで、y’(0)には、適合点への狙い撃ち法で得た値y’(Δx)を用いる。

著者のコードでは、y’(Δx) = -1.588073であり、この値は文献[1]の値とほぼ一致している。

[1] E. U. Condon, Halis Odabasi. Atomic Structure, Cambridge University Press, Cambridge, 1980

ちなみにこの本はGoogle ブックスで(全部ではないが)読める。数表のページのURLはこちら: http://bit.ly/1fRQ71T

Page 14: Thomas-Fermi方程式のFEMによる解法

実行画面

Page 15: Thomas-Fermi方程式のFEMによる解法

Thomas-Fermi方程式の解のグラフ

Page 16: Thomas-Fermi方程式のFEMによる解法

Thomas-Fermi方程式の解のグラフ(y軸対数目盛)

Page 17: Thomas-Fermi方程式のFEMによる解法

並列化

次に、Intel Cilk Plus(以下Cilkと呼ぶ)による並列化を試みた。

その効果を検証したのが次ページの表1である。

計測環境:

CPU: Intel Core i7-3930K (Sandy Bridge-E, Hyper

Threading ON (6C12T), SpeedStep OFF, Turbo

Boost OFF)

コンパイラ: Intel® Parallel Studio XE 2016 for C++

OS: Linux Mint 17.1 - Cinnamon (64-bit)

物理メモリ: 16GB

Page 18: Thomas-Fermi方程式のFEMによる解法

並列化

Cilkによる並列化により、ほぼ5.4倍のパフォーマンス向上に成功していることが分かる。

並列化による誤差は確認できない。

ただし、並列化を有効にすると、反復の途中で突然NormRDが大きくなり、収束に時間がかかる場合がある。

計算時間(秒) 収束時のNormRD

Cilk無効 39.5 4.9E-14

Cilk有効 7.31 4.9E-14

表1 並列化の有無の効果の比較(三回の平均)

※計算時間とは、総経過時間から、結果出力処理の時間を差し引いた時間を差す

Page 19: Thomas-Fermi方程式のFEMによる解法

インプットファイル

Page 20: Thomas-Fermi方程式のFEMによる解法

ソースコードへのリンク

このプログラムのソースコードは、GitHub上で公開しています。

https://github.com/dc1394/thomasfermi

ライセンスは2条項BSDライセンスとします。

Page 21: Thomas-Fermi方程式のFEMによる解法

まとめ

Thomas-Fermi方程式を、有限要素(1次要素)による離散化と反復法によって、数値的に解いた。

得られた結果は、文献の結果とほぼ一致していた。

高速化をめざして、Cilkによる並列化を試みた。

Cilkによる並列化は非常に効果的であった。

並列化による誤差は確認できなかった。

Page 22: Thomas-Fermi方程式のFEMによる解法

参考サイト

Internet-College of Finite Element Method:

http://www.fem.gr.jp/index.html

有限要素法プログラミング演習(fortran, C のソースコードつき)(開発版): http://www.sml.k.u-

tokyo.ac.jp/members/nabe/FEM/fem.html