Ejemplo n.º 1
0
def build_3dgrid(me, sp1, R1, sp2, R2, **kw):
    """
    me: prod_log class
    """
    from pyscf import dft
    from pyscf.nao import nao

    assert sp1 >= 0
    assert sp2 >= 0
    if ((R1 - R2)**2).sum() < 1e-7:
        mol = nao(xyz_list=[[int(me.aos[0].sp2charge[sp1]), R1]])
    else:
        mol = nao(xyz_list=[[int(me.aos[0].sp2charge[sp1]), R1],
                            [int(me.aos[1].sp2charge[sp2]), R2]])

    atom2rcut=np.array([me.aos[isp].sp_mu2rcut[sp].max() \
            for isp,sp in enumerate([sp1,sp2])])
    grids = dft.gen_grid.Grids(mol)
    grids.level = kw[
        'level'] if 'level' in kw else 3  # precision as implemented in pyscf
    grids.radi_method = gauss_legendre
    grids.dump_flags()
    grids.build(atom2rcut=atom2rcut)
    #grids.build()
    return grids
 def test_laplace_gto_vs_nao(self):
     """ Test computation of kinetic energy between NAOs against those computed between GTOs"""
     from pyscf.nao.m_laplace_am import laplace_am
     tref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('int1e_kin'))
     sv = nao(gto=mol)
     tkin = (0.5 * sv.overlap_coo(funct=laplace_am)).toarray()
     self.assertTrue(abs(tref - tkin).sum() / len(tkin) < 5e-9)
 def test_overlap_gto_vs_nao(self):
     """ Test computation of overlaps between NAOs against overlaps computed between GTOs"""
     from pyscf.nao.m_overlap_am import overlap_am
     oref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('cint1e_ovlp_sph'))
     sv = nao(gto=mol)
     over = sv.overlap_coo(funct=overlap_am).toarray()
     self.assertTrue(abs(over - oref).sum() < 5e-9)
 def test_laplace_gto_vs_nao(self):
   """ Test computation of kinetic energy between NAOs against those computed between GTOs"""
   from pyscf.nao.m_laplace_am import laplace_am
   tref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('int1e_kin'))
   sv = nao(gto=mol)
   tkin = (0.5*sv.overlap_coo(funct=laplace_am)).toarray()
   self.assertTrue(abs(tref-tkin).sum()/len(tkin)<5e-9)
 def test_overlap_gto_vs_nao(self):
   """ Test computation of overlaps between NAOs against overlaps computed between GTOs"""
   from pyscf.nao.m_overlap_am import overlap_am
   oref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('cint1e_ovlp_sph'))
   sv = nao(gto=mol)
   over = sv.overlap_coo(funct=overlap_am).toarray()
   self.assertTrue(abs(over-oref).sum()<5e-9)
Ejemplo n.º 6
0
 def test_dipole_coo(self):
   """ Test computation of dipole matrix elements """
   sv = nao(gto=mol)
   dipme = sv.dipole_coo()
   
   self.assertAlmostEqual(dipme[0].sum(), 23.8167121803)
   self.assertAlmostEqual(dipme[1].sum(), 18.9577251654)
   self.assertAlmostEqual(dipme[2].sum(), 48.1243277097)
Ejemplo n.º 7
0
    def test_dipole_coo(self):
        """ Test computation of dipole matrix elements """
        sv = nao(gto=mol)
        dipme = sv.dipole_coo()

        self.assertAlmostEqual(dipme[0].sum(), 23.8167121803)
        self.assertAlmostEqual(dipme[1].sum(), 18.9577251654)
        self.assertAlmostEqual(dipme[2].sum(), 48.1243277097)
 def test_vne_gto_vs_nao(self):
     """ Test computation of matrix elements of nuclear-electron attraction """
     vne = mol.intor_symmetric('int1e_nuc')
     vne_gto = conv.conv_yzx2xyz_2d(vne)
     sv = nao(gto=mol)
     vne_nao = sv.vnucele_coo_coulomb(level=1)
     #print('a,b,c', (vne_nao).sum(), (vne_gto).sum(), abs(vne_nao-vne_gto).sum()/vne_gto.size)
     self.assertTrue(abs(vne_nao - vne_gto).sum() / vne_gto.size < 5e-6)
 def test_vne_gto_vs_nao(self):
   """ Test computation of matrix elements of nuclear-electron attraction """
   vne = mol.intor_symmetric('int1e_nuc')
   vne_gto = conv.conv_yzx2xyz_2d(vne)
   sv = nao(gto=mol)
   vne_nao = sv.vnucele_coo_coulomb(level=1)
   #print('a,b,c', (vne_nao).sum(), (vne_gto).sum(), abs(vne_nao-vne_gto).sum()/vne_gto.size)
   self.assertTrue(abs(vne_nao-vne_gto).sum()/vne_gto.size<5e-6)
