河村雄行先生が開発した国産MDプログラム MXDORTO(エムエックスディー・オルト で合ってるかな…)は鉱物や酸化物のMD計算で使われます。なかなか情報が少ないので、今回は使い始める際に必要な情報、ダウンロード・コンパイル・動作確認について解説していきます。
ダウンロード
ダウンロードは河村先生のホームページから行います。
最低限必要なものは MXDORTO.for、mxdinput.for、xtaldata.dat の3つです。
MXDORTOはMDの計算プログラム本体です。1ファイルのコンパイルで計算が実行できるようになります。ビルドに数十分かかるようなMDプログラムもある中、MXDORTOは10秒くらいでコンパイルが終わります。
MXDINPUTは入力ファイル作成ツールです。xtaldata.datもセットで使用します。結晶構造の情報や原子数、ユニットセルサイズを指定すると、それを計算するための入力ファイルを作成してくれます。コマンドラインで対話形式で動かします。Fortran特有のスペース埋め入力は、このプログラム以外では使用したことがありません。
その他、平均二乗変位計算プログラムのmdmsd.forもここで入手可能です。それ以外の.basファイルはFreeBASICコンパイラが必要なプログラムです。
コンパイル
ソースコードをダウンロードして即コンパイル、と行きたいところですが、コンパイルが上手くいかない場合がありますので、それぞれ以下の点を確認してください。
MXDORTO本体のコンパイル
MXDORTO.forの322行目から337行目の間でコンパイル環境を設定する必要があります。FLNAME(3)にその環境名を入れるのですが、今となっては馴染みない名前が並んでいますので一番下のDummyを有効にします。文頭の”C”がコメントアウトなので、Dummyの行の頭のCを消し、他の行でCが消えているところに全てCを付けます。
Intel OneAPIのifxでは普通にコンパイルできました。
module load compiler/latest
ifx -o mxdort mxdorto.for
gfortranでは多数のWARNINGが出た後にエラーが出ましたが、11258行目 CALL GETDATと11259行目 CALL GETTIMの2つの行をコメントアウトしたらコンパイルが通りました。
gfortran -o mxdorto mxdorto.for
MXDINPUTのコンパイル
mxdinput.forでコンパイルを実行する前に、ソースコードの61行目あたりのWinPCかUNIXを選択し、73行目あたりのFLNAME(18)を確認します。これはmxdinputの動作に必要なxtaldata.datファイルを置く場所のパスです。任意の場所に置いてソースコードを書き換えてもいいですが、注意点としてはFLNAMEの配列が24文字までしか入らないので、長いパスは入れられません。
ソースコードを確認・書き換えしたらコンパイルします。
module load compiler/latest
ifx -o mxdinput mxdinput.for
パスを通す
コンパイルしたmxdortoやmxdinputがあるディレクトリにパスを通します。
HOMEの下にMXDという名前のディレクトリを作り、そこにforファイル、xtaldata.dat、実行ファイルがあるとします。mxdinput.forでWinPCならFLNAME(18)、LINUXならFLNAME(19)が以下のようになります。
FLNAME(19) = '~/MXD/xtaldata.dat '
必要なファイルが$HOME/MXDにある場合、.bashrcの末尾に以下のものを書きます。
export PATH=~/MXD:$PATH
cdでHOMEに戻り、source .bashrcをしたら準備完了です。
入力ファイル生成
MXDORTOは1回の計算につき1つのフォルダ(ディレクトリ)を使用します。なのでまずテスト計算用のフォルダを作ります。
$ mkdir test
$ cd test
次に、ここでmxdinputを実行します。今回はアルゴンのMD計算データを作ってみます。赤字で示した部分がキーボード入力が必要な部分です。
$ mxdinput
Structure type (A12)? (see XTALDATA.DAT, or type "LIST")
............ "CHAOS" for liquid or glass
CHAOS
KEY IN AN INTEGER FOR RANDOMIZE
1
I----------------------------------------------------------I TITLE ?
test
ION1 ION2 ION3 ION4 ION5 ION6 ION7 ION8 ION9 ION0 : ATOM SPECIES ?
Ar
....1....2....3....4....5....6....7....8....9....0 NO. OF IONS ?
500
1 Ar 500 1 500
2 0 501 500
3 0 501 500
4 0 501 500
5 0 501 500
6 0 501 500
7 0 501 500
8 0 501 500
9 0 501 500
10 0 501 500
I---------I---------I---------I BOX EDGE LENGTHS (1-3) ?
50.0 50.0 50.0
-----> The density is 0.2654g/cm3. OK ? (Y/N)
y
Molecule: 1:monoatomic, 2:diatomic, or 3:H2O/CO2 (1/2/3) ?
1
Structure: 1:bulk, 2:sheet, 3:sq.rod, 4:cube, 5:sphere ?
1
Atoms: Ar
100 200 300 400 500
Random structure Ar
I--------I Temperature(K) ?
298.15
*** NO. of ions : Ar: 500 : 0 : 0 : 0 : 0
: 0 : 0 : 0 : 0 : 0
*** A= 50.0000 B= 50.0000 C= 50.0000 CA= 0.0000 CB= 0.0000 CC= 0.0000
*** Density is 0.2654 g/cm3
Do you want a new file05.dat (y/n/r) ?
y
RANDOMIZEに入れる数字は乱数種です。適当な数字を入れましょう。
また入力する際は文字列の幅を意識する必要があり、幅に合わせてスペース埋めをします。
I---------I
このIとIの間に数字や文字を入力する。
ION1 ION2 ION3
ここもIONのIの位置に合わせて元素名を入力する。
....1....2....3
ここも同様に各元素の数を、位置を合わせて入力する。
このようにして、50Å×50Å×50Åのボックスの中にArが500個入り、298.15Kの温度条件で計算をするファイルを作成しました。testフォルダ内にfile05.datとfile07.datが作成されます。入力ファイルはこの2つです。
file05.dat | 計算条件とポテンシャル設定 |
file07.dat | ユニットセルサイズと原子座標 |
mxdinputによってこの2つのファイルが作られます。この2つはテキストファイルなので、これらのファイルを書き換えることで計算設定や構造を変えることができます。
file05.dat
file05.datの内容はこのようになっています。
MD.......I....:....I....:....I....:....I....:....I....:....I....:....I:
START test :
ECONOMY 01000. 1000. 100. 50. 5. :
NOACCUM 2.00 1.0 0.0 :
T SCALING 298.15 -0.1 1. :
P NO-CNTL 0.0001 0.0001 0.0001 :
V CONST. :
BUSING 4. 0.0 :
1 Ar 500. 0.000 39.95 1.860 0.145 38.540 :
:
:
MD.......I....:....I....:....I....:....I....:....I....:....I....:....I:
STOP
とりあえずこのまま動かしましょう。入力ファイルの書式はそのうち別記事で解説します。
file07.dat
file07.datはこのような内容です。こちらの書き方も別記事で解説します。
test 0 0
500 1 0 0 0 0 0 0 0 0 0
Ar
500 0 0 0 0 0 0 0 0 0
1 501 501 501 501 501 501 501 501 501
500 500 500 500 500 500 500 500 500 500
298.15 -1.0000 298.15 0.00010 0.00010 0.00010
0.20E-14 50.000000 50.000000 50.000000 0.000000 0.000000 0.000000
0.265354 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.818959960.393459970.77533997 4.97951175.01372394.9836850 0.8189600 0.3934600 0.7753400 1 0
0.068320000.594020000.27239000 4.99428274.97679955.0241919 0.0683200 0.5940200 0.2723900 1 0
計算実行
では計算を実行します。1つの計算につき1つのフォルダが対応します。フォルダ内にfile05.datとfile07.datがある状態で計算を実行します。
$ ls
file05.dat file07.dat
$ mxdorto
Welcome to MOLECULAR DYNAMICS SIMULATION WORLD: MD-XD-ORTHO Version 2010-Nov-11
============== Titles in FILE07.DAT and FILE05.DAT are ==============
=====[F7]: test =====
=====[F5]: test =====
Option[ 1:MD...... 2:START 3:ECONOMY 4:NOACCUM 5:T SCALIN 6:P NO-CNT]
[ 7:V CONST. 8:BUSING 9: 10: 11: 12: ]
[13: 14: 15: 16: 17:AMORPHOU 18: ]
[19: 20: 21: 22: 23: 24: ]
[25: 26: 27: 28: 29: 30: ]
Started at 0: 0: 0 on 0/ 0/ 0 from 1-st step, until 1000-th step
== test (End= 1000) ==
+ 00K steps ----------------------------------------------------------- Hour= 0
STEP Temp Prss.( Px Py Pz ) U(Coul.) U(srt) U(3p) E(total) Density mn:sc
1 25 0.0659( 0.06 0.07 0.06) 0.000 1.565 0.000 1.886 0.26535 0' 0
2 147 0.0723( 0.07 0.08 0.07) 0.000 1.546 0.000 3.383 0.26535 0' 0
3 204 0.0742( 0.07 0.08 0.07) 0.000 1.484 0.000 4.038 0.26535 0' 0
4 253 0.0751( 0.07 0.08 0.07) 0.000 1.392 0.000 4.549 0.26535 0' 0
5 281 0.0743( 0.07 0.08 0.07) 0.000 1.277 0.000 4.788 0.26535 0' 0
Msd: 0.001(A) 0.000( ) 0.000( ) 0.000( ) 0.000( )
:
:
999 298 0.0133( 0.01 0.01 0.01) 0.000 -1.062 0.000 2.659 0.26535 0' 0
1000 298 0.0133( 0.01 0.01 0.01) 0.000 -1.063 0.000 2.658 0.26535 0' 0
Msd: 52.622(A) 0.000( ) 0.000( ) 0.000( ) 0.000( )
--------------------------------------------------------------------------------
Avr 298 0.0143( 0.01 0.01 0.01) 0.00 -1.04 0.00 2.68 0.26535
Std 0 0.0007( 0.00 0.00 0.00) 0.00 0.02 0.00 0.02 0.00000
--------------------------------------------------------------------------------
Temperatures: Ar: 298
--------------------------------------------------------------------------------
=============== Files were updated ============ End= 1000 ===============
<<<===== test ====>>>
=========================================================================
===== Started at 0: 0: 0 on 0/ 0, finished at 0: 0: 0 on 0/ 0 =====
=========================================================================
時刻が表示されていませんが、計算は正常に終了しました。計算中の出力には温度圧力などが表示されます。計算後にはfile06.datなどが増えます。また構造データであるfile07.datは最終スナップショットの構造で上書きされます。
$ ls
file05.dat file06.dat file07.dat file08.dat file081.dat file09p.dat file09v.dat
各ファイルは以下のような内容です。
入力 | file05.dat | 計算条件とポテンシャル設定 |
出力 | file06.dat | 計算結果まとめ |
入力&出力 | file07.dat | ユニットセルサイズと原子座標 |
出力 | file08.dat | 二体相関関数 |
出力 | file081.dat | 温度やエネルギー等の結果 |
出力 | file09p.dat | 原子座標(トラジェクトリ) |
出力 | file09v.dat | 原子速度 |
出力ファイルの中にはリスタート計算時には入力ファイルになるものもあります。
計算結果の読みやすいものはfile06.datに記録されます。中には温度やエネルギー等の時間変化や二体相関関数が書かれています。今回は動作確認ということで意味のある計算はしていませんので、結果の解説はしません。
ダウンロード・コンパイル・動作確認が完了したということで今回はここまで。
コメント