Example #1
0
    def get_matrix_contribution(self,
                                grid_points,
                                frequency_step=1.0,
                                sigmas=[0.1],
                                is_adaptive_sigma=False,
                                filename=None):
        mc = Collision(self._interaction,
                       sigmas=sigmas,
                       is_adaptive_sigma=is_adaptive_sigma,
                       frequencies=self._frequencies,
                       degeneracy=self._degeneracy,
                       write=write_scr,
                       read=read_scr,
                       cutoff_frequency=self._cutfr,
                       cutoff_lifetime=self._cutlt)
        is_sum = False
        if grid_points == None:
            is_sum = True
            if self._is_nosym:  # All grid points
                grid_points = np.arange(np.product(self._mesh))
            else:  # Automatic sampling
                (grid_points, grid_weights,
                 grid_address) = get_ir_grid_points(self._mesh,
                                                    self._primitive)
        matrix_contributions = []
        for gp in grid_points:
            print "# grid %d" % gp
            mc.set_grid_point(gp)
            mc.run_interaction()
            matrix_contributions_temp = []
            for sigma in sigmas:
                mc.set_sigma(sigma)
                max_freq = (np.amax(self._interaction.get_phonons()[0]) * 2 +
                            sigma * 4)
                fpoints = np.arange(0, max_freq + frequency_step / 2,
                                    frequency_step)
                mc.set_fpoints(fpoints)
                mc.run()
                matrix_contribution = mc.get_imag_self_energy()
                matrix_contributions_temp.append(matrix_contribution)
                if not is_sum:
                    write_matrix_contribution(gp,
                                              self._mesh,
                                              fpoints,
                                              matrix_contribution,
                                              sigma=sigma,
                                              filename=filename)
            matrix_contributions.append(matrix_contributions_temp)
        matrix_contributions = np.array(matrix_contributions)

        if is_sum:
            for i, sigma in enumerate(sigmas):
                write_matrix_contribution(None,
                                          self._mesh,
                                          fpoints,
                                          np.sum(matrix_contributions[:, i],
                                                 axis=0),
                                          sigma=sigma,
                                          filename=filename)
Example #2
0
    def get_matrix_contribution(self,
                                grid_points,
                                frequency_step=1.0,
                                sigmas=[0.1],
                                is_adaptive_sigma=False,
                                filename=None):
        mc = Collision(self._interaction,
                            sigmas=sigmas,
                            is_adaptive_sigma=is_adaptive_sigma,
                            frequencies = self._frequencies,
                            degeneracy=self._degeneracy,
                            write=write_scr,
                            read=read_scr,
                            cutoff_frequency=self._cutfr,
                            cutoff_lifetime=self._cutlt)
        is_sum = False
        if grid_points == None:
            is_sum = True
            if self._is_nosym: # All grid points
                grid_points = np.arange(np.product(self._mesh))
            else: # Automatic sampling
                (grid_points,
                 grid_weights,
                 grid_address) = get_ir_grid_points(
                    self._mesh,
                    self._primitive)
        matrix_contributions = []
        for gp in grid_points:
            print "# grid %d" %gp
            mc.set_grid_point(gp)
            mc.run_interaction()
            matrix_contributions_temp = []
            for sigma in sigmas:
                mc.set_sigma(sigma)
                max_freq = (np.amax(self._interaction.get_phonons()[0]) * 2
                            + sigma * 4)
                fpoints = np.arange(0, max_freq + frequency_step / 2,
                                    frequency_step)
                mc.set_fpoints(fpoints)
                mc.run()
                matrix_contribution = mc.get_imag_self_energy()
                matrix_contributions_temp.append(matrix_contribution)
                if not is_sum:
                    write_matrix_contribution(
                                gp,
                                self._mesh,
                                fpoints,
                                matrix_contribution,
                                sigma=sigma,
                                filename=filename)
            matrix_contributions.append(matrix_contributions_temp)
        matrix_contributions = np.array(matrix_contributions)

        if is_sum:
            for i, sigma in enumerate(sigmas):
                write_matrix_contribution(
                                    None,
                                    self._mesh,
                                    fpoints,
                                    np.sum(matrix_contributions[:,i], axis=0),
                                    sigma=sigma,
                                    filename=filename)