Ejemplo n.º 1
0
    def test_rand_ccsd_frozen1(self):
        '''Single (eom-)ccsd iteration with random t1/t2 and single frozen occupied
        orbital.'''
        kmf = pbcscf.addons.convert_to_ghf(rand_kmf)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        frozen = [[0,],[],[]]
        rand_cc = pbcc.KGCCSD(kmf, frozen=frozen)
        eris = rand_cc.ao2mo(rand_cc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        # Manually zero'ing out the frozen elements of the t1/t2
        # N.B. the 0'th element frozen means we are freezing the 1'th
        #      element in the current padding scheme
        t1[0, 1] = 0.0
        t2[0, :, :, 1, :] = 0.0
        t2[:, 0, :, :, 1] = 0.0

        Ht1, Ht2 = rand_cc.update_amps(t1, t2, eris)
        self.assertAlmostEqual(finger(Ht1), (-15.7950827762+31.0483053388j), 6)
        self.assertAlmostEqual(finger(Ht2), (263.884192539+96.7615664563j), 6)
Ejemplo n.º 2
0
    def test_init_guess_minao(self):
        mol = gto.M(
            verbose = 7,
            output = '/dev/null',
            atom = '''
        O     0    0        0
        H1    0    -0.757   0.587
        H2    0    0.757    0.587''',
            basis = 'ccpvdz',
        )
        dm = scf.hf.get_init_guess(mol, key='minao')
        self.assertAlmostEqual(lib.finger(dm), 2.5912875957299684, 9)

        mol1 = gto.M(atom='Mo', basis='lanl2dz', ecp='lanl2dz',
                     verbose=7, output='/dev/null')
        dm = scf.hf.get_init_guess(mol1, key='minao')
        self.assertAlmostEqual(lib.finger(dm), 1.5371195992125495, 9)
        self.assertAlmostEqual(numpy.einsum('ij,ji->', dm, mol1.intor('int1e_ovlp')), 14, 9)

        mol1.basis = 'sto3g'
        mol1.build(0, 0)
        dm = scf.hf.get_init_guess(mol1, key='minao')
        self.assertAlmostEqual(lib.finger(dm), 1.8936729909734513, 9)
        self.assertAlmostEqual(numpy.einsum('ij,ji->', dm, mol1.intor('int1e_ovlp')), 13.4787347477, 7)
        mol1.stdout.close()
Ejemplo n.º 3
0
    def test_rand_ccsd_frozen2(self):
        '''Single (eom-)ccsd iteration with random t1/t2 and full occupied frozen
        at a single k-point.'''
        kmf = pbcscf.addons.convert_to_ghf(rand_kmf)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        frozen = [[],[0,1,2,3],[]]
        rand_cc = pbcc.KGCCSD(kmf, frozen=frozen)
        eris = rand_cc.ao2mo(rand_cc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        # Manually zero'ing out the frozen elements of the t1/t2
        # N.B. the 0'th element frozen means we are freezing the 1'th
        #      element in the current padding scheme
        t1[1, [0,1,2,3]] = 0.0
        t2[1, :, :, [0,1,2,3], :] = 0.0
        t2[:, 1, :, :, [0,1,2,3]] = 0.0

        Ht1, Ht2 = rand_cc.update_amps(t1, t2, eris)
        self.assertAlmostEqual(finger(Ht1), (-19.2772171332-10.5977304455j), 6)
        self.assertAlmostEqual(finger(Ht2), (227.434582141+298.826965082j), 6)
Ejemplo n.º 4
0
    def test_rand_ccsd_frozen3(self):
        '''Single (eom-)ccsd iteration with random t1/t2 and single frozen virtual
        orbital.'''
        kconserv = kpts_helper.get_kconserv(rand_kmf.cell, rand_kmf.kpts)

        kmf = pbcscf.addons.convert_to_ghf(rand_kmf)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        frozen = [[],[],[5]]  # freezing one virtual
        rand_cc = pbcc.KGCCSD(kmf, frozen=frozen)
        eris = rand_cc.ao2mo(rand_cc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        # Manually zero'ing out the frozen elements of the t1/t2
        t1[2, :, 0] = 0.0
        for ki in range(rand_cc.nkpts):
          for kj in range(rand_cc.nkpts):
            for ka in range(rand_cc.nkpts):
              kb = kconserv[ki, ka, kj]
              if ka == 2:
                  t2[ki, kj, ka, :, :, 0] = 0.0
              if kb == 2:
                  t2[ki, kj, ka, :, :, :, 0] = 0.0

        Ht1, Ht2 = rand_cc.update_amps(t1, t2, eris)
        self.assertAlmostEqual(finger(Ht1), (-19.6637196882-16.2773841431j), 6)
        self.assertAlmostEqual(finger(Ht2), (881.655146297+1283.71020059j), 6)
Ejemplo n.º 5
0
    def test_eris_contract_vvvv_t2(self):
        mol = gto.Mole()
        nocca, noccb, nvira, nvirb = 5, 4, 12, 13
        nvira_pair = nvira*(nvira+1)//2
        nvirb_pair = nvirb*(nvirb+1)//2
        numpy.random.seed(9)
        t2 = numpy.random.random((nocca,noccb,nvira,nvirb))
        eris = uccsd._ChemistsERIs()
        eris.vvVV = numpy.random.random((nvira_pair,nvirb_pair))
        eris.mol = mol
        myucc.max_memory, bak = 0, myucc.max_memory
        vt2 = eris._contract_vvVV_t2(myucc, t2, eris.vvVV)
        myucc.max_memory = bak
        self.assertAlmostEqual(lib.finger(vt2), 12.00904827896089, 11)
        idxa = lib.square_mat_in_trilu_indices(nvira)
        idxb = lib.square_mat_in_trilu_indices(nvirb)
        vvVV = eris.vvVV[:,idxb][idxa]
        ref = lib.einsum('acbd,ijcd->ijab', vvVV, t2)
        self.assertAlmostEqual(abs(vt2 - ref).max(), 0, 11)

        # _contract_VVVV_t2, testing complex and real mixed contraction
        VVVV =(numpy.random.random((nvirb,nvirb,nvirb,nvirb)) +
               numpy.random.random((nvirb,nvirb,nvirb,nvirb))*1j - (.5+.5j))
        VVVV = VVVV + VVVV.transpose(1,0,3,2).conj()
        VVVV = VVVV + VVVV.transpose(2,3,0,1)
        eris.VVVV = VVVV
        t2 = numpy.random.random((noccb,noccb,nvirb,nvirb))
        t2 = t2 - t2.transpose(0,1,3,2)
        t2 = t2 - t2.transpose(1,0,3,2)
        myucc.max_memory, bak = 0, myucc.max_memory
        vt2 = eris._contract_VVVV_t2(myucc, t2, eris.VVVV)
        myucc.max_memory = bak
        self.assertAlmostEqual(lib.finger(vt2), 47.903883794299404-50.501573400833429j, 11)
        ref = lib.einsum('acbd,ijcd->ijab', eris.VVVV, t2)
        self.assertAlmostEqual(abs(vt2 - ref).max(), 0, 11)
Ejemplo n.º 6
0
    def test_define_xc(self):
        def eval_xc(xc_code, rho, spin=0, relativity=0, deriv=1, verbose=None):
            # A fictitious XC functional to demonstrate the usage
            rho0, dx, dy, dz = rho[:4]
            gamma = (dx**2 + dy**2 + dz**2)
            exc = .01 * rho0**2 + .02 * (gamma+.001)**.5
            vrho = .01 * 2 * rho0
            vgamma = .02 * .5 * (gamma+.001)**(-.5)
            vlapl = None
            vtau = None
            vxc = (vrho, vgamma, vlapl, vtau)
            fxc = None  # 2nd order functional derivative
            kxc = None  # 3rd order functional derivative
            return exc, vxc, fxc, kxc

        mf = dft.RKS(mol)
        ni = dft.libxc.define_xc(mf._numint, eval_xc, 'GGA', hyb=0.2)
        numpy.random.seed(1)
        rho = numpy.random.random((4,10))
        exc, vxc = ni.eval_xc(None, rho, 0, deriv=1)[:2]
        self.assertAlmostEqual(lib.finger(exc), 0.0012441814416833327, 9)
        self.assertAlmostEqual(lib.finger(vxc[0]), 0.0065565189784811129, 9)
        self.assertAlmostEqual(lib.finger(vxc[1]), 0.0049270110162854116, 9)

        mf = mf.define_xc_('0.5*B3LYP+0.5*B3LYP')
        exc0, vxc0 = mf._numint.eval_xc(None, rho, 0, deriv=1)[:2]
        exc1, vxc1 = dft.libxc.eval_xc('0.5*B3LYP+0.5*B3LYP', rho, 0, deriv=1)[:2]
        self.assertAlmostEqual(abs(exc0-exc1).max(), 0, 9)
        self.assertAlmostEqual(abs(vxc0[0]-vxc1[0]).max(), 0, 9)
        self.assertAlmostEqual(abs(vxc0[1]-vxc1[1]).max(), 0, 9)

        self.assertRaises(ValueError, dft.libxc.define_xc, mf._numint, 0.1)
Ejemplo n.º 7
0
 def test_make_rdm1(self):
     dm1 = mc.make_rdm1()
     self.assertAlmostEqual(lib.finger(dm1), -5.0290089869374492, 5)
     dm1 = mc.analyze(with_meta_lowdin=False)
     self.assertAlmostEqual(lib.finger(dm1[0]), -5.7326112327013377, 5)
     self.assertAlmostEqual(lib.finger(dm1[1]), 0.70360224576388797, 5)
     self.assertAlmostEqual(lib.finger(dm1[0]+dm1[1]), -5.0290089869374492, 5)
Ejemplo n.º 8
0
    def test_coulG(self):
        numpy.random.seed(19)
        kpt = numpy.random.random(3)
        cell = pbcgto.Cell()
        cell.unit = 'A'
        cell.atom = 'C 0.,  0.,  0.; C 0.8917,  0.8917,  0.8917'
        cell.a = numpy.array(((0.    , 1.7834, 1.7834),
                              (1.7834, 0.    , 1.7834),
                              (1.7834, 1.7834, 0.    ),)) + numpy.random.random((3,3)).T
        cell.basis = 'gth-szv'
        cell.pseudo = 'gth-pade'
        cell.mesh = [11,9,7]
        cell.verbose = 5
        cell.output = '/dev/null'
        cell.build()
        coulG = tools.get_coulG(cell, kpt)
        self.assertAlmostEqual(lib.finger(coulG), 62.75448804333378, 9)

        cell.a = numpy.eye(3)
        cell.unit = 'B'
        coulG = tools.get_coulG(cell, numpy.array([0, numpy.pi, 0]))
        self.assertAlmostEqual(lib.finger(coulG), 4.6737453679713905, 9)
        coulG = tools.get_coulG(cell, numpy.array([0, numpy.pi, 0]),
                                wrap_around=False)
        self.assertAlmostEqual(lib.finger(coulG), 4.5757877990664744, 9)
        coulG = tools.get_coulG(cell, exx='ewald')
        self.assertAlmostEqual(lib.finger(coulG), 4.888843468914021, 9)
Ejemplo n.º 9
0
    def test_canonicalize1(self):
        numpy.random.seed(1)
        f1 = numpy.random.random(mcr.mo_coeff.shape)
        u1 = numpy.linalg.svd(f1)[0]
        mo1 = numpy.dot(mcr.mo_coeff, u1)
        mo1 = lib.tag_array(mo1, orbsym=mcr.mo_coeff.orbsym)
        mo, ci, mo_e = mcr.canonicalize(mo1)
        e1 = numpy.einsum('ji,jk,ki', mo, f1, mo)
        self.assertAlmostEqual(e1, 44.2658681077, 7)
        self.assertAlmostEqual(lib.finger(mo_e), 5.1364166175063097, 7)

        mo, ci, mo_e = mcr.canonicalize(mo1, eris=mcr.ao2mo(mcr.mo_coeff))
        e1 = numpy.einsum('ji,jk,ki', mo, f1, mo)
        self.assertAlmostEqual(e1, 44.2658681077, 7)
        self.assertAlmostEqual(lib.finger(mo_e), 4.1206025804989173, 7)

        mcr1 = copy.copy(mcr)
        mcr1.frozen = 2
        mo, ci, mo_e = mcr1.canonicalize(mo1)
        self.assertAlmostEqual(lib.finger(mo_e), 6.6030999409178577, 7)

        mcr1.frozen = [0,1]
        mo, ci, mo_e = mcr1.canonicalize(mo1)
        self.assertAlmostEqual(lib.finger(mo_e), 6.6030999409178577, 7)

        mcr1.frozen = [1,12]
        mo, ci, mo_e = mcr1.canonicalize(mo1)
        self.assertAlmostEqual(lib.finger(mo_e), 5.2182584355788162, 7)
Ejemplo n.º 10
0
    def test_rand_ccsd_frozen0(self):
        '''Single (eom-)ccsd iteration with random t1/t2 and lowest lying orbital
        at multiple k-points frozen.'''
        kmf = pbcscf.addons.convert_to_ghf(rand_kmf)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        # frozen = 1
        rand_cc = pbcc.KGCCSD(kmf, frozen=1)
        eris = rand_cc.ao2mo(rand_cc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(kmf, rand_cc)

        Ht1, Ht2 = rand_cc.update_amps(t1, t2, eris)
        self.assertAlmostEqual(finger(Ht1), (12.6235870016-0.263432509044j), 6)
        self.assertAlmostEqual(finger(Ht2), (94.8802678168+910.369938369j), 6)

        # frozen = [[0,],[0,],[0,]], should be same as above
        frozen = [[0,],[0,],[0,]]
        rand_cc = pbcc.KGCCSD(kmf, frozen=frozen)
        eris = rand_cc.ao2mo(rand_cc.mo_coeff)
        eris.mo_energy = [eris.fock[k].diagonal() for k in range(rand_cc.nkpts)]
        t1, t2 = rand_t1_t2(rand_kmf, rand_cc)

        Ht1, Ht2 = rand_cc.update_amps(t1, t2, eris)
        self.assertAlmostEqual(finger(Ht1), (12.6235870016-0.263432509044j), 6)
        self.assertAlmostEqual(finger(Ht2), (94.8802678168+910.369938369j), 6)
Ejemplo n.º 11
0
    def test_eris_contract_vvvv_t2(self):
        mol = gto.Mole()
        nocc, nvir = 5, 12
        nvir_pair = nvir*(nvir+1)//2
        numpy.random.seed(9)
        t2 = numpy.random.random((nocc,nocc,nvir,nvir)) - .5
        t2 = t2 + t2.transpose(1,0,3,2)
        eris = ccsd._ChemistsERIs()
        vvvv = numpy.random.random((nvir_pair,nvir_pair)) - .5
        eris.vvvv = vvvv + vvvv.T
        eris.mol = mol
        mycc.max_memory, bak = 0, mycc.max_memory
        vt2 = eris._contract_vvvv_t2(mycc, t2, eris.vvvv)
        mycc.max_memory = bak
        self.assertAlmostEqual(lib.finger(vt2), -39.572579908080087, 11)
        vvvv = ao2mo.restore(1, eris.vvvv, nvir)
        ref = lib.einsum('acbd,ijcd->ijab', vvvv, t2)
        self.assertAlmostEqual(abs(vt2 - ref).max(), 0, 11)

        # _contract_s1vvvv_t2, testing complex and real mixed contraction
        vvvv =(numpy.random.random((nvir,nvir,nvir,nvir)) +
               numpy.random.random((nvir,nvir,nvir,nvir))*1j - (.5+.5j))
        vvvv = vvvv + vvvv.transpose(1,0,3,2).conj()
        vvvv = vvvv + vvvv.transpose(2,3,0,1)
        eris.vvvv = vvvv
        eris.mol = mol
        mycc.max_memory, bak = 0, mycc.max_memory
        vt2 = eris._contract_vvvv_t2(mycc, t2, eris.vvvv)
        mycc.max_memory = bak
        self.assertAlmostEqual(lib.finger(vt2), 23.502736435296871+113.90422480013488j, 11)
        ref = lib.einsum('acbd,ijcd->ijab', eris.vvvv, t2)
        self.assertAlmostEqual(abs(vt2 - ref).max(), 0, 11)
Ejemplo n.º 12
0
    def test_init_guess_by_1e(self):
        dm = mf.get_init_guess(key='1e')
        self.assertAlmostEqual(lib.finger(dm), 0.025922864381755062, 9)

        dm = kmf.get_init_guess(key='1e')
        self.assertEqual(dm.ndim, 3)
        self.assertAlmostEqual(lib.finger(dm), 0.025922864381755062, 9)
Ejemplo n.º 13
0
    def test_get_veff(self):
        mf = pscf.RHF(cell)
        numpy.random.seed(1)
        nao = cell.nao_nr()
        dm = numpy.random.random((nao,nao)) + numpy.random.random((nao,nao))*1j
        dm = dm + dm.conj().T
        v11 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([.25,.25,.25]))
        v12 = mf.get_veff(cell, dm, kpts_band=cell.get_abs_kpts([.25,.25,.25]))
        v13 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([-1./3,1./3,.25]),
                          kpts_band=cell.get_abs_kpts([.25,.25,.25]))
        v14 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([-1./3,1./3,.25]),
                          kpts_band=cell.make_kpts([2,1,1]))
        self.assertTrue(v11.dtype == numpy.complex128)
        self.assertTrue(v12.dtype == numpy.complex128)

        mf = pscf.UHF(cell)
        v21 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([.25,.25,.25]))
        dm = [dm*.5,dm*.5]
        v22 = mf.get_veff(cell, dm, kpts_band=cell.get_abs_kpts([.25,.25,.25]))
        v23 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([-1./3,1./3,.25]),
                          kpts_band=cell.get_abs_kpts([.25,.25,.25]))
        v24 = mf.get_veff(cell, dm, kpt=cell.get_abs_kpts([-1./3,1./3,.25]),
                          kpts_band=cell.make_kpts([2,1,1]))
        self.assertAlmostEqual(abs(v11-v21).max(), 0, 9)
        self.assertAlmostEqual(abs(v12-v22).max(), 0, 9)
        self.assertAlmostEqual(abs(v13-v23).max(), 0, 9)
        self.assertAlmostEqual(abs(v14-v24).max(), 0, 9)
        self.assertAlmostEqual(lib.finger(v11), -0.30110964334164825+0.81409418199767414j, 9)
        self.assertAlmostEqual(lib.finger(v12), -2.1601376488983997-9.4070613374115908j, 9)
