Exemple #1
0
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)
Exemple #2
0
 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)
Exemple #3
0
    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)
Exemple #4
0
    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)