def get_exx_energy(b,nbf,nel,nocc,ETemp,Enuke,S,h,Ints,H0,Gij,**opts): """Computes the energy for the OEP/HF functional Options: return_flag 0 Just return the energy 1 Return energy, orbe, orbs 2 Return energy, orbe, orbs, F """ return_flag = opts.get('return_flag',0) Hoep = get_Hoep(b,H0,Gij) orbe,orbs = geigh(Hoep,S) if ETemp: efermi = get_efermi(nel,orbe,ETemp) occs = get_fermi_occs(efermi,orbe,ETemp) D = mkdens_occs(orbs,occs) entropy = get_entropy(occs,ETemp) else: D = mkdens(orbs,0,nocc) F = get_fock(D,Ints,h) energy = trace2(h+F,D)+Enuke if ETemp: energy += entropy iref = nel/2 gap = 627.51*(orbe[iref]-orbe[iref-1]) logging.debug("EXX Energy, B, Gap: %10.5f %10.5f %10.5f" % (energy,sqrt(dot(b,b)),gap)) #logging.debug("%s" % orbe) if return_flag == 1: return energy,orbe,orbs elif return_flag == 2: return energy,orbe,orbs,F return energy
def get_exx_energy(b, nbf, nel, nocc, ETemp, Enuke, S, h, Ints, H0, Gij, **opts): """Computes the energy for the OEP/HF functional Options: return_flag 0 Just return the energy 1 Return energy, orbe, orbs 2 Return energy, orbe, orbs, F """ return_flag = opts.get('return_flag', 0) Hoep = get_Hoep(b, H0, Gij) orbe, orbs = geigh(Hoep, S) if ETemp: efermi = get_efermi(nel, orbe, ETemp) occs = get_fermi_occs(efermi, orbe, ETemp) D = mkdens_occs(orbs, occs) entropy = get_entropy(occs, ETemp) else: D = mkdens(orbs, 0, nocc) F = get_fock(D, Ints, h) energy = trace2(h + F, D) + Enuke if ETemp: energy += entropy iref = nel / 2 gap = 627.51 * (orbe[iref] - orbe[iref - 1]) logging.debug("EXX Energy, B, Gap: %10.5f %10.5f %10.5f" % (energy, sqrt(dot(b, b)), gap)) #logging.debug("%s" % orbe) if return_flag == 1: return energy, orbe, orbs elif return_flag == 2: return energy, orbe, orbs, F return energy
def get_energy(self,b): self.iter += 1 self.Hoep = get_Hoep(b,self.H0,self.Gij) self.orbe,self.orbs = geigh(self.Hoep,self.S) if self.etemp: self.D,self.entropy = mkdens_fermi(self.nel,self.orbe,self.orbs, self.etemp) else: self.D = mkdens(self.orbs,0,self.nclosed) self.entropy=0 self.F = get_fock(self.D,self.Ints,self.h) self.energy = trace2(self.h+self.F,self.D)+self.Enuke + self.entropy if self.iter == 1 or self.iter % 10 == 0: logging.debug("%4d %10.5f %10.5f" % (self.iter,self.energy,dot(b,b))) return self.energy
def get_energy(self, b): self.iter += 1 self.Hoep = get_Hoep(b, self.H0, self.Gij) self.orbe, self.orbs = geigh(self.Hoep, self.S) if self.etemp: self.D, self.entropy = mkdens_fermi(self.nel, self.orbe, self.orbs, self.etemp) else: self.D = mkdens(self.orbs, 0, self.nclosed) self.entropy = 0 self.F = get_fock(self.D, self.Ints, self.h) self.energy = trace2(self.h + self.F, self.D) + self.Enuke + self.entropy if self.iter == 1 or self.iter % 10 == 0: logging.debug("%4d %10.5f %10.5f" % (self.iter, self.energy, dot(b, b))) return self.energy