Ejemplo n.º 14
0
 def test_p(self):
     numpy.random.seed(2)
     a = numpy.random.random((3,3,3))
     self.assertAlmostEqual(lib.finger(cc.p('a.c', a)), -1.1768882755852079, 12)
     self.assertAlmostEqual(lib.finger(cc.p('.ab', a)), -1.9344875839983993, 12)
     self.assertAlmostEqual(lib.finger(cc.p('abc', a)), -0.0055534783760265282, 14)
     self.assertAlmostEqual(abs(cc.p('a.a', a) - a).max(), 0, 12)
Ejemplo n.º 15
0
    def test_aux_e2(self):
        nao = mol.nao_nr()
        naoaux = auxmol.nao_nr()
        eri0 = numpy.empty((nao,nao,naoaux))
        pi = 0
        for i in range(mol.nbas):
            pj = 0
            for j in range(mol.nbas):
                pk = 0
                for k in range(mol.nbas, mol.nbas+auxmol.nbas):
                    shls = (i, j, k)
                    buf = gto.moleintor.getints_by_shell('int3c2e_sph',
                                                         shls, atm, bas, env)
                    di, dj, dk = buf.shape
                    eri0[pi:pi+di,pj:pj+dj,pk:pk+dk] = buf
                    pk += dk
                pj += dj
            pi += di

        j3c = df.incore.aux_e2(mol, auxmol, intor='int3c2e_sph', aosym='s1')
        self.assertTrue(numpy.allclose(eri0, j3c.reshape(nao,nao,naoaux)))
        self.assertAlmostEqual(lib.finger(j3c), 48.11812978990752, 9)

        idx = numpy.tril_indices(nao)
        j3c = df.incore.aux_e2(mol, auxmol, intor='int3c2e_sph', aosym='s2ij')
        self.assertTrue(numpy.allclose(eri0[idx], j3c))
        self.assertAlmostEqual(lib.finger(j3c), 4.6774743051154459, 9)
