def sr_loop(self, mol, auxmol, max_memory=2000): '''Short range part''' with addons.load(self._cderi, 'j3c') as j3c: with addons.load(self._cderi, 'Lpq') as Lpq: naoaux = j3c.shape[0] for b0, b1 in self.prange(0, naoaux, self.blockdim): yield (numpy.asarray(Lpq[b0:b1], order='C'), numpy.asarray(j3c[b0:b1], order='C'))
def loop(self): if self._cderi is None: self.build() with addons.load(self._cderi[0], 'j3c') as ferill: naoaux = ferill.shape[0] with addons.load(self._cderi[1], 'j3c') as feriss: # python2.6 not support multiple with for b0, b1 in self.prange(0, naoaux, self.blockdim): erill = numpy.asarray(ferill[b0:b1], order='C') eriss = numpy.asarray(feriss[b0:b1], order='C') yield erill, eriss
def loop(self): if self._cderi is None: self.build() with addons.load(self._cderi[0], 'j3c') as ferill: naoaux = ferill.shape[0] with addons.load( self._cderi[1], 'j3c') as feriss: # python2.6 not support multiple with for b0, b1 in self.prange(0, naoaux, self.blockdim): erill = numpy.asarray(ferill[b0:b1], order='C') eriss = numpy.asarray(feriss[b0:b1], order='C') yield erill, eriss
def get_naoaux(self): # determine naoaux with self._cderi, because DF object may be used as CD # object when self._cderi is provided. if self._cderi is None: self.build() with addons.load(self._cderi, 'j3c') as feri: return feri.shape[0]
def build(self): t0 = (time.clock(), time.time()) log = logger.Logger(self.stdout, self.verbose) mol = self.mol auxmol = self.auxmol = incore.format_aux_basis(self.mol, self.auxbasis) nao = mol.nao_nr() naux = auxmol.nao_nr() nao_pair = nao * (nao + 1) // 2 max_memory = (self.max_memory - lib.current_memory()[0]) * .8 if nao_pair * naux * 3 * 8 / 1e6 < max_memory: self._cderi = incore.cholesky_eri(mol, auxmol=auxmol, verbose=log) else: if not isinstance(self._cderi, str): if isinstance(self._cderi_file, str): self._cderi = self._cderi_file else: self._cderi = self._cderi_file.name outcore.cholesky_eri(mol, self._cderi, dataname='j3c', auxmol=auxmol, verbose=log) if nao_pair * nao * 8 / 1e6 < max_memory: with addons.load(self._cderi, 'j3c') as feri: cderi = numpy.asarray(feri) self._cderi = cderi log.timer_debug1('Generate density fitting integrals', *t0) return self
def loop(self, blksize=None): if self._cderi is None: self.build() if blksize is None: blksize = self.blockdim with addons.load(self._cderi, 'j3c') as feri: if isinstance(feri, numpy.ndarray): naoaux = feri.shape[0] for b0, b1 in self.prange(0, naoaux, blksize): yield numpy.asarray(feri[b0:b1], order='C') else: if isinstance(feri, h5py.Group): # starting from pyscf-1.7, DF tensor may be stored in # block format naoaux = feri['0'].shape[0] def load(aux_slice): b0, b1 = aux_slice return _load_from_h5g(feri, b0, b1) else: naoaux = feri.shape[0] def load(aux_slice): b0, b1 = aux_slice return numpy.asarray(feri[b0:b1]) for dat in lib.map_with_prefetch( load, self.prange(0, naoaux, blksize)): yield dat dat = None
def loop(self, blksize=None): if self._cderi is None: self.build() if blksize is None: blksize = self.blockdim with addons.load(self._cderi, 'j3c') as feri: if isinstance(feri, numpy.ndarray): naoaux = feri.shape[0] for b0, b1 in self.prange(0, naoaux, blksize): yield numpy.asarray(feri[b0:b1], order='C') else: if isinstance(feri, h5py.Group): # starting from pyscf-1.7, DF tensor may be stored in # block format naoaux = feri['0'].shape[0] def load(b0, b1, prefetch): prefetch[0] = _load_from_h5g(feri, b0, b1) else: naoaux = feri.shape[0] def load(b0, b1, prefetch): prefetch[0] = numpy.asarray(feri[b0:b1]) dat = [None] prefetch = [None] with lib.call_in_background(load) as bload: bload(0, min(blksize, naoaux), prefetch) for b0, b1 in self.prange(blksize, naoaux, blksize): dat, prefetch = prefetch, dat bload(b0, b1, prefetch) yield dat[0] yield prefetch[0]
def build(self): t0 = (time.clock(), time.time()) log = logger.Logger(self.stdout, self.verbose) mol = self.mol auxmol = self.auxmol = incore.format_aux_basis(self.mol, self.auxbasis) nao = mol.nao_nr() naux = auxmol.nao_nr() nao_pair = nao*(nao+1)//2 max_memory = (self.max_memory - lib.current_memory()[0]) * .8 if nao_pair*naux*3*8/1e6 < max_memory: self._cderi = incore.cholesky_eri(mol, auxmol=auxmol, verbose=log) else: if not isinstance(self._cderi, str): if isinstance(self._cderi_file, str): self._cderi = self._cderi_file else: self._cderi = self._cderi_file.name outcore.cholesky_eri(mol, self._cderi, auxmol=auxmol, verbose=log) if nao_pair*nao*8/1e6 < max_memory: with addons.load(self._cderi) as feri: cderi = numpy.asarray(feri) self._cderi = cderi log.timer_debug1('Generate density fitting integrals', *t0) return self
def loop(self): if self._cderi is None: self.build() with addons.load(self._cderi) as feri: naoaux = feri.shape[0] for b0, b1 in self.prange(0, naoaux, self.blockdim): eri1 = numpy.asarray(feri[b0:b1], order='C') yield eri1
def loop(self): if self._cderi is None: self.build() with addons.load(self._cderi, 'j3c') as feri: naoaux = feri.shape[0] for b0, b1 in self.prange(0, naoaux, self.blockdim): eri1 = numpy.asarray(feri[b0:b1], order='C') yield eri1
def loop(self, blksize=None): if self._cderi is None: self.build() if blksize is None: blksize = self.blockdim with addons.load(self._cderi, 'j3c') as feri: naoaux = feri.shape[0] for b0, b1 in self.prange(0, naoaux, blksize): eri1 = numpy.asarray(feri[b0:b1], order='C') yield eri1
def get_naoaux(self): # determine naoaux with self._cderi, because DF object may be used as CD # object when self._cderi is provided. if self._cderi is None: self.build() with addons.load(self._cderi, 'j3c') as feri: if isinstance(feri, h5py.Group): return feri['0'].shape[0] else: return feri.shape[0]
def build(self): t0 = (time.clock(), time.time()) log = logger.Logger(self.stdout, self.verbose) self.check_sanity() self.dump_flags() mol = self.mol auxmol = self.auxmol = addons.make_auxmol(self.mol, self.auxbasis) nao = mol.nao_nr() naux = auxmol.nao_nr() nao_pair = nao * (nao + 1) // 2 max_memory = (self.max_memory - lib.current_memory()[0]) * .8 int3c = mol._add_suffix('int3c2e') int2c = mol._add_suffix('int2c2e') if (nao_pair * naux * 3 * 8 / 1e6 < max_memory and not isinstance(self._cderi_to_save, str)): self._cderi = incore.cholesky_eri(mol, int3c=int3c, int2c=int2c, auxmol=auxmol, verbose=log) else: if isinstance(self._cderi_to_save, str): cderi = self._cderi_to_save else: cderi = self._cderi_to_save.name if isinstance(self._cderi, str): log.warn( 'Value of _cderi is ignored. DF integrals will be ' 'saved in file %s .', cderi) outcore.cholesky_eri(mol, cderi, dataname='j3c', int3c=int3c, int2c=int2c, auxmol=auxmol, max_memory=max_memory, verbose=log) if nao_pair * naux * 8 / 1e6 < max_memory: with addons.load(cderi, 'j3c') as feri: cderi = numpy.asarray(feri) self._cderi = cderi log.timer_debug1('Generate density fitting integrals', *t0) return self
def build(self): t0 = (time.clock(), time.time()) log = logger.Logger(self.stdout, self.verbose) self.check_sanity() self.dump_flags() mol = self.mol auxmol = self.auxmol = addons.make_auxmol(self.mol, self.auxbasis) nao = mol.nao_nr() naux = auxmol.nao_nr() nao_pair = nao*(nao+1)//2 max_memory = (self.max_memory - lib.current_memory()[0]) * .8 int3c = mol._add_suffix('int3c2e') int2c = mol._add_suffix('int2c2e') if (nao_pair*naux*3*8/1e6 < max_memory and not isinstance(self._cderi_to_save, str)): self._cderi = incore.cholesky_eri(mol, int3c=int3c, int2c=int2c, auxmol=auxmol, verbose=log) else: if isinstance(self._cderi_to_save, str): cderi = self._cderi_to_save else: cderi = self._cderi_to_save.name if isinstance(self._cderi, str): log.warn('Value of _cderi is ignored. DF integrals will be ' 'saved in file %s .', cderi) outcore.cholesky_eri(mol, cderi, dataname='j3c', int3c=int3c, int2c=int2c, auxmol=auxmol, max_memory=max_memory, verbose=log) if nao_pair*naux*8/1e6 < max_memory: with addons.load(cderi, 'j3c') as feri: cderi = numpy.asarray(feri) self._cderi = cderi log.timer_debug1('Generate density fitting integrals', *t0) return self
def get_naoaux(self): '''The dimension of auxiliary basis at gamma point''' # determine naoaux with self._cderi, because DF object may be used as CD # object when self._cderi is provided. if self._cderi is None: self.build() # self._cderi['j3c/k_id/seg_id'] with addons.load(self._cderi, 'j3c/0') as feri: if isinstance(feri, h5py.Group): naux = feri['0'].shape[0] else: naux = feri.shape[0] cell = self.cell if (cell.dimension == 2 and cell.low_dim_ft_type != 'inf_vacuum' and not isinstance(self._cderi, numpy.ndarray)): with h5py.File(self._cderi, 'r') as feri: if 'j3c-/0' in feri: dat = feri['j3c-/0'] if isinstance(dat, h5py.Group): naux += dat['0'].shape[0] else: naux += dat.shape[0] return naux
def load(self, key): return addons.load(self._cderi, key)