Exemple #1
0
 def test_uagf2_2_2(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(1, 1), verbose=False)
     uagf2.run()
     uagf2 = agf2.UAGF2(self.uhf, nmom=(2, 2), dm0=uagf2.rdm1, damping=True, verbose=False, etol=1e-7)
     uagf2.run()
     self.assertTrue(uagf2.converged)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[0]), self.m.nalph, 6)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[1]), self.m.nbeta, 6)
     self.assertAlmostEqual(uagf2.e_1body,    -74.91982876261184  , 6)
     self.assertAlmostEqual(uagf2.e_2body,    -0.08303716502289221, 6)
     self.assertAlmostEqual(uagf2.e_hf,       -74.96117113786579  , 6)
     self.assertAlmostEqual(uagf2.e_corr,     -0.0416947897689397 , 6)
     self.assertAlmostEqual(uagf2.e_tot,      -75.00286592763473  , 6)
Exemple #2
0
 def test_uagf2_None_3(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(None, 3), damping=True, delay_damping=5, verbose=False, etol=1e-7).run()
     uagf2.run()
     self.assertTrue(uagf2.converged)
     self.assertAlmostEqual(uagf2.e_mp2, self.e_mp2, 6)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[0]), self.m.nalph, 6)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[1]), self.m.nbeta, 6)
     self.assertAlmostEqual(uagf2.e_1body,    -74.92061972014814  , 6)
     self.assertAlmostEqual(uagf2.e_2body,    -0.08271701271449447, 6)
     self.assertAlmostEqual(uagf2.e_hf,       -74.96117113786579  , 6)
     self.assertAlmostEqual(uagf2.e_corr,     -0.04216559499684536, 6)
     self.assertAlmostEqual(uagf2.e_tot,      -75.00333673286264  , 6)
Exemple #3
0
 def test_uagf2_1_1(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(1, 1), verbose=False, etol=1e-7)
     uagf2.run()
     self.assertTrue(uagf2.converged)
     self.assertAlmostEqual(uagf2.e_mp2, self.e_mp2, 3)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[0]), self.m.nalph, 6)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[1]), self.m.nbeta, 6)
     self.assertAlmostEqual(uagf2.e_1body,    -74.9230493877132   , 6)
     self.assertAlmostEqual(uagf2.e_2body,    -0.08160143624651722, 6)
     self.assertAlmostEqual(uagf2.e_hf,       -74.96117113786579  , 6)
     self.assertAlmostEqual(uagf2.e_corr,     -0.04347968609393149, 6)
     self.assertAlmostEqual(uagf2.e_tot,      -75.00465082395972  , 6)
Exemple #4
0
 def test_ip(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(2, 2), verbose=False, etol=1e-7)
     uagf2.run()
     wa, va = uagf2.se[0].eig(uagf2.get_fock()[0])
     wb, vb = uagf2.se[1].eig(uagf2.get_fock()[1])
     arga = np.argmax(wa[wa < uagf2.chempot[0]])
     argb = np.argmax(wb[wb < uagf2.chempot[1]])
     if wa[wa < uagf2.chempot[0]][arga] < wb[wb < uagf2.chempot[1]][argb]:
         e1, v1 = -wa[wa < uagf2.chempot[0]][arga], va[:,wa < uagf2.chempot[0]][:,arga][:uagf2.nphys]
     else:
         e1, v1 = -wb[wb < uagf2.chempot[1]][argb], vb[:,wb < uagf2.chempot[1]][:,argb][:uagf2.nphys]
     e2, v2 = uagf2.ip
     self.assertAlmostEqual(e1, e2, 8)
     self.assertAlmostEqual(np.linalg.norm(v1), np.linalg.norm(v2), 8)
Exemple #5
0
 def test_ea(self):
     opt_uagf2 = agf2.OptUAGF2(self.uhf_df, verbose=False, etol=1e-7)
     opt_uagf2.run()
     wa, va = opt_uagf2.se[0].eig(opt_uagf2.get_fock()[0])
     wb, vb = opt_uagf2.se[1].eig(opt_uagf2.get_fock()[1])
     opt_uagf2.gf = (opt_uagf2.gf[0].new(wa, va[:opt_uagf2.nphys]),
                     opt_uagf2.gf[1].new(wb, vb[:opt_uagf2.nphys]))
     uagf2 = agf2.UAGF2(self.uhf, nmom=(None, 0), verbose=False, etol=1e-7)
     uagf2.run()
     wa, va = opt_uagf2.se[0].eig(opt_uagf2.get_fock()[0])
     wb, vb = opt_uagf2.se[1].eig(opt_uagf2.get_fock()[1])
     arga = np.argmin(wa[wa >= opt_uagf2.chempot[0]])
     argb = np.argmin(wb[wb >= opt_uagf2.chempot[1]])
     e1, v1 = opt_uagf2.ea
     e2, v2 = uagf2.ea
     self.assertAlmostEqual(e1, e2, 4)
     self.assertAlmostEqual(np.linalg.norm(v1), np.linalg.norm(v2), 4)
