Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
Arquivo: dhf.py Projeto: pengdl/pyscf
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