Ejemplo n.º 10
0
 def test_prdred(self):
   """  """
   from pyscf.nao import nao
   sv = nao(gto=mol)
   self.assertEqual(sv.sp2charge[0], 1)
   pt = prod_talman_c(sv.ao_log)
   jtb,clbdtb,lbdtb=pt.prdred_terms(2,4)
   self.assertEqual(len(jtb), 565)
   self.assertEqual(pt.lbdmx, 14)
Ejemplo n.º 11
0
 def test_bilocal(self):
   """ Build 3d integration scheme for two centers."""
   sv=nao(xyz_list=[ [8, [0.0, 0.0, 0.0]], [1, [1.0, 1.0, 1.0] ]])
   atom2rcut=np.array([5.0, 4.0])
   grids = dft.gen_grid.Grids(sv)
   grids.level = 2 # precision as implemented in pyscf
   grids.radi_method = gauss_legendre
   grids.build(atom2rcut=atom2rcut)
   self.assertEqual(len(grids.weights), 20648)
Ejemplo n.º 12
0
 def test_prdred(self):
     """  """
     from pyscf.nao import nao
     sv = nao(gto=mol)
     self.assertEqual(sv.sp2charge[0], 1)
     pt = prod_talman_c(sv.ao_log)
     jtb, clbdtb, lbdtb = pt.prdred_terms(2, 4)
     self.assertEqual(len(jtb), 565)
     self.assertEqual(pt.lbdmx, 14)
Ejemplo n.º 13
0
 def test_ao_log_gto(self):
   """ This is indeed for initializing with auxiliary basis set"""
   from pyscf.nao import nao
   sv = nao(gto=mol)
   ao = ao_log(gto=mol, nao=sv)
   #print(__name__, dir(ao))
   self.assertEqual(ao.nr, 1024)
   self.assertEqual(ao.jmx, 2)
   for a,b in zip(sv.sp2charge, ao.sp2charge): self.assertEqual(a,b)
Ejemplo n.º 14
0
 def test_bilocal(self):
     """ Build 3d integration scheme for two centers."""
     sv = nao(xyz_list=[[8, [0.0, 0.0, 0.0]], [1, [1.0, 1.0, 1.0]]])
     atom2rcut = np.array([5.0, 4.0])
     grids = dft.gen_grid.Grids(sv)
     grids.level = 2  # precision as implemented in pyscf
     grids.radi_method = gauss_legendre
     grids.build(atom2rcut=atom2rcut)
     self.assertEqual(len(grids.weights), 20648)
Ejemplo n.º 15
0
    def test_0006_02_nao_noghost(self):
        import os
        from pyscf.nao import nao
        from pyscf.nao.m_overlap_am import overlap_am

        dname = os.path.join(os.path.split(__file__)[0], 'test_ag13_noghost')
        sv = nao(label='siesta', cd=dname)
        aa = sv.vna_coo().toarray()
        oc = sv.overlap_check(funct=overlap_am)
        self.assertTrue(oc[0])
Ejemplo n.º 16
0
def build_3dgrid(me, sp1, R1, sp2, R2, **kw):
  from pyscf import dft
  from pyscf.nao import nao
  from pyscf.nao.m_gauleg import gauss_legendre

  assert sp1>=0
  assert sp2>=0
  if ( (R1-R2)**2 ).sum()<1e-7 :
    mol=nao(xyz_list=[ [int(me.aos[0].sp2charge[sp1]), R1] ])
  else :
    mol=nao(xyz_list=[ [int(me.aos[0].sp2charge[sp1]), R1], [int(me.aos[1].sp2charge[sp2]), R2] ])

  atom2rcut=np.array([me.aos[isp].sp_mu2rcut[sp].max() for isp,sp in enumerate([sp1,sp2])])
  grids = dft.gen_grid.Grids(mol)
  grids.level = kw['level'] if 'level' in kw else 3 # precision as implemented in pyscf
  grids.radi_method=gauss_legendre
  grids.build(atom2rcut=atom2rcut)
  #grids.build()
  return grids
