OpenMXチュートリアル


ここではOpenMXを使って分子の計算を行う。

分子構造ファイルを入手する

分子構造ファイルの形式変換

OpenMX-viewer

OpenMX入力ファイル

リモートとのファイルのやり取り

ジョブ投入

OpenMX出力ファイルと可視化



分子構造ファイルを入手する

ここでは題材としてメタン分子を扱う。 Googleで「Methane Mol-File Mol-Instincts」で検索をする。

このように、「www.molinstincts.com」以下のサイトが見つかるので、そこに行く。
このページの中で、以下のように「構造データファイルをダウンロードする(SDF/MOL形式)」という部分があるので、 そこをクリックするとダウンロードが始まるのだが、今はそのリンクのURLをコピーしておく。

次にに以下のようにWSLで作業用のディレクトリを作っておき、そこに入る。

mkdir -p ~/win/work/methane/
cd ~/win/work/methane/
            
これはWindows側からも見ることができるフォルダになる。 ここに、先ほどのSDFファイルをダウンロードする。

wget 上記でコピーしたリンクのURL
            
lsコマンドでディレクトリの中身を見ると、名前が.sdfで終わるファイルがあることが分かる。

分子構造ファイルの形式変換

得られたSDF形式のファイルをOpenBabelというソフトウェアを使いXYZ形式に変換する。

sudo apt install openbabel
                   
macOSの場合はHomeBrew等を用いてインストールする。

brew install open-babel
                         

babel SDFファイル名 methane.xyz
                   
こうして新しくmethane.xyzというファイルが作られる。 それでは「cat methane.xyz」という風にcatコマンドを実行して、このファイルの中身を見てみよう。

  5
  CT1001789336
  H          0.00210       -0.00410        0.00200
  C         -0.01270        1.08580        0.00800
  H          1.00990        1.46310        0.00030
  H         -0.53990        1.44690       -0.87510
  H         -0.52290        1.43730        0.90480
            
1行目はこの構造の原子数(今の場合は5個)を表す。 2行目は「コメント」であり、機械側では意味を持たない覚書のようなものである。 そのあとは各原子について元素記号とデカルト座標(単位Å)が並んでいる。

OpenMX-viewer

OpenMX Viewerは上で説明したXYZ形式のような構造データから 構造の図示を行ったり、OpenMXの入力ファイルの生成を行うことができる。 Windows側で、ブラウザで上記のページを開き、XYZファイルをドラッグアンドドロップして開く。

ここでいろいろと操作を試してみたのち、以下のようにして「Save」メニューから「OMX(xyz)」を選んでOpenMXの入力ファイルを出力する。

これを作業用ディレクトリの中に保存する。

OpenMX入力ファイル

保存したファイルは「abc.dat」という名前になっていると思うが、これをcatやless等のコマンドで表示してみる。

#
#  This was generated by OpenMX Viewer

System.CurrrentDirectory         ./
System.Name                     abc
level.of.stdout                   1
level.of.fileout                  1

Species.Number                     2
<Definition.of.Atomic.Species
  H     H6.0-s2p1        H_PBE19
  C     C6.0-s2p2d1      C_PBE19
Definition.of.Atomic.Species>

Atoms.Number                       5
Atoms.SpeciesAndCoordinates.Unit   Ang
<Atoms.SpeciesAndCoordinates
  1     H        0.0021000     -0.0041000      0.0020000    0.5  0.5
  2     C       -0.0127000      1.0858000      0.0080000    2.0  2.0
  3     H        1.0099000      1.4631000      0.0003000    0.5  0.5
  4     H       -0.5399000      1.4469000     -0.8751000    0.5  0.5
  5     H       -0.5229000      1.4373000      0.9048000    0.5  0.5
Atoms.SpeciesAndCoordinates>

Atoms.UnitVectors.Unit             Ang
<Atoms.UnitVectors
  18.0000000   0.0000000   0.0000000
  0.0000000   18.0000000   0.0000000
  0.0000000   0.0000000   18.0000000
Atoms.UnitVectors>

scf.XcType                    GGA-PBE
scf.SpinPolarization          off
scf.ElectronicTemperature     300.0
scf.energycutoff              220.0
scf.maxIter                   100
scf.EigenvalueSolver          band
scf.Kgrid                     1  1  1
scf.Mixing.Type               rmm-diisk
scf.Init.Mixing.Weight        0.05
scf.Min.Mixing.Weight         0.01
scf.Max.Mixing.Weight         0.30
scf.Mixing.History            25
scf.Mixing.StartPulay         15
scf.criterion                 1.0e-7

MD.Type                       nomd
MD.maxIter                    1
MD.TimeStep                   1.0
MD.Opt.criterion              0.0003
            
このファイルをエディターで開いて以下の行を追記しておく(gaussの場合)。場所はどこでもよい。

data.path /home/public/program/openmx/DFT_DATA19/
                  
macloudでopenmxを実行する場合には次のようにする。

data.path /home2/public/program/openmx/DFT_DATA19/
                  
入力ファイルのキーワードについては こちらのマニュアルのページ を参照。

リモートとのファイルのやり取り

このabc.datファイルをgaussに送る。

scp abc.dat ユーザー名@gauss.issp.u-tokyo.ac.jp:~/
                        
macloudに送る場合は

scp abc.dat ユーザー名@macloud.issp.u-tokyo.ac.jp:~/
                              
次にsshでgauss(macloud)にログインしてlsを実行してみると、このabc.datが送られていることが確認できる。
gauss(macloud)内に作業用ディレクトリを作ってabc.datをそこに移動し、自分もそのディレクトリに行く。

mkdir -p ~/work/methane/
mv abc.dat ~/work/methane/
cd ~/work/methane/
                        

ジョブ投入

ここで、前に説明したキューイングシステムを使って、計算ノードにメタン分子の数値計算のジョブを投入する。 エディターを使い「dft.sh」という名前で次のようにジョブスクリプトを作成する。

#!/bin/sh
#PBS -l nodes=1:ppn=5
#PBS -n
source ~/.bashrc
export OMP_NUM_THREADS=1
cd $PBS_O_WORKDIR
mpiexec -hostfile $PBS_NODEFILE /home/public/bin/openmx abc.dat -nt $OMP_NUM_THREADS > ${PBS_JOBID}.out 2>&1
               
これを「qsub dft.sh」で投入する。

macloudの場合


#!/bin/sh
#SBATCH -N 1
#SBATCH -n 5
source ~/.bashrc
export OMP_NUM_THREADS=1
mpiexec /home2/public/bin/openmx abc.dat -nt $OMP_NUM_THREADS > ${SLURM_JOB_ID}.out 2>&1
    
これを「sbatch dft.sh」で投入する。

OpenMX出力ファイルと可視化

ジョブが終わった状態でディレクトリの中身を見てみる。

[kawamura@gauss met]$ ls
15761.gauss.out  abc.dat   abc.dden.cube  abc.md   abc.out        abc.v0.cube     abc.xyz  dft.sh         dft.sh.o15761
abc.cif          abc.dat#  abc.ene        abc.md2  abc.tden.cube  abc.vhart.cube  abc_rst  dft.sh.e15761
    
「15761.gauss.out」や「abc.out」をlessコマンド表示させて、それぞれの項目の意味するところを考える。
PCのほうに戻って、計算結果のcubeファイルをscpでgaussから回収する。

scp ユーザー名@gauss.issp.u-tokyo.ac.jp:~/work/methane/*.cube .
    
これは.cubeで終わるファイルをまとめて持ってくるコマンド。