Ejemplo n.º 16
0
 def test_analyze(self):
     f = td_hf.oscillator_strength(gauge='length')
     self.assertAlmostEqual(lib.finger(f), -0.13908774016795605, 7)
     f = td_hf.oscillator_strength(gauge='velocity', order=2)
     self.assertAlmostEqual(lib.finger(f), -0.096991134490587522, 7)
     td_hf.analyze()
     self.assertEqual(td_hf.nroots, td_hf.nstates)
     self.assertAlmostEqual(lib.finger(td_hf.e_tot-mf.e_tot), 0.41508325757603637, 6)
Ejemplo n.º 17
0
    def test_nr_s8(self):
        mol = gto.M(atom="He 0 0 0; Ne 3 0 0", basis='ccpvdz')
        eri0 = mol.intor('int2e_sph', aosym='s8')
        self.assertAlmostEqual(lib.finger(eri0), -10.685918926843847, 9)

        eri1 = mol.intor('int2e_yp_sph', aosym=8)
        self.assertAlmostEqual(lib.finger(eri1), -10.685918926843847, 9)
        self.assertAlmostEqual(abs(eri0-eri1).max(), 0, 9)
Ejemplo n.º 18
0
    def test_khf_stability(self):
        kmf = pscf.KRHF(cell, kpts, exxdiv='ewald').run(conv_tol=1e-12)
        mo_i, mo_e = kmf.stability(internal=True, external=True)
        self.assertAlmostEqual(abs(kmf.mo_coeff[0]-mo_i[0]).max(), 0, 9)

        hop2, hdiag2 = stability._gen_hop_rhf_external(kmf)
        self.assertAlmostEqual(lib.finger(hdiag2), 18.528134783454508, 7)
        self.assertAlmostEqual(lib.finger(hop2(hdiag2)), 108.99683506471919, 5)
Ejemplo n.º 19
0
    def test_fast_iao_mulliken_pop(self):
        mf = scf.RHF(mol).run()
        a = iao.iao(mol, mf.mo_coeff[:,mf.mo_occ>0])
        p,chg = iao.fast_iao_mullikan_pop(mol, mf.make_rdm1(), a)
        self.assertAlmostEqual(lib.finger(p), 0.56812564587009806, 5)

        mf = scf.UHF(mol).run()
        p,chg = iao.fast_iao_mullikan_pop(mol, mf.make_rdm1(), a)
        self.assertAlmostEqual(lib.finger(p[0]+p[1]), 0.56812564587009806, 5)
Ejemplo n.º 20
0
    def test_kuhf_stability(self):
        kumf = pscf.KUHF(cell, kpts, exxdiv='ewald').run(conv_tol=1e-12)
        mo_i, mo_e = kumf.stability(internal=True, external=True)
        self.assertAlmostEqual(abs(kumf.mo_coeff[0][0]-mo_i[0][0]).max(), 0, 9)
        self.assertAlmostEqual(abs(kumf.mo_coeff[1][0]-mo_i[1][0]).max(), 0, 9)

        hop2, hdiag2 = stability._gen_hop_uhf_external(kumf)
        self.assertAlmostEqual(lib.finger(hdiag2), 10.977759629315884, 7)
        self.assertAlmostEqual(lib.finger(hop2(hdiag2)), 86.425042652868, 5)
Ejemplo n.º 21
0
    def test_init_guess_by_atom(self):
        with lib.temporary_env(cell, dimension=1):
            dm = mf.get_init_guess(key='minao')
            kdm = kmf.get_init_guess(key='minao')

        self.assertAlmostEqual(lib.finger(dm), -1.714952331211208, 8)

        self.assertEqual(kdm.ndim, 3)
        self.assertAlmostEqual(lib.finger(dm), -1.714952331211208, 8)
Ejemplo n.º 22
0
 def test_r_get_jk(self):
     numpy.random.seed(1)
     dfobj = df.df.DF4C(mol)
     n2c = mol.nao_2c()
     n4c = n2c * 2
     dms = numpy.random.random((2,n4c,n4c))
     vj, vk = dfobj.get_jk(dms, hermi=0)
     self.assertAlmostEqual(lib.finger(vj), 12.961687328405461+55.686811159338134j, 9)
     self.assertAlmostEqual(lib.finger(vk), 41.984238099875462+12.870888901217896j, 9)
Ejemplo n.º 23
0
    def test_bands(self):
        np.random.seed(1)
        kpts_bands = np.random.random((1,3))

        e = mf.get_bands(kpts_bands)[0]
        self.assertAlmostEqual(lib.finger(e), 0.9038555558945438, 6)

        e = kmf.get_bands(kpts_bands)[0]
        self.assertAlmostEqual(lib.finger(e), -0.3020614, 6)
Ejemplo n.º 24
0
 def test_multi_roots(self):
     mc1 = mcscf.CASCI(m, 4, 4)
     mc1.fcisolver.nroots = 2
     mc1.natorb = True
     mc1.kernel()
     self.assertAlmostEqual(mc1.e_tot[0], -108.83741684447352, 9)
     self.assertAlmostEqual(mc1.e_tot[1], -108.72522194135604, 9)
     dm1 = mc1.analyze()
     self.assertAlmostEqual(lib.finger(dm1[0]), 2.6252082970845532, 7)
     self.assertAlmostEqual(lib.finger(dm1[1]), 2.6252082970845532, 7)
Ejemplo n.º 25
0
 def test_state_average(self):
     mc1 = mcscf.CASSCF(m, 4, 4).state_average_((0.5,0.5))
     mc1.natorb = True
     mc1.kernel()
     self.assertAlmostEqual(numpy.dot(mc1.e_tot, [.5,.5]), -108.80445340617777, 8)
     mo_occ = lib.chkfile.load(mc1.chkfile, 'mcscf/mo_occ')[5:9]
     self.assertAlmostEqual(lib.finger(mo_occ), 1.8748844779923917, 4)
     dm1 = mc1.analyze()
     self.assertAlmostEqual(lib.finger(dm1[0]), 2.6993157521103779, 4)
     self.assertAlmostEqual(lib.finger(dm1[1]), 2.6993157521103779, 4)
Ejemplo n.º 26
0
    def test_ao2mo_with_mol_cart(self):
        pmol = mol.copy()
        pmol.cart = True
        nao = pmol.nao_nr()
        numpy.random.seed(1)
        mo = numpy.random.random((nao,4))
        eri = ao2mo.kernel(pmol, mo)
        self.assertAlmostEqual(lib.finger(eri), -977.99841341828437, 9)

        eri = ao2mo.kernel(mol, mo, intor='int2e_cart')
        self.assertAlmostEqual(lib.finger(eri), -977.99841341828437, 9)
Ejemplo n.º 27
0
    def test_contract(self):
        mol = gto.M()
        mol.nelectron = 6
        nocc, nvir = mol.nelectron//2, 4
        nmo = nocc + nvir
        nmo_pair = nmo*(nmo+1)//2
        mf = scf.RHF(mol)
        numpy.random.seed(12)
        mf._eri = numpy.random.random(nmo_pair*(nmo_pair+1)//2)
        mf.mo_coeff = numpy.random.random((nmo,nmo))
        mf.mo_energy = numpy.arange(0., nmo)
        mf.mo_occ = numpy.zeros(nmo)
        mf.mo_occ[:nocc] = 2
        dm = mf.make_rdm1()
        vhf = mf.get_veff(mol, dm)
        h1 = numpy.random.random((nmo,nmo)) * .1
        h1 = h1 + h1.T
        mf.get_hcore = lambda *args: h1

        myci = ci.CISD(mf)
        eris = myci.ao2mo(mf.mo_coeff)
        eris.ehf = (h1*dm).sum() + (vhf*dm).sum()*.5

        c2 = numpy.random.random((nocc,nocc,nvir,nvir)) * .1
        c2 = c2 + c2.transpose(1,0,3,2)
        c1 = numpy.random.random(nocc*nvir+1) * .1
        c0, c1 = c1[0], c1[1:].reshape(nocc,nvir)
        civec = myci.amplitudes_to_cisdvec(c0, c1, c2)
        hcivec = ci.cisd.contract(myci, civec, eris)
        self.assertAlmostEqual(lib.finger(hcivec), 2059.5730673341673, 9)
        e2 = ci.cisd.dot(civec, hcivec+eris.ehf*civec, nmo, nocc)
        self.assertAlmostEqual(e2, 7226.7494656749295, 9)

        rdm2 = myci.make_rdm2(civec, nmo, nocc)
        self.assertAlmostEqual(lib.finger(rdm2), 2.0492023431953221, 9)

        def fcicontract(h1, h2, norb, nelec, ci0):
            g2e = fci.direct_spin1.absorb_h1e(h1, h2, norb, nelec, .5)
            ci1 = fci.direct_spin1.contract_2e(g2e, ci0, norb, nelec)
            return ci1
        ci0 = myci.to_fcivec(civec, nmo, mol.nelec)
        self.assertAlmostEqual(abs(civec-myci.from_fcivec(ci0, nmo, nocc*2)).max(), 0, 9)
        h2e = ao2mo.kernel(mf._eri, mf.mo_coeff)
        h1e = reduce(numpy.dot, (mf.mo_coeff.T, h1, mf.mo_coeff))
        ci1 = fcicontract(h1e, h2e, nmo, mol.nelec, ci0)
        ci2 = myci.to_fcivec(hcivec, nmo, mol.nelec)
        e1 = numpy.dot(ci1.ravel(), ci0.ravel())
        e2 = ci.cisd.dot(civec, hcivec+eris.ehf*civec, nmo, nocc)
        self.assertAlmostEqual(e1, e2, 9)

        dovov, dvvvv, doooo, doovv, dovvo, dvvov, dovvv, dooov = \
                ci.cisd._gamma2_intermediates(myci, civec, nmo, nocc)
        self.assertAlmostEqual(lib.finger(numpy.array(dovov)), 0.02868859991188923, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dvvvv)),-0.05524957311823144, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doooo)), 0.01014399192065793, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doovv)), 0.02761239887072825, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvo)), 0.09971200182238759, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvv)), 0.12777531252787638, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dooov)), 0.18667669732858014, 9)
