1# Copyright 2014-2019 The PySCF Developers. All Rights Reserved. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# 15# Author: Samragni Banerjee <samragnibanerjee4@gmail.com> 16# Alexander Sokolov <alexander.y.sokolov@gmail.com> 17# 18 19import unittest 20import numpy 21from pyscf import gto 22from pyscf import scf 23from pyscf import adc 24from pyscf import df 25 26r = 1.098 27mol = gto.Mole() 28mol.atom = [ 29 ['N', ( 0., 0. , -r/2 )], 30 ['N', ( 0., 0. , r/2)],] 31mol.basis = {'N':'cc-pvdz'} 32mol.verbose = 0 33mol.build() 34mf = scf.RHF(mol).density_fit(auxbasis='cc-pvdz-jkfit') 35mf.kernel() 36myadc = adc.ADC(mf) 37myadc = adc.ADC(mf).density_fit(auxbasis='cc-pvdz-ri') 38 39def tearDownModule(): 40 global mol,mf 41 del mol,mf 42 43class KnownValues(unittest.TestCase): 44 45 def test_df_gs(self): 46 47 mf = scf.RHF(mol).run() 48 myadc.with_df = df.DF(mol, auxbasis='cc-pvdz-ri') 49 e, t_amp1, t_amp2 = myadc.kernel_gs() 50 self.assertAlmostEqual(e, -0.31081009625, 6) 51 52 def test_dfhf_dfadc_gs(self): 53 54 myadc.with_df = df.DF(mol, auxbasis='cc-pvdz-ri') 55 e, t_amp1, t_amp2 = myadc.kernel_gs() 56 self.assertAlmostEqual(e, -0.3108102956, 6) 57 58 def test_dfadc3_ip(self): 59 60 myadc = adc.ADC(mf).density_fit(auxbasis='cc-pvdz-ri') 61 myadc.max_memory = 2 62 myadc.method = "adc(3)" 63 myadc.method_type = "ip" 64 65 e,v,p,x = myadc.kernel(nroots=3) 66 e_corr = myadc.e_corr 67 68 self.assertAlmostEqual(e_corr, -0.3061165912 , 6) 69 70 self.assertAlmostEqual(e[0], 0.55609388, 6) 71 self.assertAlmostEqual(e[1], 0.60109239, 6) 72 self.assertAlmostEqual(e[2], 0.60109239, 6) 73 74 self.assertAlmostEqual(p[0], 1.83255357, 6) 75 self.assertAlmostEqual(p[1], 1.86389642, 6) 76 self.assertAlmostEqual(p[2], 1.86389642, 6) 77 78 def test_dfhf_dfadc2_ea(self): 79 80 myadc.max_memory = 20 81 myadc.method = "adc(2)" 82 myadc.method_type = "ea" 83 84 e,v,p,x = myadc.kernel(nroots=4) 85 myadc.analyze() 86 87 self.assertAlmostEqual(e[0], 0.14260766, 6) 88 self.assertAlmostEqual(e[1], 0.14260766, 6) 89 self.assertAlmostEqual(e[2], 0.55083845, 6) 90 self.assertAlmostEqual(e[3], 0.76736577, 6) 91 92 self.assertAlmostEqual(p[0], 1.86603796, 6) 93 self.assertAlmostEqual(p[1], 1.86603796, 6) 94 self.assertAlmostEqual(p[2], 1.92699634, 6) 95 self.assertAlmostEqual(p[3], 1.88366005, 6) 96 97 def test_hf_dfadc2_ea(self): 98 99 mf = scf.RHF(mol).run() 100 myadc = adc.ADC(mf).density_fit(auxbasis='cc-pvdz-ri') 101 myadc.max_memory = 20 102 myadc.method = "adc(2)" 103 myadc.method_type = "ea" 104 105 e,v,p,x = myadc.kernel(nroots=4) 106 107 self.assertAlmostEqual(e[0], 0.14265314, 6) 108 self.assertAlmostEqual(e[1], 0.14265314, 6) 109 self.assertAlmostEqual(e[2], 0.55092042, 6) 110 self.assertAlmostEqual(e[3], 0.76714415, 6) 111 112 self.assertAlmostEqual(p[0], 1.86604908, 6) 113 self.assertAlmostEqual(p[1], 1.86604908, 6) 114 self.assertAlmostEqual(p[2], 1.92697854, 6) 115 self.assertAlmostEqual(p[3], 1.88386011, 6) 116 117 118if __name__ == "__main__": 119 print("DF-ADC calculations for different RADC methods for nitrogen molecule") 120 unittest.main() 121