Ejemplo n.º 17
0
 def test_atom2sv(self):
   """ Test costructing a skeleton for later use to define spherical grid with pySCF """
   dl = [ [1, [1.0, 0.44, 2.0]], [8, [0.0, 0.0, 0.1]], [1, [0.0, 0.0, -2.0]]]
   sv = nao(xyz_list=dl)
   
   self.assertEqual(sv.natoms, len(dl))
   for ia,a in enumerate(dl): 
     self.assertEqual(sv.sp2charge[sv.atom2sp[ia]], a[0])
     self.assertTrue(np.all(sv.atom2coord[ia,:]==a[1]))
   self.assertTrue(sv.atom2s is None)
Ejemplo n.º 18
0
 def test_0006_01_nao_ghost(self):
     import os
     from pyscf.nao import nao
     from pyscf.nao.m_overlap_am import overlap_am
     
     dname = os.getcwd()+'/test_ag13_ghost'
     sv = nao(label='siesta', cd=dname)
     oc = sv.overlap_check(funct=overlap_am)
     self.assertTrue(oc[0])
     vna = sv.vna_coo().toarray()
Ejemplo n.º 19
0
 def test_gto2sv_df(self):
   from pyscf import scf
   """ Test import of density-fitting Gaussian functions ... hm """
   mf = scf.density_fit(scf.RHF(mol))
   self.assertAlmostEqual(mf.scf(), -76.025936299702536, 2)
   sv = nao(gto=mol)
   prod_log = prod_log_c().init_prod_log_df(mf.with_df.auxmol, sv)
   self.assertEqual(prod_log.rr[0], sv.ao_log.rr[0])
   self.assertEqual(prod_log.pp[0], sv.ao_log.pp[0])
   self.assertEqual(prod_log.nspecies, sv.ao_log.nspecies)
   self.assertEqual(prod_log.sp2charge, sv.ao_log.sp2charge)
Ejemplo n.º 20
0
 def test_gto2sv_prod_log(self):
     """ Test what ? """
     sv = nao(gto=mol)
     prod_log = prod_log_c(ao_log=sv.ao_log, tol_loc=1e-4)
     mae, mxe, lll = prod_log.overlap_check()
     self.assertTrue(all(lll))
     self.assertEqual(prod_log.nspecies, 2)
     self.assertEqual(prod_log.sp2nmult[0], 7)
     self.assertEqual(prod_log.sp2nmult[1], 20)
     self.assertEqual(prod_log.sp2norbs[0], 15)
     self.assertEqual(prod_log.sp2norbs[1], 70)
Ejemplo n.º 21
0
 def test_gto2sv_df(self):
     from pyscf import scf
     """ Test import of density-fitting Gaussian functions ... hm """
     mf = scf.density_fit(scf.RHF(mol))
     self.assertAlmostEqual(mf.scf(), -76.025936299702536, 2)
     sv = nao(gto=mol)
     prod_log = prod_log_c().init_prod_log_df(mf.with_df.auxmol, sv)
     self.assertEqual(prod_log.rr[0], sv.ao_log.rr[0])
     self.assertEqual(prod_log.pp[0], sv.ao_log.pp[0])
     self.assertEqual(prod_log.nspecies, sv.ao_log.nspecies)
     self.assertEqual(prod_log.sp2charge, sv.ao_log.sp2charge)
Ejemplo n.º 22
0
    def test_atom2sv(self):
        """ Test costructing a skeleton for later use to define spherical grid with pySCF """
        dl = [[1, [1.0, 0.44, 2.0]], [8, [0.0, 0.0, 0.1]],
              [1, [0.0, 0.0, -2.0]]]
        sv = nao(xyz_list=dl)

        self.assertEqual(sv.natoms, len(dl))
        for ia, a in enumerate(dl):
            self.assertEqual(sv.sp2charge[sv.atom2sp[ia]], a[0])
            self.assertTrue(np.all(sv.atom2coord[ia, :] == a[1]))
        self.assertTrue(sv.atom2s is None)
