def _common_init_(self, mycc, mo_coeff=None): if mo_coeff is None: mo_coeff = mycc.mo_coeff mo_idx = ccsd.get_frozen_mask(mycc) if getattr(mo_coeff, 'orbspin', None) is not None: self.orbspin = mo_coeff.orbspin[mo_idx] mo_coeff = lib.tag_array(mo_coeff[:,mo_idx], orbspin=self.orbspin) self.mo_coeff = mo_coeff else: orbspin = scf.ghf.guess_orbspin(mo_coeff) self.mo_coeff = mo_coeff = mo_coeff[:,mo_idx] if not np.any(orbspin == -1): self.orbspin = orbspin[mo_idx] self.mo_coeff = lib.tag_array(mo_coeff, orbspin=self.orbspin) # Note: Recomputed fock matrix since SCF may not be fully converged. dm = mycc._scf.make_rdm1(mycc.mo_coeff, mycc.mo_occ) fockao = mycc._scf.get_fock(dm=dm) self.fock = reduce(np.dot, (mo_coeff.conj().T, fockao, mo_coeff)) self.nocc = mycc.nocc mo_e = self.mo_energy = self.fock.diagonal().real gap = abs(mo_e[:self.nocc,None] - mo_e[None,self.nocc:]).min() if gap < 1e-5: logger.warn(mycc, 'H**O-LUMO gap %s too small for GCCSD', gap) return self
def _common_init_(self, mycc, mo_coeff=None): if mo_coeff is None: mo_coeff = mycc.mo_coeff mo_idx = ccsd.get_frozen_mask(mycc) if getattr(mo_coeff, 'orbspin', None) is not None: self.orbspin = mo_coeff.orbspin[mo_idx] mo_coeff = lib.tag_array(mo_coeff[:,mo_idx], orbspin=self.orbspin) else: orbspin = scf.ghf.guess_orbspin(mo_coeff) mo_coeff = mo_coeff[:,mo_idx] if not np.any(orbspin == -1): self.orbspin = orbspin[mo_idx] mo_coeff = lib.tag_array(mo_coeff, orbspin=self.orbspin) self.mo_coeff = mo_coeff # Note: Recomputed fock matrix since SCF may not be fully converged. dm = mycc._scf.make_rdm1(mycc.mo_coeff, mycc.mo_occ) vhf = mycc._scf.get_veff(mycc.mol, dm) fockao = mycc._scf.get_fock(vhf=vhf, dm=dm) self.fock = reduce(np.dot, (mo_coeff.conj().T, fockao, mo_coeff)) self.e_hf = mycc._scf.energy_tot(dm=dm, vhf=vhf) self.nocc = mycc.nocc self.mol = mycc.mol mo_e = self.mo_energy = self.fock.diagonal().real gap = abs(mo_e[:self.nocc,None] - mo_e[None,self.nocc:]).min() if gap < 1e-5: logger.warn(mycc, 'H**O-LUMO gap %s too small for GCCSD', gap) return self
def _common_init_(self, mycc, mo_coeff=None): if mo_coeff is None: mo_coeff = mycc.mo_coeff mo_idx = ccsd.get_frozen_mask(mycc) self.mo_coeff = mo_coeff[:, mo_idx] # Note: Recomputed fock matrix since SCF may not be fully converged. dm = mycc._scf.make_rdm1(mycc.mo_coeff, mycc.mo_occ) fockao = mycc._scf.get_fock(dm=dm) self.fock = reduce(np.dot, (self.mo_coeff.conj().T, fockao, self.mo_coeff)) self.nocc = mycc.nocc mo_e = self.mo_energy = self.fock.diagonal().real gap = abs(mo_e[:self.nocc, None] - mo_e[None, self.nocc:]).min() if gap < 1e-5: logger.warn(mycc, 'H**O-LUMO gap %s too small', gap) return self