def test_153_bse_h2b_uks_rpa(self):
        """ This  example is with discrepancies... """
        mol = gto.M(verbose=1,
                    atom='B 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',
                    basis='cc-pvdz',
                    spin=3)

        gto_mf = scf.UKS(mol)
        gto_mf.kernel()
        gto_td = tddft.dRPA(gto_mf)
        gto_td.nstates = 190
        gto_td.kernel()

        omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        p_ave = -polariz_freq_osc_strength(
            gto_td.e, gto_td.oscillator_strength(), omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_ave])
        np.savetxt('test_0153_bse_h2b_uks_rpa_pyscf.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0153_bse_h2b_uks_rpa_pyscf.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='RPA')

        polariz = -nao_td.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * HARTREE2EV, polariz])
        np.savetxt('test_0153_bse_h2b_uks_rpa_nao.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0153_bse_h2b_uks_rpa_nao.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
Beispiel #2
0
  def test_0163_bse_h2o_spin2_uhf_rpa(self):
    """ This  """
    mol = gto.M(verbose=1,atom='O 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',basis='cc-pvdz',spin=2)

    gto_mf = scf.UKS(mol)
    gto_mf.xc = 'hf'
    gto_mf.kernel()
    gto_td = tddft.dRPA(gto_mf)
    gto_td.nstates = 190
    gto_td.kernel()

    omegas = np.arange(0.0, 2.0, 0.01) + 1j*0.03
    p_ave = -polariz_freq_osc_strength(gto_td.e, gto_td.oscillator_strength(), omegas).imag
    data = np.array([omegas.real*HARTREE2EV, p_ave])
    np.savetxt('test_0163_bse_h2o_spin2_uhf_rpa_pyscf.txt', data.T, fmt=['%f','%f'])
    data_ref = np.loadtxt('test_0163_bse_h2o_spin2_uhf_rpa_pyscf.txt-ref').T
    self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
    
    nao_td  = bse_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='RPA')

    polariz = -nao_td.comp_polariz_inter_ave(omegas).imag
    data = np.array([omegas.real*HARTREE2EV, polariz])
    np.savetxt('test_0163_bse_h2o_spin2_uhf_rpa_nao.txt', data.T, fmt=['%f','%f'])
    data_ref = np.loadtxt('test_0163_bse_h2o_spin2_uhf_rpa_nao.txt-ref').T
    self.assertTrue(np.allclose(data_ref, data, atol=1e-5, rtol=1e-3), \
      msg="{}".format(abs(data_ref-data).sum()/data.size))
    def test_0146_bse_h2o_rhf_rpa(self):
        """ Interacting case """
        mol = gto.M(
            verbose=0,
            atom='O 0 0 0;H 0 0.489 1.074;H 0 0.489 -1.074',
            basis='cc-pvdz',
        )
        gto_hf = scf.RKS(mol)
        gto_hf.xc = 'hf'
        gto_hf.kernel()
        gto_td = tddft.dRPA(gto_hf)
        gto_td.nstates = 95
        gto_td.kernel()

        omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        #p_ave = -polariz_inter_ave(gto_hf, mol, gto_td, omegas).imag
        p_ave = -polariz_freq_osc_strength(
            gto_td.e, gto_td.oscillator_strength(), omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_ave])
        np.savetxt('test_0146_bse_h2o_rhf_rpa_pyscf.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0146_bse_h2o_rhf_rpa_pyscf.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        nao_td = bse_iter(mf=gto_hf, gto=mol, verbosity=0, xc_code='RPA')

        p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_iter])
        np.savetxt('test_0146_bse_h2o_rhf_rpa_nao.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0146_bse_h2o_rhf_rpa_nao.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
Beispiel #4
0
    def test_gw(self):
        """ This is GW """
        mol = gto.M(
            verbose=1,
            atom='''H 0 0 0;  H 0.17 0.7 0.587''',
            basis='cc-pvdz',
        )
        #mol = gto.M( verbose = 0, atom = '''H 0.0 0.0 -0.3707;  H 0.0 0.0 0.3707''', basis = 'cc-pvdz',)
        gto_mf = scf.RHF(mol)
        gto_mf.kernel()
        #print('gto_mf.mo_energy:', gto_mf.mo_energy)
        b = bse_iter(mf=gto_mf,
                     gto=mol,
                     perform_gw=True,
                     xc_code='GW',
                     verbosity=0,
                     nvrt=4)
        #self.assertAlmostEqual(b.mo_energy[0], -0.5967647)
        #self.assertAlmostEqual(b.mo_energy[1], 0.19072719)
        omegas = np.linspace(0.0, 2.0, 450) + 1j * 0.04
        p_iter = -b.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * 27.2114, p_iter])
        np.savetxt('h2_gw_bse_iter.omega.inter.ave.txt', data.T)
        data_ref = np.loadtxt('h2_gw_bse_iter.omega.inter.ave.txt-ref').T
        #print(__name__, abs(data_ref-data).sum()/data.size)
        self.assertTrue(np.allclose(data_ref, data, 5))

        p_iter = -b.comp_polariz_nonin_ave(omegas).imag
        data = np.array([omegas.real * 27.2114, p_iter])
        np.savetxt('h2_gw_bse_iter.omega.nonin.ave.txt', data.T)
    def test_0149_bse_h2o_uhf_nonin(self):
        """ Interacting case """
        mol = gto.M(
            verbose=0,
            atom='O 0 0 0;H 0 0.489 1.074;H 0 0.489 -1.074',
            basis='cc-pvdz',
        )
        gto_mf = scf.UHF(mol)
        gto_mf.kernel()

        omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        p_ave = -polariz_nonin_ave(gto_mf, mol, omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_ave])
        np.savetxt('test_0149_bse_h2o_uhf_nonin_pyscf.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0149_bse_h2o_uhf_nonin_pyscf.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=0)

        polariz = -nao_td.comp_polariz_nonin_ave(omegas).imag
        data = np.array([omegas.real * HARTREE2EV, polariz])
        np.savetxt('test_0149_bse_h2o_uhf_nonin_nao.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt('test_0149_bse_h2o_uhf_nonin_nao.txt-ref').T
        self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
Beispiel #6
0
    def test_161_bse_h2b_spin1_uhf_cis(self):
        """ This  """
        mol = gto.M(verbose=1,
                    atom='B 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',
                    basis='cc-pvdz',
                    spin=1)

        gto_mf = scf.UHF(mol)
        gto_mf.kernel()
        gto_td = tddft.TDHF(gto_mf)
        gto_td.nstates = 150
        gto_td.kernel()

        omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        p_ave = -polariz_freq_osc_strength(
            gto_td.e, gto_td.oscillator_strength(), omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_ave])
        np.savetxt('test_0161_bse_h2b_spin1_uhf_cis_pyscf.txt',
                   data.T,
                   fmt=['%f', '%f'])
        #data_ref = np.loadtxt('test_0159_bse_h2b_uhf_cis_pyscf.txt-ref').T
        #self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='CIS')

        polariz = -nao_td.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * HARTREE2EV, polariz])
        np.savetxt('test_0161_bse_h2b_spin1_uhf_cis_nao.txt',
                   data.T,
                   fmt=['%f', '%f'])
