697 words
3 minutes
【PySCF】電子状態計算に必要な分子構造を入力する方法
最終更新:2024-07-17
概要
PySCFと呼ばれる電子状態計算プログラムにおいて、分子構造の入力方法を以下に示す。
PySCF:https://github.com/pyscf/pyscf
環境
- python 3.x
- PySCF 2.6.0
- Linux (WSL, Ubuntu 22.04.4 LTS)
分子構造の入力方法
from pyscf import gto, scf
### 1つ目の方法
#オブジェクトを作成し変数molに代入することで初期化を行う。
mol = gto.Mole()
#build()で具体的に分子構造等を指定する。
mol.build(charge=0, spin=0,
basis='6-31g', unit='ANG',
atom='''H 0.0 0.0 0.34999992; H 0.0 0.0 -0.34999992''')
#chargeは形式電荷を指定する。
#spinはスピン多重度(2S+1)に対して1を引いた値(2S)を指定する。(スピン多重度をそのまま入力するとうまくいかない)
#basisで基底関数を指定する。
#unitは原子座標の単位が指定できる。Bohr単位の場合は"Bohr"を
#Angstrom単位の場合は、"ANG"と入力する。(デフォルトはANGである。)
###
### 2つ目の方法
#オブジェクトの作成するところまでは1つ目の方法と同じ
mol = gto.Mole()
mol.spin = 0#インスタンス変数に分子に関する情報を代入する。
mol.charge = 0
mol.basis = '6-31g'
mol.atom = '''H 0.0 0.0 0.34999992; H 0.0 0.0 -0.34999992'''
mol.build()
###
### 3つ目の方法
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''')
# (gto.Mole()と混同しないように。)
#こちらはbuild()は不要である。
###
mol.atomに入力する方法について
mol = gto.Mole()
#原子の種類は元素記号もしくは原子番号でで指定する
#カーテシアン座標で指定する場合は以下の通り
mol.atom = (('O',numpy.zeros(3)), #・ndarray(numpy)を用いる
['H', 0, 1, 0], #・list形式で原子の種類,x座標,y座標,z座標の順に指定
['H',[0, 0, 1]]) #原子の種類、xyz座標が指定されたlistの順に指定
#.xyzファイルを読み込んで指定することも可能
mol.atom = "my_molecule.xyz"
#改行及び、セミコロンで原子の情報の区切りを識別するため、この入力後build()しても問題ない。
mol.atom = '''
O 0, 0, 0 ; 1 0.0 1 0
H,0 0 1
'''
mol.basisに入力する方法について
#辞書形式で各原子ごとに割り当てる基底関数の指定が可能。
#以下の場合はSTO-3Gを入力した全ての酸素原子に、6-31Gを全ての水素原子に使用することを示す。
mol.basis = {'O': 'sto-3g', 'H': '6-31g'}
#parseを用いることでユーザ定義の基底関数が使用可能
#基底関数の係数の入力形式はNWChem形式である。
#(例)https://www.basissetexchange.org/basis/6-31+g/format/nwchem/?version=1&elements=17
mol.basis = {'O': gto.basis.parse('''
C S
71.6168370 0.15432897
13.0450960 0.53532814
3.5305122 0.44463454
C SP
2.9412494 -0.09996723 0.15591627
0.6834831 0.39951283 0.60768372
0.2222899 0.70011547 0.39195739
''')}
参考
公式のドキュメントの説明
・https://pyscf.org/user/gto.html
日本語での解説記事
・https://zenn.dev/saitom_tech/articles/python_psi4_1
・https://web.judai.jp/memos/1525
・https://labo-code.com/python/quantum-chemical-calculation/pyscf-sp/
【PySCF】電子状態計算に必要な分子構造を入力する方法
https://ss0832.github.io/posts/posting_20240717_01/