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
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
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
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)
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)
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
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)
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)
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)
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)
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)
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
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)
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)
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
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
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
def __init__(self, niter=4): Eigensolver.__init__(self) self.niter = niter
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)
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)
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)
def __init__(self, keep_htpsit=True, blocksize=1): Eigensolver.__init__(self, keep_htpsit, blocksize)
def __init__(self, keep_htpsit=False): """Initialize direct eigensolver. """ Eigensolver.__init__(self, keep_htpsit)
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)