예제 #1
0
    def run(self):
        maxiter = self.options['maxiter']
        etol = self.options['etol']

        for self.iteration in range(1, maxiter + 1):
            log.iteration(self.iteration, self.verbose)

            self.fock_loop()
            self.build()
            self.energy()

            if self.iteration > 1:
                e_dif = abs(self._energies['tot'][-2] -
                            self._energies['tot'][-1])

                if e_dif < etol and self.converged:
                    break

                self.converged = e_dif < etol

        if self.converged:
            log.write(
                '\nAuxiliary GF2 converged after %d iterations.\n' %
                self.iteration, self.verbose)
        else:
            log.write('\nAuxiliary GF2 failed to converge.\n', self.verbose)

        self._timings['total'] = self._timings.get('total',
                                                   0.0) + self._timer.total()
        log.title('Timings', self.verbose)
        log.timings(self._timings, self.verbose)

        return self
예제 #2
0
    def setup(self):
        self.h1e = self.hf.h1e_mo
        self.eri = self.hf.eri_mo

        if self.options['dm0'] is None:
            self.rdm1 = self.hf.rdm1_mo
        else:
            self.rdm1 = np.array(self.options['dm0'], dtype=types.float64)

        self.converged = False
        self.iteration = 0

        chempot = self.hf.chempot
        self.gf = aux.Aux(self.hf.e, np.eye(self.hf.nao), chempot=chempot)
        self.se = aux.Aux([], [
            [],
        ] * self.hf.nao, chempot=chempot)
        self._se_prev = None
        self.rpa = None
        self.e_qp = self.hf.e.copy()

        self._timings = {}
        self._energies = {}

        log.title('Options', self.verbose)
        log.options(self.options, self.verbose)
        log.title('Input', self.verbose)
        log.molecule(self.hf.mol, self.verbose)
        log.write('Basis = %s\n' % self.hf.mol.basis, self.verbose)
        log.write('E(nuc) = %.12f\n' % self.hf.e_nuc, self.verbose)
        log.write('E(hf)  = %.12f\n' % self.hf.e_tot, self.verbose)
        log.write('nao = %d\n' % self.hf.nao, self.verbose)
        log.write('nmom = (%s, %s)\n' % self.nmom, self.verbose)
예제 #3
0
    def setup(self):
        super().setup()

        log.title('Options', self.verbose)
        log.options(self.options, self.verbose)
        log.title('Input', self.verbose)
        log.molecule(self.hf.mol, self.verbose)
        log.write('Basis = %s\n' % self.hf.mol.basis, self.verbose)
        log.write('E(nuc) = %.12f\n' % self.hf.e_nuc, self.verbose)
        log.write('E(hf)  = %.12f\n' % self.hf.e_tot, self.verbose)
        log.write('nao = %d\n' % self.hf.nao, self.verbose)
예제 #4
0
파일: ramp2.py 프로젝트: obackhouse/auxgf
    def run(self):
        self.build()
        self.merge()
        self.energy_mp2()

        self._timings['total'] = self._timings.get('total',
                                                   0.0) + self._timer.total()
        log.title('Timings', self.verbose)
        log.timings(self._timings, self.verbose)

        return self
예제 #5
0
    def setup(self):
        super().setup()

        log.title('Options', self.verbose)
        log.options(self.options, self.verbose)
        log.title('Input', self.verbose)
        log.molecule(self.hf.mol, self.verbose)
        log.write('Basis = %s\n' % self.hf.mol.basis, self.verbose)
        log.write('E(nuc) = %.12f\n' % self.hf.e_nuc, self.verbose)
        log.write('E(hf)  = %.12f\n' % self.hf.e_tot, self.verbose)
        log.write('<S^2> = %.6f\n' % self.hf.spin_square[0], self.verbose)
        log.write('nao = %d\n' % self.hf.nao, self.verbose)
        log.write('nfrozen = (%d, %d)\n' % self.options['frozen'],
                  self.verbose)
        log.write('nmom = (%s, %s)\n' % self.nmom, self.verbose)
예제 #6
0
    def run(self):
        self.get_1p_or_1h()
        self.build()
        self.merge()
        self.diagonalise()

        log.write('E(mp2) = %.12f\n' % self.e_mp2, self.verbose)
        e_excite = self.ip[0] if self.method == 'ip' else self.ea[0]
        log.write('E(%s)  = %.12f\n' % (self.method, e_excite), self.verbose)

        self._timings['total'] = self._timings.get('total',
                                                   0.0) + self._timer.total()
        log.title('Timings', self.verbose)
        log.timings(self._timings, self.verbose)

        return self