Beispiel #7
0
  def test_156_bse_h2b_uks_nonin(self):
    """ This  example is with discrepancies... """
    mol = gto.M(verbose=1,atom='B 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',basis='cc-pvdz',spin=3)

    gto_mf = scf.UHF(mol)
    gto_mf.kernel()

    omegas = np.arange(0.0, 2.0, 0.01) + 1j*0.03
    p_ave = -polariz_nonin_ave(gto_mf, mol, omegas).imag
    data = np.array([omegas.real*HARTREE2EV, p_ave])
    np.savetxt('test_0156_bse_h2b_uhf_nonin_pyscf.txt', data.T, fmt=['%f','%f'])
    data_ref = np.loadtxt('test_0156_bse_h2b_uhf_nonin_pyscf.txt-ref').T
    self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
    
    nao_td  = bse_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='RPA')

    polariz = -nao_td.polariz_nonin_ave_matelem(omegas).imag
    data = np.array([omegas.real*HARTREE2EV, polariz])
    np.savetxt('test_0156_bse_h2b_uhf_nonin_matelem.txt', data.T, fmt=['%f','%f'])
    data_ref = np.loadtxt('test_0156_bse_h2b_uhf_nonin_matelem.txt-ref').T
    self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
    
    polariz = -nao_td.comp_polariz_nonin_ave(omegas).imag
    data = np.array([omegas.real*HARTREE2EV, polariz])
    np.savetxt('test_0156_bse_h2b_uhf_nonin_nao.txt', data.T, fmt=['%f','%f'])
    data_ref = np.loadtxt('test_0156_bse_h2b_uhf_nonin_nao.txt-ref').T
    self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
    def test_bse_gto_vs_nao_nonin_0081(self):
        """ Non-interacting case """
        #print(__name__, 'gto.mo_energy', gto_mf.mo_energy)
        nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=0, perform_gw=True)

        omegas = np.linspace(0.0, 2.0, 450) + 1j * 0.04
        p_iter = -nao_td.comp_polariz_nonin_ave(omegas).imag
        data = np.array([omegas.real * 27.2114, p_iter])
        np.savetxt('be.bse_iter.omega.nonin.ave.txt', data.T, fmt=['%f', '%f'])
 def test_bse_gto_vs_nao_inter_0082(self):
   """ Interacting case """
   #dm1 = gto_mf.make_rdm1()
   #o1 = gto_mf.get_ovlp()
   #print(__name__, 'dm1*o1', (dm1*o1).sum())
   nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='GW', perform_gw=True)
   
   #dm2 = nao_td.make_rdm1()
   #o2 = nao_td.get_ovlp()
   #n = nao_td.norbs
   #print(__name__, 'dm2*o2', (dm2.reshape((n,n))*o2).sum())
   
   omegas = np.linspace(0.0,2.0,450)+1j*0.04
   p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag
   data = np.array([omegas.real*27.2114, p_iter])
   np.savetxt('be.bse_iter.omega.inter.ave.txt', data.T, fmt=['%f','%f'])
