5import matplotlib.pyplot
as plt
14ptnoninteractive = int(os.environ.get(
'PTNOINTERACTIVE',
'0'))
16if ptnoninteractive == 0:
21 print(
"WARNING: Could not import tqdm")
42for filename
in glob.glob(dirname+
"/bulk*vlsv"):
43 parts = filename.split(
"/")[-1].split(
".")
45 timesteps.append(int(parts[1]))
48print(
"Found "+str(tsize)+
" timesteps in directory "+dirname)
53for i,t
in enumerate(timesteps[:1]):
54 f = analysator.vlsvfile.VlsvReader(dirname+
"/bulk."+
"{:07d}".format(t)+
".vlsv")
55 [xsize, ysize, zsize] = map(int,f.get_fsgrid_mesh_size())
56 fg_b = f.read_fsgrid_variable(
"fg_b")
57 B0vec = np.array([np.average(fg_b[:,0]), np.average(fg_b[:,1]), np.average(fg_b[:,2])])
58 B0 = np.sqrt(np.sum(B0vec**2))
60print(
"Found field grid with "+str(xsize)+
"x"+str(ysize)+
"x"+str(zsize)+
" cells")
61print(
"Found "+str(tsize)+
" timesteps")
62print(
"B_0 = "+str(B0)+
" T")
65dt = f.read_parameter(
"dt")
66print(
"dt = "+str(dt)+
" s")
67dtout = float(config[
"io"][
"system_write_t_interval"][0])
68print(
"dtout = "+str(dtout)+
" s")
69xmin = f.read_parameter(
"xmin")
70xmax = f.read_parameter(
"xmax")
72print(
"dx = "+str(dx)+
" m")
73ni = float(config[
"proton_Dispersion"][
"rho"][0])
74print(
"n_p = "+str(ni)+
" m^-3")
75Ti = float(config[
"proton_Dispersion"][
"Temperature"][0])
76print(
"T_p = "+str(Ti)+
" K")
78Wci = SI.e * B0 / SI.mp
79print(
"W_ci = "+str(Wci)+
" 1/s")
80Wce = SI.e * B0 / SI.me
81print(
"W_ce = "+str(Wce)+
" 1/s")
82wpi = np.sqrt(ni * SI.e**2 / SI.mp / SI.eps0)
83print(
"w_pi = "+str(wpi)+
" 1/s")
84wpe = np.sqrt(ne * SI.e**2 / SI.me / SI.eps0)
85print(
"w_pe = "+str(wpe)+
" 1/s")
86vthi = np.sqrt(2.*SI.kB * Ti / SI.mp)
87print(
"v_thi = "+str(vthi)+
" m/s")
88vA = B0 / np.sqrt(SI.mu0 * (SI.me*ne + SI.mp*ni))
89print(
"v_A = "+str(vA)+
" m/s")
90vthe = np.sqrt(2.*SI.kB * Te / SI.me)
91print(
"v_the = "+str(vthe)+
" m/s")
93print(
"d_i = "+str(di)+
" m")
95print(
"d_e = "+str(de)+
" m")
97print(
"r_i = "+str(ri)+
" m")
99print(
"r_e = "+str(re)+
" m")
101print(
"l_D = "+str(lD)+
" m")
104B = np.zeros( (len(timesteps), xsize, 5) , dtype=complex)
107for i
in tqdm(range(len(timesteps))):
110 print(
"Output step "+str(i)+
" at time "+str(t))
111 f = analysator.vlsvfile.VlsvReader(dirname+
"/bulk."+
"{:07d}".format(t)+
".vlsv")
112 fg_b = f.read_fsgrid_variable(
"fg_b")
116B[:,:,3] = B[:,:,1] - complex(
"j")*B[:,:,2]
117B[:,:,4] = B[:,:,1] + complex(
"j")*B[:,:,2]
119if do_windowing==
"spatial" or do_windowing==
"both":
120 spatial_window = np.hamming(xsize)
122 spatial_window = np.ones(xsize)
123if do_windowing==
"temporal" or do_windowing==
"both":
124 temporal_window = np.hamming(tsize)
126 temporal_window = np.ones(tsize)
128window = np.outer(spatial_window, temporal_window).T
130componentnames = [
"x",
"y",
"z",
"left",
"right"]
132print(
"Plotting data")
135 for c
in range(len(componentnames)):
138 plt.figure(
"B"+componentnames[c])
139 X = np.linspace(xmin, xmax, xsize)
140 T = np.linspace(timesteps[0], timesteps[-1], len(timesteps))
141 vmax = np.amax(
abs(B[2:,:,c]))
142 im = plt.pcolormesh(X/ri, T*Wci, np.real(B[:,:,c]), shading=
"gouraud", vmin=-vmax, vmax=vmax)
143 plt.colorbar(im, label=
"B_{"+componentnames[c]+
"} / T")
144 plt.xlabel(
"x / r_i")
145 plt.ylabel(
"t * W_ci")
147 plt.savefig(dirname+
"/B"+componentnames[c]+
".png")
152 plt.figure(
"kB"+componentnames[c])
153 kB = np.fft.fftshift(np.fft.fft2(B[:,:,c]*window))
154 w = 2.*np.pi*np.fft.fftshift(np.fft.fftfreq(tsize, d=dtout))
155 kx = 2.*np.pi*np.fft.fftshift(np.fft.fftfreq(xsize, d=dx))
156 kleft = 1./SI.c * np.sqrt(w**2 - wpe**2/(1.+Wce/w) - wpi**2/(1.-Wci/w))
157 kright = 1./SI.c * np.sqrt(w**2 - wpe**2/(1.-Wce/w) - wpi**2/(1.+Wci/w))
161 powerB = kB.real**2 + kB.imag**2
163 vmax = np.ceil(np.log10(np.amax(powerB)))
166 im = plt.pcolormesh(kx*ri, w/Wci, np.log10(powerB), shading=
'gouraud', vmin=vmin, vmax=vmax)
167 plt.colorbar(im, label=
"log |~B_{"+componentnames[c]+
"}|^2")
168 plt.plot( kleft*ri, w/Wci, color=
"C0", linestyle=
":", label=
"L")
169 plt.plot(-kleft*ri, w/Wci, color=
"C0", linestyle=
":")
170 plt.plot( kright*ri, w/Wci, color=
"C1", linestyle=
":", label=
"R")
171 plt.plot(-kright*ri, w/Wci, color=
"C1", linestyle=
":")
172 plt.plot( kx*ri,
abs(vA*kx/Wci), color=
"C2", linestyle=
":", label=
"vA")
173 plt.plot( kx*ri,
abs(vthi*kx/Wci), color=
"C3", linestyle=
":", label=
"vthi")
174 plt.axhline(Wci/Wci, color=
"C4", linewidth=0.5, label=
"W_ci")
175 plt.xlabel(
"k_x r_i")
176 plt.ylabel(
"w / Wci")
183 plt.savefig(dirname+
"/kB"+componentnames[c]+
".png")
188 plt.figure(
"sB"+componentnames[c])
189 sB = np.fft.fftshift(np.fft.fft(B[:,:,c]*window, axis=1), axes=1)
190 spowerB = sB.real**2 + sB.imag**2
192 im = plt.pcolormesh(T*Wci, kx[mask]*ri, np.log10(spowerB[:,mask].T), shading=
'gouraud')
193 plt.colorbar(im, label=
"log |~B_{"+componentnames[c]+
"}|^2")
194 plt.xlabel(
"t * W_ci")
195 plt.ylabel(
"k_x r_i")
197 plt.savefig(dirname+
"/sB"+componentnames[c]+
".png")
static ARCH_HOSTDEV VecSimple< T > abs(const VecSimple< T > &l)