def set_grid_point(self, grid_point, stores_triplets_map=False): reciprocal_lattice = np.linalg.inv(self._primitive.get_cell()) if not self._is_mesh_symmetry: (triplets_at_q, weights_at_q, grid_address, bz_map, triplets_map_at_q, ir_map_at_q) = get_nosym_triplets_at_q( grid_point, self._mesh, reciprocal_lattice, stores_triplets_map=stores_triplets_map) else: (triplets_at_q, weights_at_q, grid_address, bz_map, triplets_map_at_q, ir_map_at_q) = get_triplets_at_q( grid_point, self._mesh, self._symmetry.get_pointgroup_operations(), reciprocal_lattice, stores_triplets_map=stores_triplets_map) # Special treatment of symmetry is applied when q_direction is used. if self._nac_q_direction is not None: if (grid_address[grid_point] == 0).all(): rotations = [] for r in self._symmetry.get_pointgroup_operations(): dq = self._nac_q_direction dq /= np.linalg.norm(dq) diff = np.dot(dq, r) - dq if (abs(diff) < 1e-5).all(): rotations.append(r) (triplets_at_q, weights_at_q, grid_address, bz_map, triplets_map_at_q, ir_map_at_q) = get_triplets_at_q( grid_point, self._mesh, np.array(rotations, dtype='intc', order='C'), reciprocal_lattice, is_time_reversal=False, stores_triplets_map=stores_triplets_map) for triplet in triplets_at_q: sum_q = (grid_address[triplet]).sum(axis=0) if (sum_q % self._mesh != 0).any(): print("============= Warning ==================") print("%s" % triplet) for tp in triplet: print("%s %s" % (grid_address[tp], np.linalg.norm( np.dot( reciprocal_lattice, grid_address[tp] / self._mesh.astype('double'))))) print("%s" % sum_q) print("============= Warning ==================") self._grid_point = grid_point self._triplets_at_q = triplets_at_q self._weights_at_q = weights_at_q self._triplets_map_at_q = triplets_map_at_q self._grid_address = grid_address self._bz_map = bz_map self._ir_map_at_q = ir_map_at_q self.set_phonons(self._triplets_at_q.ravel())
def _set_triplets(self): if not self._is_mesh_symmetry: if self._log_level: print("Triplets at q without considering symmetry") sys.stdout.flush() (self._triplets_at_q, self._weights_at_q, self._grid_address, self._bz_map, map_triplets, map_q) = get_nosym_triplets_at_q( self._grid_point, self._mesh, self._reciprocal_lattice, with_bz_map=True) else: (self._triplets_at_q, self._weights_at_q, self._grid_address, self._bz_map, map_triplets, map_q) = get_triplets_at_q( self._grid_point, self._mesh, self._symmetry.get_pointgroup_operations(), self._reciprocal_lattice)
def _set_triplets(self): if not self._is_mesh_symmetry: if self._log_level: print("Triplets at q without considering symmetry") sys.stdout.flush() (self._triplets_at_q, self._weights_at_q, _, _) = get_nosym_triplets_at_q(self._grid_point, self._bz_grid) else: (self._triplets_at_q, self._weights_at_q, _, _) = get_triplets_at_q(self._grid_point, self._bz_grid)
def set_grid_point(self, grid_point, stores_triplets_map=False): reciprocal_lattice = np.linalg.inv(self._primitive.get_cell()) if not self._is_mesh_symmetry: (triplets_at_q, weights_at_q, grid_address, bz_map, triplets_map_at_q, ir_map_at_q) = get_nosym_triplets_at_q( grid_point, self._mesh, reciprocal_lattice, stores_triplets_map=stores_triplets_map) else: (triplets_at_q, weights_at_q, grid_address, bz_map, triplets_map_at_q, ir_map_at_q) = get_triplets_at_q( grid_point, self._mesh, self._symmetry.get_pointgroup_operations(), reciprocal_lattice, stores_triplets_map=stores_triplets_map) for triplet in triplets_at_q: sum_q = (grid_address[triplet]).sum(axis=0) if (sum_q % self._mesh != 0).any(): print("============= Warning ==================") print("%s" % triplet) for tp in triplet: print("%s %s" % (grid_address[tp], np.linalg.norm( np.dot( reciprocal_lattice, grid_address[tp] / self._mesh.astype('double'))))) print("%s" % sum_q) print("============= Warning ==================") self._grid_point = grid_point self._triplets_at_q = triplets_at_q self._weights_at_q = weights_at_q self._triplets_map_at_q = triplets_map_at_q self._grid_address = grid_address self._bz_map = bz_map self._ir_map_at_q = ir_map_at_q self.set_phonons(self._triplets_at_q.ravel())
def set_grid_point(self, grid_point, store_triplets_map=False): """Set grid point and prepare grid point triplets.""" if not self._is_mesh_symmetry: ( triplets_at_q, weights_at_q, triplets_map_at_q, ir_map_at_q, ) = get_nosym_triplets_at_q(grid_point, self._bz_grid) else: # Special treatment of symmetry is applied when q_direction is used # at Gamma point = (0 0 0). if (self._bz_grid.addresses[grid_point] == 0).all() and self._nac_q_direction is not None: rotations = [] for i, r in enumerate(self._bz_grid.reciprocal_operations): dq = self._nac_q_direction dq /= np.linalg.norm(dq) diff = np.dot(r, dq) - dq if (abs(diff) < 1e-5).all(): rotations.append(self._bz_grid.rotations[i]) ( triplets_at_q, weights_at_q, triplets_map_at_q, ir_map_at_q, ) = get_triplets_at_q( grid_point, self._bz_grid, reciprocal_rotations=rotations, is_time_reversal=False, ) else: ( triplets_at_q, weights_at_q, triplets_map_at_q, ir_map_at_q, ) = get_triplets_at_q(grid_point, self._bz_grid) # Re-calculate phonon at Gamma-point when q-direction is given. if (self._bz_grid.addresses[grid_point] == 0).all(): self.run_phonon_solver_at_gamma(is_nac=True) elif self._done_nac_at_gamma: if self._nac_q_direction is None: self.run_phonon_solver_at_gamma() else: msg = ( "Phonons at Gamma has been calcualted with NAC, " "but ph-ph interaction is expected to calculate at " "non-Gamma point. Setting Interaction.nac_q_direction = " "None, can avoid raising this exception to re-run phonon " "calculation at Gamma without NAC.") raise RuntimeError(msg) reciprocal_lattice = np.linalg.inv(self._primitive.cell) for triplet in triplets_at_q: sum_q = (self._bz_grid.addresses[triplet]).sum(axis=0) if (sum_q % self.mesh_numbers != 0).any(): print("============= Warning ==================") print("%s" % triplet) for tp in triplet: print("%s %s" % ( self._bz_grid.addresses[tp], np.linalg.norm( np.dot( reciprocal_lattice, self._bz_grid.addresses[tp] / self.mesh_numbers.astype("double"), )), )) print("%s" % sum_q) print("============= Warning ==================") self._triplets_at_q = triplets_at_q self._weights_at_q = weights_at_q if store_triplets_map: self._triplets_map_at_q = triplets_map_at_q self._ir_map_at_q = ir_map_at_q