OpenMXには多くの機能が実装されていますので、それらが正しく実装されているのか 保証することが必要です。実装の信頼性を確認する効果的な方法は、 解析的に求めた力と数値計算によって求めた力を比較することです。 プログラムに何らかのバグがあれば、それらは互いに異なるでしょう。 これを実行するために、次のようにして自動テスターが利用可能です。
逐次計算
% ./openmx -forcetest 0
並列計算
% ./openmx -forcetest 0 "mpirun -np 4 openmx"
ここで「0」は、力の整合性を調べる際のエネルギー項のフラグです。 フラグの種類は以下に示す8種類があり、各数字は次の項目に対応します。
flag 0 1 2 3 4 5 6 7 8
Kinetic 1 0 1 0 0 0 0 0 0
Non-local 1 0 0 1 0 0 0 0 0
Neutral atom 1 0 0 0 1 0 0 0 0
diff Hartree 1 0 0 0 0 1 0 0 0
Ex-Corr 1 0 0 0 0 0 1 0 0
E. Field 1 0 0 0 0 0 0 1 0
Hubbard U 1 0 0 0 0 0 0 0 1
ここで、「1」は力の整合性のチェックに含めるという意味です。 ディレクトリ「work/force_example」内には、力の整合性のチェックに使われる36個の入力ファイルが保存されています。 テスト計算が終了すると、ディレクトリ「work」内にファイル「forcetest.result」が生成されます。 比較結果の一部を以下に転載します。
force_example/C2_GGA.dat
flag= 0
Numerical force= -(Utot(s+ds)-Utot(s-ds))/(2*ds)
ds= 0.0003000000
Forces (Hartree/Bohr) on atom 1
x y z
Analytic force -1.676203071292 -1.397113794193 -1.117456296887
Numerical force -1.676101156844 -1.397036485449 -1.117288361652
diff -0.000101914447 -0.000077308744 -0.000167935235
force_example/C2_LDA.dat
flag= 0
Numerical force= -(Utot(s+ds)-Utot(s-ds))/(2*ds)
......
....