Beispiel #10
0
    def test_170_bse_h2o_rks_b3lyp_pb(self):
        """ This  """
        mol = gto.M(verbose=1,
                    atom='O 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',
                    basis='cc-pvdz')
        gto_mf = scf.RKS(mol)
        gto_mf.xc = 'PBE'
        gto_mf.kernel()
        #print(__name__, 'veff')
        veff = gto_mf.get_veff()
        #print(veff.shape)
        #print(veff.sum())
        #gto_td = tddft.TDDFT(gto_mf)
        #gto_td.nstates = 190
        #gto_td.kernel()

        #print(__name__, parse_xc_name(gto_mf.xc) )
        #print(__name__, xc_type(gto_mf.xc) )
        #print(__name__, is_hybrid_xc(gto_mf.xc) )
        #print(__name__, is_gga(gto_mf.xc) )
        #print(__name__, is_lda(gto_mf.xc) )

        return

        raise RuntimeError('check ')

        omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        p_ave = -polariz_freq_osc_strength(
            gto_td.e, gto_td.oscillator_strength(), omegas).imag
        data = np.array([omegas.real * HARTREE2EV, p_ave])
        np.savetxt('test_0170_bse_h2o_rks_pbe_pyscf.txt',
                   data.T,
                   fmt=['%f', '%f'])
        #data_ref = np.loadtxt('test_0170_bse_h2o_rks_pbe_pyscf.txt-ref').T
        #self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        nao_td = bse_iter(mf=gto_mf, gto=mol, verbosity=1)

        fxc = nao_td.comp_fxc_pack()
        print(fxc.shape)
        print(__name__, fxc.sum())

        polariz = -nao_td.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * HARTREE2EV, polariz])
        np.savetxt('test_0170_bse_h2o_rks_pbe_nao.txt',
                   data.T,
                   fmt=['%f', '%f'])