Ejemplo n.º 23
0
 def test_gto2sv_prod_log(self):
   """ Test what ? """
   sv = nao(gto=mol)
   prod_log = prod_log_c().init_prod_log_dp(sv.ao_log, tol_loc=1e-4)
   mae,mxe,lll=prod_log.overlap_check()
   self.assertTrue(all(lll))
   self.assertEqual(prod_log.nspecies, 2)
   self.assertEqual(prod_log.sp2nmult[0], 7)
   self.assertEqual(prod_log.sp2nmult[1], 20)
   self.assertEqual(prod_log.sp2norbs[0], 15)
   self.assertEqual(prod_log.sp2norbs[1], 70)
Ejemplo n.º 24
0
  def test_one_center(self):
    """ Build 3d integration coordinates and weights for just one center. """
    sv=nao(xyz_list=[ [8, [0.0, 0.0, 0.0]]])
    atom2rcut=np.array([5.0])
    g = dft.gen_grid.Grids(sv)
    g.level = 1 # precision as implemented in pyscf
    g.radi_method = gauss_legendre
    g.build(atom2rcut=atom2rcut)

    #print(  max(  np.linalg.norm(g.coords, axis=1)  )  )
    #print(  g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0 )
    self.assertAlmostEqual(max(  np.linalg.norm(g.coords, axis=1)  ), 4.9955942742763986)
    self.assertAlmostEqual(g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0)
    self.assertEqual(len(g.weights), 6248)
Ejemplo n.º 25
0
 def test_ls_contributing(self):
   """ To test the list of contributing centers """
   sv = nao(gto=mol)
   pb = prod_basis()
   pb.sv = sv
   pb.sv.ao_log.sp2rcut[0] = 10.0
   pb.prod_log = sv.ao_log
   pb.prod_log.sp2rcut[0] = 10.0
   pb.ac_rcut = max(sv.ao_log.sp2rcut)
   pb.ac_npc_max = 10
   lsc = pb.ls_contributing(0,1)
   self.assertEqual(len(lsc),10)
   lsref = [ 0,  1, 13,  7,  5, 43, 42, 39, 38, 10]
   for i,ref in enumerate(lsref) : self.assertEqual(lsc[i],ref)
Ejemplo n.º 26
0
    def test_one_center(self):
        """ Build 3d integration coordinates and weights for just one center. """
        sv = nao(xyz_list=[[8, [0.0, 0.0, 0.0]]])
        atom2rcut = np.array([5.0])
        g = dft.gen_grid.Grids(sv)
        g.level = 1  # precision as implemented in pyscf
        g.radi_method = gauss_legendre
        g.build(atom2rcut=atom2rcut)

        #print(  max(  np.linalg.norm(g.coords, axis=1)  )  )
        #print(  g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0 )
        self.assertAlmostEqual(max(np.linalg.norm(g.coords, axis=1)),
                               4.9955942742763986)
        self.assertAlmostEqual(g.weights.sum(), 4.0 * np.pi * 5.0**3 / 3.0)
        self.assertEqual(len(g.weights), 6248)
Ejemplo n.º 27
0
    def test_vna_n2(self):
        dname = dirname(abspath(__file__))
        n = nao(label='n2', cd=dname)
        m = 200
        dvec, midv = 2 * (n.atom2coord[1] - n.atom2coord[0]) / m, (
            n.atom2coord[1] + n.atom2coord[0]) / 2.0
        vgrid = np.tensordot(np.array(range(-m, m + 1)), dvec, axes=0) + midv
        sgrid = np.array(range(-m, m + 1)) * np.sqrt((dvec * dvec).sum())

        vna = n.vna(vgrid)
        #print(vna.shape, sgrid.shape)
        #np.savetxt('vna_n2_0004.txt', np.row_stack((sgrid, vna)).T)
        ref = np.loadtxt(dname + '/vna_n2_0004.txt-ref')
        for r, d in zip(ref[:, 1], vna):
            self.assertAlmostEqual(r, d)
