root / ase / calculators / jacapo / mayavis.py @ 8
Historique | Voir | Annoter | Télécharger (1,86 ko)
1 | 1 | tkerber | '''
|
---|---|---|---|
2 | 1 | tkerber | mayavi interface to plot atoms, unit cells, and volumetric data
|
3 | 1 | tkerber | '''
|
4 | 1 | tkerber | import numpy as np |
5 | 1 | tkerber | from enthought.mayavi import mlab |
6 | 1 | tkerber | mlab.figure(1, bgcolor=(1,1,1), size=(350, 350)) |
7 | 1 | tkerber | mlab.clf() |
8 | 1 | tkerber | |
9 | 1 | tkerber | def plot_cylinder(start,end,tube_radius=0.1,color=(0,0,0)): |
10 | 1 | tkerber | |
11 | 1 | tkerber | mlab.plot3d([start[0],end[0]],[start[1],end[1]],[start[2],end[2]], |
12 | 1 | tkerber | tube_radius=tube_radius,color=color) |
13 | 1 | tkerber | |
14 | 1 | tkerber | |
15 | 1 | tkerber | def plot_atoms(atoms): |
16 | 1 | tkerber | |
17 | 1 | tkerber | for atom in atoms: |
18 | 1 | tkerber | pos = atom.get_position() |
19 | 1 | tkerber | mlab.points3d([pos[0]],[pos[1]],[pos[2]], |
20 | 1 | tkerber | scale_factor=4,
|
21 | 1 | tkerber | resolution=20,
|
22 | 1 | tkerber | color=(1,0,0), #this should get species specifuc |
23 | 1 | tkerber | scale_mode='none')
|
24 | 1 | tkerber | |
25 | 1 | tkerber | (u0,u1,u2) = atoms.get_cell() |
26 | 1 | tkerber | origin = np.array([0.0,0.0,0.0]) |
27 | 1 | tkerber | |
28 | 1 | tkerber | plot_cylinder(origin,u0) |
29 | 1 | tkerber | plot_cylinder(origin,u1) |
30 | 1 | tkerber | plot_cylinder(origin,u2) |
31 | 1 | tkerber | |
32 | 1 | tkerber | plot_cylinder(u0,u0+u1) |
33 | 1 | tkerber | plot_cylinder(u0,u0+u2) |
34 | 1 | tkerber | |
35 | 1 | tkerber | plot_cylinder(u1,u1+u0) |
36 | 1 | tkerber | plot_cylinder(u1,u1+u2) |
37 | 1 | tkerber | |
38 | 1 | tkerber | plot_cylinder(u2,u2+u0) |
39 | 1 | tkerber | plot_cylinder(u2,u2+u1) |
40 | 1 | tkerber | |
41 | 1 | tkerber | plot_cylinder(u0+u1,u0+u1+u2) |
42 | 1 | tkerber | plot_cylinder(u1+u2,u0+u1+u2) |
43 | 1 | tkerber | plot_cylinder(u0+u2,u0+u1+u2) |
44 | 1 | tkerber | mlab.show() |
45 | 1 | tkerber | |
46 | 1 | tkerber | |
47 | 1 | tkerber | |
48 | 1 | tkerber | |
49 | 1 | tkerber | |
50 | 1 | tkerber | |
51 | 1 | tkerber | if __name__ == '__main__': |
52 | 1 | tkerber | from ase.lattice.cubic import * |
53 | 1 | tkerber | |
54 | 1 | tkerber | from ase.lattice.bravais import cross |
55 | 1 | tkerber | import numpy as np |
56 | 1 | tkerber | |
57 | 1 | tkerber | a = np.array([0.5,0,0]) |
58 | 1 | tkerber | c = np.array([0,1,0],dtype=np.float) |
59 | 1 | tkerber | b1 = c - a |
60 | 1 | tkerber | |
61 | 1 | tkerber | a = np.array([0,1,0],np.float) |
62 | 1 | tkerber | c = np.array([0,0.5,0.5]) |
63 | 1 | tkerber | b2 = c - a |
64 | 1 | tkerber | |
65 | 1 | tkerber | a3 = np.array([2,1,1],np.float) |
66 | 1 | tkerber | |
67 | 1 | tkerber | a1 = cross(b1,a3) |
68 | 1 | tkerber | a2 = cross(b2,a3) |
69 | 1 | tkerber | v211 = FaceCenteredCubic(directions=[a1,a2,a3], |
70 | 1 | tkerber | miller=(None,None,[2,1,1]), |
71 | 1 | tkerber | symbol='Pd',
|
72 | 1 | tkerber | size=(1,1,2), |
73 | 1 | tkerber | debug=0)
|
74 | 1 | tkerber | |
75 | 1 | tkerber | uc = v211.get_cell() |
76 | 1 | tkerber | uc[2][2] += 10.0 |
77 | 1 | tkerber | v211.set_cell(uc) |
78 | 1 | tkerber | |
79 | 1 | tkerber | plot_atoms(v211.repeat((2,2,1))) |