def test_project_mo_r2r(self): nao = mol.nao_2c() c = numpy.random.random((nao*2,nao*2)) c = c + numpy.sin(c)*1j c1 = addons.project_mo_r2r(mol, c, mol) self.assertAlmostEqual(abs(c-c1).max(), 0, 12) numpy.random.seed(15) n2c = mol.nao_2c() n4c = n2c * 2 mo1 = numpy.random.random((n4c,n4c)) + numpy.random.random((n4c,n4c))*1j mo2 = addons.project_mo_r2r(mol, [mo1,mo1], mol_dz) self.assertAlmostEqual(abs(mo2[0]).sum(), 2159.3715489514038, 11) self.assertAlmostEqual(abs(mo2[1]).sum(), 2159.3715489514038, 11)
def fproj(mo): #TODO: check if mo is GHF orbital if project: mo = addons.project_mo_r2r(chk_mol, mo, mol) norm = numpy.einsum('pi,pi->i', mo.conj(), s.dot(mo)) mo /= numpy.sqrt(norm) return mo
def test_project_dm_r2r(self): nao = mol.nao_2c() dm = numpy.random.random((nao*2,nao*2)) dm = dm + numpy.sin(dm)*1j x1 = addons.project_dm_r2r(mol, dm, mol) self.assertTrue(numpy.allclose(dm, x1)) numpy.random.seed(15) n2c = mol.nao_2c() n4c = n2c * 2 mo = numpy.random.random((n4c,10)) + numpy.random.random((n4c,10))*1j mo1 = addons.project_mo_r2r(mol, mo, mol_dz) dm = numpy.dot(mo, mo.T.conj()) dmref = numpy.dot(mo1, mo1.T.conj()) dm1 = addons.project_dm_r2r(mol, [dm,dm], mol_dz) self.assertAlmostEqual(abs(dmref-dm1[0]).max(), 0, 11) self.assertAlmostEqual(abs(dmref-dm1[1]).max(), 0, 11) self.assertAlmostEqual(lib.finger(dm1[0]), -5.3701392643370607+15.484616570244016j, 11)
def init_guess_by_chkfile(mol, chkfile_name, project=True): from pyscf.scf import addons chk_mol, scf_rec = chkfile.load_scf(chkfile_name) mo = scf_rec['mo_coeff'] mo_occ = scf_rec['mo_occ'] if numpy.iscomplexobj(mo[0]): # DHF #TODO: check if mo is GHF orbital if project: dm = make_rdm1(addons.project_mo_r2r(chk_mol, mo, mol), mo_occ) else: dm = make_rdm1(mo, mo_occ) else: if mo[0].ndim == 1: # nr-RHF dm = reduce(numpy.dot, (mo * mo_occ, mo.T)) else: # nr-UHF dm = reduce(numpy.dot, (mo[0]*mo_occ[0], mo[0].T)) \ + reduce(numpy.dot, (mo[1]*mo_occ[1], mo[1].T)) dm = _proj_dmll(chk_mol, dm, mol) return dm
def init_guess_by_chkfile(mol, chkfile_name, project=True): from pyscf.scf import addons chk_mol, scf_rec = pyscf.scf.chkfile.load_scf(chkfile_name) if numpy.iscomplexobj(scf_rec['mo_coeff']): mo = scf_rec['mo_coeff'] mo_occ = scf_rec['mo_occ'] if project: dm = make_rdm1(addons.project_mo_r2r(chk_mol, mo, mol), mo_occ) else: dm = make_rdm1(mo, mo_occ) else: if scf_rec['mo_coeff'].ndim == 2: # nr-RHF mo = scf_rec['mo_coeff'] mo_occ = scf_rec['mo_occ'] dm = reduce(numpy.dot, (mo*mo_occ, mo.T)) else: # nr-UHF mo = scf_rec['mo_coeff'] mo_occ = scf_rec['mo_occ'] dm = reduce(numpy.dot, (mo[0]*mo_occ[0], mo[0].T)) \ + reduce(numpy.dot, (mo[1]*mo_occ[1], mo[1].T)) dm = _proj_dmll(chk_mol, dm, mol) return dm