예제 #7
0
    def setup(self):
        super().setup()

        self.gf = self.se.new(self.hf.e, np.eye(self.hf.nao))

        if self.eri.ndim == 3:
            self.eri = lib.pack_tril(self.eri)

        log.title('Options', self.verbose)
        log.options(self.options, self.verbose)
        log.title('Input', self.verbose)
        log.molecule(self.hf.mol, self.verbose)
        log.write('Basis = %s\n' % self.hf.mol.basis, self.verbose)
        log.write('E(nuc) = %.12f\n' % self.hf.e_nuc, self.verbose)
        log.write('E(hf)  = %.12f\n' % self.hf.e_tot, self.verbose)
        log.write('nao = %d\n' % self.hf.nao, self.verbose)
        log.write('nmom = (%s, %s)\n' % self.nmom, self.verbose)

        self.run_mp2()
예제 #8
0
    def setup(self):
        super().setup()

        self.gf = (self.se[0].new(self.hf.e[0], np.eye(self.hf.nao)),
                   self.se[1].new(self.hf.e[1], np.eye(self.hf.nao)))

        if self.eri.ndim == 4:
            self.eri = np.stack([lib.pack_tril(x) for x in self.eri], axis=0)

        log.title('Options', self.verbose)
        log.options(self.options, self.verbose)
        log.title('Input', self.verbose)
        log.molecule(self.hf.mol, self.verbose)
        log.write('Basis = %s\n' % self.hf.mol.basis, self.verbose)
        log.write('E(nuc) = %.12f\n' % self.hf.e_nuc, self.verbose)
        log.write('E(hf)  = %.12f\n' % self.hf.e_tot, self.verbose)
        log.write('nao = %d\n' % self.hf.nao, self.verbose)
        log.write('nmom = (%s, %s)\n' % self.nmom, self.verbose)

        self.run_mp2()
예제 #9
0
    def run(self):
        maxiter = self.options['maxiter']
        etol = self.options['etol']
        checkpoint = self.options['checkpoint']

        for self.iteration in range(1, maxiter + 1):
            log.iteration(self.iteration, self.verbose)

            self.fock_loop()
            self.build()
            self.energy()

            if self.iteration > 1:
                e_dif = abs(self._energies['tot'][-2] -
                            self._energies['tot'][-1])

                if e_dif < etol and self.converged:
                    break

                self.converged = e_dif < etol

            if checkpoint and mpi.rank == 0:
                np.savetxt('rdm1_alph_chk.dat', self.rdm1[0])
                np.savetxt('rdm1_beta_chk.dat', self.rdm1[1])
                self.se[0].save('se_alph_chk.pickle')
                self.se[1].save('se_beta_chk.pickle')

        if self.converged:
            log.write(
                '\nAuxiliary GF2 converged after %d iterations.\n' %
                self.iteration, self.verbose)
        else:
            log.write('\nAuxiliary GF2 failed to converge.\n', self.verbose)

        self._timings['total'] = self._timings.get('total',
                                                   0.0) + self._timer.total()
        log.title('Timings', self.verbose)
        log.timings(self._timings, self.verbose)

        return self
예제 #10
0
    def run(self):
        for self.iteration in range(1, self.options['maxiter'] + 1):
            log.iteration(self.iteration, self.verbose)

            self.build_gf()

            if self.iteration == 1 or self.options['update_w']:
                self.solve_casida()

            self.build_se()
            self.merge()
            self.energy()

            if self.options['update_eig']:
                self.iterate_qp()

            if self.iteration > 1:
                e_dif = abs(self._energies['tot'][-2] - \
                            self._energies['tot'][-1])

                if e_dif < self.options['etol'] and self.converged:
                    break

                self.converged = e_dif < self.options['etol']

        if self.converged:
            log.write(
                '\nAuxiliary GW converged after %d iterations.\n' %
                self.iteration, self.verbose)
        else:
            log.write('\nAuxiliary GW failed to converge.\n', self.verbose)

        self._timings['total'] = self._timings.get('total', 0.0) \
                                 + self._timer.total()
        log.title('Timings', self.verbose)
        log.timings(self._timings, self.verbose)

        return self
예제 #11
0
 def test_title(self):
     sys.stdout = stdout = StringIO()
     log.title('Test')
     sys.stdout = sys.__stdout__