あるケミストの独り言(winchemwinの日記)

ケミスト(化学者)の視点で、面白そうな情報(シミュレーション関係など)を発信

Pyscfによる量子化学計算-Tkinterアプリ_8

 引き続きpyscfの計算実施用アプリについて紹介したいと思います。
 今回は分極率の計算の部分になります。
以下のコードはこれまでと同様に計算用の関数設定です。Tkinterアプリからの入力値(method, function, baseset等)を受けて、計算の実行を行っています。methodの違い(HF, DFT, MP2)はif文で分岐させています。分極率は、以前の記事でも紹介したようにPySCFでは、Polarizability()関数を使用します。分極率はテンソル(αxx, αxy、αxz・・・等)の値がnumpy arrayの形で算出されますので、等方的な数値のisotropic α 値を、numpyモジュールで処理をすることで算出しています。Mullken電荷や双極子モーメントの場合と同様に MP2レベルでの計算ではエラーが発生しましたので、計算できない旨のアラートを表示させるようにしています。

def Polar():
    # Calculation of Polarizability 
    
    # Display 'start'
    Label20=ttk.Label(text=u'Calculations(polarizability analysis) were started', font=("Times","12"))
    Label20.place(x=20, y=570)
    
    # Calculation of polarizability 
    
    if meth=='HF': 
        mol_pol=gto.M(atom=comp_geo, basis=base,verbose=4,output=svname+'-hfpol.xyz', max_memory = mem)
        mol_pol.spin=mul
        mol_pol.charge=chr
        lib.num_threads(thre)
        mf_hf_pol=scf.RHF(mol_pol)
        mf_hf_pol.chkfile=svname+'-hfpol.chk'
        mf_hf_pol.kernel()   
        
        polar=mf_hf_pol.Polarizability().polarizability()
        
        
    elif meth=='DFT':
        mol_pol=gto.M(atom=comp_geo, basis=base,verbose=4,output=svname+'-dftpol.xyz', max_memory = mem)
        mol_pol.spin=mul
        mol_pol.charge=chr
        lib.num_threads(thre)
        mf_dft_pol=dft.RKS(mol_pol)
        mf_dft_pol.xc=func
        mf_dft_pol=mf_dft_pol.newton()
        mf_dft_pol.chkfile=svname+'-dftpol.chk'
        mf_dft_pol.kernel()
        
        polar=mf_dft_pol.Polarizability().polarizability()
        
    
    elif meth=='MP2':
        # MP2 ではPolarizability 計算でエラー。計算不可の表示
        
        Label20.place_forget()
        Label11_1=ttk.Label(text=u'Polarizability calculations by MP2 can not be performed', font=("Times","12"))
        Label11_1.place(x=20, y=570)
        
        return
    
    # Display 'finish'
    Label20.place_forget()
    Label21=ttk.Label(text=u'Calculation was finished', font=("Times","12"))
    Label21.place(x=20, y=540) 

以上、今回は分極率の計算の関数のコードについて紹介させていただきました。
次回は赤外吸収スペクトル表示の関数のコードについて紹介したいと思います。