Example #1
0
    def eig(self, h, s):
        mol = self.mol
        if not mol.symmetry:
            return self._eigh(h, s)

        nirrep = mol.symm_orb.__len__()
        s = symm.symmetrize_matrix(s, mol.symm_orb)
        ha = symm.symmetrize_matrix(h[0], mol.symm_orb)
        cs = []
        es = []
        orbsym = []
        for ir in range(nirrep):
            e, c = self._eigh(ha[ir], s[ir])
            cs.append(c)
            es.append(e)
            orbsym.append([mol.irrep_id[ir]] * e.size)
        ea = numpy.hstack(es)
        ca = hf_symm.so2ao_mo_coeff(mol.symm_orb, cs)
        ca = hf_symm.attach_orbsym(ca, numpy.hstack(orbsym))

        hb = symm.symmetrize_matrix(h[1], mol.symm_orb)
        cs = []
        es = []
        orbsym = []
        for ir in range(nirrep):
            e, c = self._eigh(hb[ir], s[ir])
            cs.append(c)
            es.append(e)
            orbsym.append([mol.irrep_id[ir]] * e.size)
        eb = numpy.hstack(es)
        cb = hf_symm.so2ao_mo_coeff(mol.symm_orb, cs)
        cb = hf_symm.attach_orbsym(cb, numpy.hstack(orbsym))
        return numpy.array((ea, eb)), (ca, cb)
Example #2
0
def eig(self, h, s):
    '''Solve generalized eigenvalue problem, for each irrep.  The
    eigenvalues and eigenvectors are not sorted to ascending order.
    Instead, they are grouped based on irreps.
    '''
    mol = self.mol
    if not mol.symmetry:
        return self._eigh(h, s)

    nirrep = mol.symm_orb.__len__()
    h = symm.symmetrize_matrix(h, mol.symm_orb)
    s = symm.symmetrize_matrix(s, mol.symm_orb)
    partner_ir = [self.partner_irrep(ir, mol.groupname) for ir in mol.irrep_id]
    for ir in range(nirrep):
        if ir > 0 and mol.irrep_id[ir-1] == partner_ir[ir]:
            h_av = (h[ir] + h[ir-1])/2
            h[ir] = h[ir-1] = h_av
    cs = []
    es = []
    orbsym = []
    for ir in range(nirrep):
        e, c = self._eigh(h[ir], s[ir])
        cs.append(c)
        es.append(e)
        orbsym.append([mol.irrep_id[ir]] * e.size)
    e = numpy.hstack(es)
    c = hf_symm.so2ao_mo_coeff(mol.symm_orb, cs)
    c = lib.tag_array(c, orbsym=numpy.hstack(orbsym))
    return e, c
Example #3
0
    def eig(self, h, s):
        if not self.mol.symmetry:
            return uhf.UHF.eig(self, h, s)

        nirrep = self.mol.symm_orb.__len__()
        s = symm.symmetrize_matrix(s, self.mol.symm_orb)
        ha = symm.symmetrize_matrix(h[0], self.mol.symm_orb)
        cs = []
        es = []
        for ir in range(nirrep):
            e, c = hf.SCF.eig(self, ha[ir], s[ir])
            cs.append(c)
            es.append(e)
        ea = numpy.hstack(es)
        ca = hf_symm.so2ao_mo_coeff(self.mol.symm_orb, cs)

        hb = symm.symmetrize_matrix(h[1], self.mol.symm_orb)
        cs = []
        es = []
        for ir in range(nirrep):
            e, c = scipy.linalg.eigh(hb[ir], s[ir])
            cs.append(c)
            es.append(e)
        eb = numpy.hstack(es)
        cb = hf_symm.so2ao_mo_coeff(self.mol.symm_orb, cs)
        return numpy.array((ea,eb)), (ca,cb)
Example #4
0
    def eig(self, h, s):
        mol = self.mol
        if not mol.symmetry:
            return self._eigh(h, s)

        nirrep = mol.symm_orb.__len__()
        s = symm.symmetrize_matrix(s, mol.symm_orb)
        ha = symm.symmetrize_matrix(h[0], mol.symm_orb)
        cs = []
        es = []
        orbsym = []
        for ir in range(nirrep):
            e, c = self._eigh(ha[ir], s[ir])
            cs.append(c)
            es.append(e)
            orbsym.append([mol.irrep_id[ir]] * e.size)
        ea = numpy.hstack(es)
        ca = hf_symm.so2ao_mo_coeff(mol.symm_orb, cs)
        ca = lib.tag_array(ca, orbsym=numpy.hstack(orbsym))

        hb = symm.symmetrize_matrix(h[1], mol.symm_orb)
        cs = []
        es = []
        orbsym = []
        for ir in range(nirrep):
            e, c = self._eigh(hb[ir], s[ir])
            cs.append(c)
            es.append(e)
            orbsym.append([mol.irrep_id[ir]] * e.size)
        eb = numpy.hstack(es)
        cb = hf_symm.so2ao_mo_coeff(mol.symm_orb, cs)
        cb = lib.tag_array(cb, orbsym=numpy.hstack(orbsym))
        return (ea,eb), (ca,cb)
