Esempio n. 1
0
    def setUp(self):
        self.filename_prefix = os.path.join(os.path.dirname(__file__), 'test_data_miranda/plot.mir')
        self.reader = mir.MirandaReader(self.filename_prefix, periodic_dimensions=(False,True,True))

        self.lo = (0, 0, 0)
        self.hi = (319, 63, 0)
        self.reader.sub_domain = (self.lo, self.hi)
        self.reader.step = 0
    def setUp(self):
        self.filename_prefix = os.path.join(os.path.dirname(__file__),
                                            'test_data_miranda/plot.mir')
        self.serial_reader = mir.MirandaReader(self.filename_prefix,
                                               periodic_dimensions=(False,
                                                                    True,
                                                                    True))
        self.serial_reader.step = 0

        self.comm = MPI.COMM_WORLD
        self.num_ghosts = (1, 1, 1)
        self.reader = pdr.ParallelDataReader(
            MPI.COMM_WORLD,
            mir.MirandaReader(self.filename_prefix,
                              periodic_dimensions=(False, True, True)),
            num_ghosts=self.num_ghosts)
        self.reader.step = 0

        self.lo, self.hi = self.reader.interior_chunk
def plot_set2(tsteps, tvec, path):
    reader = mir.MirandaReader(path,
                               periodic_dimensions=(False, True, True),
                               verbose=True)

    print("Domain Size: {} ".format(reader._domain_size))
    print("Variables available: {}".format(reader.varNames))
    Nx, Ny, Nz = reader._domain_size

    W = np.zeros(len(tsteps))

    t_legend = []

    for tind, step in enumerate(tsteps):

        ##################################
        #Reading in full fields to figure out where subdomain and interface are
        reader.setStep(step)
        reader.setSubDomain(((0, 0, 0), (Nx - 1, Ny - 1, Nz - 1)))
        print("Figuring out subdomain at step {}".format(step))
        YN2 = np.squeeze(np.array(reader.readData('Ideal1_01')))
        YO2 = np.squeeze(np.array(reader.readData('Ideal1_02')))
        YSF6 = np.squeeze(np.array(reader.readData('Ideal1_03')))
        YAc = np.squeeze(np.array(reader.readData('Ideal1_04')))
        YHeavy = YSF6 + YAc

        M = (YN2 / M_N2 + YO2 / M_O2 + YSF6 / M_SF6 + YAc / M_Ac)**(-1)

        #Find inner mixing zone (IMZ)
        IMZ_thresh = 0.9
        XHeavy = M / M_Heavy * YHeavy
        XHeavy_bar = np.mean(np.mean(XHeavy, axis=2), axis=1)
        IMZ_crit = 4 * XHeavy_bar * (1 - XHeavy_bar) - IMZ_thresh

        for ind in range(len(IMZ_crit)):
            if IMZ_crit[ind] >= 0:
                IMZ_lo = ind
                break

        for ind in range(len(IMZ_crit)):
            ind2 = Nx - ind - 1
            if IMZ_crit[ind2] >= 0:
                IMZ_hi = ind2
                break

        IMZ_mid = np.argmax(IMZ_crit)

        middle_selection = 0.20  #select middle 20% of domain in x
        x1 = IMZ_mid - int(middle_selection / 2 * Nx)
        x2 = min(IMZ_mid + int(middle_selection / 2 * Nx), Nx - 1)
        reader.setSubDomain(((x1, 0, 0), (x2, Ny - 1, Nz - 1)))

        # Get coordinates based on subdomain
        x, y, z = reader.readCoordinates()
        x = x / 100.0  #convert from cm-> m
        y = y / 100.0
        z = z / 100.0
        nx = reader.chunk[0][1] - reader.chunk[0][0]
        ny = reader.chunk[1][1] - reader.chunk[1][0]
        nz = reader.chunk[2][1] - reader.chunk[2][0]

        ##################################

        # Reading in on subdomain
        reader.setStep(step)
        print("reading in Mass Fraction at step {}.".format(step))
        YN2 = np.squeeze(np.array(reader.readData('Ideal1_01')))
        YO2 = np.squeeze(np.array(reader.readData('Ideal1_02')))
        YSF6 = np.squeeze(np.array(reader.readData('Ideal1_03')))
        YAc = np.squeeze(np.array(reader.readData('Ideal1_04')))
        YHeavy = YSF6 + YAc

        plt.figure()
        plt.title("t = {} ms".format(step * 1e-1))
        plt.pcolor(1000 * x[:, :, int(Nz / 2)],
                   1000 * y[:, :, int(Nz / 2)], YHeavy[:, :, int(Nz / 2)])
        plt.xlabel('x [mm]')
        plt.ylabel('y [mm]')
        ax = plt.gca()
        ax.set_aspect('equal')
        plt.colorbar()
        plt.clim([0, 1])

    #Format plots
    print("Formatting Plots")
    for ind in plt.get_fignums():
        plt.figure(ind)
        plt.tight_layout()

    return None
