A. Petrenko (Novosibirsk, 2019)
pwd
#ls -all -h diags/hdf5/
ls diags/hdf5/
#!h5dump --header diags/hdf5/data00000000.h5
import numpy as np
from opmd_viewer import OpenPMDTimeSeries
ts = OpenPMDTimeSeries('diags/hdf5/')
ts.avail_fields
ts.iterations
i = ts.iterations[-1]
i
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [15, 7]
rho, info_rho = ts.get_field( iteration=i, field='rho', plot=True, cmap='bwr', vmax=200, vmin=-200) # , m=1
import holoviews as hv
hv.extension('matplotlib')
import warnings
#warnings.filterwarnings(action='once')
warnings.filterwarnings('ignore')
%output size=350
%opts Image [colorbar=True aspect=2 show_grid=False] (cmap='bwr')
from holoviews.plotting import Plot
%opts Image [fontsize={'title':12, 'xlabel':12, 'ylabel':12, 'ticks':12, 'legend': 12}]
def plot_fbpic_fmap(i=None, field_name='rho', coord='', units=None, field_range=(None,None),
z_range=(None,None), x_range=(None,None)):
if not i: i = ts.iterations[-1]
t = ts.t[ts.iterations == i][0]
A, info = ts.get_field(iteration=i, field=field_name, coord=coord, plot=False)
A = A[::-1]
zmin = info_rho.zmin*1e3 # mm
zmax = info_rho.zmax*1e3 # mm
xmin = info_rho.rmin*1e3 # mm
xmax = info_rho.rmax*1e3 # mm
bounds=(zmin-zmax, xmin, zmax-zmax, xmax)
dim_field = hv.Dimension(field_name, unit=units, range=field_range)
dim_z = hv.Dimension('z', unit='mm', label=r'$z-z_0$', range=z_range)
dim_x = hv.Dimension('x', unit='mm', range=x_range)
return hv.Image(A, bounds=bounds, kdims=[dim_z,dim_x], vdims=dim_field,
label=("%s%s at t = %.2f ps" % (field_name, coord, t*1e12)) )
plot_fbpic_fmap(field_range=(-100,+100))
i_plots = ts.iterations[1:]
#i_plots = ts.iterations
items = [(i, plot_fbpic_fmap(i, 'E', 'z', units='V/m', field_range=(-1.5e9,+1.5e9))) for i in i_plots]
hv.HoloMap(items, kdims = ['Iteration'])
Plot Ez on axis:
img = plot_fbpic_fmap(i, 'E', 'z', units='V/m', field_range=(-1.5e9,+1.5e9))
z_Ez = img.sample(x=0)
%opts Curve [aspect=2 show_grid=True]
(img + z_Ez).cols(1)
z_Ez.data['E'].max()/1e9
c = 299792458 # m/sec
Ez_vals = []
t_vals = []
for i, img in items:
t = ts.t[ts.iterations == i][0]
t_vals.append(t)
z_Ez = img.sample(x=0)
Ez = z_Ez.data['E'].max()/1e9 # GV/m
#print(Ez)
Ez_vals.append(Ez)
s_vals = np.array(t_vals)*c
Ez_vals = np.array(Ez_vals) # GV/m
dim_s = hv.Dimension('s', unit='m', range=(0, None))
dim_Ez = hv.Dimension('Ez', unit='GV/m', range=(0, None))
hv.Curve((s_vals,Ez_vals), kdims=dim_s, vdims=dim_Ez)
np.savetxt("Ez_max.txt", np.transpose([s_vals,Ez_vals]), delimiter=' ', header='s [m], Ez_max [GV/m]')
%opts Image [show_grid=True]
items = [(i, plot_fbpic_fmap(i, 'rho_bunch', units='a.u.', field_range=(-10,+10))) for i in i_plots]
hv.HoloMap(items, kdims = ['Iteration'])
# Zoom:
items = [(i, plot_fbpic_fmap(i, 'rho_bunch', units='a.u.',
field_range=(-20,+20), z_range=(-120,-110),
x_range=(-0.4,+0.4)) ) for i in i_plots]
hv.HoloMap(items, kdims = ['Iteration'])
items = [(i, plot_fbpic_fmap(i, 'rho', units='a.u.', field_range=(-200,+200))) for i in i_plots]
hv.HoloMap(items, kdims = ['Iteration'])