Example #1
0
 def update(self):
     D2 = matrixmultiply(self.D,self.D)
     D3 = matrixmultiply(self.D,D2)
     cn = trace(D2-D3)/trace(self.D-D2)
     if cn < 0.5:
         self.D = ((1.0-2.0*cn)*self.D+(1.0+cn)*D2-D3)/(1.0-cn)
     else:
         self.D = ((1+cn)*D2-D3)/cn
     return
Example #2
0
 def update(self):
     D2 = matrixmultiply(self.D, self.D)
     D3 = matrixmultiply(self.D, D2)
     cn = trace(D2 - D3) / trace(self.D - D2)
     if cn < 0.5:
         self.D = ((1.0 - 2.0 * cn) * self.D +
                   (1.0 + cn) * D2 - D3) / (1.0 - cn)
     else:
         self.D = ((1 + cn) * D2 - D3) / cn
     return
Example #3
0
 def update(self):
     Ne_curr = trace(self.D)
     D2 = matrixmultiply(self.D,self.D)
     Ne2 = trace(D2)
     self.Ne_curr = Ne_curr
     # Anders claims this works better; I didn't see a difference
     #if abs(2*Ne_curr-Ne2-self.Ne) < abs(Ne2-self.Ne):
     if Ne_curr < self.Ne:
         self.D = 2*self.D-D2
     else:
         self.D = D2
     return
Example #4
0
 def update(self):
     Ne_curr = trace(self.D)
     D2 = matrixmultiply(self.D, self.D)
     Ne2 = trace(D2)
     self.Ne_curr = Ne_curr
     # Anders claims this works better; I didn't see a difference
     #if abs(2*Ne_curr-Ne2-self.Ne) < abs(Ne2-self.Ne):
     if Ne_curr < self.Ne:
         self.D = 2 * self.D - D2
     else:
         self.D = D2
     return
Example #5
0
 def update(self):
     D2 = matrixmultiply(self.D,self.D)
     Df = matrixmultiply(D2,4*self.D-3*D2)
     trf = trace(Df)
     Dp = self.I-self.D
     Dp2 = matrixmultiply(Dp,Dp)
     Dg = matrixmultiply(D2,Dp2)
     trg = trace(Dg)
     gamma = (self.Ne-trf)/trg
     if gamma > 2:
         self.D = 2*self.D-D2
     elif gamma < 0:
         self.D = D2
     else:
         self.D = Df-gamma*Dg
     return
Example #6
0
 def update(self):
     D2 = matrixmultiply(self.D, self.D)
     Df = matrixmultiply(D2, 4 * self.D - 3 * D2)
     trf = trace(Df)
     Dp = self.I - self.D
     Dp2 = matrixmultiply(Dp, Dp)
     Dg = matrixmultiply(D2, Dp2)
     trg = trace(Dg)
     gamma = (self.Ne - trf) / trg
     if gamma > 2:
         self.D = 2 * self.D - D2
     elif gamma < 0:
         self.D = D2
     else:
         self.D = Df - gamma * Dg
     return
Example #7
0
 def initialize(self):
     efermi = trace(self.F)/self.N
     beta = self.Ne/float(self.N)
     alpha = min(self.Ne/(self.emax-efermi),
                 (self.N-self.Ne)/(efermi-self.emin))/float(self.N)
     self.D = alpha*(efermi*self.I-self.F) + beta*self.I
     self.Dsumold = 0
     return
Example #8
0
 def initialize(self):
     efermi = trace(self.F) / self.N
     beta = self.Ne / float(self.N)
     alpha = min(self.Ne / (self.emax - efermi),
                 (self.N - self.Ne) / (efermi - self.emin)) / float(self.N)
     self.D = alpha * (efermi * self.I - self.F) + beta * self.I
     self.Dsumold = 0
     return
Example #9
0
    def converged(self): return abs(trace(self.D) - self.Ne) < self.tol


def init_dmat_solver(Method,**opts):
Example #10
0
 def get_nel(self,efermi,alpha,beta):
     return trace(alpha*(efermi*self.I-self.F)*beta*self.I)
Example #11
0
 def converged(self):
     return abs(trace(self.D) - self.Ne) < self.tol
Example #12
0
 def converged(self):
     self.DS = matrixmultiply(self.D,self.S)
     self.Ne_curr = trace(self.DS)
     return abs(self.Ne_curr - self.Ne) < self.tol
Example #13
0
 def converged(self):
     return abs(trace(self.D) - self.Ne) < self.tol
Example #14
0
 def get_nel(self, efermi, alpha, beta):
     return trace(alpha * (efermi * self.I - self.F) * beta * self.I)
Example #15
0
 def converged(self):
     self.DS = matrixmultiply(self.D, self.S)
     self.Ne_curr = trace(self.DS)
     return abs(self.Ne_curr - self.Ne) < self.tol