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