def get_grad(mo_coeff_kpts, mo_occ_kpts, fock): ''' returns 1D array of gradients, like non K-pt version note that occ and virt indices of different k pts now occur in sequential patches of the 1D array ''' nkpts = len(mo_occ_kpts) grad_kpts = [mol_hf.get_grad(mo_coeff_kpts[k], mo_occ_kpts[k], fock[k]) for k in range(nkpts)] return np.hstack(grad_kpts)
def get_grad(self, mo_coeff, mo_occ, fock=None): ncore = self.ncore nocc = ncore + self.nfroz nmo = mo_occ.size if fock is None: dm1 = self.make_rdm1(mo_coeff, mo_occ) fock = self.get_hcore(self.mol) + self.get_veff(self.mol, dm1) idx = np.zeros(nmo, dtype=np.bool_) idx[:ncore] = True idx[nocc:] = True mo_occ_reduced = mo_occ[idx] mo_coeff_reduced = mo_coeff[:, idx] return hf.get_grad(mo_coeff_reduced, mo_occ_reduced, fock)
def get_grad(self, mo_coeff_kpts, mo_occ_kpts, fock=None): ''' returns 1D array of gradients, like non K-pt version note that occ and virt indices of different k pts now occur in sequential patches of the 1D array ''' if fock is None: dm1 = self.make_rdm1(mo_coeff_kpts, mo_occ_kpts) fock = self.get_hcore(self.cell, self.kpts) + self.get_veff(self.cell, dm1) nkpts = len(self.kpts) grad_kpts = [hf.get_grad(mo_coeff_kpts[k], mo_occ_kpts[k], fock[k]) for k in range(nkpts)] return np.hstack(grad_kpts)
def get_grad(self, mo_coeff_kpts, mo_occ_kpts, fock=None): ''' returns 1D array of gradients, like non K-pt version note that occ and virt indices of different k pts now occur in sequential patches of the 1D array ''' if fock is None: dm1 = self.make_rdm1(mo_coeff_kpts, mo_occ_kpts) fock = self.get_hcore(self.cell, self.kpts) + self.get_veff( self.cell, dm1) nkpts = len(self.kpts) grad_kpts = [ hf.get_grad(mo_coeff_kpts[k], mo_occ_kpts[k], fock[k]) for k in range(nkpts) ] return np.hstack(grad_kpts)