Advertisement
bolverk

planar_relativistic_breakout_analysis

Apr 12th, 2015
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.84 KB | None | 0 0
  1. def main():
  2.  
  3.     import matplotlib
  4.     matplotlib.use('Qt4Agg')
  5.     import pylab
  6.     import h5py
  7.     import numpy
  8.  
  9.     initial = h5py.File('initial.h5')
  10.     final = h5py.File('final.h5')
  11.    
  12.     for n, key in enumerate(['density','pressure','celerity']):
  13.         pylab.subplot(3,1,n+1)
  14.         pylab.plot(initial['position'],initial[key])
  15.         pylab.plot(final['position'],final[key])
  16.     pylab.subplot(311)
  17.     pylab.title('t = '+str(numpy.array(final['time'])[0]))
  18.     pylab.show()
  19.  
  20. def asymptotic():
  21.  
  22.     import matplotlib
  23.     matplotlib.use('Qt4Agg')
  24.     import pylab
  25.     import h5py
  26.     import numpy
  27.     import math
  28.  
  29.     final = h5py.File('final.h5')
  30.     initial = h5py.File('initial.h5')
  31.  
  32.     gamma_list = numpy.sqrt(numpy.array(final['celerity'])**2+1)
  33.     filtered = {}
  34.     filtered['position'] = [x for x,w in zip(final['position'],
  35.                                              gamma_list)
  36.                             if w>5 and x<2*numpy.max(initial['position'])]
  37.     assert(len(filtered['position'])>0)
  38.     filtered['lorentz'] = [w for x,w in zip(final['position'],
  39.                                              gamma_list)
  40.                            if w>5 and x<2*numpy.max(initial['position'])]
  41.     assert(numpy.max(filtered['position'])<0)
  42.     fit_data = numpy.polyfit(numpy.log(-numpy.array(filtered['position'])),
  43.                              numpy.log(filtered['lorentz']),1)
  44.     pylab.loglog(-numpy.array(final['position']),
  45.                  gamma_list)
  46.     pylab.loglog(-numpy.array(final['position']),
  47.                  numpy.exp(numpy.polyval(fit_data,
  48.                                          numpy.log(-numpy.array(final['position'])))))
  49.     print(fit_data)
  50.     pylab.show()
  51.  
  52. def consolidate(fname):
  53.  
  54.     import h5py
  55.     import numpy
  56.  
  57.     with h5py.File(fname) as f:
  58.         return dict((key,numpy.array(f[key])) for key in f)
  59.  
  60. def calc_celerity_history():
  61.  
  62.     import glob
  63.     import h5py
  64.     import numpy
  65.  
  66.     all_snapshot_files = glob.glob('snapshot_*.h5')
  67.     all_snapshot_files = sorted(all_snapshot_files,
  68.                                 key=lambda x:int(x.replace('snapshot_','').replace('.h5','')))
  69.    
  70.     celerity_histories = []
  71.     time_list = []
  72.     for fname in all_snapshot_files:
  73.         print(fname)
  74.         with h5py.File(fname) as f:
  75.             celerity_histories.append(numpy.array(f['celerity']))
  76.             time_list.append(numpy.array(f['time'])[0])
  77.     celerity_histories = numpy.array(celerity_histories)
  78.     return time_list, celerity_histories
  79.  
  80. def midvals(ar):
  81.  
  82.     import numpy
  83.  
  84.     return 0.5*(numpy.array(ar[1:])+numpy.array(ar[:-1]))
  85.  
  86. def velocity_histories():
  87.  
  88.     import matplotlib
  89.     matplotlib.use('Qt4Agg')
  90.     import pylab
  91.     import numpy
  92.     from joblib import Memory
  93.  
  94.     mem = Memory(cachedir='/home/almog/joblib')
  95.     cached_calc_celerity_history = mem.cache(calc_celerity_history)
  96.     time_list, celerity_histories = cached_calc_celerity_history()
  97.     pylab.subplot(211)
  98.     pylab.plot(time_list, celerity_histories[:,500])
  99.     pylab.subplot(212)
  100.     pylab.plot(midvals(time_list), numpy.diff(celerity_histories[:,500])/numpy.diff(time_list))
  101.     pylab.show()            
  102.  
  103. def asymptotic_2():
  104.  
  105.     import matplotlib
  106.     matplotlib.use('Qt4Agg')
  107.     import pylab
  108.     import h5py
  109.     import numpy
  110.     import math
  111.     import glob
  112.  
  113.     mid = consolidate('mid.h5')
  114.     finals = [consolidate(fname) for fname in glob.glob('milestone_*.h5')]
  115.     mid['lorentz factor'] = numpy.sqrt(mid['celerity']**2+1)
  116.     for itm in finals:
  117.         itm['lorentz factor'] = numpy.sqrt(itm['celerity']**2+1)
  118.         itm['x_list'] = 0.5*(numpy.log10(itm['lorentz factor'])[1:]+
  119.                              numpy.log10(itm['lorentz factor'])[:-1])
  120.         itm['y_list'] = (numpy.diff(numpy.log10(mid['lorentz factor']))/
  121.                          numpy.diff(numpy.log10(itm['lorentz factor'])))
  122.  
  123.     for itm in finals:
  124.         pylab.subplot(211)
  125.         pylab.loglog(itm['lorentz factor'], mid['lorentz factor'],
  126.                      basex=2, basey=2)
  127.         pylab.subplot(212)
  128.         pylab.plot(itm['x_list'], itm['y_list'])
  129.     pylab.plot(itm['x_list'], [1./(1.+numpy.sqrt(3.)) for x in itm['x_list']],'k')
  130.     pylab.ylim((0,1))
  131.     pylab.show()
  132.  
  133. def show_single_snapshot():
  134.  
  135.     import matplotlib
  136.     matplotlib.use('Qt4Agg')
  137.     import pylab
  138.     import h5py
  139.     import numpy
  140.  
  141.     data = consolidate('mid.h5')
  142.    
  143.     for n, key in enumerate(['density','pressure','celerity']):
  144.         pylab.subplot(3,1,1+n)
  145.         pylab.plot(data['position'],data[key])
  146.     pylab.subplot(311)
  147.     pylab.title('t = '+str(data['time'][0]))
  148.     pylab.show()
  149.  
  150. def asymptotic_3():
  151.  
  152.     import matplotlib
  153.     matplotlib.use('Qt4Agg')
  154.     import pylab
  155.     import h5py
  156.     import numpy
  157.     import math
  158.     import glob
  159.  
  160.     mid = consolidate('mid.h5')
  161.     final = consolidate('milestone_10000.h5')
  162.     mid['lorentz_factor'] = numpy.sqrt(mid['celerity']**2+1)
  163.     final['lorentz_factor'] = numpy.sqrt(final['celerity']**2+1)
  164.     #x_list = [numpy.log(gf) for gf,gb in zip(final['lorentz_factor']
  165.     x_list = [numpy.log(gf) for gf,gb in zip(final['lorentz_factor'],
  166.                                              mid['lorentz_factor'])
  167.               if 60>gf>2]
  168.     y_list = [numpy.log(gb) for gf,gb in zip(final['lorentz_factor'],
  169.                                              mid['lorentz_factor'])
  170.               if 60>gf>2]
  171.     fit_data = numpy.polyfit(x_list, y_list, 1)
  172.     print(fit_data)
  173.     print(1./(1+numpy.sqrt(3.)))
  174.     pylab.loglog(final['lorentz_factor'],
  175.                  mid['lorentz_factor'],
  176.                  basex=2, basey=2)
  177.     pylab.loglog(final['lorentz_factor'],
  178.                  numpy.exp(fit_data[1])*final['lorentz_factor']**fit_data[0])
  179.     pylab.show()
  180.  
  181. if __name__ == '__main__':
  182.  
  183.     #main()
  184.     asymptotic_3()
  185.     #show_single_snapshot()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement