Пример #1
0
 def _open(self, filename, mode):
     if mode not in 'aw':
         raise ValueError('mode must be "w" or "a".')
     if self.master:
         self.backend = affopen(filename, mode, tag='ASE-Trajectory')
         if len(self.backend) > 0:
             r = affopen(filename)
             self.numbers = r.numbers
             self.pbc = r.pbc
     else:
         self.backend = DummyWriter()
Пример #2
0
 def _open(self, filename, mode):
     if mode not in 'aw':
         raise ValueError('mode must be "w" or "a".')
     if self.master:
         self.backend = affopen(filename, mode, tag='ASE-Trajectory')
         if len(self.backend) > 0:
             r = affopen(filename)
             self.numbers = r.numbers
             self.pbc = r.pbc
     else:
         self.backend = DummyWriter()
Пример #3
0
 def _open(self, filename):
     try:
         self.backend = affopen(filename, 'r')
     except InvalidAFFError:
         raise RuntimeError('This is not a valid ASE trajectory file. '
                            'If this is an old-format (version <3.9) '
                            'PickleTrajectory file you can convert it '
                            'with ase.io.trajectory.convert("%s") '
                            'or:\n\n $ python -m ase.io.trajectory %s'
                            % (filename, filename))
     self._read_header()
Пример #4
0
 def _open(self, filename):
     try:
         self.backend = affopen(filename, 'r')
     except InvalidAFFError:
         raise RuntimeError('This is not a valid ASE trajectory file. '
                            'If this is an old-format (version <3.9) '
                            'PickleTrajectory file you can convert it '
                            'with ase.io.trajectory.convert("%s") '
                            'or:\n\n $ python -m ase.io.trajectory %s' %
                            (filename, filename))
     self._read_header()
Пример #5
0
def calculate_kernel(self, nG, ns, iq, cut_G=None):
    self.unit_cells = self.calc.wfs.kd.N_c
    self.tag = self.calc.atoms.get_chemical_formula(mode='hill')

    if self.av_scheme is not None:
        self.tag += '_' + self.av_scheme + '_nspins' + str(self.nspins)

    kd = self.calc.wfs.kd
    self.bzq_qc = kd.get_bz_q_points(first=True)
    U_scc = kd.symmetry.op_scc
    self.ibzq_qc = kd.get_ibz_q_points(self.bzq_qc, U_scc)[0]

    ecut = self.ecut * Ha
    if isinstance(ecut, (float, int)):
        self.ecut_max = ecut
    else:
        self.ecut_max = max(ecut)

    q_empty = None

    if not os.path.isfile('fhxc_%s_%s_%s_%s.ulm' %
                          (self.tag, self.xc, self.ecut_max, iq)):
        q_empty = iq

    if self.xc not in ('RPA'):
        if q_empty is not None:
            self.l_l = np.array([1.0])

            if self.linear_kernel:
                kernel = KernelWave(self.calc, self.xc, self.ibzq_qc, self.fd,
                                    None, q_empty, None, self.Eg,
                                    self.ecut_max, self.tag, self.timer)

            elif not self.dyn_kernel:
                kernel = KernelWave(self.calc, self.xc, self.ibzq_qc, self.fd,
                                    self.l_l, q_empty, None, self.Eg,
                                    self.ecut_max, self.tag, self.timer)

            else:
                kernel = KernelWave(self.calc, self.xc, self.ibzq_qc, self.fd,
                                    self.l_l, q_empty, self.omega_w, self.Eg,
                                    self.ecut_max, self.tag, self.timer)

            kernel.calculate_fhxc()
            del kernel

        mpi.world.barrier()

        if self.spin_kernel:
            r = affopen('fhxc_%s_%s_%s_%s.ulm' %
                        (self.tag, self.xc, self.ecut_max, iq))
            fv = r.fhxc_sGsG

            if cut_G is not None:
                cut_sG = np.tile(cut_G, ns)
                cut_sG[len(cut_G):] += len(fv) // ns
                fv = fv.take(cut_sG, 0).take(cut_sG, 1)

        else:
            if self.xc == 'RPA':
                fv = np.eye(nG)
            elif self.xc == 'range_RPA':
                raise NotImplementedError
#                    fv = np.exp(-0.25 * (G_G * self.range_rc) ** 2.0)

            elif self.linear_kernel:
                r = affopen('fhxc_%s_%s_%s_%s.ulm' %
                            (self.tag, self.xc, self.ecut_max, iq))
                fv = r.fhxc_sGsG

                if cut_G is not None:
                    fv = fv.take(cut_G, 0).take(cut_G, 1)

            elif not self.dyn_kernel:
                # static kernel which does not scale with lambda

                r = affopen('fhxc_%s_%s_%s_%s.ulm' %
                            (self.tag, self.xc, self.ecut_max, iq))
                fv = r.fhxc_lGG

                if cut_G is not None:
                    fv = fv.take(cut_G, 1).take(cut_G, 2)

            else:  # dynamical kernel
                r = affopen('fhxc_%s_%s_%s_%s.ulm' %
                            (self.tag, self.xc, self.ecut_max, iq))
                fv = r.fhxc_lwGG

                if cut_G is not None:
                    fv = fv.take(cut_G, 2).take(cut_G, 3)
    else:
        fv = np.eye(nG)

    return fv