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