Exemple #6
0
 def test_uagf2(self):
     # Dependent upon UAGF2 passing tests
     dm0 = self.uhf.rdm1_mo
     opt_uagf2 = agf2.OptUAGF2(self.uhf_df,
                               dm0=dm0,
                               verbose=False,
                               etol=1e-7)
     opt_uagf2.run()
     uagf2 = agf2.UAGF2(self.uhf, nmom=(None, 0), verbose=False, etol=1e-7)
     uagf2.run()
     self.assertAlmostEqual(uagf2.e_mp2, opt_uagf2.e_mp2, 4)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[0]),
                            np.trace(opt_uagf2.rdm1[0]), 4)
     self.assertAlmostEqual(np.trace(uagf2.rdm1[1]),
                            np.trace(opt_uagf2.rdm1[1]), 4)
     self.assertAlmostEqual(uagf2.e_1body, opt_uagf2.e_1body, 3)
     self.assertAlmostEqual(uagf2.e_2body, opt_uagf2.e_2body, 3)
     self.assertAlmostEqual(uagf2.e_hf, opt_uagf2.e_hf, 3)
     self.assertAlmostEqual(uagf2.e_corr, opt_uagf2.e_corr, 3)
     self.assertAlmostEqual(uagf2.e_tot, opt_uagf2.e_tot, 3)
     self.assertAlmostEqual(uagf2.chempot[0], opt_uagf2.chempot[0], 4)
     self.assertAlmostEqual(uagf2.chempot[1], opt_uagf2.chempot[1], 4)
Exemple #7
0
from auxgf import mol, hf, agf2
from auxgf.util import Timer

timer = Timer()

# Build the Molecule object:
m = mol.Molecule(atoms='H 0 0 0; Be 0 0 1', basis='cc-pvdz', spin=1)

# Build the UHF object:
uhf = hf.UHF(m)
uhf.run()

# Build the AGF2 object and run it for a few different settings:
# Simple UAGF2(1,1) setup without damping:
opts = dict(verbose=False, nmom=(1, 1), damping=0.0)
gf2 = agf2.UAGF2(uhf, **opts)
gf2.run()
print('UAGF2(1,1): converged = %s  iterations = %d  E(corr) = %.12f' %
      (gf2.converged, gf2.iteration, gf2.e_corr))

# Tighten the Fock loop and increase to UAGF2(2,2):
opts.update(
    dict(nmom=(2, 2),
         dtol=1e-10,
         diis_space=10,
         fock_maxiter=100,
         fock_maxruns=25))
gf2 = agf2.UAGF2(uhf, **opts)
gf2.run()
print('UAGF2(2,2): converged = %s  iterations = %d  E(corr) = %.12f' %
      (gf2.converged, gf2.iteration, gf2.e_corr))
Exemple #8
0
 def test_get_fock(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(2,2), verbose=False)
     self.assertAlmostEqual(np.max(np.absolute(uagf2.get_fock() - self.uhf.fock_mo)), 0, 8)
     self.assertAlmostEqual(np.max(np.absolute(uagf2.get_fock(self.uhf.rdm1_mo) - self.uhf.fock_mo)), 0, 8)
Exemple #9
0
 def test_rmp2(self):
     uagf2 = agf2.UAGF2(self.uhf, nmom=(10, 10), verbose=False)
     self.assertAlmostEqual(uagf2.e_1body, self.uhf.e_tot, 8)
     self.assertAlmostEqual(uagf2.e_2body, self.e_mp2, 8)
     self.assertAlmostEqual(uagf2.e_tot, self.uhf.e_tot + self.e_mp2, 8)
     self.assertAlmostEqual(uagf2.e_mp2, self.e_mp2, 8)
Exemple #10
0
import numpy as np
from pyscf.lib.linalg_helper import davidson
from auxgf import mol, hf, cc, aux, agf2
from auxgf.util import Timer

timer = Timer()

# Build the Molecule object:
m = mol.Molecule(atoms='H 0 0 0; Li 0 0 1.64', basis='cc-pvdz')

# Build the UHF object:
uhf = hf.UHF(m)
uhf.run()

# Run some UAGF2 calculations:
gf2_a = agf2.UAGF2(uhf, nmom=(1, 1), verbose=False).run()
gf2_b = agf2.UAGF2(uhf, nmom=(2, 2), verbose=False).run()
gf2_c = agf2.UAGF2(uhf, nmom=(3, 3), verbose=False).run()

# Method 2: using aux.Aux more:
fock = uhf.get_fock(gf2_b.rdm1, basis='mo')
ea, ca = gf2_b.se[0].eig(fock[0])
eb, cb = gf2_b.se[1].eig(fock[1])
ca = ca[:uhf.nao]
cb = cb[:uhf.nao]
gfa = aux.Aux(ea, ca[:uhf.nao], chempot=gf2_b.chempot[0])
gfb = aux.Aux(eb, cb[:uhf.nao], chempot=gf2_b.chempot[1])
ea_hoqmo, ea_luqmo = gfa.as_occupied().e[-1], gfa.as_virtual().e[0]
eb_hoqmo, eb_luqmo = gfb.as_occupied().e[-1], gfb.as_virtual().e[0]
va_hoqmo, va_luqmo = gfa.as_occupied().v[:, -1], gfa.as_virtual().v[:, 0]
vb_hoqmo, vb_luqmo = gfb.as_occupied().v[:, -1], gfb.as_virtual().v[:, 0]