Home
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/
Author
ss0832
Published at
2024-07-09