- 公式サイト
- ユーザーガイド
## PySCF の設計
PySCF はモジュールベースであり、量子化学計算のプロセスを Python スクリプト上に宣言的に構築することができます。Gaussian などで DFT になじみがあれば、以下のモジュールをよく使うかもしれません:
gto
モジュール:分子のロードと基底関数の定義scf
モジュール:自己無撞着場法を用いる計算法 (Hartree-Fock 法など) を扱うdft
モジュール:scf
モジュールのサブモジュールで、Kohn-Sham DFT を扱う
PySCF はオープンソースながら、DFT 以外のより高度な量子化学手法にも対応している点が大きな魅力です。
mp
モジュール:Møller-Plesset 法cc
モジュール:結合クラスター法mcscf
モジュール:多配置自己無撞着場法 (CASSCF など)tdscf
モジュール:時間依存自己無撞着場法 (TD-DFT など)
## DFT 計算の実装
Kohn-Sham DFT を行うには、pyscf.dft.RKS
を用います。以下は公式ドキュメントの最小構成↗ で、 分子を LDA/cc-pVDZ レベルで一点計算しています。
from pyscf import gto, dft
# define molecule and basis set
mol_hf = gto.M(atom = 'H 0 0 0; F 0 0 1.1', basis = 'ccpvdz', symmetry = True)
# initalize dft solver
mf_hf = dft.RKS(mol_hf)
# set functional
mf_hf.xc = 'lda,vwn'
# scf algorithm
mf_hf = mf_hf.newton()
# compute energy
mf_hf.kernel()
### 交換相関汎関数
デフォルトでは、交換相関汎関数は Libxc をライブラリとして使用しているようです。
### 構造最適化
PySCF では、geomeTRIC
または PyBerny
を構造最適化のバックエンドに用いるため、いずれかをあらかじめインストールしておく必要があります。下の例では geomeTRIC
を用いており、対応するソルバーは pyscf.geomopt.geometric_solver.optimize
です。
また、PySCF では入出力フォーマットとして xyz
ファイルを使用することができます。
from pyscf import gto, dft
from pyscf.geomopt.geometric_solver import optimize
# define molecule and basis set (load xyz file)
mol = gto.M(atom="input.xyz", basis="ccpvdz")
# initalize dft solver
mf = dft.RKS(mol)
# set functional
mf.xc = "b3lyp"
# scf algorithm
mf = mf.newton()
# compute energy
mf.kernel()
# geometry optimization
mol_opt = optimize(mf, maxsteps=1000)
mol_opt.tofile("output.xyz", format="xyz")
### GPU の使用
gpu4pyscf
モジュールを用いることで、一部の計算プロセスを GPU 上で行うことができます。API もシンプルで、ソルバーのインスタンスを to_gpu
または to_cpu
メソッドで適宜変換することで、容易にデバイスの切り替えが可能となっています。
以下は、GPU で DFT による構造最適化を行うサンプルです。
from pyscf import gto
from gpu4pyscf.dft import rks
from pyscf.geomopt.geometric_solver import optimize
# define molecule and basis set (load xyz file)
mol = gto.M(atom="input.xyz", basis="ccpvdz")
# initalize dft solver and set functional
mf = rks.RKS(mol, xc="b3lyp").to_gpu()
# scf algorithm
mf = mf.newton()
# compute energy
mf.kernel()
# geometry optimization
mol_opt = optimize(mf, maxsteps=1000)
mol_opt.tofile("output.xyz", format="xyz")
記事がありません