def get_pwscf_structure(cell, pp_filenames=None): lattice = cell.get_cell() positions = cell.get_scaled_positions() masses = cell.get_masses() chemical_symbols = cell.get_chemical_symbols() unique_symbols = [] atomic_species = [] for symbol, m in zip(chemical_symbols, masses): if symbol not in unique_symbols: unique_symbols.append(symbol) atomic_species.append((symbol, m)) lines = "" lines += ("! ibrav = 0, nat = %d, ntyp = %d\n" % (len(positions), len(unique_symbols))) lines += "CELL_PARAMETERS bohr\n" lines += ((" %21.16f" * 3 + "\n") * 3) % tuple(lattice.ravel()) lines += "ATOMIC_SPECIES\n" for symbol, mass in atomic_species: if pp_filenames is None: lines += " %2s %10.5f %s_PP_filename\n" % (symbol, mass, symbol) else: lines += " %2s %10.5f %s\n" % (symbol, mass, pp_filenames[symbol]) lines += "ATOMIC_POSITIONS crystal\n" for i, (symbol, pos_line) in enumerate(zip( chemical_symbols, get_scaled_positions_lines(positions).split('\n'))): lines += (" %2s " % symbol) + pos_line if i < len(chemical_symbols) - 1: lines += "\n" return lines
def get_elk_structure(cell, sp_filenames=None): """Return Elk structure in text.""" lattice = cell.get_cell() (num_atoms, symbols, scaled_positions, sort_list) = sort_positions_by_symbols(cell.get_chemical_symbols(), cell.get_scaled_positions()) if sp_filenames is None: spfnames = [s + ".in" for s in symbols] else: spfnames = sp_filenames lines = "" lines += "avec\n" lines += ((" %21.16f" * 3 + "\n") * 3) % tuple(lattice.ravel()) lines += "atoms\n" n_pos = 0 lines += " %d\n" % len(num_atoms) for i, (n, s) in enumerate(zip(num_atoms, spfnames)): lines += " '%s'\n" % s lines += " %d\n" % n lines += get_scaled_positions_lines(scaled_positions[n_pos:(n_pos + n)]) if i < len(num_atoms) - 1: lines += "\n" n_pos += n return lines
def get_elk_structure(cell, sp_filenames=None): lattice = cell.get_cell() (num_atoms, symbols, scaled_positions, sort_list) = sort_positions_by_symbols(cell.get_chemical_symbols(), cell.get_scaled_positions()) if sp_filenames is None: spfnames = [s + ".in" for s in symbols] else: spfnames = sp_filenames lines = "" lines += "avec\n" lines += ((" %21.16f" * 3 + "\n") * 3) % tuple(lattice.ravel()) lines += "atoms\n" n_pos = 0 lines += " %d\n" % len(num_atoms) for i, (n, s) in enumerate(zip(num_atoms, spfnames)): lines += " \'%s\'\n" % s lines += " %d\n" % n lines += get_scaled_positions_lines(scaled_positions[n_pos:(n_pos + n)]) if i < len(num_atoms) - 1: lines += "\n" n_pos += n return lines
def get_abinit_structure(cell): znucl = [] numbers = cell.get_atomic_numbers() for n in numbers: if n not in znucl: znucl.append(n) typat = [] for n in numbers: typat.append(znucl.index(n) + 1) lines = "" lines += "natom %d\n" % len(numbers) lines += "typat\n" lines += (" %d" * len(typat) + "\n") % tuple(typat) lines += "ntypat %d\n" % len(znucl) lines += ("znucl" + " %d" * len(znucl) + "\n") % tuple(znucl) lines += "acell 1 1 1\n" lines += "rprim\n" lines += ((" % 20.16f" * 3 + "\n") * 3) % tuple(cell.get_cell().ravel()) lines += "xred\n" lines += get_scaled_positions_lines(cell.get_scaled_positions()) return lines