Пример #1
0
    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,
Пример #2
0
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")
Пример #3
0
    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,
Пример #4
0
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")
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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")
Пример #11
0
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)
Пример #12
0
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
Пример #13
0
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")
Пример #14
0
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")
Пример #15
0
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")