Esempio n. 4
0
def plot_set2(tsteps, tvec, path):
    reader = mir.MirandaReader(path,
                               periodic_dimensions=(False, True, True),
                               verbose=True)

    print("Domain Size: {} ".format(reader._domain_size))
    print("Variables available: {}".format(reader.varNames))
    Nx, Ny, Nz = reader._domain_size

    W = np.zeros(len(tsteps))

    t_legend = []

    for tind, step in enumerate(tsteps):

        ##################################
        #Reading in full fields to figure out where subdomain and interface are
        reader.setStep(step)
        reader.setSubDomain(((0, 0, 0), (Nx - 1, Ny - 1, Nz - 1)))
        print("Figuring out subdomain at step {}".format(step))
        YN2 = np.squeeze(np.array(reader.readData('Ideal1_01')))
        YO2 = np.squeeze(np.array(reader.readData('Ideal1_02')))
        YSF6 = np.squeeze(np.array(reader.readData('Ideal1_03')))
        YAc = np.squeeze(np.array(reader.readData('Ideal1_04')))
        YHeavy = YSF6 + YAc

        M = (YN2 / M_N2 + YO2 / M_O2 + YSF6 / M_SF6 + YAc / M_Ac)**(-1)

        #Find inner mixing zone (IMZ)
        IMZ_thresh = 0.9
        XHeavy = M / M_Heavy * YHeavy
        XHeavy_bar = np.mean(np.mean(XHeavy, axis=2), axis=1)
        IMZ_crit = 4 * XHeavy_bar * (1 - XHeavy_bar) - IMZ_thresh

        for ind in range(len(IMZ_crit)):
            if IMZ_crit[ind] >= 0:
                IMZ_lo = ind
                break

        for ind in range(len(IMZ_crit)):
            ind2 = Nx - ind - 1
            if IMZ_crit[ind2] >= 0:
                IMZ_hi = ind2
                break

        IMZ_mid = np.argmax(IMZ_crit)

        middle_selection = 0.40  #select middle 20% of domain in x
        x1 = IMZ_mid - int(middle_selection / 2 * Nx)
        x2 = min(IMZ_mid + int(middle_selection / 2 * Nx), Nx - 1)
        reader.setSubDomain(((x1, 0, 0), (x2, Ny - 1, Nz - 1)))

        # Get coordinates based on subdomain
        x, y, z = reader.readCoordinates()
        x = x / 100.0  #convert from cm-> m
        y = y / 100.0
        z = z / 100.0
        nx = reader.chunk[0][1] - reader.chunk[0][0]
        ny = reader.chunk[1][1] - reader.chunk[1][0]
        nz = reader.chunk[2][1] - reader.chunk[2][0]

        ##################################

        # Reading in on subdomain
        reader.setStep(step)
        print("reading in Mass Fraction at step {}.".format(step))
        YN2 = np.squeeze(np.array(reader.readData('Ideal1_01')))
        YO2 = np.squeeze(np.array(reader.readData('Ideal1_02')))
        YSF6 = np.squeeze(np.array(reader.readData('Ideal1_03')))
        YAc = np.squeeze(np.array(reader.readData('Ideal1_04')))
        YHeavy = YSF6 + YAc

        print("reading in density at step {}.".format(step))
        density = 1e3 * np.squeeze(np.array(reader.readData('density')))
        print("reading in pressure at step {}.".format(step))
        pressure = 1e-1 * np.squeeze(np.array(reader.readData('pressure')))

        #Calculating Stats
        print("Computing Diffusion Properties")
        rho_bar = np.mean(np.mean(density, axis=2), axis=1)

        Cp = YN2 * Cp_N2 + YO2 * Cp_O2 + YSF6 * Cp_SF6 + YAc * Cp_Ac
        Cv = YN2 * Cv_N2 + YO2 * Cv_O2 + YSF6 * Cv_SF6 + YAc * Cv_Ac

        gamma = Cp / Cv
        M = (YN2 / M_N2 + YO2 / M_O2 + YSF6 / M_SF6 + YAc / M_Ac)**(-1)
        T = M * pressure / (density * Ru)
        c = (gamma * pressure / density)**0.5

        del YAc, gamma

        #Find inner mixing zone (IMZ)
        IMZ_thresh = 0.9
        XHeavy = M / M_Heavy * YHeavy
        XHeavy_bar = np.mean(np.mean(XHeavy, axis=2), axis=1)
        IMZ_crit = 4 * XHeavy_bar * (1 - XHeavy_bar) - IMZ_thresh

        for ind in range(len(IMZ_crit)):
            if IMZ_crit[ind] >= 0:
                IMZ_lo = ind
                break

        for ind in range(len(IMZ_crit)):
            ind2 = nx - ind - 1
            if IMZ_crit[ind2] >= 0:
                IMZ_hi = ind2
                break

        IMZ_mid = np.argmax(IMZ_crit)

        #Mole Fraction Variance
        XHeavy_prime = XHeavy - XHeavy_bar.reshape((nx, 1, 1))
        XHeavy_variance = np.mean(np.mean(XHeavy_prime**2, axis=2), axis=1)

        #Compute Turbulent Mach Number
        print("reading in velocity at step {}.".format(step))
        velocity = np.zeros((3, nx, ny, nz))
        velocity[0, :, :, :] = 1e-2 * np.squeeze(
            np.array(reader.readData('velocity-0')))
        velocity[1, :, :, :] = 1e-2 * np.squeeze(
            np.array(reader.readData('velocity-1')))
        velocity[2, :, :, :] = 1e-2 * np.squeeze(
            np.array(reader.readData('velocity-2')))
        u_tilde = np.mean(np.mean(velocity[0, :, :, :] * density, axis=2),
                          axis=1) / np.mean(np.mean(density, axis=2), axis=1)

        u_doubleprime = velocity[0, :, :, :] - u_tilde.reshape((nx, 1, 1))

        #Density Spectra
        t_legend.append("t = {} ms".format(step * 1e-1))

        k_rad, rho_spec_rad = fh.radial_spectra(
            x[:, 0, 0], y[0, :, 0], z[0, 0, :],
            density[IMZ_lo:IMZ_hi + 1, :, :])

        plt.figure(2)
        plt.loglog(k_rad, rho_spec_rad)
        plt.xlabel('Radial Wavenumber [m-1]')
        plt.ylabel("Density spectra")

        #Energy Spectra
        energy_for_spectra = density * u_doubleprime / (np.reshape(
            rho_bar, (nx, 1, 1)))**0.5
        k_rad, rhoU_spec_rad = fh.radial_spectra(
            x[:, 0, 0], y[0, :, 0], z[0, 0, :],
            energy_for_spectra[IMZ_lo:IMZ_hi + 1, :, :])

        plt.figure(3)
        plt.loglog(k_rad, rhoU_spec_rad)
        plt.xlabel('Radial Wavenumber [m-1]')
        plt.ylabel("Energy Spectra")

    #Format plots
    print("Formatting Plots")
    t_legend.append("-3/2 slope")
    for ind in plt.get_fignums():
        plt.figure(ind)
        plt.loglog(k_rad, 1e2 * k_rad**(-1.5), 'k--')
        plt.legend(t_legend)
        plt.tight_layout()

    return None
Esempio n. 5
0
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable, axes_size

#Local Modules
import floatpy.readers.miranda_reader as mir

# Set up default plotting
params = {'legend.fontsize': 14, 'legend.handlelength': 2, 'font.size': 16}
matplotlib.rcParams.update(params)

if __name__ == '__main__':

    #Read in a file and plot something
    reader = mir.MirandaReader(
        "/home/jrwest/Research/FloATPy_moving_grid/data/Tritschler/RM_CTR_3D_64/plot.mir",
        periodic_dimensions=(False, True, True),
        verbose=True)

    print("Domain Size: {} ".format(reader._domain_size))

    x, y, z = reader.readCoordinates()

    print("Variables available: {}".format(reader.varNames))

    tsteps = (15, 20, 22, 27, 50)

    for step in tsteps:
        reader.setStep(step)
        YN2 = np.array(reader.readData('Ideal1_01'))
        YO2 = np.array(reader.readData('Ideal1_02'))
        YSF6 = np.array(reader.readData('Ideal1_03'))