Ejemplo n.º 28
0
    def test_get_init_guess(self):
        cell1 = cell.copy()
        cell1.dimension = 1
        cell1.build(0, 0)
        mf = pscf.ROHF(cell1)
        dm = mf.get_init_guess(key='minao')
        self.assertAlmostEqual(lib.finger(dm), -0.06586028869608128, 8)

        mf = pscf.KROHF(cell1)
        dm = mf.get_init_guess(key='minao')
        self.assertAlmostEqual(lib.finger(dm), -0.06586028869608128, 8)
Ejemplo n.º 29
0
 def test_df_eomsf_ccsd_matvec(self):
     numpy.random.seed(10)
     r1 = numpy.random.random((no,nv)) - .9
     r2 = numpy.random.random((2,no,no,nv,nv)) - .9
     myeom = eom_rccsd.EOMEESpinFlip(mycc1)
     vec = myeom.amplitudes_to_vector(r1,r2)
     imds = myeom.make_imds(eris1)
     vec1 = myeom.matvec(vec, imds)
     r1, r2 = myeom.vector_to_amplitudes(vec1)
     self.assertAlmostEqual(lib.finger(r1   ), 1929.9270950777639, 8)
     self.assertAlmostEqual(lib.finger(r2[0]), 15571.714806853948, 8)
     self.assertAlmostEqual(lib.finger(r2[1]),-12949.619613624538, 8)
Ejemplo n.º 30
0
 def test_gen_g_hop(self):
     numpy.random.seed(1)
     mo = numpy.random.random(mf.mo_coeff.shape)
     ci0 = numpy.random.random((6,6))
     ci0/= numpy.linalg.norm(ci0)
     gall, gop, hop, hdiag = newton_casscf.gen_g_hop(mc, mo, ci0, mc.ao2mo(mo))
     self.assertAlmostEqual(lib.finger(gall), 21.288022525148595, 8)
     self.assertAlmostEqual(lib.finger(hdiag), -4.6864640132374618, 8)
     x = numpy.random.random(gall.size)
     u, ci1 = newton_casscf.extract_rotation(mc, x, 1, ci0)
     self.assertAlmostEqual(lib.finger(gop(u, ci1)), -412.9441873541524, 8)
     self.assertAlmostEqual(lib.finger(hop(x)), 73.358310983341198, 8)
Ejemplo n.º 31
0
 def test_ucc_eomsf_ccsd_matvec(self):
     numpy.random.seed(10)
     myeom = eom_uccsd.EOMEESpinFlip(ucc1)
     vec = numpy.random.random(myeom.vector_size()) - .9
     vec1 = eom_uccsd.eomsf_ccsd_matvec(myeom, vec)
     self.assertAlmostEqual(lib.finger(vec1), -588.66159772500009, 8)
Ejemplo n.º 32
0
    mf.mo_occ[:nocc] = 2
    vhf = mf.get_veff(mol, mf.make_rdm1())
    cinv = np.linalg.inv(mf.mo_coeff)
    mf.get_hcore = lambda *args: (reduce(np.dot,
                                         (cinv.T * mf.mo_energy, cinv)) - vhf)
    mycc = RCCSD(mf)
    eris = mycc.ao2mo()
    a = np.random.random((nmo, nmo)) * .1
    eris.fock += a + a.T.conj()
    t1 = np.random.random((nocc, nvir)) * .1
    t2 = np.random.random((nocc, nocc, nvir, nvir)) * .1
    t2 = t2 + t2.transpose(1, 0, 3, 2)

    mycc.cc2 = False
    t1a, t2a = update_amps(mycc, t1, t2, eris)
    print(lib.finger(t1a) - -106360.5276951083)
    print(lib.finger(t2a) - 66540.100267798145)
    mycc.cc2 = True
    t1a, t2a = update_amps(mycc, t1, t2, eris)
    print(lib.finger(t1a) - -106360.5276951083)
    print(lib.finger(t2a) - -1517.9391800662809)

    eri1 = np.random.random((nmo, nmo, nmo, nmo)) + np.random.random(
        (nmo, nmo, nmo, nmo)) * 1j
    eri1 = eri1.transpose(0, 2, 1, 3)
    eri1 = eri1 + eri1.transpose(1, 0, 3, 2).conj()
    eri1 = eri1 + eri1.transpose(2, 3, 0, 1)
    eri1 *= .1
    eris.oooo = eri1[:nocc, :nocc, :nocc, :nocc].copy()
    eris.ooov = eri1[:nocc, :nocc, :nocc, nocc:].copy()
    eris.ovoo = eri1[:nocc, nocc:, :nocc, :nocc].copy()
Ejemplo n.º 33
0
    def test_t3p2_imds_complex_against_so(self):
        '''Test t3[2] implementation against spin-orbital implmentation.'''
        from pyscf.pbc.scf.addons import convert_to_ghf
        kmf = copy.copy(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = kmf.get_veff().round(4)
        mat_hcore = kmf.get_hcore().round(4)
        kmf.get_veff = lambda *x: mat_veff
        kmf.get_hcore = lambda *x: mat_hcore

        rand_cc = pbcc.kccsd_rhf.RCCSD(kmf)
        eris = rand_cc.ao2mo(kmf.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_cc.nkpts)
        ]
        t1, t2 = rand_t1_t2(kmf, rand_cc)
        rand_cc.t1, rand_cc.t2, rand_cc.eris = t1, t2, eris

        e, pt1, pt2, Wmcik, Wacek = kintermediates_rhf.get_t3p2_imds(
            rand_cc, t1, t2)
        self.assertAlmostEqual(lib.finger(e), 3867.812511518491, 6)
        self.assertAlmostEqual(lib.finger(pt1),
                               (179.0050003787795 + 521.7529255474592j), 6)
        self.assertAlmostEqual(lib.finger(pt2),
                               (361.4902731606503 + 1079.5387279755082j), 6)
        self.assertAlmostEqual(lib.finger(Wmcik),
                               (34.9811459194098 - 86.93467379996585j), 6)
        self.assertAlmostEqual(lib.finger(Wacek),
                               (183.86684834783233 + 179.66583663669644j), 6)

        gkmf = convert_to_ghf(rand_kmf2)
        # Round to make this insensitive to small changes between PySCF versions
        mat_veff = gkmf.get_veff().round(4)
        mat_hcore = gkmf.get_hcore().round(4)
        gkmf.get_veff = lambda *x: mat_veff
        gkmf.get_hcore = lambda *x: mat_hcore

        rand_gcc = pbcc.KGCCSD(gkmf)
        eris = rand_gcc.ao2mo(rand_gcc.mo_coeff)
        eris.mo_energy = [
            eris.fock[k].diagonal() for k in range(rand_gcc.nkpts)
        ]
        gt1 = rand_gcc.spatial2spin(t1)
        gt2 = rand_gcc.spatial2spin(t2)
        rand_gcc.t1, rand_gcc.t2, rand_gcc.eris = gt1, gt2, eris

        ge, gpt1, gpt2, gWmcik, gWacek = kintermediates.get_t3p2_imds_slow(
            rand_gcc, gt1, gt2)
        self.assertAlmostEqual(lib.finger(ge), lib.finger(e), 8)
        self.assertAlmostEqual(lib.finger(gpt1[:, ::2, ::2]), lib.finger(pt1),
                               8)
        self.assertAlmostEqual(lib.finger(gpt2[:, :, :, ::2, 1::2, ::2, 1::2]),
                               lib.finger(pt2), 8)
        self.assertAlmostEqual(
            lib.finger(gWmcik[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wmcik), 8)
        self.assertAlmostEqual(
            lib.finger(gWacek[:, :, :, ::2, 1::2, ::2, 1::2]),
            lib.finger(Wacek), 8)
Ejemplo n.º 34
0
    mol = gto.Mole()
    mol.atom = [[8, (0., 0., 0.)], [1, (0., -0.757, 0.587)],
                [1, (0., 0.757, 0.587)]]
    mol.basis = 'cc-pvdz'
    #mol.basis = '3-21G'
    mol.verbose = 0
    mol.spin = 0
    mol.build()
    mf = scf.RHF(mol).run(conv_tol=1e-14)

    mycc = RCCSD(mf)
    mycc.max_memory = 0
    eris = mycc.ao2mo()
    emp2, t1, t2 = mycc.init_amps(eris)
    print(lib.finger(t2) - 0.044540097905897198)
    np.random.seed(1)
    t1 = np.random.random(t1.shape) * .1
    t2 = np.random.random(t2.shape) * .1
    t2 = t2 + t2.transpose(1, 0, 3, 2)
    t1, t2 = update_amps(mycc, t1, t2, eris)
    print(lib.finger(t1) - 0.25118555558133576)
    print(lib.finger(t2) - 0.02352137419932243)

    ecc, t1, t2 = mycc.kernel()
    print(ecc - -0.21334326214236796)

    e, v = mycc.ipccsd(nroots=3)
    print(e[0] - 0.43356041409195489)
    print(e[1] - 0.51876598058509493)
    print(e[2] - 0.6782879569941862)
Ejemplo n.º 35
0
if __name__ == '__main__':
    import numpy
    from pyscf import lib
    from pyscf import gto
    from pyscf import scf, dft

    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None
    mol.atom = [[1, (1., 0., 0.000)], [1, (0., 1., 0.000)],
                [1, (0., -1.517, 1.177)], [1, (0., 1.517, 1.177)]]
    mol.basis = '631g'
    mol.unit = 'B'
    mol.build()
    mf = dft.RKS(mol)
    mf.conv_tol = 1e-14
    mf.scf()
    n3 = mol.natm * 3
    hobj = rks_hess.Hessian(mf)
    e2 = hobj.kernel()
    numpy.random.seed(1)
    x = numpy.random.random((mol.natm, 3))
    e2x = numpy.einsum('abxy,ax->by', e2, x)
    print(lib.finger(e2x) - -0.20252942721146411)
    hop = Freq(mf).gen_hop()[0]
    print(lib.finger(hop(x)) - -0.20252942721146411)
    print(abs(e2x - hop(x).reshape(mol.natm, 3)).sum())
    print(Freq(mf).set(nroots=1).kernel()[0])
    print(numpy.linalg.eigh(e2.transpose(0, 2, 1, 3).reshape(n3, n3))[0])
Ejemplo n.º 36
0
                verbose=3)
    mf = scf.UHF(mol).run()
    gobj = GTensor(mf)
    #print(gobj.kernel())
    gobj.para_soc2e = 'SSO+SOO'
    gobj.dia_soc2e = None
    gobj.so_eff_charge = False
    nao, nmo = mf.mo_coeff[0].shape
    nelec = mol.nelec
    numpy.random.seed(1)
    mo10 = [
        numpy.random.random((3, nmo, nelec[0])),
        numpy.random.random((3, nmo, nelec[1]))
    ]
    print(
        lib.finger(para(gobj, mo10, mf.mo_coeff, mf.mo_occ)) -
        4.3706065384682997e-05)
    print(
        lib.finger(para_for_debug(gobj, mo10, mf.mo_coeff, mf.mo_occ)) -
        4.3706065384682997e-05)
    numpy.random.seed(1)
    dm0 = numpy.random.random((2, nao, nao))
    dm0 = dm0 + dm0.transpose(0, 2, 1)
    dm10 = numpy.random.random((2, 3, nao, nao))
    dm10 = dm10 - dm10.transpose(0, 1, 3, 2)
    print(lib.finger(make_para_soc2e(gobj, dm0, dm10)) - 0.011068947999868441)
    print(
        lib.finger(make_dia_gc2e(gobj, dm0, (.5, 1, 2))) -
        -0.0058333522256648652)
    print(lib.finger(make_dia_gc2e(gobj, dm0, None)) - 0.0015992772016390443)