Ejemplo n.º 28
0
  def test_gw(self):
    """ This is GW """
    mol = gto.M( verbose = 0, atom = '''Ag 0.0 0.0 -0.3707;  Ag 0.0 0.0 0.3707''', basis = 'cc-pvdz-pp',)
    gto_mf = scf.RHF(mol)#.density_fit()
    gto_mf.kernel()
    print('gto_mf.mo_energy:', gto_mf.mo_energy)
    s = nao(mf=gto_mf, gto=mol, verbosity=0)
    oref = s.overlap_coo().toarray()
    print('s.norbs:', s.norbs, oref.sum())

    pb = prod_basis(nao=s, algorithm='fp')
    pab2v = pb.get_ac_vertex_array()
    mom0,mom1=pb.comp_moments()
    orec = np.einsum('p,pab->ab', mom0, pab2v)
    print( abs(orec-oref).sum()/oref.size, np.amax(abs(orec-oref)) )
Ejemplo n.º 29
0
 def test_ao_eval(self):
   from pyscf.nao.m_ao_eval_libnao import ao_eval_libnao
   from pyscf.nao.m_ao_eval import ao_eval
   """  """
   sv = nao(gto=mol)
   ra = np.array([2.0333, 0.101, 2.333])
   coords = np.array([[0.0333, 1.111, 3.333]])
   ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords)
   self.assertAlmostEqual(ao_vals_lib[0,0], 0.021725938009701302)
   ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 1, coords)
   self.assertAlmostEqual(ao_vals_lib[1,0], 0.0017709123325328384)
   
   ra = 4.0*np.random.rand(3)
   coords = 3.0*np.random.rand(10,3)
   ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords)
   ao_vals_py  = ao_eval(sv.ao_log, ra, 0, coords)
   for aocc1, aocc2 in zip(ao_vals_lib, ao_vals_py):
     for ao1, ao2 in zip(aocc1, aocc2):
       self.assertAlmostEqual(ao1, ao2)
Ejemplo n.º 30
0
    def test_gw(self):
        """ This is GW """
        mol = gto.M(
            verbose=0,
            atom='''Ag 0.0 0.0 -0.3707;  Ag 0.0 0.0 0.3707''',
            basis='cc-pvdz-pp',
        )
        gto_mf = scf.RHF(mol)  #.density_fit()
        gto_mf.kernel()
        print('gto_mf.mo_energy:', gto_mf.mo_energy)
        s = nao(mf=gto_mf, gto=mol, verbosity=0)
        oref = s.overlap_coo().toarray()
        print('s.norbs:', s.norbs, oref.sum())

        pb = prod_basis(nao=s, algorithm='fp')
        pab2v = pb.get_ac_vertex_array()
        mom0, mom1 = pb.comp_moments()
        orec = np.einsum('p,pab->ab', mom0, pab2v)
        print(abs(orec - oref).sum() / oref.size, np.amax(abs(orec - oref)))
Ejemplo n.º 31
0
    def test_ao_eval(self):
        from pyscf.nao.m_ao_eval_libnao import ao_eval_libnao
        from pyscf.nao.m_ao_eval import ao_eval
        """  """
        sv = nao(gto=mol)
        ra = np.array([2.0333, 0.101, 2.333])
        coords = np.array([[0.0333, 1.111, 3.333]])
        ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords)
        self.assertAlmostEqual(ao_vals_lib[0, 0], 0.021725938009701302)
        ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 1, coords)
        self.assertAlmostEqual(ao_vals_lib[1, 0], 0.0017709123325328384)

        ra = 4.0 * np.random.rand(3)
        coords = 3.0 * np.random.rand(10, 3)
        ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords)
        ao_vals_py = ao_eval(sv.ao_log, ra, 0, coords)
        for aocc1, aocc2 in zip(ao_vals_lib, ao_vals_py):
            for ao1, ao2 in zip(aocc1, aocc2):
                self.assertAlmostEqual(ao1, ao2)
Ejemplo n.º 32
0
    def test_vna_lih(self):
        dname = dirname(abspath(__file__))
        n = nao(label='lih', cd=dname)
        m = 200
        dvec, midv = 2 * (n.atom2coord[1] - n.atom2coord[0]) / m, (
            n.atom2coord[1] + n.atom2coord[0]) / 2.0
        vgrid = np.tensordot(np.array(range(-m, m + 1)), dvec, axes=0) + midv
        sgrid = np.array(range(-m, m + 1)) * np.sqrt((dvec * dvec).sum())

        #vgrid = np.array([[-1.517908564663352e+00, 1.180550033093826e+00,0.000000000000000e+00]])
        vna = n.vna(vgrid)

        #for v,r in zip(vna,vgrid):
        #  print("%23.15e %23.15e %23.15e %23.15e"%(r[0], r[1], r[2], v))

        #print(vna.shape, sgrid.shape)
        np.savetxt('vna_lih_0004.txt', np.row_stack((sgrid, vna)).T)
        ref = np.loadtxt(dname + '/vna_lih_0004.txt-ref')
        for r, d in zip(ref[:, 1], vna):
            self.assertAlmostEqual(r, d)
