OpenMX memo (準備中)

このノートについて

電子状態計算プログラム OpenMX について簡単に紹介します.

OpenMXの公式サイト http://www.openmx-square.org/ にはマニュアルやチュートリアルが整備されており,テクニカル・ノートにも詳しい解説が用意されています.これらの情報は開発者の尾崎先生ご本人が定期的に改訂されているため内容も正確です.ですので,OpenMX を本格的に利用したい方は,このページよりも公式サイトをご覧になることを強くお勧めします.

ただ,公式サイトは基本的に英語で書かれており日本語で書かれた解説があまりありません.とくにユーザー視点で書かれたものが不足しているように思います.この点は日本人でバンド計算を志す大学生・大学院生にOpenMXに興味をもってもらう上で障害となるでしょう.大学院生であれば英語の資料ぐらい読めという意見もあるでしょうが,私自身の学生時代を振り返ってみても,やはり日本語で書かれた解説や覚書などは有難かったものです.

というわけで,とりあえず私自身の覚書として気付いたことなどを書き残してみようと思います.

一点だけ付け加えると,私はOpenMXのヘビーユーザーではありません.このような覚書を書くのに相応しい研究者は,私以外にたくさんおられることでしょう.もし,このページを読んで内容が浅いとか不正確であるとか感じられた方がおられましたら,是非,より充実したメモを(英語でも日本語でも)作成して頂くようお願いしたいと思います.

このページの内容は一切の文責が豊田にあります.


OpenMX とは何か

OpenMX は北陸先端大の尾崎泰助准教授が中心となって開発した密度汎関数理論に基づく電子状態計算のためのプログラムです.

