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 のコードの一部を修正する手順について、大まかにメモしています

ソースコードの準備

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.plmodes.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というディレクトリにできる
  • weightbinディレクトリに移動する
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を実行するときには必要ない
    • DFTB+ の仕様変更:
      • 最近の DFTB+ ではポテンシャルエネルギーの出力フォーマットの一部が微妙に変わっているが、このスクリプトでは対応していない

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) にも バグがある ので、こちらにも対応しておく必要があるよ
NewtonXDFTB
Posted :