AOF-DFT計算
AOF-DFTの計算機能は、PythonモジュールASE (Atomic Simulation Environment)のCalculatorクラスを継承した AOFDFTCalculator として、PyTorchにより実装されています。
基本的な使い方は既存の Calculator サブクラスと同様です。 AOFDFTCalculator オブジェクトを作成し、 Atoms オブジェクトの calc プロパティに設定して、 Atoms オブジェクトの計算メソッドを呼び出します。
また、 AOFDFTCalculator は、OpenMP並列及びGPUでの計算に対応しています。
from aofdft.calculator import AOFDFTCalculator
from ase.build import bulk
from ase.units import Hartree
atoms = bulk("Si", crystalstructure="diamond", a=5.43)
atoms.calc = AOFDFTCalculator(
kin_type = "AS26",
kin_model = "Crystal26",
vps_dir = "path/to/DFT_DATA19_AS/VPS", # 実際の環境に合わせてpathを指定
pao_dir = "path/to/DFT_DATA19_AS/PAO", # 実際の環境に合わせてpathを指定
e_cut = 150 * Hartree # ase.units.Hartreeで150 HartreeをeVに換算
)
energy = atoms.get_potential_energy()
入力
系の構造を Atoms オブジェクトとして、計算の設定を AOFDFTCalculator のコンストラクタの引数として渡します。
ここでは主要な設定項目を示します。すべての設定項目はAOFDFTCalculator#コンストラクタの引数を参照してください。
- kin_type
- Type:
str
- デフォルト:
AS26
AOF-DFT計算に使用する運動エネルギー汎関数を指定します。
"AS26": AdvanceSoft26汎関数を使用します。"TFvW": 従来汎関数のThomas-Fermi-von Weizsäcker汎関数を使用します。"LKT": 従来汎関数のLuo-Karasiev-Trickey汎関数を使用します。
ヒント
"TFvW"における、TF成分に対するvW成分の割合のデフォルトは1/5です。"TF1/5vW","TF0.8vW","TF","vW"などの形式で成分を指定することが可能です。
- kin_model
- Type:
str | None
- デフォルト:
None
AdvanceSoft26汎関数を使用する際、モデルを指定します。
指定できる値は
None,"Crystal26","Molecule26","Molecule26-large"のいずれかです。Noneを指定した場合にはCrystal26モデルが使用されます。
- vps_dir
- Type:
str
- デフォルト:
DFT_DATA19_AS/VPS
擬ポテンシャル(VPS)ファイルのあるフォルダパスを指定します。
- pao_dir
- Type:
str
- デフォルト:
DFT_DATA19_AS/PAO
擬原子軌道(PAO)ファイルのあるフォルダパスを指定します。
- vps_names
- Type:
dict[str]
- デフォルト:
aofdft.calculator.default_files.VPS_DEFAULT
元素ごとの擬ポテンシャル(VPS)ファイル名を指定します。ゴースト原子には
Noneを指定します。aofdft.calculator.default_filesに交換相関汎関数ごとに定義されているプリセット(VPS_LDA,VPS_GGA)をインポートし、設定することができます。なお、VPS_DEFAULTはVPS_GGAに設定されています。ヒント
- プリセットは以下のように定義されています。
アドバンスソフト改修版の擬ポテンシャル対応元素 :
*26_as.vpsを使用。Cu, Zn : OpenMXが提供するソフト擬ポテンシャル(
*19S.vps)を使用。それ以外 : OpenMXが提供する擬ポテンシャル(
*19.vps)を使用。
- pao_names
- Type:
dict[str]
- デフォルト:
aofdft.calculator.default_files.PAO_DEFAULT
元素ごとの擬原子軌道(PAO)ファイル名を指定します。
aofdft.calculator.default_filesに定義されているプリセット(PAO_MINI,PAO_MINI_AND_POLE,PAO_OMX_QUICK,PAO_OMX_STANDARD,PAO_OMX_PRECISE)をインポートし、設定することができます。基底関数のプリセット(BASIS_*)に対応するプリセットを使用することが推奨されます。なお、PAO_DEFAULTはPAO_MINIに設定されています。ヒント
- プリセットは以下のように定義されています。
アドバンスソフト改修版の擬ポテンシャル対応元素 : 対応する
*_as.paoを使用。Cu, Zn : OpenMXが提供するソフト擬ポテンシャルに対応する
*S.paoを使用。それ以外 : OpenMXが提供する擬ポテンシャルに対応する
*.paoを使用。
- basis
- Type:
dict[str]
- デフォルト:
aofdft.calculator.default_files.BASIS_DEFAULT
元素ごとの基底関数の割り当て(e.g.
"s1p1","s2p2d1")を指定します。aofdft.calculator.default_filesに定義されているプリセット(BASIS_MINI,BASIS_MINI_AND_POLE,BASIS_OMX_QUICK,BASIS_OMX_STANDARD,BASIS_OMX_PRECISE)をインポートし、設定することができます。なお、BASIS_DEFAULTはBASIS_MINIに設定されています。ヒント
- プリセットは以下のように定義されています。
BASIS_MINI: 必要最小限の基底セット。BASIS_MINI_AND_POLE: 必要最小限の基底セットに分極を追加。BASIS_OMX_*: OpenMXの推奨値 に基づいた基底セット。
- e_cut
- Type:
float
- デフォルト:
150 * Hartree
電子密度のカットオフエネルギーをeV単位で指定します。デフォルト値は、150 Hartree ~ 4082 eV です。
n_gridsにNone以外を指定した場合はそちらが優先されます。
- xc_type
- Type:
str
- デフォルト:
PBE
交換相関汎関数の種類です。
"LDA"または"PBE"が使用可能です。
- spin_type
- Type:
None | str
- デフォルト:
non-polarized
スピン偏極の取り扱いを指定します。
Noneまたは"non-polarized"でスピン偏極なし、"polarized"でスピン偏極あり(collinear)の計算を行います。スピン偏極ありの計算で原子ごとの初期スピンを指定する場合は、
atoms.arrays["spin"]に全原子の初期スピンのリスト(list[float])を代入します。
- scf_style
- Type:
None | str
- デフォルト:
None
SCF計算条件(
mix_beta,mix_nstored,mix_precond,noisy_precond)の値のプリセットです。バルク結晶では
"bulk"、磁性体では"magnetic"、分子では"molecule"を使用することが推奨されます。Noneを指定すると、その他の計算条件に基づいて、"bulk","magnetic","molecule"または「各条件のデフォルト値を使用」のいずれかが自動で選択されます。
- device
- Type:
str | torch.device
- デフォルト:
cpu
PyTorchによる計算を行うデバイスを指定します。CPUを使用する場合は
"cpu", GPUを使用する場合は"cuda"と指定します。複数のGPUがある環境で使用するGPUを指定するには、
nvidia-smi -LでデバイスIDを取得し、"cuda:1"などと指定します。
- num_threads
- Type:
None | int
- デフォルト:
None
PyTorchによる計算のOpenMPスレッド並列数を指定します。
Noneの場合、環境変数OMP_NUM_THREADSが設定されていればその値を、設定されていなければシステムの論理コア数の値を使用します。
学習済みモデル
学習済みモデルは aofdft/deepkin/pretrained にpthファイルとして入っています。
現行のバージョンでは、結晶を対象として学習したCrystal26、分子を対象として学習したMolecule26が利用可能です。
推論時には、計算の安定性のために、複数のモデルの平均値を最終的な出力として利用しています。Molecule26はデフォルトでは3つのモデルの平均を利用しますが、 kin_model に Molecule26-large と指定することで、モデルサイズの大きい4つ目のモデルを追加して計算を行うことができます。
擬ポテンシャル・擬原子軌道
AOF-DFTでは、OpenMXの提供するノルム保存擬ポテンシャル・擬原子軌道を使用可能です。 現行のバージョンではHからBiまでの、ランタノイドを除く68元素に対応しています。
ただし、局在性の高いセミコアを価電子として扱っている元素では、SCF計算の安定性・精度が不十分となるため、セミコアを取り除いた擬ポテンシャル・擬原子軌道を ADPACK にて独自に作成しています。
その対象となる元素は、Na, Mg, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Ga, As, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, In, Sn, Sb, Te, Cs, Ba, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Biです。ただし、Cs, Baでは5s電子についてはそのまま価電子として扱っています。
これらのアドバンスソフト改修版の擬ポテンシャル・擬原子軌道ファイルは、 *26_as.vps , *_as.pao というファイル名で提供されます。
計算実行
Atomsオブジェクトの get_potential_energy() などのメソッドを呼び出すことで、AOF-DFT計算が実行されます。
結果取得
get_potential_energy() , get_forces() などのメソッドの返り値として結果を取得します。全エネルギーは単位がeVのスカラー値、力は単位がeV/ÅのNumPy配列(原子数 3)として取得できます。
原子ごとの電荷、スピンは Atoms オブジェクトの atoms.arrays["charge"], atoms.arrays["spin"] からNumPy配列として取得できます。
また、 AOFDFTCalculator オブジェクトのプロパティからフェルミエネルギーなどの計算結果を取得できます。詳細はAOFDFTCalculator#プロパティを参照してください。