Example #1
0
 def test_convert_cplx(self):
     nmo = 17
     nelec = (3,3)
     h1e, chol, enuc, eri = generate_hamiltonian(nmo, nelec, cplx=True, sym=4)
     write_qmcpack_sparse(h1e, chol.reshape((-1,nmo*nmo)).T.copy(),
                          nelec, nmo, e0=enuc, real_chol=False)
     hamil = read_qmcpack_hamiltonian('hamiltonian.h5')
     write_fcidump('FCIDUMP', hamil['hcore'], hamil['chol'], hamil['enuc'],
                   hamil['nmo'], hamil['nelec'], sym=4, cplx=True)
     h1e_r, eri_r, enuc_r, nelec_r = read_fcidump('FCIDUMP', symmetry=4,
                                                  verbose=False)
     dm = numpy.zeros((nmo,nmo))
     dm[(0,1,2),(0,1,2)] = 1.0
     eri_r = eri_r.transpose((0,1,3,2)).reshape((nmo*nmo,nmo*nmo))
     chol_r = modified_cholesky_direct(eri_r, tol=1e-8, verbose=False)
     chol_r = chol_r.reshape((-1,nmo,nmo))
     self.assertAlmostEqual(numpy.einsum('ij,ij->', dm, h1e-h1e_r).real, 0.0)
     self.assertAlmostEqual(numpy.einsum('ij,nij->', dm, chol-chol_r).real, 0.0)
     # Test integral only appears once in file.
     h1e_r, eri_r, enuc_r, nelec_r = read_fcidump('FCIDUMP', symmetry=1,
                                                  verbose=False)
     i,k,j,l = (1,0,0,0)
     ikjl = (i,k,j,l)
     jlik = (j,l,i,k)
     kilj = (k,i,l,j)
     ljki = (l,j,k,i)
     d1 = eri_r[ikjl] - eri_r[kilj].conj()
     d2 = eri_r[ikjl] - eri_r[jlik]
     d3 = eri_r[ikjl] - eri_r[ljki].conj()
     self.assertAlmostEqual(d1,0.0)
     self.assertAlmostEqual(d2,0.0)
     self.assertAlmostEqual(d3,-0.00254428836-0.00238852605j)
Example #2
0
 def test_convert_real(self):
     nmo = 17
     nelec = (3,3)
     h1e, chol, enuc, eri = generate_hamiltonian(nmo, nelec, cplx=False, sym=8)
     write_qmcpack_sparse(h1e, chol.reshape((-1,nmo*nmo)).T.copy(),
                          nelec, nmo, e0=enuc, real_chol=True)
     hamil = read_qmcpack_hamiltonian('hamiltonian.h5')
     write_fcidump('FCIDUMP', hamil['hcore'], hamil['chol'], hamil['enuc'],
                   hamil['nmo'], hamil['nelec'], sym=8, cplx=False)
     h1e_r, eri_r, enuc_r, nelec_r = read_fcidump('FCIDUMP', verbose=False)
     dm = numpy.zeros((nmo,nmo))
     dm[(0,1,2),(0,1,2)] = 1.0
     eri_r = eri_r.transpose((0,1,3,2)).reshape((nmo*nmo,nmo*nmo))
     chol_r = modified_cholesky_direct(eri_r, tol=1e-8, verbose=False)
     chol_r = chol_r.reshape((-1,nmo,nmo))
     self.assertAlmostEqual(numpy.einsum('ij,ij->', dm, h1e-h1e_r).real, 0.0)
     self.assertAlmostEqual(numpy.einsum('ij,nij->', dm, chol-chol_r).real, 0.0)
     # Test integral only appears once in file.
     h1e_r, eri_r, enuc_r, nelec_r = read_fcidump('FCIDUMP', symmetry=1,
                                                  verbose=False)
     i,j,k,l = (0,1,2,3)
     combs = [
         (i,j,k,l),
         (k,l,i,j),
         (j,i,l,k),
         (l,k,j,i),
         (j,i,k,l),
         (l,k,i,j),
         (i,j,l,k),
         (k,l,i,j),
         ]
     for c in combs:
         if abs(eri_r[c]) > 0:
             self.assertEqual(c,(l,k,j,i))
Example #3
0
def calculate_hf_energy(hamil_file, wfn_file):
    hamil = read_qmcpack_hamiltonian(hamil_file)
    wfn, psi0, nelec = read_qmcpack_wavefunction(wfn_file)
    if isinstance(hamil['chol'], numpy.ndarray):
        chol = hamil['chol']
    else:
        chol = hamil['chol'].toarray()
    return local_energy_mol(hamil['hcore'], chol, hamil['enuc'], wfn[1][0],
                            nelec)
Example #4
0
def main(args):
    """Sanity check for afqmc Hamiltonian.

    Parameters
    ----------
    args : list of strings
        command-line arguments.
    """
    options = parse_args(args)
    hamil = read_qmcpack_hamiltonian(options.input)
    if hamil is None:
        sys.exit(1)
    nerror = 0
    for k, v in hamil.items():
        if v is None:
            nerror += 1
    if nerror > 0:
        print("Found {:} non fatal error reading Hamiltonian file.".format(
            nerror))
        sys.exit(1)
    else:
        sys.exit(0)
Example #5
0
def main(args):
    """Convert FCIDUMP to QMCPACK readable Hamiltonian format.

    Parameters
    ----------
    args : list of strings
        command-line arguments.
    """
    options = parse_args(args)
    hamil = read_qmcpack_hamiltonian(options.input_file)
    if hamil is None:
        sys.exit()

    if hamil.get('qk_k2') is None:
        write_fcidump(options.output_file,
                      hamil['hcore'],
                      hamil['chol'],
                      hamil['enuc'],
                      hamil['nmo'],
                      hamil['nelec'],
                      tol=options.tol,
                      sym=options.symm,
                      cplx=options.cplx,
                      paren=options.cplx_paren)
    else:
        write_fcidump_kpoint(options.output_file,
                             hamil['hcore'],
                             hamil['chol'],
                             hamil['enuc'],
                             hamil['nmo'],
                             hamil['nelec'],
                             hamil['nmo_pk'],
                             hamil['qk_k2'],
                             tol=options.tol,
                             sym=options.symm,
                             cplx=options.cplx,
                             paren=options.cplx_paren)