Ejemplo n.º 37
0
    def test_rdm_trace(self):
        mycc = rccsd.RCCSD(mf)
        numpy.random.seed(2)
        nocc = 5
        nmo = 12
        nvir = nmo - nocc
        eri0 = numpy.random.random((nmo, nmo, nmo, nmo))
        eri0 = ao2mo.restore(1, ao2mo.restore(8, eri0, nmo), nmo)
        fock0 = numpy.random.random((nmo, nmo))
        fock0 = fock0 + fock0.T + numpy.diag(range(nmo)) * 2
        t1 = numpy.random.random((nocc, nvir))
        t2 = numpy.random.random((nocc, nocc, nvir, nvir))
        t2 = t2 + t2.transpose(1, 0, 3, 2)
        l1 = numpy.random.random((nocc, nvir))
        l2 = numpy.random.random((nocc, nocc, nvir, nvir))
        l2 = l2 + l2.transpose(1, 0, 3, 2)
        h1 = fock0 - (numpy.einsum('kkpq->pq', eri0[:nocc, :nocc]) * 2 -
                      numpy.einsum('pkkq->pq', eri0[:, :nocc, :nocc]))

        eris = lambda: None
        eris.oooo = eri0[:nocc, :nocc, :nocc, :nocc].copy()
        eris.ooov = eri0[:nocc, :nocc, :nocc, nocc:].copy()
        eris.ovoo = eri0[:nocc, nocc:, :nocc, :nocc].copy()
        eris.oovv = eri0[:nocc, :nocc, nocc:, nocc:].copy()
        eris.ovov = eri0[:nocc, nocc:, :nocc, nocc:].copy()
        eris.ovvo = eri0[:nocc, nocc:, nocc:, :nocc].copy()
        eris.ovvv = eri0[:nocc, nocc:, nocc:, nocc:].copy()
        eris.vvvv = eri0[nocc:, nocc:, nocc:, nocc:].copy()
        eris.fock = fock0

        doo, dov, dvo, dvv = ccsd_rdm._gamma1_intermediates(
            mycc, t1, t2, l1, l2)
        self.assertAlmostEqual(
            (numpy.einsum('ij,ij', doo, fock0[:nocc, :nocc])) * 2,
            -20166.329861034799, 8)
        self.assertAlmostEqual(
            (numpy.einsum('ab,ab', dvv, fock0[nocc:, nocc:])) * 2,
            58078.964019246778, 8)
        self.assertAlmostEqual(
            (numpy.einsum('ai,ia', dvo, fock0[:nocc, nocc:])) * 2,
            -74994.356886784764, 8)
        self.assertAlmostEqual(
            (numpy.einsum('ia,ai', dov, fock0[nocc:, :nocc])) * 2,
            34.010188025702391, 9)

        fdm2 = lib.H5TmpFile()
        dovov, dvvvv, doooo, doovv, dovvo, dvvov, dovvv, dooov = \
                ccsd_rdm._gamma2_outcore(mycc, t1, t2, l1, l2, fdm2, True)
        self.assertAlmostEqual(lib.finger(numpy.array(dovov)),
                               -14384.907042073517, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dvvvv)),
                               -25.374007033024839, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doooo)),
                               60.114594698129963, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doovv)),
                               -79.176348067958401, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvo)),
                               9.864134457251815, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvv)),
                               -421.90333700061342, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dooov)),
                               -592.66863759586136, 9)
        fdm2 = None

        dovov, dvvvv, doooo, doovv, dovvo, dvvov, dovvv, dooov = \
                ccsd_rdm._gamma2_intermediates(mycc, t1, t2, l1, l2)
        self.assertAlmostEqual(lib.finger(numpy.array(dovov)),
                               -14384.907042073517, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dvvvv)),
                               45.872344902116758, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doooo)),
                               60.114594698129963, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doovv)),
                               -79.176348067958401, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvo)),
                               9.864134457251815, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvv)),
                               -421.90333700061342, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dooov)),
                               -592.66863759586136, 9)

        self.assertAlmostEqual(
            numpy.einsum('kilj,kilj', doooo, eris.oooo) * 2, 15939.9007625418,
            7)
        self.assertAlmostEqual(
            numpy.einsum('acbd,acbd', dvvvv, eris.vvvv) * 2, 37581.823919588,
            7)
        self.assertAlmostEqual(
            numpy.einsum('jkia,jkia', dooov, eris.ooov) * 2, 128470.009687716,
            7)
        self.assertAlmostEqual(
            numpy.einsum('icba,icba', dovvv, eris.ovvv) * 2, -166794.225195056,
            7)
        self.assertAlmostEqual(
            numpy.einsum('iajb,iajb', dovov, eris.ovov) * 2, -719279.812916893,
            7)
        self.assertAlmostEqual(
            numpy.einsum('jbai,jbia', dovvo, eris.ovov) * 2 +
            numpy.einsum('jiab,jiba', doovv, eris.oovv) * 2, -53634.0012286654,
            7)

        dm1 = ccsd_rdm.make_rdm1(mycc, t1, t2, l1, l2)
        dm2 = ccsd_rdm.make_rdm2(mycc, t1, t2, l1, l2)
        e2 = (
            numpy.einsum('ijkl,ijkl', doooo, eris.oooo) * 2 +
            numpy.einsum('acbd,acbd', dvvvv, eris.vvvv) * 2 +
            numpy.einsum('jkia,jkia', dooov, eris.ooov) * 2 +
            numpy.einsum('icba,icba', dovvv, eris.ovvv) * 2 +
            numpy.einsum('iajb,iajb', dovov, eris.ovov) * 2 +
            numpy.einsum('jbai,jbia', dovvo, eris.ovov) * 2 +
            numpy.einsum('ijab,ijab', doovv, eris.oovv) * 2 +
            numpy.einsum('ij,ij', doo, fock0[:nocc, :nocc]) * 2 +
            numpy.einsum('ai,ia', dvo, fock0[:nocc, nocc:]) * 2 +
            numpy.einsum('ia,ai', dov, fock0[nocc:, :nocc]) * 2 +
            numpy.einsum('ab,ab', dvv, fock0[nocc:, nocc:]) * 2 +
            fock0[:nocc].trace() * 2 - numpy.einsum(
                'kkpq->pq', eri0[:nocc, :nocc, :nocc, :nocc]).trace() * 2 +
            numpy.einsum('pkkq->pq', eri0[:nocc, :nocc, :nocc, :nocc]).trace())
        self.assertAlmostEqual(e2, -794721.197459942, 8)
        self.assertAlmostEqual(
            numpy.einsum('pqrs,pqrs', dm2, eri0) * .5 +
            numpy.einsum('pq,qp', dm1, h1), e2, 9)

        self.assertAlmostEqual(
            abs(dm2 - dm2.transpose(1, 0, 3, 2)).max(), 0, 9)
        self.assertAlmostEqual(
            abs(dm2 - dm2.transpose(2, 3, 0, 1)).max(), 0, 9)

        d1 = numpy.einsum('kkpq->qp', dm2) / 9
        self.assertAlmostEqual(abs(d1 - dm1).max(), 0, 9)
