Ejemplo n.º 1
0
 def initialize(self, wfs):
     if wfs.bd.comm.size > 1:
         raise ValueError('CG eigensolver does not support band '
                          'parallelization.  This calculation parallelizes '
                          'over %d band groups.' % wfs.bd.comm.size)
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
Ejemplo n.º 2
0
    def __init__(self,
                 keep_htpsit=True,
                 blocksize=None,
                 niter=3,
                 rtol=1e-16,
                 limit_lambda=False,
                 use_rayleigh=False,
                 trial_step=0.1):
        """Initialize RMM-DIIS eigensolver.

        Parameters:

        limit_lambda: dictionary
            determines if step length should be limited
            supported keys:
            'absolute':True/False limit the absolute value
            'upper':float upper limit for lambda
            'lower':float lower limit for lambda

        """

        Eigensolver.__init__(self, keep_htpsit, blocksize)
        self.niter = niter
        self.rtol = rtol
        self.limit_lambda = limit_lambda
        self.use_rayleigh = use_rayleigh
        if use_rayleigh:
            1 / 0
            self.blocksize = 1
        self.trial_step = trial_step
        self.first = True
Ejemplo n.º 3
0
 def initialize(self, wfs):
     if wfs.bd.comm.size > 1:
         raise ValueError('CG eigensolver does not support band '
                          'parallelization.  This calculation parallelizes '
                          'over %d band groups.' % wfs.bd.comm.size)
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
Ejemplo n.º 4
0
 def estimate_memory(self, mem, wfs):
     Eigensolver.estimate_memory(self, mem, wfs)
     nbands = wfs.bd.nbands
     mem.subnode("H_nn", nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode("S_nn", nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode("H_2n2n", 4 * nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode("S_2n2n", 4 * nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode("eps_2n", 2 * nbands * mem.floatsize)
Ejemplo n.º 5
0
 def estimate_memory(self, mem, wfs):
     Eigensolver.estimate_memory(self, mem, wfs)
     nbands = wfs.bd.nbands
     mem.subnode('H_nn', nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode('S_nn', nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode('H_2n2n', 4 * nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode('S_2n2n', 4 * nbands * nbands * mem.itemsize[wfs.dtype])
     mem.subnode('eps_2n', 2 * nbands * mem.floatsize)
Ejemplo n.º 6
0
 def __init__(self, niter=1, smin=None, normalize=True):
     Eigensolver.__init__(self)
     self.niter = niter
     if not smin is None:
         raise NotImplementedError("See https://trac.fysik.dtu.dk/projects/gpaw/ticket/248")
     self.smin = smin
     self.normalize = normalize
     self.orthonormalization_required = False
Ejemplo n.º 7
0
 def estimate_memory(self, mem, gd, dtype, mynbands, nbands):
     Eigensolver.estimate_memory(self, mem, gd, dtype, mynbands, nbands)
     itemsize = mem.itemsize[dtype]
     mem.subnode('H_nn', nbands * nbands * mem.itemsize[dtype])
     mem.subnode('S_nn', nbands * nbands * mem.itemsize[dtype])
     mem.subnode('H_2n2n', 4 * nbands * nbands * mem.itemsize[dtype])
     mem.subnode('S_2n2n', 4 * nbands * nbands * mem.itemsize[dtype])
     mem.subnode('eps_2n', 2 * nbands * mem.floatsize)
Ejemplo n.º 8
0
    def initialize(self, wfs):
        Eigensolver.initialize(self, wfs)

        if wfs.gd.comm.rank == 0 and wfs.bd.comm.rank == 0:
            # Allocate arrays
            B = self.nbands
            self.H_NN = np.empty((2 * B, 2 * B), self.dtype)
            self.S_NN = np.empty((2 * B, 2 * B), self.dtype)
            self.eps_N = np.empty(2 * B)
Ejemplo n.º 9
0
    def initialize(self, wfs):

        Eigensolver.initialize(self, wfs)
        self.overlap = wfs.overlap

        # Allocate arrays
        self.H_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
        self.S_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
        self.eps_2n = np.empty(2 * self.nbands)
Ejemplo n.º 10
0
 def initialize(self, wfs):
     if self.blocksize is None:
         if wfs.mode == 'pw':
             S = wfs.pd.comm.size
             # Use a multiple of S for maximum efficiency
             self.blocksize = int(np.ceil(10 / S)) * S
         else:
             self.blocksize = 10
     Eigensolver.initialize(self, wfs)
Ejemplo n.º 11
0
 def initialize(self, wfs):
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
     # Allocate arrays
     self.H_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.S_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.H_2n2n = np.empty((2 * self.nbands, 2 * self.nbands),
                             self.dtype)
     self.S_2n2n = np.empty((2 * self.nbands, 2 * self.nbands),
                             self.dtype)        
     self.eps_2n = np.empty(2 * self.nbands)
Ejemplo n.º 12
0
    def __init__(self, niter=1, smin=None, normalize=True):
        Eigensolver.__init__(self)
        self.niter = niter
        self.smin = smin
        self.normalize = normalize

        if smin is not None:
            raise NotImplementedError(
                'See https://trac.fysik.dtu.dk/projects/gpaw/ticket/248')

        self.orthonormalization_required = False
Ejemplo n.º 13
0
 def initialize(self, wfs):
     if wfs.bd.comm.size > 1:
         raise ValueError('Davidson eigensolver does not support band '
                          'parallelization.  This calculation parallelizes '
                          'over %d band groups.' % wfs.bd.comm.size)
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
     # Allocate arrays
     self.H_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.S_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.H_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
     self.S_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
     self.eps_2n = np.empty(2 * self.nbands)
Ejemplo n.º 14
0
 def initialize(self, wfs):
     if wfs.bd.comm.size > 1:
         raise ValueError(
             "Davidson eigensolver does not support band "
             "parallelization.  This calculation parallelizes "
             "over %d band groups." % wfs.bd.comm.size
         )
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
     # Allocate arrays
     self.H_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.S_nn = np.zeros((self.nbands, self.nbands), self.dtype)
     self.H_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
     self.S_2n2n = np.empty((2 * self.nbands, 2 * self.nbands), self.dtype)
     self.eps_2n = np.empty(2 * self.nbands)
Ejemplo n.º 15
0
    def __init__(self, niter=4, rtol=0.30):
        """Construct conjugate gradient eigen solver.

        parameters:

        niter: int
            Maximum number of conjugate gradient iterations per band
        rtol: float
            If change in residual is less than rtol, iteration for band is
            not continued

        """
        Eigensolver.__init__(self)
        self.niter = niter
        self.rtol = rtol
        if extra_parameters.get('PK', False):
            self.orthonormalization_required = True
        else:
            self.orthonormalization_required = False
Ejemplo n.º 16
0
    def __init__(self, niter=4, rtol=0.30):
        """Construct conjugate gradient eigen solver.

        parameters:

        niter: int
            Maximum number of conjugate gradient iterations per band
        rtol: float
            If change in residual is less than rtol, iteration for band is
            not continued

        """
        Eigensolver.__init__(self)
        self.niter = niter
        self.rtol = rtol
        if extra_parameters.get('PK', False):
            self.orthonormalization_required = True
        else:
            self.orthonormalization_required = False
Ejemplo n.º 17
0
    def __init__(self, keep_htpsit=True, blocksize=10, niter=3, rtol=1e-16,
                 limit_lambda=False, use_rayleigh=False, trial_step=0.1):
        """Initialize RMM-DIIS eigensolver.

        Parameters:

        limit_lambda: dictionary
            determines if step length should be limited
            supported keys:
            'absolute':True/False limit the absolute value
            'upper':float upper limit for lambda
            'lower':float lower limit for lambda

        """

        Eigensolver.__init__(self, keep_htpsit, blocksize)
        self.niter = niter
        self.rtol = rtol
        self.limit_lambda = limit_lambda
        self.use_rayleigh = use_rayleigh
        if use_rayleigh:
            self.blocksize = 1
        self.trial_step = trial_step
        self.first = True
Ejemplo n.º 18
0
 def __init__(self, niter=4):
     Eigensolver.__init__(self)
     self.niter = niter
Ejemplo n.º 19
0
 def __init__(self, keep_htpsit=True, blocksize=10,
              fixed_trial_step=None):
     self.fixed_trial_step = fixed_trial_step
     Eigensolver.__init__(self, keep_htpsit, blocksize)
Ejemplo n.º 20
0
 def estimate_memory(self, mem, gd, dtype, mynbands, nbands):
     Eigensolver.estimate_memory(self, mem, gd, dtype, mynbands, nbands)
     gridmem = gd.bytecount(dtype)
     mem.subnode('phi_G', gridmem)
     mem.subnode('phi_old_G', gridmem)
Ejemplo n.º 21
0
 def __init__(self, keep_htpsit=True, blocksize=10, fixed_trial_step=None):
     self.fixed_trial_step = fixed_trial_step
     Eigensolver.__init__(self, keep_htpsit, blocksize)
Ejemplo n.º 22
0
 def __init__(self, keep_htpsit=True, blocksize=1):
     Eigensolver.__init__(self, keep_htpsit, blocksize)
Ejemplo n.º 23
0
    def __init__(self, keep_htpsit=False):
        """Initialize direct eigensolver. """

        Eigensolver.__init__(self, keep_htpsit)
Ejemplo n.º 24
0
 def initialize(self, wfs):
     Eigensolver.initialize(self, wfs)
     self.overlap = wfs.overlap
     # Allocate arrays
     self.phi_G = self.gd.empty(dtype=self.dtype)
     self.phi_old_G = self.gd.empty(dtype=self.dtype)