Advertisement
bolverk

offset_supernova_gravity_sink_analysis

Mar 4th, 2015
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.58 KB | None | 0 0
  1. def consolidate(fname):
  2.  
  3.     import h5py
  4.     import numpy
  5.  
  6.     with h5py.File(fname) as f:
  7.         return dict((key,numpy.array(f[key])) for key in f)
  8.  
  9. def calc_triangle_area(x1,x2,x3,y1,y2,y3):
  10.  
  11.     dx_a = x2 - x1
  12.     dx_b = x3 - x1
  13.     dy_a = y2 - y1
  14.     dy_b = y3 - y1
  15.     return abs(0.5*(dx_a*dy_b-dx_b*dy_a))
  16.  
  17. def calc_polygon_area(x_list, y_list):
  18.  
  19.     res = 0
  20.     for i in range(2,len(x_list)):
  21.         res += calc_triangle_area(x_list[0],
  22.                                   x_list[i-1],
  23.                                   x_list[i],
  24.                                   y_list[0],
  25.                                   y_list[i-1],
  26.                                   y_list[i])
  27.     return res
  28.  
  29. def calc_mass(fname):
  30.  
  31.     import numpy
  32.  
  33.     data = consolidate(fname)
  34.     vert_x_raw = data['x position of vertices']
  35.     vert_y_raw = data['y position of vertices']
  36.     vert_n_raw = data['Number of vertices in cell']
  37.     vert_idx_list = numpy.concatenate([[0],numpy.cumsum(vert_n_raw)])
  38.     areas = []
  39.     for i in range(len(data['Number of vertices in cell'])):
  40.         upbound = vert_idx_list[i+1]
  41.         lowbound = vert_idx_list[i]
  42.         areas.append(calc_polygon_area(vert_x_raw[lowbound:upbound],
  43.                                        vert_y_raw[lowbound:upbound]))
  44.     areas = numpy.array(areas)
  45.     masses = areas*data['density']
  46.    
  47.     return sum([m for x,y,m in zip(data['x_coordinate'],
  48.                                    data['y_coordinate'],
  49.                                    masses) if x**2+y**2<500**2])
  50.  
  51. def mass_history():
  52.  
  53.     import matplotlib
  54.     matplotlib.use('Qt4Agg')
  55.     import glob
  56.     import pylab
  57.     import numpy
  58.  
  59.     time_list, mass_list, x_mom_list, y_mom_list, energy_list, tracer = numpy.loadtxt('conserved.txt',unpack=True)
  60.     pylab.plot(time_list, mass_list[0] - mass_list)
  61.     pylab.xlabel('Time [year]')
  62.     pylab.ylabel(r'Mass [$M_{\odot}$]')
  63.     pylab.show()
  64.  
  65. def main():
  66.  
  67.     import matplotlib
  68.     matplotlib.use('Qt4Agg')
  69.     import pylab
  70.     import numpy
  71.  
  72.     data = consolidate('snapshot_60.h5')
  73.     g = 5./3.
  74.     data['abs_velocity'] = numpy.sqrt(data['x_velocity']**2+
  75.                                       data['y_velocity']**2)
  76.     data['sound_speed'] = numpy.sqrt(g*data['pressure']/data['density'])
  77.     data['mach_number'] = data['abs_velocity']/data['sound_speed']
  78.     pylab.tricontourf(data['x_coordinate'],
  79.                       data['y_coordinate'],
  80.                       data['y_velocity'],50)
  81.     pylab.colorbar()
  82.     pylab.axis('equal')
  83.     pylab.show()
  84.  
  85. if __name__ == '__main__':
  86.  
  87.     mass_history()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement