Exemplo n.º 1
0
 def get_energy(self,b):
     self.iter += 1
     ba = b[:self.nbf]
     bb = b[self.nbf:]
     self.Hoepa = get_Hoep(ba,self.H0,self.Gij)
     self.Hoepb = get_Hoep(bb,self.H0,self.Gij)
     self.orbea,self.orbsa = geigh(self.Hoepa,self.S)
     self.orbeb,self.orbsb = geigh(self.Hoepb,self.S)
     if self.etemp:
         self.Da,entropya = mkdens_fermi(2*self.nalpha,self.orbea,self.orbsa,
                                         self.etemp)
         self.Db,entropyb = mkdens_fermi(2*self.nbeta,self.orbeb,self.orbsb,
                                         self.etemp)
         self.entropy = 0.5*(entropya+entropyb)
     else:
         self.Da = mkdens(self.orbsa,0,self.nalpha)
         self.Db = mkdens(self.orbsb,0,self.nbeta)
         self.entropy=0
     J = getJ(self.Ints,self.Da+self.Db)
     Ka = getK(self.Ints,self.Da)
     Kb = getK(self.Ints,self.Db)
     self.Fa = self.h + J - Ka
     self.Fb = self.h + J - Kb
     self.energy = 0.5*(trace2(self.h+self.Fa,self.Da) +
                        trace2(self.h+self.Fb,self.Db))\
                        + 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
Exemplo n.º 2
0
 def get_energy(self, b):
     self.iter += 1
     ba = b[:self.nbf]
     bb = b[self.nbf:]
     self.Hoepa = get_Hoep(ba, self.H0, self.Gij)
     self.Hoepb = get_Hoep(bb, self.H0, self.Gij)
     self.orbea, self.orbsa = geigh(self.Hoepa, self.S)
     self.orbeb, self.orbsb = geigh(self.Hoepb, self.S)
     if self.etemp:
         self.Da, entropya = mkdens_fermi(2 * self.nalpha, self.orbea,
                                          self.orbsa, self.etemp)
         self.Db, entropyb = mkdens_fermi(2 * self.nbeta, self.orbeb,
                                          self.orbsb, self.etemp)
         self.entropy = 0.5 * (entropya + entropyb)
     else:
         self.Da = mkdens(self.orbsa, 0, self.nalpha)
         self.Db = mkdens(self.orbsb, 0, self.nbeta)
         self.entropy = 0
     J = getJ(self.Ints, self.Da + self.Db)
     Ka = getK(self.Ints, self.Da)
     Kb = getK(self.Ints, self.Db)
     self.Fa = self.h + J - Ka
     self.Fb = self.h + J - Kb
     self.energy = 0.5*(trace2(self.h+self.Fa,self.Da) +
                        trace2(self.h+self.Fb,self.Db))\
                        + 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
Exemplo n.º 3
0
 def solve(self,H,**opts):
     from PyQuante.LA2 import geigh
     from PyQuante.fermi_dirac import mkdens_fermi
     self.orbe,self.orbs = geigh(H,self.S)
     self.D,self.entropy = mkdens_fermi(self.nel,self.orbe,
                                        self.orbs,self.etemp)
     return self.D,self.entropy
Exemplo n.º 4
0
 def solve(self, H, **kwargs):
     from PyQuante.LA2 import geigh
     from PyQuante.fermi_dirac import mkdens_fermi
     self.orbe, self.orbs = geigh(H, self.S)
     self.D, self.entropy = mkdens_fermi(self.nel, self.orbe, self.orbs,
                                         self.etemp)
     return self.D, self.entropy
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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