示例#1
0
 def _set_triplets(self):
     if self._is_nosym:
         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)
示例#2
0
    def _set_triplets(self):
        primitive_lattice  = self._primitive.get_cell()
        if self._is_nosym:
            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,
                 primitive_lattice)
        else:
            (self._triplets_at_q,
             self._weights_at_q,
             self._grid_address,
             self._bz_map,
             map_q) = get_triplets_at_q(
                 self._grid_point,
                 self._mesh,
                 self._symmetry.get_pointgroup_operations(),
                 primitive_lattice)
示例#3
0
 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)
示例#4
0
    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())
示例#5
0
    def set_grid_point(self, grid_point, stores_triplets_map=False):
        reciprocal_lattice = np.linalg.inv(self._primitive.get_cell())
        if self._is_nosym:
            (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 triplet
                for tp in triplet:
                    print grid_address[tp],
                    print np.linalg.norm(
                        np.dot(reciprocal_lattice,
                               grid_address[tp] / self._mesh))
                print sum_q
                print "============= Warning =================="

        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
示例#6
0
    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())
示例#7
0
    def set_grid_point(self, grid_point, stores_triplets_map=False):
        reciprocal_lattice = np.linalg.inv(self._primitive.get_cell())
        if self._is_nosym:
            (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 triplet
                print grid_address[triplet]
                print sum_q
                print "============= Warning =================="

        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
示例#8
0
    def set_grid_point(self, grid_point, i=None, stores_triplets_map=False):
        if i==None:
            self._grid_point = grid_point
            if self._grid_points is not None:
                self._i = np.where(grid_point == self._grid_points)[0][0]
        else:
            self._i = i
            self._grid_point = self._grid_points[i]
        if self._triplets is not None:
            self._triplets_at_q = self._triplets[self._i]
            self._weights_at_q = self._weights[self._i]
            self._triplets_address = self._grid_address[self._triplets_at_q]
            if self._is_dispersed:
                self._triplets_uniq_index_at_grid = self._unique_triplets[self._i]
                self._triplets_maping_at_grid = self._triplets_mappings[self._i]
                self._triplet_sequence_at_grid = self._triplets_sequence[self._i]
        else:
            reciprocal_lattice = np.linalg.inv(self._primitive.get_cell())
            if self._is_nosym:
                (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)
                if self._is_dispersed:
                    self._triplets_uniq_index_at_grid = np.arange(len(triplets_at_q), dtype="intc")
                    self._triplets_maping_at_grid = np.arange(len(triplets_at_q), dtype="intc")
                    self._triplet_sequence_at_grid = np.arange(3, dtype="intc")[np.newaxis].repeat(len(triplets_at_q))

            else:
                (triples_at_q_crude,
                 weights_at_q,
                 grid_address,
                 grid_map)=\
                    get_triplets_at_q_crude(grid_point, self._mesh, self._point_group_operations)

                (triplets_at_q,
                 weights,
                 bz_grid_address,
                 bz_map)=\
                    get_BZ_triplets_at_q(grid_point, self._mesh, reciprocal_lattice, grid_address, grid_map)

                if self._is_dispersed:
                    (unique_triplet_nums,
                     triplets_mappings,
                     triplet_sequence) = \
                        reduce_triplets_by_permutation_symmetry([triples_at_q_crude],
                                                                self._mesh,
                                                                first_mapping=self._grid_mapping,
                                                                first_rotation=self._kpoint_operations[self._grid_mapping_rot],
                                                                second_mapping=np.array([grid_map]))
                    self._triplets_uniq_index_at_grid = unique_triplet_nums
                    self._triplets_maping_at_grid = triplets_mappings[0]
                    self._triplet_sequence_at_grid = triplet_sequence[0]
            sum_qs = bz_grid_address[triplets_at_q].sum(axis=1)
            resi = sum_qs % self._mesh
            if (resi != 0).any():
                triplets = triplets_at_q[np.where(resi != 0)[0]]
                print "============= Warning =================="
                print triplets
                print sum_qs
                print "============= Warning =================="

            self._triplets_at_q = triplets_at_q
            self._weights_at_q = weights_at_q
            self._ir_map_at_q = grid_map