def _set_stage1(self, cell): prim_cell = get_primitive(cell, tolerance=self._symmetry_tolerance) sym_dataset = get_symmetry_dataset(prim_cell) self._space_group_type = sym_dataset['international_standard'] spg_number = sym_dataset['number'] if (spg_number >= 143 and spg_number <= 194 and not self._space_group_type[0] == 'R'): # Hexagonal lattice self._supercell_dimensions = [[3, 3, 2], [2, 2, 2]] else: # Other cases self._supercell_dimensions = [[2, 2, 2]] # Long cell axis is not multiplied. for dimension in self._supercell_dimensions: for i, length in enumerate( get_lattice_parameters(prim_cell.get_lattice())): if length * dimension[i] > 20: dimension[i] = 1 self._tasks = [] for i, dimension in enumerate(self._supercell_dimensions): task = self._get_phonon_task(prim_cell, np.diag(dimension), "phonon-%d" % (i + 1)) self._phre_tasks.append(task) self._tasks.append(task)
def _get_points_with_margin(cell, margin=1e-5): abc = get_lattice_parameters(cell.get_lattice()) points = cell.get_points() points_new = [] symbols_new = [] for p, s in zip(points.T, cell.get_symbols()): for i in (-1, 0, 1): for j in (-1, 0, 1): for k in (-1, 0, 1): p_inspect = p + np.array([i, j, k]) if ((p_inspect > 0 - margin / abc).all() and (p_inspect < 1 + margin / abc).all()): points_new.append(p_inspect) symbols_new.append(s) return np.transpose(points_new), symbols_new
def write_cif_P1(cell, filename=None): a, b, c = get_lattice_parameters(cell.get_lattice()) alpha, beta, gamma = get_angles(cell.get_lattice()) cif = """data_cogue_crystal_converter _symmetry_space_group_name_H-M 'P 1' _symmetry_Int_Tables_number 1 _cell_length_a %.5f _cell_length_b %.5f _cell_length_c %.5f _cell_angle_alpha %.5f _cell_angle_beta %.5f _cell_angle_gamma %.5f _cell_volume %.5f _cell_formula_units_Z 1 loop_ _space_group_symop_operation_xyz x,y,z loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy\n""" % (a, b, c, alpha, beta, gamma, cell.get_volume()) symbols = [] for s, p in zip(cell.get_symbols(), cell.get_points().T): symbols.append(s) cif += "%-7s%2s %10.5f%10.5f%10.5f 1.00000\n" % (s + "%d" % symbols.count(s), s, p[0], p[1], p[2]) if filename: w = open(filename, 'w') w.write(cif) w.close() else: print cif,