Ejemplo n.º 38
0
Archivo: rks.py Proyecto: MSwenne/BEP
if __name__ == '__main__':
    from pyscf import gto
    from pyscf import dft
    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None

    mol.atom = [
        ['Ne', (0., 0., 0.)],
    ]
    mol.basis = '631g'
    mol.build()

    mf = dft.RKS(mol).run()
    mag = Magnetizability(mf).kernel()
    print(lib.finger(mag) - -0.30375149255154221)

    mf.set(xc='b3lyp').run()
    mag = Magnetizability(mf).kernel()
    print(lib.finger(mag) - -0.3022331813238171)

    mol.atom = [
        [1, (0., 0., .917)],
        ['F', (0., 0., 0.)],
    ]
    mol.basis = '6-31g'
    mol.build()

    mf = dft.RKS(mol).set(xc='lda,vwn').run()
    mag = Magnetizability(mf).kernel()
    print(lib.finger(mag) - -0.4313210213418015)
Ejemplo n.º 39
0
    def test_contract(self):
        mol = gto.M()
        mol.nelectron = 6
        nocc, nvir = mol.nelectron // 2, 4
        nmo = nocc + nvir
        nmo_pair = nmo * (nmo + 1) // 2
        mf = scf.RHF(mol)
        numpy.random.seed(12)
        mf._eri = numpy.random.random(nmo_pair * (nmo_pair + 1) // 2)
        mf.mo_coeff = numpy.random.random((nmo, nmo))
        mf.mo_energy = numpy.arange(0., nmo)
        mf.mo_occ = numpy.zeros(nmo)
        mf.mo_occ[:nocc] = 2
        dm = mf.make_rdm1()
        vhf = mf.get_veff(mol, dm)
        h1 = numpy.random.random((nmo, nmo)) * .1
        h1 = h1 + h1.T
        mf.get_hcore = lambda *args: h1

        myci = ci.CISD(mf)
        eris = myci.ao2mo(mf.mo_coeff)
        eris.ehf = (h1 * dm).sum() + (vhf * dm).sum() * .5

        c2 = numpy.random.random((nocc, nocc, nvir, nvir)) * .1
        c2 = c2 + c2.transpose(1, 0, 3, 2)
        c1 = numpy.random.random(nocc * nvir + 1) * .1
        c0, c1 = c1[0], c1[1:].reshape(nocc, nvir)
        civec = myci.amplitudes_to_cisdvec(c0, c1, c2)
        hcivec = ci.cisd.contract(myci, civec, eris)
        self.assertAlmostEqual(lib.finger(hcivec), 2059.5730673341673, 9)
        e2 = ci.cisd.dot(civec, hcivec + eris.ehf * civec, nmo, nocc)
        self.assertAlmostEqual(e2, 7226.7494656749295, 9)

        rdm2 = myci.make_rdm2(civec, nmo, nocc)
        self.assertAlmostEqual(lib.finger(rdm2), 2.0492023431953221, 9)

        def fcicontract(h1, h2, norb, nelec, ci0):
            g2e = fci.direct_spin1.absorb_h1e(h1, h2, norb, nelec, .5)
            ci1 = fci.direct_spin1.contract_2e(g2e, ci0, norb, nelec)
            return ci1

        ci0 = myci.to_fcivec(civec, nmo, mol.nelec)
        self.assertAlmostEqual(
            abs(civec - myci.from_fcivec(ci0, nmo, nocc * 2)).max(), 0, 9)
        h2e = ao2mo.kernel(mf._eri, mf.mo_coeff)
        h1e = reduce(numpy.dot, (mf.mo_coeff.T, h1, mf.mo_coeff))
        ci1 = fcicontract(h1e, h2e, nmo, mol.nelec, ci0)
        ci2 = myci.to_fcivec(hcivec, nmo, mol.nelec)
        e1 = numpy.dot(ci1.ravel(), ci0.ravel())
        e2 = ci.cisd.dot(civec, hcivec + eris.ehf * civec, nmo, nocc)
        self.assertAlmostEqual(e1, e2, 9)

        dovov, dvvvv, doooo, doovv, dovvo, dvvov, dovvv, dooov = \
                ci.cisd._gamma2_intermediates(myci, civec, nmo, nocc)
        self.assertAlmostEqual(lib.finger(numpy.array(dovov)),
                               0.02868859991188923, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dvvvv)),
                               -0.05524957311823144, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doooo)),
                               0.01014399192065793, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(doovv)),
                               0.02761239887072825, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvo)),
                               0.09971200182238759, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dovvv)),
                               0.12777531252787638, 9)
        self.assertAlmostEqual(lib.finger(numpy.array(dooov)),
                               0.18667669732858014, 9)
Ejemplo n.º 40
0
 def test_different_grids_for_grad(self):
     grids1 = dft.gen_grid.Grids(mol)
     grids1.level = 1
     g = mf.nuc_grad_method().set(grids=grids1).kernel()
     self.assertAlmostEqual(lib.finger(g), -0.12085837432386037, 6)
Ejemplo n.º 41
0
        atom = [
            ["O" , (0. , 0.     , 0.)],
            [1   , (0. ,-0.757  , 0.587)],
            [1   , (0. , 0.757  , 0.587)]],
        basis = '631g'
    )
    mf = scf.RHF(mol)
    ehf = mf.scf()

    myci = cisd.CISD(mf)
    myci.kernel()
    g1 = myci.Gradients().kernel()
# O     0.0000000000    -0.0000000000     0.0065498854
# H    -0.0000000000     0.0208760610    -0.0032749427
# H    -0.0000000000    -0.0208760610    -0.0032749427
    print(lib.finger(g1) - -0.032562200777204092)

    mcs = myci.as_scanner()
    mol.set_geom_([
            ["O" , (0. , 0.     , 0.001)],
            [1   , (0. ,-0.757  , 0.587)],
            [1   , (0. , 0.757  , 0.587)]])
    e1 = mcs(mol)
    mol.set_geom_([
            ["O" , (0. , 0.     ,-0.001)],
            [1   , (0. ,-0.757  , 0.587)],
            [1   , (0. , 0.757  , 0.587)]])
    e2 = mcs(mol)
    print(g1[0,2] - (e1-e2)/0.002*lib.param.BOHR)

    print('-----------------------------------')
Ejemplo n.º 42
0
    make_pso_soc = make_pso_soc
    solve_mo1 = solve_mo1_soc
    make_h1_soc2e = make_h1_soc2e


HFC = HyperfineCoupling

