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)
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)