【化学でPython】PySCF:Pythonだけで量子化学計算を手軽に実行する
はじめに
この「化学でPython」シリーズでは、化学の分野で有用な Python ライブラリを紹介しています。
今回紹介するのは、PySCF です。
PySCF とは?
Pythonで書かれた(Pythonネイティブな)量子化学計算ライブラリです。
Gaussian や GAMESS などのパッケージソフトを使わなくても、Python スクリプトとして量子化学計算を手軽に実行できます。
インストール
pip で簡単にインストールできます。
pip install pyscf
基本的な使い方
まずは、最も基本的な使い方として、水分子(H₂O)の構造一点でのエネルギー計算(Hartree-Fock法)を行ってみましょう。
import pyscf
# 分子構造の定義
mol = pyscf.M(
atom = '''
O 0.0000000 0.0000000 0.1173
H 0.0000000 0.7572000 -0.4692
H 0.0000000 -0.7572000 -0.4692
''',
basis = 'cc-pvdz', # 基底関数の指定
)
# Hartree-Fock計算の設定と実行
mf = mol.RHF() # Restricted Hartree-Fock
mf.kernel() # 計算実行
converged SCF energy = -76.0267720533916
たったこれだけのコードで、量子化学計算が実行できました。
mf オブジェクトには、軌道エネルギーや係数などの計算結果が格納されていて、後から自由にアクセスできます。
実践例: 水素分子の結合解離曲線を書く
実践的な例として、「水素分子(H₂)の原子間距離を変化させながらエネルギーを計算し、ポテンシャルエネルギー曲面(PES)を描く」 というタスクをやってみます。
これにより、最も安定な結合距離(平衡核間距離)と、結合エネルギーを見積もることができます。
1. 距離を変えながらエネルギー計算
forループを使って、原子間距離 d を少しずつ変えながら計算を繰り返します。
import numpy as np
import matplotlib.pyplot as plt
from pyscf import gto, scf
# 計算する距離のリスト(0.5 Å から 2.5 Å まで)
distances = np.linspace(0.5, 2.5, 20)
energies = []
print("Calculation started...")
for d in distances:
# 分子の定義(距離 d を変数として埋め込む)
mol = gto.M(
atom = f'H 0 0 0; H 0 0 {d}',
basis = 'cc-pvdz',
verbose = 0 # 出力を抑制
)
# RHF計算の実行
mf = scf.RHF(mol)
e = mf.kernel()
energies.append(e)
print("Calculation finished.")
Calculation started...
Calculation finished.
2. 結果の可視化
計算結果を matplotlib でグラフにします。
plt.figure(figsize=(8, 5))
plt.plot(distances, energies, 'o-', label='RHF / cc-pvdz')
plt.xlabel('Bond Length (Å)')
plt.ylabel('Total Energy (Hartree)')
plt.title('Potential Energy Surface of H2')
plt.grid(True)
plt.legend()
plt.show()

実行結果
グラフを見ると、ある特定の距離(約0.74 Å)でエネルギーが最小になっていることがわかります。これが水素分子の平衡核間距離です。
また、距離が離れるにつれてエネルギーが高くなり、ある一定値に収束していく様子(解離極限)も見て取れます。
まとめ
今回は PySCF を紹介しました。
- Point 1: Pythonだけで本格的な量子化学計算が手軽に実行できます。
- Point 2: ループ処理やデータ解析など、Pythonの機能をフル活用した計算フローが組めます。
- Point 3: 初学者の学習用から、最先端の手法開発まで幅広く使える強力なツールです。
「量子化学計算=難しい専用ソフトが必要」というイメージがあるかもですが、PySCFなら pip install ひとつで始められますよ。
ぜひ試してみてください。
Discussion
これは知らなかったけど、楽しそうなライブラリ。