Exemplo n.º 1
0
 def update_rotate_matrix(self, dx, mo_occ, u0=1):
     nmo = len(mo_occ)
     occidx = mo_occ==2
     viridx = numpy.logical_not(occidx)
     dr = numpy.zeros((nmo,nmo))
     dr[viridx[:,None]&occidx] = dx
     dr = dr - dr.T
     if hasattr(self, '_orbsym'):
         dr = mc1step_symm._symmetrize(dr, self._orbsym, None)
     return numpy.dot(u0, expmat(dr))
Exemplo n.º 2
0
 def update_rotate_matrix(self, dx, mo_occ, u0=1):
     nmo = len(mo_occ[0])
     occidxa = mo_occ[0]==1
     viridxa = numpy.logical_not(occidxa)
     occidxb = mo_occ[1]==1
     viridxb = numpy.logical_not(occidxb)
     dr = numpy.zeros((2,nmo,nmo))
     idx = numpy.array((viridxa[:,None]&occidxa,
                        viridxb[:,None]&occidxb))
     dr[idx] = dx
     dr[0] = dr[0] - dr[0].T
     dr[1] = dr[1] - dr[1].T
     if hasattr(self, '_orbsym'):
         dr = (mc1step_symm._symmetrize(dr[0], self._orbsym[0], None),
               mc1step_symm._symmetrize(dr[1], self._orbsym[1], None))
     if isinstance(u0, int) and u0 == 1:
         return numpy.array((expmat(dr[0]), expmat(dr[1])))
     else:
         return numpy.array((numpy.dot(u0[0], expmat(dr[0])),
                             numpy.dot(u0[1], expmat(dr[1]))))
Exemplo n.º 3
0
            def update_rotate_matrix(self, dx, mo_occ, u0=1):
                occidxa = mo_occ[0] > 0
                occidxb = mo_occ[1] > 0
                viridxa = ~occidxa
                viridxb = ~occidxb
                nmo = len(occidxa)
                nocca = occidxa.sum()
                nvira = nmo - nocca

                dra = numpy.zeros((nmo, nmo))
                drb = numpy.zeros((nmo, nmo))
                dra[viridxa[:, None] & occidxa] = dx[:nocca * nvira]
                drb[viridxb[:, None] & occidxb] = dx[nocca * nvira:]
                dra = dra - dra.T
                drb = drb - drb.T

                if self._scf.mol.symmetry:
                    dra = mc1step_symm._symmetrize(dra, self._orbsym[0], None)
                    drb = mc1step_symm._symmetrize(drb, self._orbsym[1], None)
                if isinstance(u0, int) and u0 == 1:
                    return numpy.asarray((expmat(dra), expmat(drb)))
                else:
                    return numpy.asarray((numpy.dot(u0[0], expmat(dra)),
                                          numpy.dot(u0[1], expmat(drb))))
Exemplo n.º 4
0
            def update_rotate_matrix(self, dx, mo_occ, u0=1):
                occidxa = mo_occ[0] > 0
                occidxb = mo_occ[1] > 0
                viridxa = ~occidxa
                viridxb = ~occidxb
                nmo = len(occidxa)
                nocca = occidxa.sum()
                nvira = nmo - nocca

                dra = numpy.zeros((nmo,nmo))
                drb = numpy.zeros((nmo,nmo))
                dra[viridxa[:,None]&occidxa] = dx[:nocca*nvira]
                drb[viridxb[:,None]&occidxb] = dx[nocca*nvira:]
                dra = dra - dra.T
                drb = drb - drb.T

                if self._scf.mol.symmetry:
                    dra = mc1step_symm._symmetrize(dra, self._orbsym[0], None)
                    drb = mc1step_symm._symmetrize(drb, self._orbsym[1], None)
                if isinstance(u0, int) and u0 == 1:
                    return numpy.asarray((expmat(dra), expmat(drb)))
                else:
                    return numpy.asarray((numpy.dot(u0[0], expmat(dra)),
                                          numpy.dot(u0[1], expmat(drb))))
Exemplo n.º 5
0
 def update_rotate_matrix(self, dx, mo_occ, u0=1):
     dr = pyscf.scf.hf.unpack_uniq_var(dx, mo_occ)
     if hasattr(self, '_orbsym'):
         dr = mc1step_symm._symmetrize(dr, self._orbsym, None)
     return numpy.dot(u0, expmat(dr))
Exemplo n.º 6
0
 def update_rotate_matrix(self, dx, mo_occ, u0=1):
     dr = scf.hf.unpack_uniq_var(dx, mo_occ)
     if self._scf.mol.symmetry:
         dr = mc1step_symm._symmetrize(dr, self._orbsym, None)
     return numpy.dot(u0, expmat(dr))
Exemplo n.º 7
0
 def update_rotate_matrix(self, dx, mo_occ, u0=1):
     dr = scf.hf.unpack_uniq_var(dx, mo_occ)
     if self._scf.mol.symmetry:
         dr = mc1step_symm._symmetrize(dr, self._orbsym, None)
     return numpy.dot(u0, expmat(dr))