예제 #1
0
    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)
예제 #2
0
파일: mayavi2.py 프로젝트: mgtekns/cogue
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
예제 #3
0
파일: mayavi2.py 프로젝트: mgtekns/cogue
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
예제 #4
0
파일: cif.py 프로젝트: mgtekns/cogue
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,
예제 #5
0
    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)