Пример #1
0
 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'))
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
 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]
Пример #5
0
Файл: df.py Проект: v3op01/pyscf
    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
Пример #6
0
    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]
Пример #7
0
    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
Пример #8
0
    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]
Пример #9
0
Файл: df.py Проект: eronca/pyscf
    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
Пример #10
0
Файл: df.py Проект: eronca/pyscf
 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
Пример #11
0
 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
Пример #12
0
 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
Пример #13
0
 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]
Пример #14
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
Пример #15
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
Пример #16
0
    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
Пример #17
0
    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
Пример #18
0
 def load(self, key):
     return addons.load(self._cderi, key)