if __name__ == '__main__':
    from pyscf import gto, scf
    mol = gto.M(atom='Ne 0 0 0', basis='ccpvdz', spin=1, charge=-1, verbose=3)
    mf = scf.UHF(mol).run()
    hfc = HFC(mf)
    #hfc.verbose = 4
    hfc.para_soc2e = 'SSO+SOO'
    hfc.so_eff_charge = False
    print(lib.finger(hfc.kernel()) - -2050.5830130636241)

    mol = gto.M(atom='C 0 0 0; O 0 0 1.12',
                basis='ccpvdz',
                spin=1,
                charge=1,
                verbose=3)
    mf = scf.UHF(mol).run()
    hfc = HFC(mf)
    #hfc.verbose = 4
    hfc.para_soc2e = 'SSO+SOO'
    hfc.so_eff_charge = False
    print(lib.finger(hfc.kernel()) - 323.96293610190781)

    mol = gto.M(atom='H 0 0 0; H 0 0 1.',
                basis='ccpvdz',
Ejemplo n.º 43
0
            return v1mo.ravel()
        return vind

SSC = SpinSpinCoupling


if __name__ == '__main__':
    from pyscf import gto
    from pyscf import scf
    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None

    mol.atom.extend([
        [1   , (0. , 0. , .917)],
        ['F' , (0. , 0. , 0.)], ])
    mol.nucmod = {'F': 2} # gaussian nuclear model
    mol.basis = {'H': '6-31g',
                 'F': '6-31g',}
    mol.build()

    mf = scf.UHF(mol).run()
    ssc = SSC(mf)
    ssc.verbose = 4
    ssc.cphf = True
    ssc.with_fc = True
    ssc.with_fcsd = True
    jj = ssc.kernel()
    print(jj)
    print(lib.finger(jj)*1e8 - 0.12374695912503765)
Ejemplo n.º 44
0
 def test_scanner(self):
     mc = mcscf.CASSCF(mf, 4, 4)
     gs = mc.nuc_grad_method().as_scanner().as_scanner()
     e, g1 = gs(mol.atom, atmlst=range(4))
     self.assertAlmostEqual(e, -108.39289688030243, 9)
     self.assertAlmostEqual(lib.finger(g1), -0.065094188906156134, 7)
Ejemplo n.º 45
0
    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None
    mol.atom = [[1, (1., 0., 0.000)], [1, (0., 1., 0.000)],
                [1, (0., -1.517, 1.177)], [1, (0., 1.517, 1.177)]]
    mol.basis = '631g'
    mol.unit = 'B'
    mol.build()
    mf = scf.UHF(mol)
    mf.conv_tol = 1e-14
    mf.scf()
    n3 = mol.natm * 3
    hobj = mf.Hessian()
    e2 = hobj.kernel().transpose(0, 2, 1, 3).reshape(n3, n3)
    print(lib.finger(e2) - -0.50693144355876429)

    mol.spin = 2
    mf = scf.UHF(mol)
    mf.conv_tol = 1e-14
    mf.scf()
    n3 = mol.natm * 3
    hobj = Hessian(mf)
    e2 = hobj.kernel().transpose(0, 2, 1, 3).reshape(n3, n3)

    def grad_full(ia, inc):
        coord = mol.atom_coord(ia).copy()
        ptr = mol._atm[ia, gto.PTR_COORD]
        de = []
        for i in range(3):
            mol._env[ptr + i] = coord[i] + inc
Ejemplo n.º 46
0
Grad = Gradients


if __name__ == '__main__':
    from pyscf import gto
    from pyscf import scf
    from pyscf import mcscf

    mol = gto.Mole()
    mol.atom = 'N 0 0 0; N 0 0 1.2; H 1 1 0; H 1 1 1.2'
    mol.basis = '631g'
    mol.build()
    mf = scf.RHF(mol).run()
    mc = mcscf.CASSCF(mf, 4, 4).run()
    de = Grad(mc).kernel()
    print(lib.finger(de) - 0.019602220578635747)

    mol = gto.Mole()
    mol.verbose = 0
    mol.atom = 'N 0 0 0; N 0 0 1.2'
    mol.basis = 'sto3g'
    mol.build()
    mf = scf.RHF(mol).run()
    mc = mcscf.CASSCF(mf, 4, 4).run()
    de = kernel(mc)

    mcs = mc.as_scanner()
    mol.set_geom_('N 0 0 0; N 0 0 1.201')
    e1 = mcs(mol)
    mol.set_geom_('N 0 0 0; N 0 0 1.199')
    e2 = mcs(mol)
Ejemplo n.º 47
0
    mol.atom = [
        [1 , (1. ,  0.     , 0.000)],
        [1 , (0. ,  1.     , 0.000)],
        [1 , (0. , -1.517  , 1.177)],
        [1 , (0. ,  1.517  , 1.177)] ]
    mol.basis = '631g'
    mol.unit = 'B'
    mol.build()
    mf = dft.UKS(mol)
    mf.xc = xc_code
    mf.conv_tol = 1e-14
    mf.kernel()
    n3 = mol.natm * 3
    hobj = mf.Hessian()
    e2 = hobj.kernel().transpose(0,2,1,3).reshape(n3,n3)
    print(lib.finger(e2) - -0.42286407986042956)
    print(lib.finger(e2) - -0.45453541215680582)
    print(lib.finger(e2) - -0.41385170026016327)

    mol.spin = 2
    mf = dft.UKS(mol)
    mf.conv_tol = 1e-14
    mf.xc = xc_code
    mf.scf()
    n3 = mol.natm * 3
    hobj = Hessian(mf)
    e2 = hobj.kernel().transpose(0,2,1,3).reshape(n3,n3)

    def grad_full(ia, inc):
        coord = mol.atom_coord(ia).copy()
        ptr = mol._atm[ia,gto.PTR_COORD]
Ejemplo n.º 48
0
if __name__ == '__main__':
    from pyscf import gto
    from pyscf import scf
    mol = gto.Mole()
    mol.verbose = 7
    mol.output = '/dev/null'
    mol.atom = '''h  ,  0.   0.   0.
                  F  ,  0.   0.   .917'''
    mol.basis = '631g'
    mol.build()

    mf = scf.RHF(mol).run()
    mag = Magnetizability(mf)
    mag.cphf = True
    m = mag.kernel()
    print(lib.finger(m) - -0.43596639996758657)

    mag.gauge_orig = (0, 0, 1)
    m = mag.kernel()
    print(lib.finger(m) - -0.76996086788058238)

    mag.gauge_orig = (0, 0, 1)
    mag.cphf = False
    m = mag.kernel()
    print(lib.finger(m) - -0.7973915717274408)

    mol = gto.M(atom='''O      0.   0.       0.
                        H      0.  -0.757    0.587
                        H      0.   0.757    0.587''',
                basis='ccpvdz')
    mf = scf.RHF(mol).run()
Ejemplo n.º 49
0
        ['H', (0., 0., 1.804)],
        ['F', (0., 0., 0.)],
    ]
    mol.unit = 'B'
    mol.basis = '631g'
    mol.build()

    mf = scf.RHF(mol).run(conv_tol=1e-14)
    td = tddft.TDA(mf)
    td.nstates = 3
    e, z = td.kernel()
    tdg = td.Gradients()
    #tdg.verbose = 5
    g1 = tdg.kernel(z[0])
    print(g1)
    print(lib.finger(g1) - 0.18686561181358813)
    #[[ 0  0  -2.67023832e-01]
    # [ 0  0   2.67023832e-01]]
    td_solver = td.as_scanner()
    e1 = td_solver(mol.set_geom_('H 0 0 1.805; F 0 0 0', unit='B'))
    e2 = td_solver(mol.set_geom_('H 0 0 1.803; F 0 0 0', unit='B'))
    print(abs((e1[0] - e2[0]) / .002 - g1[0, 2]).max())

    mol.set_geom_('H 0 0 1.804; F 0 0 0', unit='B')
    td = tddft.TDDFT(mf)
    td.nstates = 3
    e, z = td.kernel()
    tdg = td.Gradients()
    g1 = tdg.kernel(state=1)
    print(g1)
    print(lib.finger(g1) - 0.18967687762609461)
Ejemplo n.º 50
0
        [1   , (0. , 0. , .917)],
        ['F' , (0. , 0. , 0.)], ])
    mol.nucmod = {'F': 2} # gaussian nuclear model
    mol.basis = {'H': '6-31g',
                 'F': '6-31g',}
    mol.build()

    mf = scf.RHF(mol).run()
    ssc = mf.SSC()
    ssc.verbose = 4
    ssc.cphf = True
    ssc.with_fc = True
    ssc.with_fcsd = True
    jj = ssc.kernel()
    print(jj)
    print(lib.finger(jj)*1e8 - 0.12374812977885304)

    mol = gto.M(atom='''
                O 0 0      0
                H 0 -0.757 0.587
                H 0  0.757 0.587''',
                basis='ccpvdz')

    mf = scf.RHF(mol).run()
    ssc = SSC(mf)
    ssc.with_fc = True
    ssc.with_fcsd = True
    jj = ssc.kernel()
    print(lib.finger(jj)*1e8 - -0.11191697931377538)

    ssc.with_fc = True
Ejemplo n.º 51
0

HFC = HyperfineCoupling

if __name__ == '__main__':
    from pyscf import gto, scf, dft
    mol = gto.M(atom='C 0 0 0; O 0 0 1.12',
                basis='ccpvdz',
                spin=1,
                charge=1,
                verbose=3)
    mf = dft.UKS(mol).run()
    hfc = HFC(mf)
    hfc.verbose = 4
    hfc.so_eff_charge = False
    print(lib.finger(hfc.kernel()) - 255.92807696823797)

    mol = gto.M(atom='H 0 0 0; H 0 0 1.',
                basis='ccpvdz',
                spin=1,
                charge=-1,
                verbose=3)
    mf = scf.UKS(mol).run()
    hfc = HFC(mf)
    hfc.cphf = True
    print(lib.finger(hfc.kernel()) - -25.896662045941071)

    mol = gto.M(atom='''
                Li 0   0   1
                ''',
                basis='ccpvdz',
Ejemplo n.º 52
0
        r = (((l + 2) * numpy.log(r) + numpy.log(cs) - log_prec) / es)**.5
        rcut.append(r.max())
    return numpy.array(rcut)


if __name__ == '__main__':
    from pyscf.pbc import gto
    cell = gto.M(a=numpy.eye(3) * 4,
                 atom='He 1 1 1',
                 basis=[[2, (1, .5), (.5, .5)]])
    coords = cell.get_uniform_grids([10] * 3)
    ao_value = eval_gto(cell,
                        "GTOval_sph",
                        coords,
                        kpts=cell.make_kpts([3] * 3))
    print(
        lib.finger(numpy.asarray(ao_value)) -
        (-0.27594803231989179 + 0.0064644591759109114j))

    cell = gto.M(a=numpy.eye(3) * 4,
                 atom='He 1 1 1',
                 basis=[[2, (1, .5), (.5, .5)]])
    coords = cell.get_uniform_grids([10] * 3)
    ao_value = eval_gto(cell,
                        "GTOval_ip_cart",
                        coords,
                        kpts=cell.make_kpts([3] * 3))
    print(
        lib.finger(numpy.asarray(ao_value)) -
        (0.38051517609460028 + 0.062526488684770759j))
Ejemplo n.º 53
0
            -1, 1)

        Lpq = numpy.empty((self.blockdim, ao_pairs_G.shape[1]))
        for p0, p1 in lib.prange(0, ngrids, blksize):
            Lpq[:p1 - p0] = ao_pairs_G[p0:p1].real
            yield Lpq[:p1 - p0]
            Lpq[:p1 - p0] = ao_pairs_G[p0:p1].imag
            yield Lpq[:p1 - p0]

    def get_naoaux(self):
        mesh = numpy.asarray(self.mesh)
        ngrids = numpy.prod(mesh)
        return ngrids * 2

if __name__ == '__main__':
    from pyscf.pbc import gto as pbcgto
    cell = pbcgto.Cell()
    cell.verbose = 0
    cell.atom = 'C 0 0 0; C 1 1 1; C 0 2 2; C 2 0 2'
    cell.a = numpy.diag([4, 4, 4])
    cell.basis = 'gth-szv'
    cell.pseudo = 'gth-pade'
    cell.mesh = [20] * 3
    cell.build()
    k = numpy.ones(3) * .25
    df = FFTDF(cell)
    v1 = get_pp(df, k)
    print(lib.finger(v1) - (1.8428463642697195 - 0.10478381725330854j))
    v1 = get_nuc(df, k)
    print(lib.finger(v1) - (2.3454744614944714 - 0.12528407127454744j))
Ejemplo n.º 54
0
 def test_symmetrize(self):
     mol = gto.M(atom='N 0 0 0; N 0 0 1.2', basis='631g', symmetry=True)
     g = mol.RHF.run().CCSD().run().Gradients().kernel()
     self.assertAlmostEqual(lib.finger(g), 0.10105388861195158, 7)
Ejemplo n.º 55
0
    gen_solver = as_solver = gen_ddpcm_solver

    def regularize_xt(self, t, eta, scale=1):
        return regularize_xt(t, eta, scale)


