def update(filename): if verbose > 0: print('Generating frame for file {}'.format(filename)) data = sdf.read(filename) var = data.__dict__[varname] vdata = var.data grid = var.grid i1 = 0 y = grid.data[i1] ax = plt.gca() im.set_array(vdata.ravel()) # Hack to change y axis for moving window. Change tick labels # instead of changing the limits of axes. This plays better # with pcolormesh. ymult, ysym = get_si_prefix(np.max(y) - np.min(y)) curr_ticks = ax.get_yticks() new_ticks = np.linspace(np.min(y), np.max(y), num=np.size(curr_ticks)) new_ticks = np.array(['{:.2f}'.format(x * ymult) for x in new_ticks]) ax.set_yticklabels(new_ticks) ax.set_ylabel(grid.labels[i1] + ' $(' + ysym + grid.units[i1] + ')$') plt.title('step={}, time={}'.format(data.Header['step'], data.Header['time'])) return im,
def main(): path = "/Users/stephendiiorio/Documents/Research/1D_Sim/" fnums = ["00056", "00060", "00070", "00088"] fname = [] for n in fnums: fname.append(path + n + ".sdf") fig, axarr = plt.subplots(2, 2, sharex='col', sharey='row') fig.set_facecolor("w") txt = fig.suptitle('Electric Field Evolution', verticalalignment='bottom') # only have a single file to plot, so we so this little hack since # axarr does not come out in an array in this case if not isinstance(axarr, np.ndarray): axarr = np.array([axarr]) e_data = [] t_data = [] for i in range(len(fname)): sdfdata = sdf.read(fname[i]) e_data.append(sdfdata.Electric_Field_Ex) t_data.append(sdfdata.Header['time']) x_axis = e_data[i].grid_mid.data[0] tmult0, tsym0 = get_si_prefix(t_data[0]) tmult1, tsym1 = get_si_prefix(t_data[1]) tmult2, tsym2 = get_si_prefix(t_data[2]) tmult3, tsym3 = get_si_prefix(t_data[3]) axarr[0, 0].plot(x_axis, e_data[0].data, 'k') axarr[0, 0].set_title(('t={0:.2f} $' + tsym0 + 's$').format(t_data[0] * tmult0)) axarr[0, 1].plot(x_axis, e_data[1].data, 'k') axarr[0, 1].set_title(('t={0:.2f} $' + tsym1 + 's$').format(t_data[1] * tmult1)) axarr[1, 0].plot(x_axis, e_data[2].data, 'k') axarr[1, 0].set_title(('t={0:.2f} $' + tsym2 + 's$').format(t_data[2] * tmult2)) axarr[1, 1].plot(x_axis, e_data[3].data, 'k') axarr[1, 1].set_title(('t={0:.2f} $' + tsym3 + 's$').format(t_data[3] * tmult3)) xmin, xmax = get_var_range(x_axis) xmult, xsym = get_si_prefix(xmax - xmin) axarr[1, 0].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult))) axarr[1, 1].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult))) ymult1, ysym1 = get_si_prefix(e_data[0].data.max() - e_data[0].data.min()) ymult2, ysym2 = get_si_prefix(e_data[2].data.max() - e_data[2].data.min()) axarr[0, 0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult1))) axarr[1, 0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult2))) axarr[0, 0].set(ylabel='Electric Field' + ' $(' + ysym1 + 'V/m)$') axarr[1, 0].set(xlabel='x' + ' $(' + xsym + 'm)$', ylabel='Electric Field' + ' $(' + ysym2 + 'V/m)$') axarr[1, 1].set(xlabel='x' + ' $(' + xsym + 'm)$') # Hide x labels and tick labels for top plots and y ticks for right plots. for ax in axarr.flat: ax.label_outer() plt.savefig('efield.png', dpi=600, bbox_extra_artists=(txt,), bbox_inches = "tight")
def update(filename): if verbose > 0: print('Generating frame for file {}'.format(filename)) data = sdf.read(filename) var = data.__dict__[varname] vdata = var.data im.set_ydata(vdata) ax = plt.gca() ticker.Locator.MAXTICKS = 2000 ax.xaxis.set_major_locator(ticker.MultipleLocator(5e-6)) ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.5e-6)) ax.yaxis.set_major_locator(ticker.MultipleLocator(1e9)) ax.yaxis.set_minor_locator(ticker.MultipleLocator(0.1e9)) ax.set_ylim(np.min(vdata), np.max(vdata)) ymult, ysym = get_si_prefix(np.max(vdata) - np.min(vdata)) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) plt.ylabel(var.name + ' $(' + ysym + var.units + ')$') plt.title('step={}, time={}'.format(data.Header['step'], data.Header['time'])) return im,
def main(): path = "/scratch/lsa_flux/diiorios/Exp_Ar_32618/Full_smaller/" fnums = ["00008", "00200"] fname = [] for n in fnums: fname.append(path + n + ".sdf") fig, axarr = plt.subplots(1, 2, sharey='row') plt.set_cmap(cm.coolwarm) fig.set_facecolor("w") # txt = fig.suptitle('Laser Focus and Initial Electric Field', verticalalignment='bottom') # only have a single file to plot, so we so this little hack since # axarr does not come out in an array in this case if not isinstance(axarr, np.ndarray): axarr = np.array([axarr]) x_data = [] y_data = [] e_data = [] t_data = [] i0 = 1 i1 = 0 for i in range(len(fname)): sdfdata = sdf.read(fname[i]) e_data.append(sdfdata.Electric_Field_Ey) x_data.append(e_data[i].grid.data[i0]) y_data.append(e_data[i].grid.data[i1]) t_data.append(sdfdata.Header['time']) tmult0, tsym0 = get_si_prefix(t_data[0]) tmult1, tsym1 = get_si_prefix(t_data[1]) ymin1, ymax1 = get_var_range(y_data[0]) ymult1, ysym1 = get_si_prefix(ymax1 - ymin1) ymin2, ymax2 = get_var_range(y_data[1]) ymult2, ysym2 = get_si_prefix(ymax2 - ymin2) y_data[0] = np.add(y_data[0], 4.5/ymult1) y_data[1] = np.add(y_data[1], 4.5/ymult2) xmin1, xmax1 = get_var_range(x_data[0]) xmult1, xsym1 = get_si_prefix(xmax1 - xmin1) xmin2, xmax2 = get_var_range(x_data[1]) xmult2, xsym2 = get_si_prefix(xmax2 - xmin2) # calculate again because array was shifted ymin1, ymax1 = get_var_range(y_data[0]) ymult1, ysym1 = get_si_prefix(ymax1 - ymin1) ymin2, ymax2 = get_var_range(y_data[1]) ymult2, ysym2 = get_si_prefix(ymax2 - ymin2) axarr[0].pcolormesh(x_data[0], y_data[0], e_data[0].data) axarr[0].set_title(('t={0:.2f} $' + tsym0 + 's$').format(t_data[0] * tmult0)) im = axarr[1].pcolormesh(x_data[1], y_data[1], e_data[1].data) axarr[1].set_title(('t={0:.2f} $' + tsym1 + 's$').format(t_data[1] * tmult1)) axarr[0].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult1))) axarr[1].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult2))) axarr[0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult1))) axarr[0].set(xlabel='x' + ' $(' + xsym1 + 'm)$', ylabel='y' + ' $(' + ysym1 + 'm)$') axarr[1].set(xlabel='x' + ' $(' + xsym2 + 'm)$') axarr[0].set_ylim([-10e-6, 10e-6]) axarr[1].set_ylim([-10e-6, 10e-6]) axarr[0].get_xaxis().set_tick_params(direction='in') axarr[1].get_xaxis().set_tick_params(direction='in') axarr[0].get_yaxis().set_tick_params(direction='in') axarr[1].get_yaxis().set_tick_params(direction='in') plt.set_cmap(cm.coolwarm) # divider = make_axes_locatable(axarr[1]) # cax = divider.append_axes("right", "5%", pad="15%") cbar = fig.colorbar(im, ax=axarr.ravel().tolist(),#cax=cax, ax=axarr[1], label='Electric Field ($E_{y}$) Direction', ticks=[e_data[1].data.min(), e_data[1].data.max()]) cbar.ax.set_yticklabels(['$(-)$', '$(+)$']) plt.savefig('2defield.png', dpi=600, # bbox_extra_artists=(txt,), bbox_inches="tight")
def plot_figure(filename, varname, vmin=None, vmax=None, scale=False, figsize=None, ax=None): """ Plot the given variable for each file from a simulation """ from matplotlib.ticker import FuncFormatter global verbose, title_info if verbose > 1: print('Plotting {} from file {}'.format(varname, filename)) axis_type = 1 # 0 - off, 1 - left+bottom, 2 - all if ax is not None: fig = ax.get_figure() elif figsize is None: fig, ax = plt.subplots(1, 1, figsize=(8, 8)) else: fig, ax = plt.subplots(1, 1, figsize=figsize) if verbose > 1: print('Adjusting subplot') if axis_type == 0: plt.subplots_adjust(left=0, right=0.9, bottom=0.05, top=0.92, wspace=0, hspace=0) else: plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.92, wspace=0, hspace=0) plt.set_cmap(cm.coolwarm) if verbose > 1: print('Reading data') # Draw initial plot f = filename data = sdf.read(f) var = data.__dict__[varname] grid = var.grid num_x_axis_pts, num_y_axis_pts = grid.dims vdata = var.data.reshape(num_x_axis_pts, num_y_axis_pts).T print(vdata) vscale = get_scale(filename, varname, scale) i0 = 0 i1 = 1 if len(grid.dims) == 2: x = grid.data[i0] y = grid.data[i1] else: if (grid.dims[0] == 1): orig = var.grid.name.replace('/', '_') + '_Orig' grid = data.__dict__[orig] i0 = 2 i1 = 1 x = grid.data[i0] y = grid.data[i1] elif (grid.dims[1] == 1): i0 = 0 i1 = 1 x = grid.data[0][:, 0, :] y = grid.data[1][:, 0, :] else: i0 = 0 i1 = 2 x = grid.data[0][:, :, 0] y = grid.data[1][:, :, 0] z = grid.data[2][:, :, 0] x = np.sqrt(x * x + y * y) y = z if verbose > 1: print('Scaling data') vdata = vdata * vscale if vmin is None: vmin, vmax = get_var_range_from_sdf_files((filename,), varname, scale) if verbose > 1: print('Plotting data') im = ax.pcolormesh(x, y, vdata, vmin=vmin, vmax=vmax) if verbose > 1: print('Plotting axes') def fmt(x, pos): return r'${}$'.format(x) xmult, xsym = get_si_prefix(np.max(x) - np.min(x)) ymult, ysym = get_si_prefix(np.max(y) - np.min(y)) if verbose > 1: print('Scale axis by {} ({}, {})'.format(xmult, np.min(x), np.max(x))) ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) ax.set_xlabel(grid.labels[i0] + ' $(' + xsym + grid.units[i0] + ')$') ax.set_ylabel(grid.labels[i1] + ' $(' + ysym + grid.units[i1] + ')$') ax.axis('image') if axis_type == 0: ax.axis('off') elif axis_type == 1: ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.get_xaxis().tick_bottom() ax.get_yaxis().tick_left() # Add colorbar mult, sym = get_si_prefix(vmax - vmin) if verbose > 0 and plot_figure.first: plot_figure.first = False print('Scale colorbar by {} ({}, {})'.format(mult, vmin, vmax)) data_label = var.name + ' $(' + sym + var.units + ')$' if title_info: legend_label = '' else: legend_label = data_label divider = make_axes_locatable(ax) cax = divider.append_axes("right", "5%", pad="15%") cbar = fig.colorbar(im, cax=cax, ax=ax, label=legend_label, format=FuncFormatter(lambda x, y: x * mult)) if title_info: title_label = data_label + ', ' else: title_label = '' fig.fs = 'large' fig.suptitle(title_label + 'step={}, time={}'.format(data.Header['step'], data.Header['time']), fontsize=fig.fs, y=0.98) fig.sca(ax) fig.canvas.draw() if verbose > 1: print('Done plotting {} from file {}'.format(varname, filename)) return im, ax
def plot_first_figure(file_list, varname, vmin=None, vmax=None, scale=False): global verbose, title_info if verbose > 1: print('Getting data range') if vmin is None and vmax is None: vmin, vmax = get_var_range_from_sdf_files(file_list, varname, scale) elif vmin is None: vmin = get_var_range_from_sdf_files(file_list, varname, scale)[0] elif vmax is None: vmax = get_var_range_from_sdf_files(file_list, varname, scale)[1] if verbose > 1: print('Found data range ({}, {})'.format(vmin, vmax)) filename = file_list[0] im, ax = plot_figure(filename, varname, vmin, vmax, scale) fig = ax.get_figure() renderer = find_renderer(fig) box_orig = fig.bbox_inches box_raw = fig.get_tightbbox(renderer) pp = box_raw.get_points() figsize = (pp[1, 0] - pp[0, 0], pp[1, 1] - pp[0, 1]) ratio = figsize[0] / figsize[1] if ratio > 1: w = box_orig.width h = w / ratio h = round(10 * h) / 10. figsize = (w, h) else: h = box_orig.height w = h * ratio w = round(10 * w) / 10. figsize = (w, h) im, ax = plot_figure(filename, varname, vmin, vmax, scale, figsize) fig = ax.get_figure() # Get positions of the title's step and time text fields so that they # can be updated when animating data = sdf.read(file_list[-1]) var = data.__dict__[varname] mult, sym = get_si_prefix(vmax - vmin) data_label = var.name + ' $(' + sym + var.units + ')$, ' if title_info: title_label = data_label + ', ' title_label2 = data_label + ',_' else: title_label = '' title_label2 = '' fig._suptitle.set_text(title_label + 'step={}, time={}'.format(data.Header['step'], data.Header['time'])) bbox = fig._suptitle.get_window_extent(renderer) inv = fig.transFigure.inverted() x0 = inv.transform(bbox)[0][0] y = inv.transform(bbox)[0][1] fig.y = y tt = fig.text(x0, y, title_label2, fontsize=fig.fs, ha='left', va='bottom') bbox = tt.get_window_extent(renderer) fig.x1 = inv.transform(bbox)[1][0] fig.y = inv.transform(bbox)[0][1] tt.set_text(title_label) tt = fig.text(fig.x1, y, 'step={},_'.format(data.Header['step']), fontsize=fig.fs, ha='left', va='bottom') bbox = tt.get_window_extent(renderer) fig.x2 = inv.transform(bbox)[1][0] tt.set_visible(False) fig._suptitle.set_visible(False) return im, fig
def main(): filepath = "Ion_Results/10000fs/2Levels_N" files = glob.glob(filepath + "/*.npz") # print(files) # print(len(files)) title = 'Nitrogen Ionization Last 2 Ionization Levels(10000fs), w BSI, wo Multiphoton' # ion_energies = [13.59844] #ion_energies = [24.58741, 54.41778] ion_energies = [14.53414, 29.6013, 47.44924, 77.4735, 97.8902, 552.0718, 667.046] e_nums = [] e_field = [] calc_intens = [] for f in files: data = np.load(f) e_nums.append(data['arr_0'][0]) e_field.append(data['arr_1'][0]) data.close() e_field, e_nums = (list(t) for t in zip(*sorted(zip(e_field, e_nums)))) for i, val in enumerate(ion_energies): calc_intens.append(ion_intens(val, i + 1)) # print(e_nums) # print(e_field) # print(calc_intens) fig = plt.figure() plt.title(title, y=1.12) ax = fig.add_subplot(111) l1, = ax.semilogx(e_field, e_nums, label='EPOCH Results') ax.set_xlabel(r'Electric Field $(V/m)$') ymult, ysym = get_si_prefix(np.max(e_nums) - np.min(e_nums)) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) ax.set_ylabel(r'Derived Electron Number Density $(' + ysym + 'm^{-3})$') left_lim, right_lim = ax.get_xlim() scale_left_lim = np.power(left_lim, 2) * sc.speed_of_light * sc.epsilon_0 / 2.0 scale_right_lim = np.power(right_lim, 2) * sc.speed_of_light * sc.epsilon_0 / 2.0 ax2 = ax.twiny() ax2.set_xscale('log') ax2.set_xlim(scale_left_lim, scale_right_lim) ax2.set_xlabel(r'Intensity $(W/m^2)$') for val in calc_intens: l2 = ax2.axvline(x=val, c='r', label='Calculated Intensities') ax3 = ax.twinx() ax3.set_ylim(0, len(ion_energies)) ax3.set_ylabel('Ionization per Atom') ls = [l1, l2] labels = [l.get_label() for l in ls] ax.legend(ls, labels, loc=0) plt.tight_layout() plt.savefig(title + '.png') return
def main(): absorb_key = 'Absorption_Fraction_of_Laser_Energy_Absorbed____' inject_key = 'Absorption_Total_Laser_Energy_Injected__J_' field_en_key = 'Total_Field_Energy_in_Simulation__J_' part_en_key = 'Total_Particle_Energy_in_Simulation__J_' filepath = "/scratch/lsa_flux/diiorios/Exp_81418/energy_test" flist = get_files(wkdir=filepath) flist = clean_file_list(flist, absorb_key) flist = clean_file_list(flist, inject_key) time = [] absorbed = [] injected = [] field = [] part = [] for f in flist: data = sdf.read(f, mmap=0) time.append(float(data.Header['time'])) absorbed.append(data.__dict__[absorb_key].data) injected.append(data.__dict__[inject_key].data) field.append(data.__dict__[field_en_key].data) part.append(data.__dict__[part_en_key].data) tmult, tsym = get_si_prefix(np.max(time) - np.min(time)) amult, asym = get_si_prefix(np.max(absorbed) - np.min(absorbed)) imult, isym = get_si_prefix(np.max(injected) - np.min(injected)) fmult, fsym = get_si_prefix(np.max(field) - np.min(field)) pmult, psym = get_si_prefix(np.max(part) - np.min(part)) fig = plt.figure() ax = fig.add_subplot(111) l1, = ax.plot(time, absorbed, 'k', label='Laser Energy Absorbed') ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * tmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * amult))) ax.set_xlabel('Time $(' + tsym + 's)$') ax.set_ylabel('Absorption/Abs_frac') ax2 = ax.twinx() l2, = ax2.plot(time, injected, 'r', label='Laser Energy Injected') ax2.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * imult))) ax2.set_ylabel('Absorption/Laser_enTotal $(' + isym + 'J)$') ax3 = ax.twinx() ax3.spines['right'].set_position(('outward', 60)) l3, = ax3.plot(time, field, 'b', label='Total Field Energy') ax3.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * fmult))) ax3.set_ylabel('Total Field Energy $(' + fsym + 'J)$') ax4 = ax.twinx() ax4.spines['right'].set_position(('outward', 120)) l4, = ax4.plot(time, part, 'g', label='Total Particle Energy') ax4.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * pmult))) ax4.set_ylabel('Total Particle Energy $(' + psym + 'J)$') ax.yaxis.label.set_color(l1.get_color()) ax2.yaxis.label.set_color(l2.get_color()) ax3.yaxis.label.set_color(l3.get_color()) ax4.yaxis.label.set_color(l4.get_color()) ls = [l1, l2, l3, l4] labels = [l.get_label() for l in ls] ax.legend(ls, labels, loc='best') plt.tight_layout() plt.savefig('Eng_Cons.png') return
def plot_figure(filename, varname, vmin=None, vmax=None): """ Plot the given variable for each file from a simulation """ global verbose if verbose > 1: print('Plotting {} from file {}'.format(varname, filename)) fig = plt.figure() if verbose > 1: print('Reading data') data = sdf.read(filename) var = data.__dict__[varname] grid = var.grid num_x_axis_pts, num_y_axis_pts = grid.dims vdata = var.data.reshape(num_x_axis_pts, num_y_axis_pts).T x = grid.data[0] y = np.copy(grid.data[1]) / (sc.value('electron volt') / sc.c) # y = grid.data[1] if verbose > 1: print('Plotting data') im = plt.pcolormesh(x, y, vdata, vmin=vmin, vmax=vmax) plt.title('step={}, time={}'.format(data.Header['step'], data.Header['time'])) plt.axis('tight') # Get all labels for axes and data mult, sym = get_si_prefix(vmax - vmin) # Data data_label = var.name + ' $(' + sym + var.units + ')$' xmult, xsym = get_si_prefix(np.max(x) - np.min(x)) # x axis ymult, ysym = get_si_prefix(np.max(y) - np.min(y)) # y axis if verbose > 1: print('Plotting axes') if verbose > 1: print('Scale axis by {} ({}, {})'.format(xmult, np.min(x), np.max(x))) ax = plt.gca() ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) plt.xlabel(grid.labels[0] + ' $(' + xsym + grid.units[0] + ')$') plt.ylabel(grid.labels[1] + ' $(' + ysym + 'eV/c)$') # plt.ylabel(grid.labels[1] + ' $(' + ysym + grid.units[1] + ')$') # remove spines on right and top of plot ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) # only show ticks on left and bottom side for these axes ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom') # point ticks outside of plot ax.yaxis.set_tick_params(direction='out') ax.xaxis.set_tick_params(direction='out') if verbose > 1: print('Plotting colorbar') plt.colorbar(label=data_label, format=FuncFormatter(lambda x, y: x * mult)).ax.tick_params( axis='y', direction='out') plt.set_cmap(cm.coolwarm) if verbose > 1: print('Done plotting {} from file {}'.format(varname, filename)) return im, fig
def main(): path = "/Users/stephendiiorio/Documents/Research/1D_Sim/" fnums = ["00056", "00060", "00070", "00088"] fname = [] for n in fnums: fname.append(path + n + ".sdf") fig, axarr = plt.subplots(2, 2, sharex='col', sharey='row') fig.set_facecolor("w") txt = fig.suptitle('Number Density Evolution', verticalalignment='bottom') # only have a single file to plot, so we so this little hack since # axarr does not come out in an array in this case if not isinstance(axarr, np.ndarray): axarr = np.array([axarr]) e_data = [] ar_data = [] ar8_data = [] t_data = [] for i in range(len(fname)): sdfdata = sdf.read(fname[i]) e_data.append(sdfdata.Derived_Number_Density_Electron) ar_data.append(sdfdata.Derived_Number_Density_Argon) ar8_data.append(sdfdata.Derived_Number_Density_Argon8) t_data.append(sdfdata.Header['time']) x_axis = e_data[i].grid_mid.data[0] tmult0, tsym0 = get_si_prefix(t_data[0]) tmult1, tsym1 = get_si_prefix(t_data[1]) tmult2, tsym2 = get_si_prefix(t_data[2]) tmult3, tsym3 = get_si_prefix(t_data[3]) l1, = axarr[0, 0].plot(x_axis, e_data[0].data, 'k', label='Electron') l2, = axarr[0, 0].plot(x_axis, ar_data[0].data, 'r', label='Argon') l3, = axarr[0, 0].plot(x_axis, ar8_data[0].data, 'b', label='Argon$^{+8}$') axarr[0, 0].set_title(('t={0:.2f} $' + tsym0 + 's$').format(t_data[0] * tmult0)) axarr[0, 1].plot(x_axis, e_data[1].data, 'k') axarr[0, 1].plot(x_axis, ar_data[1].data, 'r') axarr[0, 1].plot(x_axis, ar8_data[0].data, 'b') axarr[0, 1].set_title(('t={0:.2f} $' + tsym1 + 's$').format(t_data[1] * tmult1)) axarr[1, 0].plot(x_axis, e_data[2].data, 'k') axarr[1, 0].plot(x_axis, ar_data[2].data, 'r') axarr[1, 0].plot(x_axis, ar8_data[0].data, 'b') axarr[1, 0].set_title(('t={0:.2f} $' + tsym2 + 's$').format(t_data[2] * tmult2)) axarr[1, 1].plot(x_axis, e_data[3].data, 'k') axarr[1, 1].plot(x_axis, ar_data[3].data, 'r') axarr[1, 1].plot(x_axis, ar8_data[0].data, 'b') axarr[1, 1].set_title(('t={0:.2f} $' + tsym3 + 's$').format(t_data[3] * tmult3)) xmin, xmax = get_var_range(x_axis) xmult, xsym = get_si_prefix(xmax - xmin) axarr[1, 0].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult))) axarr[1, 1].xaxis.set_major_formatter(FuncFormatter(lambda x, y: '{0:g}'.format(x * xmult))) ymult1, ysym1 = get_si_prefix(e_data[0].data.max() - e_data[0].data.min()) ymult2, ysym2 = get_si_prefix(e_data[2].data.max() - e_data[2].data.min()) axarr[0, 0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult1))) axarr[1, 0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult2))) axarr[0, 0].set(ylabel='Number Density' + ' $(' + ysym1 + 'm^{-3})$') axarr[1, 0].set(xlabel='x' + ' $(' + xsym + 'm)$', ylabel='Number Density' + ' $(' + ysym2 + 'm^{-3})$') axarr[1, 1].set(xlabel='x' + ' $(' + xsym + 'm)$') # Hide x labels and tick labels for top plots and y ticks for right plots. for ax in axarr.flat: ax.label_outer() ls = [l1, l2, l3] labels = [l.get_label() for l in ls] lgd = axarr[0, 1].legend(ls, labels, bbox_to_anchor=(1.0, 1.045), loc=2)#loc='upper right') plt.savefig('numdens.png', dpi=600, bbox_extra_artists=(lgd,txt,), bbox_inches = "tight")
def main(): species = "Electron" path = "/Users/stephendiiorio/Documents/Research/1D_Sim/" fnums = ["00060", "00070", "00080"] fname = [] for n in fnums: fname.append(path + n + ".sdf") x_axis_num = 0 # y_axis_num = 1 # z_axis_num = 2 fig, axarr = plt.subplots(len(fname), sharex=True) #, sharey=True) fig.set_facecolor("w") # only have a single file to plot, so we so this little hack since # axarr does not come out in an array in this case if not isinstance(axarr, np.ndarray): axarr = np.array([axarr]) # axarr[0].set_title(species + " files " + str(fnums)) axarr[0].set_title('Contribution to E Field') limit = 5E10 for i in range(len(fname)): sdfdata = sdf.read(fname[i]) e_var = sdfdata.Electric_Field_Ex # midpoint = int(len(e_var.data[0]) / 2) temp_grid, temp_data = Temp_Field(sdfdata, x_axis_num, species='Electron') res_mhd_grid, res_mhd_data = Resistive_MHD_Field(sdfdata, x_axis_num) hall_grid, hall_data = Hall_Field(sdfdata, x_axis_num) # ideal_mhd_grid, ideal_mhd_data = Ideal_MHD_Field(sdfdata, # x_axis_num, # species='Electron') x_axis = e_var.grid_mid.data[0] # fig, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True) l1, = axarr[i].plot( x_axis, e_var.data, # [midpoint], 'k-', label='Simulation') # plt.plot(x_axis, e_var.data[midpoint], 'k-', label='Ey') l2, = axarr[i].plot( x_axis, np.clip( temp_data, # [midpoint], -limit, limit), 'r--', label='Thermal') # plt.plot(x_axis, temp_data[midpoint], 'r--', label='Temp_Ey') l3, = axarr[i].plot( x_axis, np.clip( res_mhd_data, # [midpoint], -limit, limit), 'b-.', label='Resistive MHD') # plt.plot(x_axis, temp_data[midpoint], 'r--', label='Temp_Ey') l4, = axarr[i].plot( x_axis, np.clip( hall_data, # [midpoint], -limit, limit), 'g:', label='Hall Term') # fig.legend([l1, l2, l3], # ['Ey', 'Temp_Ey', 'Res_MHD_Ey'], # loc='upper right') ls = [l1, l2, l3, l4] labels = [l.get_label() for l in ls] lgd = fig.legend(ls, labels, bbox_to_anchor=(1.05, 1.0), loc=1) fig.subplots_adjust(hspace=0) plt.setp([a.get_xticklabels() for a in fig.axes[:-1]], visible=False) plt.xlim(-6.5e-6, 6.5e-6) # plt.ylim(-limit, limit) xmin, xmax = get_var_range(x_axis) xmult, xsym = get_si_prefix(xmax - xmin) axarr[0].xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) ymult, ysym = get_si_prefix(limit - (-limit)) axarr[0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[1].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[2].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[0].set_ylim([-limit, limit]) axarr[1].set_ylim([-limit, limit]) axarr[2].set_ylim([-0.5 * limit, 0.5 * limit]) plt.xlabel('x' + ' $(' + xsym + 'm)$') axarr[1].set_ylabel('Electric Field' + ' $(' + ysym + 'V/m)$') # plt.show() plt.savefig('test.png', dpi=600, bbox_extra_artists=(lgd, ), bbox_inches="tight", pad_inches=0.2)
def plot_figure(filename, varname, vmin=None, vmax=None): """ Plot the given variable for each file from a simulation """ global verbose if verbose > 1: print('Plotting {} from file {}'.format(varname, filename)) fig = plt.figure() if verbose > 1: print('Reading data') print(filename) data = sdf.read(filename) var = data.__dict__[varname] vdata = var.data grid = var.grid_mid x = grid.data[0] if verbose > 1: print('Plotting data') im, = plt.plot(x, vdata, 'k') plt.title('step={}, time={}'.format(data.Header['step'], data.Header['time'])) plt.axis('tight') # Get all labels for axes and data xmult, xsym = get_si_prefix(np.max(x) - np.min(x)) # x axis ymult, ysym = get_si_prefix(np.max(vdata) - np.min(vdata)) # y axis if verbose > 1: print('Plotting axes') if verbose > 1: print('Scale axis by {} ({}, {})'.format(xmult, np.min(x), np.max(x))) print('Scale axis by {} ({}, {})'.format(ymult, np.min(vdata), np.max(vdata))) ax = plt.gca() ticker.Locator.MAXTICKS = 2000 ax.xaxis.set_major_locator(ticker.MultipleLocator(5e-6)) ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.5e-6)) ax.yaxis.set_major_locator(ticker.MultipleLocator(1e9)) ax.yaxis.set_minor_locator(ticker.MultipleLocator(0.1e9)) ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) plt.xlabel(grid.labels[0] + ' $(' + xsym + grid.units[0] + ')$') plt.ylabel(var.name + ' $(' + ysym + var.units + ')$') # remove spines on right and top of plot ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) # only show ticks on left and bottom side for these axes ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom') # point ticks outside of plot ax.yaxis.set_tick_params(direction='out') ax.xaxis.set_tick_params(direction='out') if verbose > 1: print('Done plotting {} from file {}'.format(varname, filename)) return im, fig
def main(): directory = '/scratch/lsa_flux/diiorios/2d_run/' field = 'Electric_Field_Ex' spec = 'Electron' den = 'Derived_Number_Density_' + spec file_list = get_files(wkdir=directory) e_file_list = clean_file_list(file_list, field) d_file_list = clean_file_list(file_list, den) e_file_list.remove(directory + '0000.sdf') e_file_list.remove(directory + '0002.sdf') e_file_list.remove(directory + '0003.sdf') e_file_list.remove(directory + '0004.sdf') e_file_list.remove(directory + '0005.sdf') e_file_list.remove(directory + '0006.sdf') e_file_list.remove(directory + '0007.sdf') e_file_list.remove(directory + '0008.sdf') e_file_list.remove(directory + '0009.sdf') e_file_list.remove(directory + '0011.sdf') e_file_list.remove(directory + '0012.sdf') e_file_list.remove(directory + '0013.sdf') e_file_list.remove(directory + '0014.sdf') e_file_list.remove(directory + '0015.sdf') e_file_list.remove(directory + '0016.sdf') e_file_list.remove(directory + '0017.sdf') e_file_list.remove(directory + '0018.sdf') e_file_list.remove(directory + '0019.sdf') e_file_list.remove(directory + '0021.sdf') e_file_list.remove(directory + '0022.sdf') e_file_list.remove(directory + '0023.sdf') e_file_list.remove(directory + '0024.sdf') e_file_list.remove(directory + '0025.sdf') e_file_list.remove(directory + '0026.sdf') e_file_list.remove(directory + '0027.sdf') e_file_list.remove(directory + '0028.sdf') e_file_list.remove(directory + '0029.sdf') e_file_list.remove(directory + '0031.sdf') e_file_list.remove(directory + '0032.sdf') e_file_list.remove(directory + '0033.sdf') e_file_list.remove(directory + '0034.sdf') e_file_list.remove(directory + '0035.sdf') e_file_list.remove(directory + '0036.sdf') e_file_list.remove(directory + '0037.sdf') e_file_list.remove(directory + '0038.sdf') e_file_list.remove(directory + '0039.sdf') e_file_list.remove(directory + '0041.sdf') e_file_list.remove(directory + '0042.sdf') e_file_list.remove(directory + '0043.sdf') e_file_list.remove(directory + '0044.sdf') e_file_list.remove(directory + '0045.sdf') e_file_list.remove(directory + '0046.sdf') e_file_list.remove(directory + '0047.sdf') e_file_list.remove(directory + '0048.sdf') e_file_list.remove(directory + '0049.sdf') e_file_list.remove(directory + '0051.sdf') e_file_list.remove(directory + '0052.sdf') e_file_list.remove(directory + '0053.sdf') e_file_list.remove(directory + '0054.sdf') e_file_list.remove(directory + '0055.sdf') e_file_list.remove(directory + '0056.sdf') e_file_list.remove(directory + '0057.sdf') e_file_list.remove(directory + '0058.sdf') e_file_list.remove(directory + '0059.sdf') e_file_list.remove(directory + '0061.sdf') e_file_list.remove(directory + '0062.sdf') e_file_list.remove(directory + '0063.sdf') e_file_list.remove(directory + '0064.sdf') e_file_list.remove(directory + '0065.sdf') e_file_list.remove(directory + '0066.sdf') e_file_list.remove(directory + '0067.sdf') e_file_list.remove(directory + '0068.sdf') e_file_list.remove(directory + '0069.sdf') e_file_list.remove(directory + '0071.sdf') e_file_list.remove(directory + '0072.sdf') e_file_list.remove(directory + '0073.sdf') e_file_list.remove(directory + '0074.sdf') e_file_list.remove(directory + '0075.sdf') e_file_list.remove(directory + '0076.sdf') e_file_list.remove(directory + '0077.sdf') e_file_list.remove(directory + '0078.sdf') e_file_list.remove(directory + '0079.sdf') e_file_list.remove(directory + '0081.sdf') e_file_list.remove(directory + '0082.sdf') e_file_list.remove(directory + '0083.sdf') e_file_list.remove(directory + '0084.sdf') e_file_list.remove(directory + '0085.sdf') e_file_list.remove(directory + '0086.sdf') e_file_list.remove(directory + '0087.sdf') e_file_list.remove(directory + '0088.sdf') e_file_list.remove(directory + '0089.sdf') e_file_list.remove(directory + '0091.sdf') e_file_list.remove(directory + '0092.sdf') e_file_list.remove(directory + '0093.sdf') e_file_list.remove(directory + '0094.sdf') e_file_list.remove(directory + '0095.sdf') e_file_list.remove(directory + '0096.sdf') e_file_list.remove(directory + '0097.sdf') e_file_list.remove(directory + '0098.sdf') e_file_list.remove(directory + '0099.sdf') d_file_list.remove(directory + '0000.sdf') d_file_list.remove(directory + '0002.sdf') d_file_list.remove(directory + '0003.sdf') d_file_list.remove(directory + '0004.sdf') d_file_list.remove(directory + '0005.sdf') d_file_list.remove(directory + '0006.sdf') d_file_list.remove(directory + '0007.sdf') d_file_list.remove(directory + '0008.sdf') d_file_list.remove(directory + '0009.sdf') d_file_list.remove(directory + '0011.sdf') d_file_list.remove(directory + '0012.sdf') d_file_list.remove(directory + '0013.sdf') d_file_list.remove(directory + '0014.sdf') d_file_list.remove(directory + '0015.sdf') d_file_list.remove(directory + '0016.sdf') d_file_list.remove(directory + '0017.sdf') d_file_list.remove(directory + '0018.sdf') d_file_list.remove(directory + '0019.sdf') d_file_list.remove(directory + '0021.sdf') d_file_list.remove(directory + '0022.sdf') d_file_list.remove(directory + '0023.sdf') d_file_list.remove(directory + '0024.sdf') d_file_list.remove(directory + '0025.sdf') d_file_list.remove(directory + '0026.sdf') d_file_list.remove(directory + '0027.sdf') d_file_list.remove(directory + '0028.sdf') d_file_list.remove(directory + '0029.sdf') d_file_list.remove(directory + '0031.sdf') d_file_list.remove(directory + '0032.sdf') d_file_list.remove(directory + '0033.sdf') d_file_list.remove(directory + '0034.sdf') d_file_list.remove(directory + '0035.sdf') d_file_list.remove(directory + '0036.sdf') d_file_list.remove(directory + '0037.sdf') d_file_list.remove(directory + '0038.sdf') d_file_list.remove(directory + '0039.sdf') d_file_list.remove(directory + '0041.sdf') d_file_list.remove(directory + '0042.sdf') d_file_list.remove(directory + '0043.sdf') d_file_list.remove(directory + '0044.sdf') d_file_list.remove(directory + '0045.sdf') d_file_list.remove(directory + '0046.sdf') d_file_list.remove(directory + '0047.sdf') d_file_list.remove(directory + '0048.sdf') d_file_list.remove(directory + '0049.sdf') d_file_list.remove(directory + '0051.sdf') d_file_list.remove(directory + '0052.sdf') d_file_list.remove(directory + '0053.sdf') d_file_list.remove(directory + '0054.sdf') d_file_list.remove(directory + '0055.sdf') d_file_list.remove(directory + '0056.sdf') d_file_list.remove(directory + '0057.sdf') d_file_list.remove(directory + '0058.sdf') d_file_list.remove(directory + '0059.sdf') d_file_list.remove(directory + '0061.sdf') d_file_list.remove(directory + '0062.sdf') d_file_list.remove(directory + '0063.sdf') d_file_list.remove(directory + '0064.sdf') d_file_list.remove(directory + '0065.sdf') d_file_list.remove(directory + '0066.sdf') d_file_list.remove(directory + '0067.sdf') d_file_list.remove(directory + '0068.sdf') d_file_list.remove(directory + '0069.sdf') d_file_list.remove(directory + '0071.sdf') d_file_list.remove(directory + '0072.sdf') d_file_list.remove(directory + '0073.sdf') d_file_list.remove(directory + '0074.sdf') d_file_list.remove(directory + '0075.sdf') d_file_list.remove(directory + '0076.sdf') d_file_list.remove(directory + '0077.sdf') d_file_list.remove(directory + '0078.sdf') d_file_list.remove(directory + '0079.sdf') d_file_list.remove(directory + '0081.sdf') d_file_list.remove(directory + '0082.sdf') d_file_list.remove(directory + '0083.sdf') d_file_list.remove(directory + '0084.sdf') d_file_list.remove(directory + '0085.sdf') d_file_list.remove(directory + '0086.sdf') d_file_list.remove(directory + '0087.sdf') d_file_list.remove(directory + '0088.sdf') d_file_list.remove(directory + '0089.sdf') d_file_list.remove(directory + '0091.sdf') d_file_list.remove(directory + '0092.sdf') d_file_list.remove(directory + '0093.sdf') d_file_list.remove(directory + '0094.sdf') d_file_list.remove(directory + '0095.sdf') d_file_list.remove(directory + '0096.sdf') d_file_list.remove(directory + '0097.sdf') d_file_list.remove(directory + '0098.sdf') d_file_list.remove(directory + '0099.sdf') print('Found {} files to plot'.format(len(file_list))) e_data = [] d_data = [] for f in e_file_list: d = sdf.read(f) avg, r, dummy_t = electric_radial_average(d) e_data.append(avg) for f in d_file_list: d = sdf.read(f) avg, r, dummy_t = density_radial_average(d, den) d_data.append(avg) e_var = d.__dict__[field] # for units later d_var = d.__dict__[den] # for units later e_data = np.asarray(e_data) e_data = e_data.T d_data = np.asarray(d_data) d_data = d_data.T tmin = sdf.read(e_file_list[0]).Header['time'] tmax = sdf.read(e_file_list[-1]).Header['time'] t_data = np.linspace(tmin, tmax, np.shape(e_data)[1]) rmin = np.min(r) rmax = np.max(r) r_data = np.linspace(rmin, rmax, np.shape(e_data)[0]) print(rmin, rmax) rmult, rsym = get_si_prefix(rmax - rmin) # y axis tmult, tsym = get_si_prefix(tmax - tmin) # x axis emin, emax = get_var_range(e_data) emax = 3e9 emult, esym = get_si_prefix(emax - emin) dmin, dmax = get_var_range(d_data) # dmin = max(d_data.min(), 0.1) dmax = 0.5e23 dmult, dsym = get_si_prefix(dmax - dmin) fig, axarr = plt.subplots(2, 1, sharex='col') fig.set_facecolor("w") e_im = axarr[0].pcolormesh( t_data, r_data, e_data, # norm=colors.SymLogNorm(linthresh=0.03, linscale=0.03, vmin=emin, vmax=emax), cmap=cm.coolwarm, vmin=emin, vmax=emax) axarr[0].set_title('(a)', loc='left') d_im = axarr[1].pcolormesh( t_data, r_data, d_data, # norm=colors.LogNorm(vmin=dmin, vmax=dmax), cmap=cm.plasma, vmin=dmin, vmax=dmax) axarr[1].set_title('(b)', loc='left') e_label = '$E_{r}$ $(' + esym + e_var.units + ')$' d_label = 'Radial $n_{e}$ $(' + dsym + d_var.units + ')$' fig.colorbar(e_im, ax=axarr[0], label=e_label, format=FuncFormatter(lambda x, y: x * emult)) fig.colorbar(d_im, ax=axarr[1], label=d_label, format=FuncFormatter(lambda x, y: x * dmult)) axarr[1].xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * tmult))) axarr[0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * rmult))) axarr[1].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * rmult))) axarr[0].set(ylabel='r $(' + rsym + 'm)$') axarr[1].set(xlabel='t $(' + tsym + 's)$', ylabel='r $(' + rsym + 'm)$') axarr[0].set_ylim([rmin, 40e-6]) axarr[1].set_ylim([rmin, 40e-6]) axarr[0].get_xaxis().set_tick_params(direction='in') axarr[1].get_xaxis().set_tick_params(direction='in') axarr[0].get_yaxis().set_tick_params(direction='in') axarr[1].get_yaxis().set_tick_params(direction='in') # plt.tight_layout() plt.savefig('time_rad_evo.png', dpi=600, bbox_inches="tight")
def composite_field_plot(varname, vmin=None, vmax=None, directory='Data'): global verbose, dpi file_list = get_files(wkdir=directory) file_list = clean_file_list(file_list, varname) file_list.remove(directory + '0000.sdf') file_list.remove(directory + '0002.sdf') file_list.remove(directory + '0003.sdf') file_list.remove(directory + '0004.sdf') file_list.remove(directory + '0005.sdf') file_list.remove(directory + '0006.sdf') file_list.remove(directory + '0007.sdf') file_list.remove(directory + '0008.sdf') file_list.remove(directory + '0009.sdf') file_list.remove(directory + '0011.sdf') file_list.remove(directory + '0012.sdf') file_list.remove(directory + '0013.sdf') file_list.remove(directory + '0014.sdf') file_list.remove(directory + '0015.sdf') file_list.remove(directory + '0016.sdf') file_list.remove(directory + '0017.sdf') file_list.remove(directory + '0018.sdf') file_list.remove(directory + '0019.sdf') file_list.remove(directory + '0021.sdf') file_list.remove(directory + '0022.sdf') file_list.remove(directory + '0023.sdf') file_list.remove(directory + '0024.sdf') file_list.remove(directory + '0025.sdf') file_list.remove(directory + '0026.sdf') file_list.remove(directory + '0027.sdf') file_list.remove(directory + '0028.sdf') file_list.remove(directory + '0029.sdf') file_list.remove(directory + '0031.sdf') file_list.remove(directory + '0032.sdf') file_list.remove(directory + '0033.sdf') file_list.remove(directory + '0034.sdf') file_list.remove(directory + '0035.sdf') file_list.remove(directory + '0036.sdf') file_list.remove(directory + '0037.sdf') file_list.remove(directory + '0038.sdf') file_list.remove(directory + '0039.sdf') file_list.remove(directory + '0041.sdf') file_list.remove(directory + '0042.sdf') file_list.remove(directory + '0043.sdf') file_list.remove(directory + '0044.sdf') file_list.remove(directory + '0045.sdf') file_list.remove(directory + '0046.sdf') file_list.remove(directory + '0047.sdf') file_list.remove(directory + '0048.sdf') file_list.remove(directory + '0049.sdf') file_list.remove(directory + '0051.sdf') file_list.remove(directory + '0052.sdf') file_list.remove(directory + '0053.sdf') file_list.remove(directory + '0054.sdf') file_list.remove(directory + '0055.sdf') file_list.remove(directory + '0056.sdf') file_list.remove(directory + '0057.sdf') file_list.remove(directory + '0058.sdf') file_list.remove(directory + '0059.sdf') file_list.remove(directory + '0061.sdf') file_list.remove(directory + '0062.sdf') file_list.remove(directory + '0063.sdf') file_list.remove(directory + '0064.sdf') file_list.remove(directory + '0065.sdf') file_list.remove(directory + '0066.sdf') file_list.remove(directory + '0067.sdf') file_list.remove(directory + '0068.sdf') file_list.remove(directory + '0069.sdf') file_list.remove(directory + '0071.sdf') file_list.remove(directory + '0072.sdf') file_list.remove(directory + '0073.sdf') file_list.remove(directory + '0074.sdf') file_list.remove(directory + '0075.sdf') file_list.remove(directory + '0076.sdf') file_list.remove(directory + '0077.sdf') file_list.remove(directory + '0078.sdf') file_list.remove(directory + '0079.sdf') file_list.remove(directory + '0081.sdf') file_list.remove(directory + '0082.sdf') file_list.remove(directory + '0083.sdf') file_list.remove(directory + '0084.sdf') file_list.remove(directory + '0085.sdf') file_list.remove(directory + '0086.sdf') file_list.remove(directory + '0087.sdf') file_list.remove(directory + '0088.sdf') file_list.remove(directory + '0089.sdf') file_list.remove(directory + '0091.sdf') file_list.remove(directory + '0092.sdf') file_list.remove(directory + '0093.sdf') file_list.remove(directory + '0094.sdf') file_list.remove(directory + '0095.sdf') file_list.remove(directory + '0096.sdf') file_list.remove(directory + '0097.sdf') file_list.remove(directory + '0098.sdf') file_list.remove(directory + '0099.sdf') if verbose > 0: print('Found {} files to plot'.format(len(file_list))) data = [] for f in file_list: d = sdf.read(f) avg, r, t = density_radial_average(d, varname) data.append(avg) var = d.__dict__[varname] # for units later data = np.asarray(data) data = data.T tmin = sdf.read(file_list[0]).Header['time'] tmax = sdf.read(file_list[-1]).Header['time'] rmin = np.min(r) rmax = np.max(r) print(rmin, rmax) shape = data.shape extent = [tmin, tmax, rmin, rmax] rmult, rsym = get_si_prefix(rmax - rmin) # y axis tmult, tsym = get_si_prefix(tmax - tmin) # x axis if vmin is None and vmax is None: vmin = np.min(data) vmax = np.max(data) elif vmin is None: vmin = np.min(data) elif vmax is None: vmax = np.max(data) mult, sym = get_si_prefix(vmax - vmin) fig, ax = plt.subplots() im = ax.imshow(data, extent=extent, aspect=calculate_aspect(shape, extent), interpolation='none', cmap=cm.coolwarm, vmin=vmin, vmax=vmax, origin='lower') ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * tmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * rmult))) plt.xlabel('t $(' + tsym + 's)$') plt.ylabel('r $(' + rsym + 'm)$') data_label = 'Radial ' + var.name + ' Distribution $(' + sym + var.units + ')$' # data_label = 'Radial Electric Field $(' + sym + var.units + ')$' plt.title('Radial Density Evolution') cbar = fig.colorbar(im, label=data_label, format=FuncFormatter(lambda x, y: x * mult)) plt.tight_layout() plt.savefig('test.png', dpi=600, bbox_inches="tight")
def main(): species = "Electron" path = "/scratch/lsa_flux/diiorios/2d_run/" fnums = ["0100", "0200", "0400"] fname = [] for n in fnums: fname.append(path + n + ".sdf") x_axis_num = 0 y_axis_num = 1 # z_axis_num = 2 fig, axarr = plt.subplots(len(fname), sharex=True)#, sharey=True) fig.set_facecolor("w") # only have a single file to plot, so we so this little hack since # axarr does not come out in an array in this case if not isinstance(axarr, np.ndarray): axarr = np.array([axarr]) # axarr[0].set_title(species + " files " + str(fnums)) # axarr[0].set_title('Contribution to E Field') limit = 8E9 for i in range(len(fname)): sdfdata = sdf.read(fname[i]) print(sdfdata.Header['time']) e_var_x = sdfdata.Electric_Field_Ex e_var_y = sdfdata.Electric_Field_Ey x_grid = e_var_x.grid_mid.data[0] y_grid = e_var_y.grid_mid.data[1] x_grid_cent = e_var_x.grid.data[0] y_grid_cent = e_var_y.grid.data[1] e_avg, dummy_e_r, dummy_e_t = __radial_average(x_grid, y_grid, e_var_x.data, e_var_y.data) dummy_temp_grid_x, temp_data_x = Temp_Field(sdfdata, x_axis_num, species='Electron') dummy_temp_grid_y, temp_data_y = Temp_Field(sdfdata, y_axis_num, species='Electron') temp_avg, dummy_temp_r, dummy_temp_t = __radial_average(x_grid, y_grid, temp_data_x, temp_data_y) dummy_res_mhd_grid_x, res_mhd_data_x = Resistive_MHD_Field(sdfdata, x_axis_num) dummy_res_mhd_grid_y, res_mhd_data_y = Resistive_MHD_Field(sdfdata, y_axis_num) rmhd_avg, dummy_rmhd_r, dummy_rmhd_t = __radial_average(x_grid, y_grid, res_mhd_data_x, res_mhd_data_y) dummy_hall_grid_x, hall_data_x = Hall_Field(sdfdata, x_axis_num) dummy_hall_grid_y, hall_data_y = Hall_Field(sdfdata, y_axis_num) hall_avg, dummy_hall_r, dummy_hall_t = __radial_average(x_grid, y_grid, hall_data_x, hall_data_y) gen_data_x = Generalized_Ohm(sdfdata, x_axis_num, species='Electron') gen_data_y = Generalized_Ohm(sdfdata, y_axis_num, species='Electron') gen_avg, dummy_gen_r, dummy_gen_t = __radial_average(x_grid, y_grid, gen_data_x, gen_data_y) gen_avg2 = Generalized_Ohm_radavg(sdfdata, species='Electron') high_order = higher_order(sdfdata, species='Electron') cart_high_x = cart_higher_order_x(sdfdata, species='Electron') cart_high_y = cart_higher_order_y(sdfdata, species='Electron') cart_high_avg, dummy_high_r, dummy_high_t = __radial_average(x_grid_cent, y_grid_cent, cart_high_x, cart_high_y) # ideal_mhd_grid_x, ideal_mhd_data_x = Ideal_MHD_Field(sdfdata, # x_axis_num, # species='Electron') # ideal_mhd_grid_y, ideal_mhd_data_y = Ideal_MHD_Field(sdfdata, # y_axis_num, # species='Electron') # imhd_avg, imhd_r, imhd_t = __radial_average(x_grid, y_grid, ideal_mhd_data_x, ideal_mhd_data_y) l1, = axarr[i].plot(#e_r, e_avg, 'k-', label='Simulation') l2, = axarr[i].plot(#temp_r, np.clip(temp_avg, -limit, limit), 'r--', label='Pressure Tensor Gradient') # l3, = axarr[i].plot(#rmhd_r, # np.clip(rmhd_avg, -limit, limit), # 'b-.', # label='Resistive MHD') # l4, = axarr[i].plot(#hall_r, # np.clip(hall_avg, -limit, limit), # 'g:', # label='Hall Term') # l5, = axarr[i].plot(#imhd_r, # np.clip(imhd_avg, # -limit, limit), # 'm-.', # label='Ideal MHD Term') # l6, = axarr[i].plot(np.clip(gen_avg, -limit, limit), # 'm-.', # label='Generalized Ohm', # alpha=0.2) l7, = axarr[i].plot(np.clip(gen_avg2, -limit, limit), 'b-.', label='Ohm Law 1st Term') l8, = axarr[i].plot(np.clip(high_order, -limit, limit), 'g:', label='Ohm Law 2nd Term') # l9, = axarr[i].plot(np.clip(cart_high_avg, -limit, limit), # 'b:', # label='Cart Higher Order') ls = [l1, l2, l7, l8] #l3, l4, l5] labels = [l.get_label() for l in ls] lgd = fig.legend(ls, labels, bbox_to_anchor=(1.05, 1.0), loc=1) fig.subplots_adjust(hspace=0) plt.setp([a.get_xticklabels() for a in fig.axes[:-1]], visible=False) # plt.xlim(-6.5e-6, 6.5e-6) # plt.ylim(-limit, limit) # xmult, xsym = get_si_prefix(np.max(e_r) - np.min(e_r)) ymult, ysym = get_si_prefix(limit - (-limit)) # axarr[0].xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) axarr[0].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[1].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[2].yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * ymult))) axarr[0].set_ylim([-limit, limit]) axarr[1].set_ylim([-limit, limit]) axarr[2].set_ylim([-limit, limit]) xmult, xsym = get_si_prefix(dummy_e_r.max() - dummy_e_r.min()) # axarr[2].xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) # axarr[2].set_xlim([dummy_e_r.min(), dummy_e_r.max()]) plt.xlabel('r' + ' $(' + xsym + 'm)$') axarr[1].set_ylabel('$E_{r}$ $(' + ysym + 'V/m)$') # plt.show() axarr[0].get_yaxis().set_tick_params(direction='in') axarr[1].get_yaxis().set_tick_params(direction='in') axarr[2].get_yaxis().set_tick_params(direction='in') axarr[2].get_xaxis().set_tick_params(direction='in') plt.savefig('ohm_rad.png', dpi=600, bbox_extra_artists=(lgd,), bbox_inches = "tight", pad_inches=0.2) plt.close(fig)
def composite_field_plot(varname, vmin=None, vmax=None, directory='Data'): global verbose, dpi file_list = get_files(wkdir=directory) file_list = clean_file_list(file_list, varname) file_list.remove(directory + '00000.sdf') file_list.remove(directory + '00002.sdf') file_list.remove(directory + '00003.sdf') file_list.remove(directory + '00004.sdf') file_list.remove(directory + '00005.sdf') file_list.remove(directory + '00006.sdf') file_list.remove(directory + '00007.sdf') file_list.remove(directory + '00008.sdf') file_list.remove(directory + '00009.sdf') file_list.remove(directory + '00010.sdf') file_list.remove(directory + '00011.sdf') file_list.remove(directory + '00012.sdf') file_list.remove(directory + '00013.sdf') file_list.remove(directory + '00014.sdf') file_list.remove(directory + '00015.sdf') file_list.remove(directory + '00016.sdf') file_list.remove(directory + '00017.sdf') file_list.remove(directory + '00018.sdf') file_list.remove(directory + '00019.sdf') file_list.remove(directory + '00020.sdf') file_list.remove(directory + '00021.sdf') file_list.remove(directory + '00022.sdf') file_list.remove(directory + '00023.sdf') file_list.remove(directory + '00024.sdf') file_list.remove(directory + '00025.sdf') file_list.remove(directory + '00027.sdf') file_list.remove(directory + '00028.sdf') file_list.remove(directory + '00029.sdf') file_list.remove(directory + '00030.sdf') file_list.remove(directory + '00031.sdf') file_list.remove(directory + '00032.sdf') file_list.remove(directory + '00033.sdf') file_list.remove(directory + '00034.sdf') file_list.remove(directory + '00035.sdf') file_list.remove(directory + '00037.sdf') file_list.remove(directory + '00038.sdf') file_list.remove(directory + '00039.sdf') file_list.remove(directory + '00040.sdf') file_list.remove(directory + '00041.sdf') file_list.remove(directory + '00042.sdf') file_list.remove(directory + '00043.sdf') file_list.remove(directory + '00044.sdf') file_list.remove(directory + '00045.sdf') file_list.remove(directory + '00047.sdf') file_list.remove(directory + '00048.sdf') file_list.remove(directory + '00049.sdf') file_list.remove(directory + '00050.sdf') file_list.remove(directory + '00051.sdf') file_list.remove(directory + '00052.sdf') file_list.remove(directory + '00053.sdf') file_list.remove(directory + '00054.sdf') file_list.remove(directory + '00055.sdf') if verbose > 0: print('Found {} files to plot'.format(len(file_list))) data = [] for f in file_list: d = sdf.read(f) var = d.__dict__[varname] data.append(var.data) data = np.asarray(data) data = data.T tmin = sdf.read(file_list[0]).Header['time'] tmax = sdf.read(file_list[-1]).Header['time'] grid = var.grid_mid xmin = np.min(grid.data[0]) xmax = np.max(grid.data[0]) shape = data.shape extent = [tmin, tmax, xmax, xmin] xmult, xsym = get_si_prefix(xmax - xmin) # y axis tmult, tsym = get_si_prefix(tmax - tmin) # x axis if vmin is None and vmax is None: vmin, vmax = get_var_range_from_sdf_files(file_list, varname) elif vmin is None: vmin = get_var_range_from_sdf_files(file_list, varname)[0] elif vmax is None: vmax = get_var_range_from_sdf_files(file_list, varname)[1] mult, sym = get_si_prefix(vmax - vmin) fig, ax = plt.subplots() im = ax.imshow(data, extent=extent, aspect=calculate_aspect(shape, extent), interpolation='none', cmap=cm.plasma, vmin=vmin, vmax=vmax) ax.xaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * tmult))) ax.yaxis.set_major_formatter(FuncFormatter(lambda x, y: (x * xmult))) plt.xlabel('t $(' + tsym + 's)$') plt.ylabel(grid.labels[0] + ' $(' + xsym + grid.units[0] + ')$') # data_label = var.name + ' $(' + sym + var.units + ')$' data_label = 'Argon$^{+8}$ Number Density $(' + sym + var.units + ')$' plt.title('Electron Density Evolution') cbar = fig.colorbar(im, label=data_label, format=FuncFormatter(lambda x, y: x * mult)) plt.tight_layout() plt.savefig('electron_comp_thermal_nocoll.png', dpi=600, bbox_inches="tight")