Ejemplo n.º 33
0
        for i, dref in enumerate(dipcoo):
            dref = dref.toarray()
            dprd = np.einsum('p,pab->ab', mom1[:, i], vpab)
            xyz2err.append([
                abs(dprd - dref).sum() / dref.size,
                np.amax(abs(dref - dprd))
            ])
        return xyz2err


#
#
#
if __name__ == '__main__':
    from pyscf.nao import prod_basis_c, nao
    from pyscf.nao.m_overlap_coo import overlap_coo
    from pyscf import gto
    import numpy as np

    mol = gto.M(atom='O 0 0 0; H 0 0 0.5; H 0 0.5 0',
                basis='ccpvdz')  # coordinates in Angstrom!
    sv = nao(gto=mol)
    print(sv.atom2s)
    s_ref = overlap_coo(sv).todense()
    pb = prod_basis_c()
    pb.init_prod_basis_pp_batch(sv)
    mom0, mom1 = pb.comp_moments()
    pab2v = pb.get_ac_vertex_array()
    s_chk = einsum('pab,p->ab', pab2v, mom0)
    print(abs(s_chk - s_ref).sum() / s_chk.size, abs(s_chk - s_ref).max())
Ejemplo n.º 34
0
    def test_openmx(self):
        """ Computing of the atomic orbitals """

        sv = nao(openmx='water', cd=os.path.dirname(os.path.abspath(__file__)))
        self.assertEqual(sv.natoms, 3)
        self.assertEqual(sv.norbs, 23)
Ejemplo n.º 35
0
 def test_water_vkb(self):
     """ This  """
     from numpy import einsum, array
     import os
     dname = os.path.dirname(os.path.abspath(__file__))
     sv = nao(label='water', cd=dname)
Ejemplo n.º 36
0
Archivo: nao.py Proyecto: zzy2014/pyscf
    def get_symbols(self):
        atm_list = [self.sp2symbol[sp] for sp in self.atom2sp]
        return atm_list


#
# Example of reading pySCF orbitals.
#
if __name__ == "__main__":
    from pyscf import gto
    from pyscf.nao import nao
    import matplotlib.pyplot as plt
    """ Interpreting small Gaussian calculation """
    mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0; Be 1 0 0',
                basis='ccpvtz')  # coordinates in Angstrom!
    sv = nao(gto=mol, rcut_tol=1e-8, nr=512, rmin=1e-5)

    print('sv.ao_log.sp2norbs:', sv.ao_log.sp2norbs)
    print('sv.ao_log.sp2nmult:', sv.ao_log.sp2nmult)
    print('sv.ao_log.sp2rcut', sv.ao_log.sp2rcut)
    print('sv.ao_log.sp_mu2rcut', sv.ao_log.sp_mu2rcut)
    print('sv.ao_log.nr', sv.ao_log.nr)
    print('sv.ao_log.rr[0:4], sv.ao_log.rr[-1:-5:-1]', sv.ao_log.rr[0:4],
          sv.ao_log.rr[-1:-5:-1])
    print('sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape',
          sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape)

    sp = 0
    for mu, [ff,
             j] in enumerate(zip(sv.ao_log.psi_log[sp],
                                 sv.ao_log.sp_mu2j[sp])):
Ejemplo n.º 37
0
 def test_openmx(self):
   """ Computing of the atomic orbitals """
  
   sv = nao(openmx='water', cd=os.path.dirname(os.path.abspath(__file__)))
   self.assertEqual(sv.natoms, 3)
   self.assertEqual(sv.norbs, 23)
Ejemplo n.º 38
0
    """ Our standard minimal check """
    dipcoo = self.sv.dipole_coo(**kw)
    mom0,mom1 = self.comp_moments()
    vpab = self.get_ac_vertex_array()
    xyz2err = []
    for i,dref in enumerate(dipcoo):
      dref = dref.toarray()
      dprd = np.einsum('p,pab->ab', mom1[:,i],vpab)
      xyz2err.append([abs(dprd-dref).sum()/dref.size, np.amax(abs(dref-dprd))])
    return xyz2err