Beispiel #11
0
 def test_bse_iter_nonin(self):
   """ Compute polarization with LDA TDDFT  """
   from timeit import default_timer as timer
   
   dname = os.path.dirname(os.path.abspath(__file__))
   bse = bse_iter(label='water', cd=dname, iter_broadening=1e-2, xc_code='RPA', verbosity=0)
   omegas = np.linspace(0.0,2.0,500)+1j*bse.eps
   
   pxx = np.zeros(len(omegas))
   for iw,omega in enumerate(omegas):
     for ixyz in range(1):
       vab = bse.apply_l0(bse.dip_ab[ixyz], omega)
       pxx[iw] = pxx[iw] - (vab.imag*bse.dip_ab[ixyz].reshape(-1)).sum()
       
   data = np.array([omegas.real*27.2114, pxx])
   np.savetxt('water.bse_iter_rpa.omega.nonin.pxx.txt', data.T, fmt=['%f','%f'])
   data_ref = np.loadtxt(dname+'/water.bse_iter_rpa.omega.nonin.pxx.txt-ref')
   #print('    bse.l0_ncalls ', bse.l0_ncalls)
   self.assertTrue(np.allclose(data_ref,data.T, rtol=1.0, atol=1e-05))
    def test_bse_gto_vs_nao_inter_0082(self):
        """ Interacting case """
        #dm1 = gto_mf.make_rdm1()
        #o1 = gto_mf.get_ovlp()
        #print(__name__, 'dm1*o1', (dm1*o1).sum())
        nao_td = bse_iter(mf=gto_mf,
                          gto=mol,
                          verbosity=0,
                          xc_code='GW',
                          perform_gw=True)

        #dm2 = nao_td.make_rdm1()
        #o2 = nao_td.get_ovlp()
        #n = nao_td.norbs
        #print(__name__, 'dm2*o2', (dm2.reshape((n,n))*o2).sum())

        omegas = np.linspace(0.0, 2.0, 450) + 1j * 0.04
        p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag
        data = np.array([omegas.real * 27.2114, p_iter])
        np.savetxt('be.bse_iter.omega.inter.ave.txt', data.T, fmt=['%f', '%f'])
    def test_139_h2o_uks_nonin_pb(self):
        """ This  """
        mol = gto.M(verbose=1,
                    atom='O 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',
                    basis='cc-pvdz')
        gto_mf = dft.UKS(mol)
        gto_mf.kernel()
        nao_mf = bse_iter(gto=mol, mf=gto_mf)
        comega = np.arange(0.0, 2.0, 0.01) + 1j * 0.03
        pnonin = -nao_mf.polariz_nonin_ave_matelem(comega).imag
        data = np.array([comega.real * HARTREE2EV, pnonin])
        np.savetxt('test_139_h2o_uks_nonin_matelem.txt',
                   data.T,
                   fmt=['%f', '%f'])
        #data_ref = np.loadtxt('test_139_h2o_uks_nonin_matelem.txt-ref').T
        #self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))

        pnonin = -nao_mf.comp_polariz_nonin_ave(comega).imag
        data = np.array([comega.real * HARTREE2EV, pnonin])
        np.savetxt('test_139_h2o_uks_nonin_nao.txt', data.T, fmt=['%f', '%f'])
  def test_gw(self):
    """ This is GW """
    mol = gto.M( verbose = 1, atom = '''H 0 0 0;  H 0.17 0.7 0.587''', basis = 'cc-pvdz',)
    #mol = gto.M( verbose = 0, atom = '''H 0.0 0.0 -0.3707;  H 0.0 0.0 0.3707''', basis = 'cc-pvdz',)
    gto_mf = scf.RHF(mol)
    gto_mf.kernel()
    #print('gto_mf.mo_energy:', gto_mf.mo_energy)
    b = bse_iter(mf=gto_mf, gto=mol, perform_gw=True, xc_code='GW', verbosity=0, nvrt=4)
    #self.assertAlmostEqual(b.mo_energy[0], -0.5967647)
    #self.assertAlmostEqual(b.mo_energy[1], 0.19072719)
    omegas = np.linspace(0.0,2.0,450)+1j*0.04
    p_iter = -b.comp_polariz_inter_ave(omegas).imag
    data = np.array([omegas.real*27.2114, p_iter])
    np.savetxt('h2_gw_bse_iter.omega.inter.ave.txt', data.T)
    data_ref = np.loadtxt('h2_gw_bse_iter.omega.inter.ave.txt-ref').T
    #print(__name__, abs(data_ref-data).sum()/data.size)
    self.assertTrue(np.allclose(data_ref, data, 5))

    p_iter = -b.comp_polariz_nonin_ave(omegas).imag
    data = np.array([omegas.real*27.2114, p_iter])
    np.savetxt('h2_gw_bse_iter.omega.nonin.ave.txt', data.T)
