Newton-X 2.6 と DFTB+ 24.1 の組み合わせで非断熱ダイナミクスを実行するための前準備
- Newton-X は、 DFTB+ との連携で電子励起状態を TD-DFTB 計算しながら、surface hopping 法をつかった非断熱ダイナミクスの解析ができる
- ところが、現時点で入手できる Newton-X (Version 2.6) だと、最新の DFTB+ (Version 24.1) に対応していない部分がある
- Newton-X には、Classical Series (CS) と New Series (NS) があって、DFTB+ と連携できるのは今のところは CS だけ
- NS の開発が優先されているような印象なので、CS の修正が今後あるかどうか微妙
- このノートには、DFTB+ と連携できるように Newton-X CS のコードの一部を修正する手順について、大まかにメモしています
ソースコードの準備
- Newton-X のソースコードファイルを入手する
- ダウンロードした tgz ファイルを展開する
tar -zxf nx-v2.6-b01.tgz
cd newtonx-cs
initcond.pl
が使うプログラムの一部を修正
なぜ修正が必要?
- Newton-X で非断熱ダイナミクスを実行するときに、ダイナミクスの出発点となる初期分布を
initcond.pl
というプログラムで生成する - この
initcond.pl
を実行するときには、DFTB+ が出力する基準振動モードファイルmodes.xyz
が必要となる modes.xyz
ファイルは、以前の DFTB+ では次のように出力されていた- あとで説明する
weight.f90
のコード内に書かれていた出力例だけど、水の変角(?)基準振動モードにしては値が小さいのはちょっとだけ気になる…
- あとで説明する
modes.xyz
3
Eigenmode 4 687.641756468604 cm-1
O 0.000000 -1.000000 0.000000 0.000000 0.085448 0.000567
H 0.000000 0.000000 0.783064 0.000000 -0.677515 -0.198758
H 0.000000 0.000000 -0.783064 0.000000 -0.675263 0.195414
- 最新版の DFTB+ 24.1 では次のように、座標(2〜4列)と基準振動モード(5〜7列)で数値の桁数などが以前とは異なるフォーマットで出力されるので、
initcond.pl
でmodes.xyz
を読み込もうとするときにエラー終了
modes.xyz
3
Eigenmode 7 1493.83061861143 cm-1
O -0.00000000 -0.71274476 -0.00000000 -0.00000000 -0.07017868 0.00008607
H -0.00000000 -0.14347938 0.77263563 0.00000000 0.55654609 -0.43338708
H 0.00000000 -0.14347938 -0.77263563 0.00000000 0.55755281 0.43202072
modes.xyz
を適切に読み込めるように、initcond.pl
の修正が必要
修正の方針は?
initcond.pl
を実行するときに、modes.xyz
ファイルの読み込みを実際に担っているのは、newtonx-cs/bin/weight
という別のプログラム- このプログラムのソースコードは
newtonx-cs/source/initcond
にあるweight.f90
modes.xyz
を適切に読み込めるようにするには、この Fortran コードの一部を書き換えて、実行形式にコンパイルする必要がある- とは言え、Newton-X の
README.install
を読むと、コンパイル済みの実行ファイルを使うことを強くオススメされている
README.install
YOU DO NOT NEED TO INSTALL NEWTON-X
NEWTON-X CS is distributed with binary files statically compiled for Linux.
We strongly recommend that you use this version.
- 上記の「コンパイル済みの実行ファイルをなるべく使おう」という方針には 100% 同意
- 修正が必要な
weight
プログラムだけを置き換えて、他のファイルにはなるべく触らないようにしたい
weight.f90
を書き換え
newtonx-cs/source/initcond
にあるweight.f90
ファイルを次のように修正read
関数で指定する読み込みの書式を修正するだけ
cd newtonx-cs/source/initcond
vi weight.f90
weight.f90
@@ -1082,1 +1082,1 @@
- read(11,'(A3,T4,6F10.6)') g4, (geom(k,i),i=1,3), (c_nmode(m,n),m=3*k-2,3*k)
+ read(11,'(A5,6F16.8)') g4, (geom(k,i),i=1,3), (c_nmode(m,n),m=3*k-2,3*k)
weight.f90
をコンパイル
gfortran
が必要- 分子研スパコンでコンパイルする場合、
module
コマンドでgcc-toolset
をロードすると環境変数を設定できる
- 分子研スパコンでコンパイルする場合、
module load gcc-toolset
weight.f90
は、newtonx-cs/source/lib
にあるライブラリに依存するので、先にコンパイルしておく
cd newtonx-cs/source/lib
make | tee make.log
weight.f90
を含めて、newtonx-cs/source/initcond
にあるものをまるっとコンパイル
cd newtonx-cs/source/initcond
make | tee make.log
- コンパイルした後、実行ファイルが
EXE_initcond
というディレクトリにできる weight
をbin
ディレクトリに移動する
cp newtonx-cs/source/initcond/EXE_initcond/weight newtonx-cs/bin/.
run_dftb+_initcond.pl
の一部を修正
なぜ修正が必要?
- Newton-X では、DFTB+ などの外部プログラムと連携するときに、Perl スクリプトがインターフェースに使われている
run_dftb+_initcond.pl
は、initcond.pl
を実行するときに、DFTB+ とのインターフェースになる- Newton-X と DFTB+ の仕様変更に、
run_dftb+_initcond.pl
の一部が対応していない- Newton-X の仕様変更:
- このスクリプトでは Newton-X の設定ファイル
control.dyn
を読み込むようになっているが、実際には、このファイルはinitcond.pl
を実行するときには必要ない
- このスクリプトでは Newton-X の設定ファイル
- DFTB+ の仕様変更:
- 最近の DFTB+ ではポテンシャルエネルギーの出力フォーマットの一部が微妙に変わっているが、このスクリプトでは対応していない
- Newton-X の仕様変更:
run_dftb+_initcond.pl
を修正する
- 上記に対応するために、次のような感じで
run_dftb+_initcond.pl
を修正する
run_dftb+_initcond.pl
@@ -27,2 +27,2 @@
- ($nat,$istep,$nstat,$nstatdyn,$ndamp,$kt,$dt,$t,$tmax,$nintc,
- $mem,$nxrestart,$thres,$killstat,$timekill,$prog,$lvprt,$etot_jump,$etot_drift)=load_status($ctd,$mdle);
+ ## ($nat,$istep,$nstat,$nstatdyn,$ndamp,$kt,$dt,$t,$tmax,$nintc,
+ ## $mem,$nxrestart,$thres,$killstat,$timekill,$prog,$lvprt,$etot_jump,$etot_drift)=load_status($ctd,$mdle);
@@ -130 +130 @@
- $epotgs = $x[3];
+ $epotgs = $x[2];
- Perl スクリプトなので、コンパイルする必要はない
run-dftb+.pl
の一部を修正
なぜ修正が必要?
run-dftb+.pl
は、moldyn.pl
を実行するときに、DFTB+ とのインターフェースになる- この Perl スクリプトは、ユーザーが指定した DFTB+ の入力ファイルを読み込み、Newton-X が必要なデータを出力するように、一部を書き換えている
- DFTB+ の入力ファイルでは、新しいバージョンで一部のパラメータ名が次のように微妙に変更されている
- 旧:
EigenVectorsAsTxt
→ 新:EigenvectorsAsText
- 旧:
CalculateForces
→ 新:PrintForces
- 旧:
- 現時点では、Newton-X の
run-dftb+.pl
は上記の変更に対応していないので、修正が必要
run-dftb+.pl
を修正する
- 修正が必要な部分が数カ所あるので、次のような感じで
run-dftb+.pl
を修正する
run-dftb+.pl
@@ -172 +172 @@
- if (/WriteEigenvectors/i || /EigenVectorsAsTxt/i){
+ if (/WriteEigenvectors/i || /EigenvectorsAsText/i){
@@ -176 +176 @@
- $text = "Analysis{\nWriteEigenvectors = Yes\nEigenVectorsAsTxt = Yes\n";
+ $text = "Analysis {\nWriteEigenvectors = Yes\nEigenvectorsAsText = Yes\n";
@@ -196 +196 @@
- next if (/CalculateForces/i);
+ next if (/PrintForces/i);
@@ -208 +208 @@
- $_ = "Analysis{\n CalculateForces = Yes\nWriteEigenvectors = Yes\nEigenVectorsAsTxt = Yes\n";
+ $_ = "Analysis{\n PrintForces = Yes\nWriteEigenvectors = Yes\nEigenvectorsAsText = Yes\n";
@@ -285 +285 @@
- if (/CalculateForces/i){
+ if (/PrintForces/i){
@@ -289 +289 @@
- $_ = "Analysis{\n CalculateForces = Yes\n";
+ $_ = "Analysis{\n PrintForces = Yes\n";
修正したプログラムを適切な場所に置く
- 上記の修正が済ませた後、適当な場所に置く
mv newton-cs ~/apl/nx
.bashrc
の適当なところに下記を追加する
export NX=~/apl/nx/bin
- Newton-X の修正は以上だけど、DFTB+ (Version 24.1) にも バグがある ので、こちらにも対応しておく必要があるよ