Example #5
0
    def eig(self, h, s):
        if not self.mol.symmetry:
            return uhf.UHF.eig(self, h, s)

        nirrep = self.mol.symm_orb.__len__()
        s = symm.symmetrize_matrix(s, self.mol.symm_orb)
        ha = symm.symmetrize_matrix(h[0], self.mol.symm_orb)
        cs = []
        es = []
        for ir in range(nirrep):
            e, c = hf.SCF.eig(self, ha[ir], s[ir])
            cs.append(c)
            es.append(e)
        ea = numpy.hstack(es)
        ca = hf_symm.so2ao_mo_coeff(self.mol.symm_orb, cs)

        hb = symm.symmetrize_matrix(h[1], self.mol.symm_orb)
        cs = []
        es = []
        for ir in range(nirrep):
            e, c = scipy.linalg.eigh(hb[ir], s[ir])
            cs.append(c)
            es.append(e)
        eb = numpy.hstack(es)
        cb = hf_symm.so2ao_mo_coeff(self.mol.symm_orb, cs)
        return numpy.array((ea,eb)), (ca,cb)
Example #6
0
 def eig(self, h, s):
     nirrep = self.mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, self.mol.symm_orb)
     s = symm.symmetrize_matrix(s, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h[ir], s[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es)
     c = so2ao_mo_coeff(self.mol.symm_orb, cs)
     return e, c
Example #7
0
 def eig(self, h, s):
     nirrep = self.mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, self.mol.symm_orb)
     s = symm.symmetrize_matrix(s, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h[ir], s[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es)
     c = so2ao_mo_coeff(self.mol.symm_orb, cs)
     return e, c
Example #8
0
 def eig_symm(h, s):
     nirrep = mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, mol.symm_orb)
     s = symm.symmetrize_matrix(s, mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         d, t = numpy.linalg.eigh(s[ir])
         x = t[:, d > 1e-8] / numpy.sqrt(d[d > 1e-8])
         xhx = reduce(numpy.dot, (x.T, h[ir], x))
         e, c = numpy.linalg.eigh(xhx)
         cs.append(reduce(numpy.dot, (mol.symm_orb[ir], x, c)))
         es.append(e)
     e = numpy.hstack(es)
     c = numpy.hstack(cs)
     return e, c
Example #9
0
 def eig_symm(h, s):
     nirrep = mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, mol.symm_orb)
     s = symm.symmetrize_matrix(s, mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         d, t = numpy.linalg.eigh(s[ir])
         x = t[:,d>1e-8] / numpy.sqrt(d[d>1e-8])
         xhx = reduce(numpy.dot, (x.T, h[ir], x))
         e, c = numpy.linalg.eigh(xhx)
         cs.append(reduce(numpy.dot, (mol.symm_orb[ir], x, c)))
         es.append(e)
     e = numpy.hstack(es)
     c = numpy.hstack(cs)
     return e, c
Example #10
0
 def eig(self, h, s):
     '''Solve generalized eigenvalue problem, for each irrep.  The
     eigenvalues and eigenvectors are not sorted to ascending order.
     Instead, they are grouped based on irreps.
     '''
     nirrep = self.mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, self.mol.symm_orb)
     s = symm.symmetrize_matrix(s, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h[ir], s[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es)
     c = so2ao_mo_coeff(self.mol.symm_orb, cs)
     return e, c
Example #11
0
 def eig(self, h, s):
     '''Solve generalized eigenvalue problem, for each irrep.  The
     eigenvalues and eigenvectors are not sorted to ascending order.
     Instead, they are grouped based on irreps.
     '''
     nirrep = self.mol.symm_orb.__len__()
     h = symm.symmetrize_matrix(h, self.mol.symm_orb)
     s = symm.symmetrize_matrix(s, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h[ir], s[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es)
     c = so2ao_mo_coeff(self.mol.symm_orb, cs)
     return e, c
Example #12
0
def eig(h, s):
    from pyscf import symm
    nirrep = len(mol.symm_orb)
    h = symm.symmetrize_matrix(h, mol.symm_orb)
    s = symm.symmetrize_matrix(s, mol.symm_orb)
    cs = []
    es = []
#
# Linear dependency are removed by looping over different symmetry irreps.
#
    for ir in range(nirrep):
        d, t = numpy.linalg.eigh(s[ir])
        x = t[:,d>1e-8] / numpy.sqrt(d[d>1e-8])
        xhx = reduce(numpy.dot, (x.T, h[ir], x))
        e, c = numpy.linalg.eigh(xhx)
        cs.append(reduce(numpy.dot, (mol.symm_orb[ir], x, c)))
        es.append(e)
    e = numpy.hstack(es)
    c = numpy.hstack(cs)
    return e, c
Example #13
0
def eig(h, s):
    from pyscf import symm
    nirrep = len(mol.symm_orb)
    h = symm.symmetrize_matrix(h, mol.symm_orb)
    s = symm.symmetrize_matrix(s, mol.symm_orb)
    cs = []
    es = []
    #
    # Linear dependency are removed by looping over different symmetry irreps.
    #
    for ir in range(nirrep):
        d, t = numpy.linalg.eigh(s[ir])
        x = t[:, d > 1e-8] / numpy.sqrt(d[d > 1e-8])
        xhx = reduce(numpy.dot, (x.T, h[ir], x))
        e, c = numpy.linalg.eigh(xhx)
        cs.append(reduce(numpy.dot, (mol.symm_orb[ir], x, c)))
        es.append(e)
    e = numpy.hstack(es)
    c = numpy.hstack(cs)
    return e, c
Example #14
0
 def scf(self, *args):
     logger.info(self, '\n')
     logger.info(self, '******** 1 electron system ********')
     self.converged = True
     h1e = self.get_hcore(self.mol)
     s1e = self.get_ovlp(self.mol)
     nirrep = self.mol.symm_orb.__len__()
     h1e = symm.symmetrize_matrix(h1e, self.mol.symm_orb)
     s1e = symm.symmetrize_matrix(s1e, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h1e[ir], s1e[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es).round(9)
     idx = numpy.argsort(e)
     self.mo_energy = e[idx]
     self.mo_coeff = so2ao_mo_coeff(self.mol.symm_orb, cs)[:,idx]
     self.mo_occ = numpy.zeros_like(self.mo_energy)
     self.mo_occ[0] = 1
     self.e_tot = self.mo_energy[0] + self.mol.energy_nuc()
     return self.e_tot
Example #15
0
 def scf(self, *args):
     logger.info(self, '\n')
     logger.info(self, '******** 1 electron system ********')
     self.converged = True
     h1e = self.get_hcore(self.mol)
     s1e = self.get_ovlp(self.mol)
     nirrep = self.mol.symm_orb.__len__()
     h1e = symm.symmetrize_matrix(h1e, self.mol.symm_orb)
     s1e = symm.symmetrize_matrix(s1e, self.mol.symm_orb)
     cs = []
     es = []
     for ir in range(nirrep):
         e, c = hf.SCF.eig(self, h1e[ir], s1e[ir])
         cs.append(c)
         es.append(e)
     e = numpy.hstack(es).round(9)
     idx = numpy.argsort(e)
     self.mo_energy = e[idx]
     self.mo_coeff = so2ao_mo_coeff(self.mol.symm_orb, cs)[:, idx]
     self.mo_occ = numpy.zeros_like(self.mo_energy)
     self.mo_occ[0] = 1
     self.e_tot = self.mo_energy[0] + self.mol.energy_nuc()
     return self.e_tot
Example #16
0
def eig(mf, h, s):
    '''Solve generalized eigenvalue problem, for each irrep.  The
    eigenvalues and eigenvectors are not sorted to ascending order.
    Instead, they are grouped based on irreps.
    '''
    mol = mf.mol
    if not mol.symmetry:
        return mf._eigh(h, s)

    nirrep = mol.symm_orb.__len__()
    h = symm.symmetrize_matrix(h, mol.symm_orb)
    s = symm.symmetrize_matrix(s, mol.symm_orb)
    cs = []
    es = []
    orbsym = []
    for ir in range(nirrep):
        e, c = mf._eigh(h[ir], s[ir])
        cs.append(c)
        es.append(e)
        orbsym.append([mol.irrep_id[ir]] * e.size)
    e = numpy.hstack(es)
    c = so2ao_mo_coeff(mol.symm_orb, cs)
    c = lib.tag_array(c, orbsym=numpy.hstack(orbsym))
    return e, c