if __name__ == '__main__':
    from pyscf import scf
    mol = gto.M(atom='H 0 0 0; H 0 1 1.2; H 1. .1 0; H .5 .5 1')
    numpy.random.seed(1)

    nao = mol.nao_nr()
    dm = numpy.random.random((nao, nao))
    dm = dm + dm.T
    #dm = scf.RHF(mol).run().make_rdm1()
    e, vmat = DDPCM(mol).kernel(dm)
    print(e + 1.2446306643473923)
    print(lib.finger(vmat) - 0.77873361914445294)

    mol = gto.Mole()
    mol.atom = ''' O                  0.00000000    0.00000000   -0.11081188
                   H                 -0.00000000   -0.84695236    0.59109389
                   H                 -0.00000000    0.89830571    0.52404783 '''
    mol.basis = '3-21g'  #cc-pvdz'
    mol.build()
    cm = DDPCM(mol)
    cm.verbose = 4
    mf = ddpcm_for_scf(scf.RHF(mol), cm)  #.newton()
    mf.verbose = 4
    mf.kernel()
Ejemplo n.º 56
0
    def test_ERIS(self):
        ucc1 = cc.UCCSD(mf)
        nao, nmo = mf.mo_coeff[0].shape
        numpy.random.seed(1)
        mo_coeff = numpy.random.random((2, nao, nmo))
        eris = cc.uccsd._make_eris_incore(ucc1, mo_coeff)

        self.assertAlmostEqual(lib.finger(eris.oooo), 4.9638849382825754, 11)
        self.assertAlmostEqual(lib.finger(eris.ovoo), -1.3623681896983584, 11)
        self.assertAlmostEqual(lib.finger(eris.ovov), 125.81550684442163, 11)
        self.assertAlmostEqual(lib.finger(eris.oovv), 55.123681017639598, 11)
        self.assertAlmostEqual(lib.finger(eris.ovvo), 133.48083527898248, 11)
        self.assertAlmostEqual(lib.finger(eris.ovvv), 59.421927525288183, 11)
        self.assertAlmostEqual(lib.finger(eris.vvvv), 43.556602622204778, 11)
        self.assertAlmostEqual(lib.finger(eris.OOOO), -407.05319440524585, 11)
        self.assertAlmostEqual(lib.finger(eris.OVOO), 56.284299937160796, 11)
        self.assertAlmostEqual(lib.finger(eris.OVOV), -287.72899895597448, 11)
        self.assertAlmostEqual(lib.finger(eris.OOVV), -85.484299959144522, 11)
        self.assertAlmostEqual(lib.finger(eris.OVVO), -228.18996145476956, 11)
        self.assertAlmostEqual(lib.finger(eris.OVVV), -10.715902258877399, 11)
        self.assertAlmostEqual(lib.finger(eris.VVVV), -89.908425473958303, 11)
        self.assertAlmostEqual(lib.finger(eris.ooOO), -336.65979260175226, 11)
        self.assertAlmostEqual(lib.finger(eris.ovOO), -16.405125847288176, 11)
        self.assertAlmostEqual(lib.finger(eris.ovOV), 231.59042209500075, 11)
        self.assertAlmostEqual(lib.finger(eris.ooVV), 20.338077193028354, 11)
        self.assertAlmostEqual(lib.finger(eris.ovVO), 206.48662856981386, 11)
        self.assertAlmostEqual(lib.finger(eris.ovVV), -71.273249852220516, 11)
        self.assertAlmostEqual(lib.finger(eris.vvVV), 172.47130671068496, 11)
        self.assertAlmostEqual(lib.finger(eris.OVoo), -19.927660309103977, 11)
        self.assertAlmostEqual(lib.finger(eris.OOvv), -27.761433381797019, 11)
        self.assertAlmostEqual(lib.finger(eris.OVvo), -140.09648311337384, 11)
        self.assertAlmostEqual(lib.finger(eris.OVvv), 40.700983950220547, 11)

        uccsd.MEMORYMIN, bak = 0, uccsd.MEMORYMIN
        ucc1.max_memory = 0
        eris1 = ucc1.ao2mo(mo_coeff)
        uccsd.MEMORYMIN = bak
        self.assertAlmostEqual(
            abs(numpy.array(eris1.oooo) - eris.oooo).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovoo) - eris.ovoo).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovov) - eris.ovov).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.oovv) - eris.oovv).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovvo) - eris.ovvo).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovvv) - eris.ovvv).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.vvvv) - eris.vvvv).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OOOO) - eris.OOOO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVOO) - eris.OVOO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVOV) - eris.OVOV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OOVV) - eris.OOVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVVO) - eris.OVVO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVVV) - eris.OVVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.VVVV) - eris.VVVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ooOO) - eris.ooOO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovOO) - eris.ovOO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovOV) - eris.ovOV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ooVV) - eris.ooVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovVO) - eris.ovVO).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.ovVV) - eris.ovVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.vvVV) - eris.vvVV).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVoo) - eris.OVoo).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OOvv) - eris.OOvv).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVvo) - eris.OVvo).max(), 0, 11)
        self.assertAlmostEqual(
            abs(numpy.array(eris1.OVvv) - eris.OVvv).max(), 0, 11)

        # Testing the complex MO integrals
        def ao2mofn(mos):
            if isinstance(mos, numpy.ndarray) and mos.ndim == 2:
                mos = [mos] * 4
            nmos = [mo.shape[1] for mo in mos]
            eri_mo = ao2mo.kernel(mf._eri, mos, compact=False).reshape(nmos)
            return eri_mo * 1j

        eris1 = cc.uccsd._make_eris_incore(ucc1, mo_coeff, ao2mofn=ao2mofn)
        self.assertAlmostEqual(abs(eris1.oooo.imag - eris.oooo).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovoo.imag - eris.ovoo).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovov.imag - eris.ovov).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.oovv.imag - eris.oovv).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovvo.imag - eris.ovvo).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.ovvv.imag-eris.ovvv).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.vvvv.imag-eris.vvvv).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OOOO.imag - eris.OOOO).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OVOO.imag - eris.OVOO).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OVOV.imag - eris.OVOV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OOVV.imag - eris.OOVV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OVVO.imag - eris.OVVO).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.OVVV.imag-eris.OVVV).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.VVVV.imag-eris.VVVV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ooOO.imag - eris.ooOO).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovOO.imag - eris.ovOO).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovOV.imag - eris.ovOV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ooVV.imag - eris.ooVV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.ovVO.imag - eris.ovVO).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.ovVV.imag-eris.ovVV).max(), 0, 11)
        #self.assertAlmostEqual(abs(eris1.vvVV.imag-eris.vvVV).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OVoo.imag - eris.OVoo).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OOvv.imag - eris.OOvv).max(), 0, 11)
        self.assertAlmostEqual(abs(eris1.OVvo.imag - eris.OVvo).max(), 0, 11)
Ejemplo n.º 57
0
 def test_ucc_eomee_ccsd_diag(self):
     vec1, vec2 = eom_uccsd.EOMEE(ucc1).get_diag()
     self.assertAlmostEqual(lib.finger(vec1), -36.776800901625307, 9)
     self.assertAlmostEqual(lib.finger(vec2), 106.70096636265369, 9)
Ejemplo n.º 58
0
    Gradients)

if __name__ == '__main__':
    from pyscf import dft

    mol = gto.Mole()
    mol.atom = [['O', (0., 0., 0.)], [1, (0., -0.757, 0.587)],
                [1, (0., 0.757, 0.587)]]
    mol.basis = '631g'
    mol.build()
    mf = dft.RKS(mol)
    mf.conv_tol = 1e-14
    #mf.grids.atom_grid = (20,86)
    e0 = mf.scf()
    g = mf.Gradients()
    print(lib.finger(g.kernel()) - -0.049887865971659243)
    #[[ -4.20040265e-16  -6.59462771e-16   2.10150467e-02]
    # [  1.42178271e-16   2.81979579e-02  -1.05137653e-02]
    # [  6.34069238e-17  -2.81979579e-02  -1.05137653e-02]]
    g.grid_response = True
    print(lib.finger(g.kernel()) - -0.049891265876709084)
    # O     0.0000000000    -0.0000000000     0.0210225191
    # H     0.0000000000     0.0281984036    -0.0105112595
    # H    -0.0000000000    -0.0281984036    -0.0105112595

    mf.xc = 'b88,p86'
    e0 = mf.scf()
    g = Gradients(mf)
    print(lib.finger(g.kernel()) - -0.050382923259300716)
    #[[ -8.20194970e-16  -2.04319288e-15   2.44405835e-02]
    # [  4.36709255e-18   2.73690416e-02  -1.22232039e-02]
Ejemplo n.º 59
0
 def test_symmetrize(self):
     mol = gto.M(atom='N 0 0 0; N 0 0 1.2', basis='631g', symmetry=True)
     g = mol.RHF.run().CASSCF(4, 4).run().Gradients().kernel()
     self.assertAlmostEqual(lib.finger(g), 0.12355818572359845, 7)
Ejemplo n.º 60
0
Freq = Frequency

if __name__ == '__main__':
    from pyscf import gto
    from pyscf import scf

    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None
    mol.atom = [[1, (1., 0., 0.000)], [1, (0., 1., 0.000)],
                [1, (0., -1.517, 1.177)], [1, (0., 1.517, 1.177)]]
    mol.basis = '631g'
    mol.unit = 'B'
    mol.build()
    mf = scf.RHF(mol)
    mf.conv_tol = 1e-14
    mf.scf()
    n3 = mol.natm * 3
    hobj = rhf_hess.Hessian(mf)
    e2 = hobj.kernel()
    numpy.random.seed(1)
    x = numpy.random.random((mol.natm, 3))
    e2x = numpy.einsum('abxy,ax->by', e2, x)
    print(lib.finger(e2x) - -0.19160804881270971)
    hop = Freq(mf).gen_hop()[0]
    print(lib.finger(hop(x)) - -0.19160804881270971)
    print(abs(e2x - hop(x).reshape(mol.natm, 3)).sum())
    print(Freq(mf).set(nroots=1).kernel()[0])
    print(numpy.linalg.eigh(e2.transpose(0, 2, 1, 3).reshape(n3, n3))[0])