root / ase / io / iwm.py @ 13
Historique | Voir | Annoter | Télécharger (1,13 ko)
1 | 1 | tkerber | from math import pi, cos, sin, sqrt, acos |
---|---|---|---|
2 | 1 | tkerber | import numpy as np |
3 | 1 | tkerber | |
4 | 1 | tkerber | from ase.data import chemical_symbols |
5 | 1 | tkerber | from ase.atoms import Atoms |
6 | 1 | tkerber | from ase.parallel import paropen |
7 | 1 | tkerber | |
8 | 1 | tkerber | iwm_symbols = {'1' : 'C', |
9 | 1 | tkerber | '2' : 'Au', |
10 | 1 | tkerber | '5' : 'Ag'} |
11 | 1 | tkerber | |
12 | 1 | tkerber | def read_iwm(fileobj, index=-1): |
13 | 1 | tkerber | if isinstance(fileobj, str): |
14 | 1 | tkerber | fileobj = open(fileobj)
|
15 | 1 | tkerber | |
16 | 1 | tkerber | lines = fileobj.readlines() |
17 | 1 | tkerber | L1 = lines[1].split()
|
18 | 1 | tkerber | if len(L1) == 1: |
19 | 1 | tkerber | del lines[:3] |
20 | 1 | tkerber | natoms = int(L1[0]) |
21 | 1 | tkerber | else:
|
22 | 1 | tkerber | natoms = len(lines)
|
23 | 1 | tkerber | images = [] |
24 | 1 | tkerber | |
25 | 1 | tkerber | positions = [] |
26 | 1 | tkerber | symbols = [] |
27 | 1 | tkerber | for line in lines[:natoms]: |
28 | 1 | tkerber | symbol, mass, x, y, z = line.split()[:5]
|
29 | 1 | tkerber | if symbol in iwm_symbols: |
30 | 1 | tkerber | symbols.append(iwm_symbols[symbol]) |
31 | 1 | tkerber | else:
|
32 | 1 | tkerber | symbols.append(chemical_symbols[int(symbol)])
|
33 | 1 | tkerber | positions.append([float(x), float(y), float(z)]) |
34 | 1 | tkerber | |
35 | 1 | tkerber | del(lines[natoms:3 * natoms + 3]) |
36 | 1 | tkerber | |
37 | 1 | tkerber | cell = [] |
38 | 1 | tkerber | for line in lines[natoms:natoms+3]: |
39 | 1 | tkerber | x, y, z = line.split()[:3]
|
40 | 1 | tkerber | cell.append(np.array([float(x), float(y), float(z)])) |
41 | 1 | tkerber | |
42 | 1 | tkerber | images.append(Atoms(symbols=symbols, positions=positions, cell=cell)) |
43 | 1 | tkerber | |
44 | 1 | tkerber | return images[index]
|