このプログラムの特徴は,他の電子状態計算プログラムと同様の機能としては,
  1. ノルム保存型偽ポテンシャルを用いること
  2. 電子間相互作用に局所密度近似(LDA)あるいは一般化勾配近似(GGA)を用いること
  3. 電子相関の強い系に対してはLDA+U法が使えること
  4. 分子動力学(MD)シミュレーションによる構造最適化(ができること
  5. 相対論的擬ポテンシャルを用いてスピン軌道相互作用が扱えること
  6. バンド分散図,電子状態密度図,電荷密度分布図,ポテンシャルのマップなどを標準的な可視化ツール(GnuplotやXcrysden)用のフォーマットで出力できること
などが挙げられます.一方,他のプログラムにはあまりない特徴として,
  1. オーダーN法(クリロフ部分空間法または分割統治法)が可能であること
  2. ハイブリッド並列(MPI+OpenMP)が可能であること
  3. 様々な物性の計算が可能であること(ノンコリニア磁性,ベリー位相による電気分極,非平衡グリーン関数法による電気伝導など)
  4. オープン・ソフトウェアであること
が挙げられます.

OpenMXを使ってみる

ソースファイルは公式サイトからダウンロード可能で,2011年3月1日現在の最新公開版のバージョンは 3.5 です.
ソースコードとインプットのサンプル,擬ポテンシャルや基底関数のデータなどが tar.gz 形式で圧縮されています.
OpenMXは計算ライブラリとして,BLAS,LAPACK および FFTWを利用するので,これらを先にインストールする必要があります.

インストール手順は一般的なプログラムと同様で,ダウンロード -> アーカイブの展開 -> メイクファイルの編集 -> メイク の順になります.
メイクファイルではコンパイラやライブラリのパスなどを編集する必要があります.

上手くコンパイルが成功すれば,実行ファイル openmx が生成されます.
正しく動作するかどうかチェックするために,-runtest オプションをつけて自動テストを実行することができます.


例題:フラーレンC60の電荷密度分布を描く

フラーレンは炭素原子が60個集まり,正五角形と正六角形の面を持つ,ちょうどサッカーボールのような構造をとる分子です.これは炭素原子の価電子が二次元的なsp2混成軌道と三次元的なsp3混成軌道の両方を作ることのできることに起因する,多様な構造の典型的な例のひとつです.

ちなみに,ここでいうサッカーボールとはテルスター型のボールのことです.2006年のワールドカップ(ドイツ大会)以降では,より真球に近い斬新なデザインのものが公式試合球に採用されているので,「サッカーボールのような」という形容は将来的に通じにくくなるかも知れませんね.この構造を厳密に形容するには「切頂十二面体」と言うほうが良いようです.また,この構造のドームをデザインしたバックミンスター・フラーの名前から,バッキ―ボール(Buckyball)とも呼ばれます.「フラーレン」の名称もフラーからつけられました.

さらに脱線をすると,fullereneの英語の発音は このような音 で「フラリーン」という感じですので気をつけましょう.

計算する

パッケージの中に C60.dat という入力例が入っています.
入力はシンプルなテキスト形式ですので,emacsやviなどのエディタで編集できます.

データの記述は,単一値の場合は

  [キーワード] [値]

 (例)
  Atoms.Number  5

のように指定し,複数値の場合は

  <[キーワード]  [値] [値] ...  [キーワード]>

 (例)
  <Atoms.SpeciesAndCoordinates
   1  C      0.000000    0.000000    0.000000     2.0  2.0
   2  H     -0.889981   -0.629312    0.000000     0.5  0.5
   3  H      0.000000    0.629312   -0.889981     0.5  0.5
   4  H      0.000000    0.629312    0.889981     0.5  0.5
   5  H      0.889981   -0.629312    0.000000     0.5  0.5
  Atoms.SpeciesAndCoordinates>

のように指定します.キーワード名は上記の例のように,ドット(.)を使って構造的に命名されています.どのようなキーワードがあるかは,入力例やマニュアルを参照してください.

最初に,カレントディレクトリとシステム名を指定します.OpenMXは標準出力だけでなく,さまざまな出力をファイルに書き出します.このときファイルはカレントディレクトリ内に作られ,ファイル名の先頭部分がシステム名になります.フラーレンの入力例 C60.dat では

  System.CurrrentDirectory         ./
  System.Name                      C60

となっていますので,実行ディレクトリ内に C60.out などのファイルが作成されます.どのようなファイルが作るかを,出力レベルで制御できます.

  level.of.fileout  1

出力レベルは0:簡潔,1:標準,2:詳細です.

あと,入力例では省略されてることが多いですが,DATA_PATH も重要です.これは,基底関数ファイル *.pao と擬ポテンシャルファイル *.vps を探すデイレクトリを指定するキーワードです.省略時は ../DFT_DATA になります.これは,配布パッケージの work ディレクトリで実行することを想定したものですので,他のディレクトリで実行する時には DATA_PATH に適切なディレクトリを指定する必要があります.これは,絶対パスでも相対パスでも構いません.

計算を実行するには,

  ./openmx C60.dat

のようにします.OpenMXは入力を何度も読み返す仕様ですので,入力に標準入力は使えません.パラメータ探索など,スクリプトで自動作成した入力を使う場合には,パイプで渡すのではなく,必ず一時ファイル等に書き出してから OpenMX に渡すようにしてください.並列計算を行うには mpirun などを使います.並列計算の実行方法は計算機環境に依存しますので,お使いの計算機のマニュアル等をご参照ください.

計算が終了すると,いくつかの出力ファイルが生成され,その中にC60.tden.cube というファイルがあると思います.
(入力の level.of.fileout が 0 になっている場合は出力されないので注意してください)
これは Gaussian Cube File フォーマットの電荷密度のデータで,XCrySDenVESTAなどの可視化プログラムで立体的に表示することができます.

XCrySDenの場合


メニューから [File] -> [Open Structure] -> [Gaussian98 Cube File] を選択し,先ほど計算したC60.tden.cubeを読みこみます.
すると,下図のような球棒モデルの構造が表示されます.



次に,メニューから [Tools] -> [Data Grid] を選択し,表示されたウィンドウの [OK] を押すと,"Isosurface/Property-plane Controls" というウィンドウが開きます.ここで "Minimum grid value" と "Maximum grid value" に電荷密度の最小・最大値が表示されます.それぞれ,0.00 と 0.28 程度だと思います."Isovalue" の欄に適当な値を入力して [Submit] を押すと等値面が表示されます.Isovalue=0.15の場合には下図のようになります.


VESTAの場合

メニューから [File] -> [Open] を選択し,C60.tden.cube を開きます.すると下図のように,原子構造の上に電荷密度が透過して重なった状態で表示されます.

等値面を変更するには,メニューから [Objects] -> [Properties] -> [Isosurfaces] を選択するか,左のパネルの [Properties] ボタンを押して表示されるダイアログの [Isosurfaces] タグを選択します.そのウィンドウの "Isosurface level" で値を変更できます.下図は値をXCrySDenのときと同じ 0.15 にして,原子構造を非表示にした図です.


VESTAでは,任意の平面での断面図も簡単に表示できます(おそらく,XCrySDenでもできると思いますが,私がやり方を知りません).
メニューから [Utilities] -> [2D Data Display] を選択します.左のパネルで [Slice] ボタンを押して,表示する断面を指定します.面はミラー指数と原点からの距離で指定をします.デフォルトでは(001)面の距離0.5のところ,すなわちz軸に垂直にフラーレンの中心を通る面を指定しているはずです.そのまま [OK] を押すと,下図のような断面が表示されます.

また,立体表示に断面を追加することもできます.もとのウィンドウから [Edit] -> [Lattice Planes] を選択します. "Add Lattice Planes" の欄でミラー指数と原点からの距離を使って面を指定し,[Add] ボタンで追加します.複数の面を追加することもできます.ここでは,先ほどと同じく(001)面の距離0.5の断面を追加しましょう.等値面を非表示にして棒だけの構造モデルと一緒に表示させると,下図のようになります.



例題2:ダイアモンドのバンド分散図を描く

次に,結晶のバンド分散図を描画してみましょう.例は炭素のダイアモンド結晶で,入力例は Cdia.dat です.
バンド分散図に関係するキーワードは Band.* で,以下のようになっていると思います.

  Band.dispersion              on
  <Band.KPath.UnitCell        
  3.56  0.00  0.00
  0.00  3.56  0.00
  0.00  0.00  3.56
  Band.KPath.UnitCell>
  Band.Nkpath                5
  <Band.kpath
     25  0.0 0.0 0.0   1.0 0.0 0.0   g X
     25  1.0 0.0 0.0   1.0 0.5 0.0   X W
     25  1.0 0.5 0.0   0.5 0.5 0.5   W L
     25  0.5 0.5 0.5   0.0 0.0 0.0   L g
     25  0.0 0.0 0.0   1.0 1.0 0.0   g X
  Band.kpath>

まず,Band.dispersion を on にすることで,バンドのデータが出力されます.逆格子の単位胞を Band.KPath.UnitCell で指定します.バンドを描くパスはBand.Nkpath と Band.kpath で指定します.Band.Nkpath はパスの数で,Band.kpath に,分割数,始点の座標,終点の座標,始点の名前,終点の名前が指定されます.計算が正しく終了すると, cdia.Band というファイルが作成されます.これを図にするには,Gnuplot を使うことができます.

まず,Gnuplot用のデータに変換するツール bandgnu13 をコンパイルする

Comments