#
#
#
if __name__=='__main__':
  from pyscf.nao import prod_basis_c, nao
  from pyscf.nao.m_overlap_coo import overlap_coo
  from pyscf import gto
  import numpy as np
  
  mol = gto.M(atom='O 0 0 0; H 0 0 0.5; H 0 0.5 0', basis='ccpvdz') # coordinates in Angstrom!
  sv = nao(gto=mol)
  print(sv.atom2s)
  s_ref = overlap_coo(sv).todense()
  pb = prod_basis_c()
  pb.init_prod_basis_pp_batch(sv)
  mom0,mom1=pb.comp_moments()
  pab2v = pb.get_ac_vertex_array()
  s_chk = einsum('pab,p->ab', pab2v,mom0)
  print(abs(s_chk-s_ref).sum()/s_chk.size, abs(s_chk-s_ref).max())
Ejemplo n.º 39
0
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import print_function, division
import os, unittest
from pyscf.nao import nao

sv = nao(label='water', cd=os.path.dirname(os.path.abspath(__file__)))


class KnowValues(unittest.TestCase):
    def test_lil_vs_coo(self):
        """ Init system variables on libnao's site """
        lil = sv.overlap_lil().tocsr()
        coo = sv.overlap_coo().tocsr()
        derr = abs(coo - lil).sum() / coo.nnz
        self.assertLess(derr, 1e-12)


if __name__ == "__main__":
    unittest.main()
 def test_energy_nuc_gto_vs_nao(self):
   """ Test computation of matrix elements of nuclear-electron attraction """
   sv = nao(gto=mol)
   e_nao = sv.energy_nuc()
   e_gto = mol.energy_nuc()
   self.assertAlmostEqual(e_nao, e_gto)
Ejemplo n.º 41
0
 def test_ao_log_gto(self):
   """ This is indeed for initializing with auxiliary basis set"""
   from pyscf.nao import ao_log_c, nao
   sv = nao(gto=mol)
   ao = ao_log_c().init_ao_log_gto_lm(gto=mol, nao=sv, lm=sv.ao_log)
 def test_energy_nuc_gto_vs_nao(self):
     """ Test computation of matrix elements of nuclear-electron attraction """
     sv = nao(gto=mol)
     e_nao = sv.energy_nuc()
     e_gto = mol.energy_nuc()
     self.assertAlmostEqual(e_nao, e_gto)
Ejemplo n.º 43
0
  def nelectron(self):
    if self._nelectron is None:
      return tot_electrons(self)
    else:
      return self._nelectron

#
# Example of reading pySCF orbitals.
#
if __name__=="__main__":
  from pyscf import gto
  from pyscf.nao import nao
  import matplotlib.pyplot as plt
  """ Interpreting small Gaussian calculation """
  mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0; Be 1 0 0', basis='ccpvtz') # coordinates in Angstrom!
  sv = nao(gto=mol, rcut_tol=1e-8, nr=512, rmin=1e-5)
  
  print(sv.ao_log.sp2norbs)
  print(sv.ao_log.sp2nmult)
  print(sv.ao_log.sp2rcut)
  print(sv.ao_log.sp_mu2rcut)
  print(sv.ao_log.nr)
  print(sv.ao_log.rr[0:4], sv.ao_log.rr[-1:-5:-1])
  print(sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape)

  sp = 0
  for mu,[ff,j] in enumerate(zip(sv.ao_log.psi_log[sp], sv.ao_log.sp_mu2j[sp])):
    nc = abs(ff).max()
    if j==0 : plt.plot(sv.ao_log.rr, ff/nc, '--', label=str(mu)+' j='+str(j))
    if j>0 : plt.plot(sv.ao_log.rr, ff/nc, label=str(mu)+' j='+str(j))
Ejemplo n.º 44
0
 def test_ao_log_gto(self):
     """ This is indeed for initializing with auxiliary basis set"""
     from pyscf.nao import ao_log_c, nao
     sv = nao(gto=mol)
     ao = ao_log_c().init_ao_log_gto_lm(gto=mol, nao=sv, lm=sv.ao_log)