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