Beispiel #15
0
    def test_0040_bse_rpa_nao(self):
        """ Compute polarization with RPA via 2-point non-local potentials (BSE solver)  """
        from timeit import default_timer as timer

        dname = os.path.dirname(os.path.abspath(__file__))
        bse = bse_iter(label='water', cd=dname, xc_code='RPA', verbosity=0)
        omegas = np.linspace(0.0, 2.0, 150) + 1j * 0.01
        #print(__name__, omegas.shape)

        pxx = np.zeros(len(omegas))
        for iw, omega in enumerate(omegas):
            for ixyz in range(1):
                dip = bse.dip_ab[ixyz]
                vab = bse.apply_l(dip, omega)
                pxx[iw] = pxx[iw] - (vab.imag * dip.reshape(-1)).sum()

        data = np.array([omegas.real * 27.2114, pxx])
        np.savetxt('water.bse_iter_rpa.omega.inter.pxx.txt',
                   data.T,
                   fmt=['%f', '%f'])
        data_ref = np.loadtxt(dname +
                              '/water.bse_iter_rpa.omega.inter.pxx.txt-ref')
        #print('    bse.l0_ncalls ', bse.l0_ncalls)
        self.assertTrue(np.allclose(data_ref, data.T, rtol=1.0, atol=1e-05))
import unittest, numpy as np
from pyscf import gto, tddft, scf
from pyscf.nao import bse_iter
from pyscf.nao import polariz_inter_ave, polariz_nonin_ave

mol = gto.M( verbose = 0, atom = '''H 0 0 0;  H 0.17 0.7 0.587''', basis = 'cc-pvdz',)

gto_mf = scf.RHF(mol)
gto_mf.kernel()
#print(gto_mf.mo_energy)
gto_td = tddft.TDDFT(gto_mf)
gto_td.nstates = 9
gto_td.singlet = True # False
gto_td.kernel()

nao_td  = bse_iter(mf=gto_mf, gto=mol, verbosity=0)

class KnowValues(unittest.TestCase):

  #def test_bse_iter_vs_tdhf_pyscf(self):
  #  """ Interacting case test """
  #  cdip = np.random.rand(nao_td.norbs,nao_td.norbs)+1j*np.random.rand(nao_td.norbs,nao_td.norbs)
  #  nao_td.apply_l0_exp(cdip, comega=0.2+1j*0.01)
    
  def test_tddft_gto_vs_nao_inter(self):
    """ Interacting case """
    omegas = np.linspace(0.0,2.0,450)+1j*0.04
    p_ave = -polariz_inter_ave(gto_mf, mol, gto_td, omegas).imag
    data = np.array([omegas.real*27.2114, p_ave])
    np.savetxt('hydrogen.tdhf.omega.inter.pav.txt', data.T, fmt=['%f','%f'])
    p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag