Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
electrostatic_potential.py
Go to the documentation of this file.
1 # Plot the atoms and the bonds ################################################
2 from pylab import *
3 from mayavi import mlab
4 from os.path import join
5 import h5py
6 from argparse import ArgumentParser
7 from glob import glob
8 import os
9 import os.path
10 
11 parser = ArgumentParser()
12 parser.add_argument("results_path")
13 parser.add_argument("--id", nargs='?', default="tmp")
14 args = parser.parse_args()
15 
16 output_dir = "tmp"
17 
18 if args.id != "tmp":
19  try:
20  from sumatra.projects import load_project
21  output_dir = os.path.join(os.path.abspath(load_project().data_store.root), args.id)
22  except ImportError:
23  pass
24 
25 if not os.path.exists(output_dir):
26  os.makedirs(output_dir)
27 
28 def draw_atoms(atoms, atom_meta):
29  n_electrons = 0
30  counter = 0
31  for atom in atoms:
32  if atom_meta[counter]["type"] == 1:
33  color = (1, 1, 1)
34  elif atom_meta[counter]["type"] == 8:
35  color = (1, 0, 0)
36  else:
37  color = (1, 1, 0)
38  mlab.points3d(atom[0], atom[1], atom[2],
39  scale_factor=0.3,
40  resolution=20,
41  color=color,
42  scale_mode='none')
43  counter += 1
44  return n_electrons
45 
46 #path_name = "/home/svenni/Dropbox/projects/programming/hartree-fock/build-hartree-fock-Desktop_Qt_5_2_1_GCC_64bit-Release/app"
47 path_name = "/home/svenni/Dropbox/projects/programming/hartree-fock/build-hartree-fock-stan-Desktop_Qt_5_2_1_GCC_64bit-Release/app"
48 
49 atoms_data_file = h5py.File(join(path_name, "results.h5"))
50 atom_meta = atoms_data_file.get("atomMeta")[:]
51 atoms = atoms_data_file.get("state")[:]
52 atoms_data_file.close()
53 
54 file_name = "electrostatic_potential.h5"
55 density_file = h5py.File(join(path_name, file_name))
56 data = density_file.get("dataset")[:]
57 density_file.close()
58 
59 print "Data min,max:",data.min(),data.max()
60 
61 X,Y,Z = mgrid[-5:5:1j*data.shape[0], -5:5:1j*data.shape[1], -5:5:1j*data.shape[2]]
62 
63 mlab.figure(2, bgcolor=(0, 0, 0), size=(1280, 720))
64 mlab.clf()
65 n_electrons = draw_atoms(atoms, atom_meta)
66 data_max_min_diff = (data.max() - data.min())
67 levels = [0.0003, 0.008]
68 contours = []
69 for level in levels:
70  contours.append(data.min() + level * data_max_min_diff)
71 contours = [-0.03, 0.7]
72 iso = mlab.contour3d(X, Y, Z, data, vmin=contours[0], vmax=contours[-1], opacity=0.5, contours=contours)
73 
74 mlab.savefig("ch4-volume.x3d")