430 words
2 minutes
【PySCF】RHF法で計算した時の計算結果の出力方法
最終更新: 2024-07-09
概要
PySCFと呼ばれる電子状態計算プログラムにおいて、RHF法で水素分子を計算した結果を出力する方法を以下に示す。
PySCF:https://github.com/pyscf/pyscf
環境
- python 3.x
- PySCF 2.6.0
- Linux (WSL, Ubuntu 22.04.4 LTS)
初期化
プログラム全体は以下のURLに示されている。 https://github.com/ss0832/HartreeFock_py/blob/master/CPHF/h2_test.py
import pyscf
from pyscf import gto, scf
import numpy as np
#水素分子をボーア単位で座標指定し、基底関数を6-31Gとする。
mol = gto.M(charge=0, spin=0, basis='6-31g', unit='Bohr', atom='''H 0.0 0.0 0.661404; H 0.0 0.0 -0.661404''')
#計算の過程が最も詳しく出力される。
mol.verbose = 10
#水素分子をRHF法で一点計算するように指定
mf = scf.RHF(mol)
#SCFのサイクルを1回とする。
mf.max_cycle = 1
#計算開始
mf.run()
出力
分子軌道係数
print("mo_coeff:")
print(vars(mf)["mo_coeff"])
分子軌道エネルギー
print("mo_energy:")
print(vars(mf)["mo_energy"])
分子軌道の電子占有数
print("mo_occ:")
print(vars(mf)["mo_occ"])
電子エネルギー
print("e_tot:")
print(vars(mf)["e_tot"]) #原子単位系(hartree)で出力される
SCFが収束したかどうか
print("converged:")
print(vars(mf)["converged"]) #収束している場合はTrue, していない場合はFalseで返される。
二電子積分
print("_eri:")
print(vars(mf)["_eri"], len(vars(mf)["_eri"])) #二電子積分行列の対称性から、重複なしでベクトルとして出力される。
重なり積分
print("int1e_ovlp:")
print(mol.intor("int1e_ovlp"))
運動エネルギー項(コアハミルトニアンの成分)
print("int1e_kin:")
print(mol.intor("int1e_kin"))
核引力項(コアハミルトニアンの成分)
print("int1e_nuc:")
print(mol.intor("int1e_nuc"))
二電子積分(4階のテンソル)
こちらを実行すると、前述のものとは異なり、重複ありの4階のテンソルとして出力される。
print("int2e:")
print(mol.intor("int2e"))
コアハミルトニアン
print("core hamiltonian:")
print(mf.get_hcore())
フォック行列
コアハミルトニアンと後述する二電子項の和
print("fock:")
print(mf.get_fock())
クーロン積分(二電子項の成分)
print("J:")
print(mf.get_j())
交換積分(二電子項の成分)
print("K:")
print(mf.get_k())
その他追記予定。
【PySCF】RHF法で計算した時の計算結果の出力方法
https://ss0832.github.io/posts/posting_20240709_01/