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)
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))
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)
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)
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)