Exemple #1
0
    def _create_supercell(self, unitcell, symprec):
        mat = self._supercell_matrix
        frame = self._get_surrounding_frame(mat)
        sur_cell, u2sur_map = self._get_simple_supercell(frame, unitcell)
    
        # Trim the simple supercell by the supercell matrix
        trim_frame = np.array([mat[0] / float(frame[0]),
                               mat[1] / float(frame[1]),
                               mat[2] / float(frame[2])])
        supercell, sur2s_map = trim_cell(trim_frame,
                                         sur_cell,
                                         symprec)

        multi = supercell.get_number_of_atoms() / unitcell.get_number_of_atoms()
        
        if multi != determinant(self._supercell_matrix):
            print "Supercell creation failed."
            Atoms.__init__(self)
        else:            
            Atoms.__init__(self,
                           numbers=supercell.get_atomic_numbers(),
                           masses=supercell.get_masses(),
                           magmoms=supercell.get_magnetic_moments(),
                           scaled_positions=supercell.get_scaled_positions(),
                           cell=supercell.get_cell(),
                           pbc=True)
            self._u2s_map = np.arange(unitcell.get_number_of_atoms()) * multi
            self._u2u_map = dict([(j, i) for i, j in enumerate(self._u2s_map)])
            self._s2u_map = np.array(u2sur_map)[sur2s_map] * multi
Exemple #2
0
    def _create_supercell(self, unitcell, symprec):
        mat = self._supercell_matrix
        frame = self._get_surrounding_frame(mat)
        sur_cell, u2sur_map = self._get_simple_supercell(frame, unitcell)

        # Trim the simple supercell by the supercell matrix
        trim_frame = np.array([
            mat[0] / float(frame[0]), mat[1] / float(frame[1]),
            mat[2] / float(frame[2])
        ])
        supercell, sur2s_map = trim_cell(trim_frame, sur_cell, symprec)

        multi = supercell.get_number_of_atoms() / unitcell.get_number_of_atoms(
        )

        if multi != determinant(self._supercell_matrix):
            print "Supercell creation failed."
            Atoms.__init__(self)
        else:
            Atoms.__init__(self,
                           numbers=supercell.get_atomic_numbers(),
                           masses=supercell.get_masses(),
                           magmoms=supercell.get_magnetic_moments(),
                           scaled_positions=supercell.get_scaled_positions(),
                           cell=supercell.get_cell(),
                           pbc=True)
            self._u2s_map = np.arange(unitcell.get_number_of_atoms()) * multi
            self._u2u_map = dict([(j, i) for i, j in enumerate(self._u2s_map)])
            self._s2u_map = np.array(u2sur_map)[sur2s_map] * multi
Exemple #3
0
 def __init__( self, supercell, supercell_to_unitcell_map ):
     Atoms.__init__( self,
                     numbers = supercell.get_atomic_numbers(),
                     masses = supercell.get_masses(),
                     scaled_positions = supercell.get_scaled_positions(),
                     cell = supercell.get_cell(),
                     pbc = True )
     self.s2u_map = supercell_to_unitcell_map
Exemple #4
0
 def __init__(self, supercell, supercell_to_unitcell_map):
     Atoms.__init__(self,
                    numbers = supercell.get_atomic_numbers(),
                    masses = supercell.get_masses(),
                    magmoms = supercell.get_magnetic_moments(),
                    scaled_positions = supercell.get_scaled_positions(),
                    cell = supercell.get_cell(),
                    pbc = True)
     self.s2u_map = supercell_to_unitcell_map
Exemple #5
0
    def _primitive_cell(self, supercell):
        trimed_cell, p2s_map = trim_cell(self.frame, supercell, self.symprec)
        Atoms.__init__(self,
                       numbers=trimed_cell.get_atomic_numbers(),
                       masses=trimed_cell.get_masses(),
                       magmoms=trimed_cell.get_magnetic_moments(),
                       scaled_positions=trimed_cell.get_scaled_positions(),
                       cell=trimed_cell.get_cell(),
                       pbc=True)

        self.p2s_map = p2s_map
Exemple #6
0
    def _primitive_cell(self, supercell):
        trimed_cell, p2s_map = trim_cell(self._primitive_matrix, supercell,
                                         self._symprec)
        Atoms.__init__(self,
                       numbers=trimed_cell.get_atomic_numbers(),
                       masses=trimed_cell.get_masses(),
                       magmoms=trimed_cell.get_magnetic_moments(),
                       scaled_positions=trimed_cell.get_scaled_positions(),
                       cell=trimed_cell.get_cell(),
                       pbc=True)

        self._p2s_map = np.array(p2s_map, dtype='intc')
Exemple #7
0
    def __primitive_cell(self, supercell):
        trimed_cell, p2s_map = trim_cell( self.frame,
                                          supercell,
                                          self.symprec )
        Atoms.__init__( self,
                        numbers = trimed_cell.get_atomic_numbers(),
                        masses = trimed_cell.get_masses(),
                        scaled_positions = trimed_cell.get_scaled_positions(),
                        cell = trimed_cell.get_cell(),
                        pbc = True )

        self.p2s_map = p2s_map
Exemple #8
0
    def _primitive_cell(self, supercell):
        trimed_cell, p2s_map = trim_cell(self._primitive_matrix,
                                         supercell,
                                         self._symprec)
        Atoms.__init__(self,
                       numbers=trimed_cell.get_atomic_numbers(),
                       masses=trimed_cell.get_masses(),
                       magmoms=trimed_cell.get_magnetic_moments(),
                       scaled_positions=trimed_cell.get_scaled_positions(),
                       cell=trimed_cell.get_cell(),
                       pbc=True)

        self._p2s_map = np.array(p2s_map, dtype='intc')