コード例 #1
0
ファイル: corr.py プロジェクト: tmatsuzawa/turbulence
def spatial_corr(data, N=1024, Dt=10, outdir='/Users/npmitchell/Dropbox/Soft_Matter/turbulence/jhtd/'):
    """Compute spatial correlation

    Parameters
    ----------
    data
    N
    Dt

    Returns
    -------

    """
    Cxx = np.zeros((N / 2, Dt))
    d = np.arange(N / 2)
    figs = {}

    for p in range(3):
        for k in range(Dt):
            key = data.keys()[k]
            Z = np.asarray(data[key])

            Ex = np.nanmean(np.power(Z[:N / 2, 0, 0, p], 2))
            Cxx[:, k] = np.nanmean(
                np.asarray([[Z[i, 0, 0, p] * Z[i + j, 0, 0, p] / Ex for i in range(N / 2)] for j in range(N / 2)]),
                axis=1)
            # print(Cxx[0,:])
        C = np.nanmean(Cxx, axis=1)
        graphes.graph(d, C, fignum=1)
        graphes.set_axis(0, N / 4, -1, 1.5)
        figs.update(graphes.legende('d', 'C', ''))

    graphes.save_figs(figs, savedir=outdir + 'corr_functions/', suffix='', prefix='', frmt='pdf', dpi=300)
コード例 #2
0
ファイル: compilation.py プロジェクト: tmatsuzawa/turbulence
def make_figures(M, indices=None, version=0):
    suffix = graphes.set_name(M, param=['freq', 'v'])
    savedir = '/Users/stephane/Documents/Experiences_local/Results/Vortex_collision/' + M.Id.date + '/' + M.Id.get_id() + '/'

    ###### Field examples ##############
    subdir = 'Example/'
    figs = example(M, i=None)
    graphes.save_figs(figs, savedir=savedir + subdir, prefix=suffix)
    graphes.plt.close('all')
    ####### Time average fields #############
    subdir = 'Time average/'
    figs = time_average(M, indices=indices)
    graphes.save_figs(figs, savedir=savedir + subdir, prefix=suffix)
    graphes.plt.close('all')

    ######## Energy vs time ##############
    subdir = 'Spatial average/'
    figs = spatial_average(M, indices=indices)
    graphes.save_figs(figs, savedir=savedir + subdir, prefix=suffix)
    graphes.plt.close('all')

    ######### 2d spectrum, average in time ##############
    subdir = 'Spectrum/'
    figs = spectrum_2d(M, indices=indices)
    graphes.save_figs(figs, savedir=savedir + subdir, prefix=suffix)
    graphes.plt.close('all')

    ######### 1d spectrum, average in time ##############
    subdir = 'Spectrum/'
    figs = spectrum_1d(M, indices=indices)
    graphes.save_figs(figs, savedir=savedir + subdir, prefix=suffix, suffix=str(version))
    graphes.plt.close('all')
コード例 #3
0
ファイル: compilation.py プロジェクト: tmatsuzawa/turbulence
def comparison(Mlist, indices=None, version=0, save=False):
    M = Mlist[0]
    #    suffix = graphes.set_name(M,param=['freq','v'])
    savedir = '/Users/stephane/Documents/Experiences_local/Results/Vortex_collision/' + M.Id.date + '/'
    subdir = 'Summary/'

    ######### Comparison spectrum ##############
    for M, ind in zip(Mlist, indices):
        figs = spectrum_1d(M, indices=ind, norm_factor=(M.param.v / 100.) ** (2. / 3))
    graphes.save_figs(figs, savedir=savedir + subdir, prefix='norm', suffix=str(version))
コード例 #4
0
def make_plot_lin(Mlist, Range=None, color='k', label=None, field=[['Ux', 'Uy'], ['omega']], Dirbase=None, Dt=1,
                  example=False, total=True, fignum=1, save=True):
    M = Mlist[0]
    if Dirbase == None:
        Dirbase = '/Users/stephane/Documents/Experiences_local/Accelerated_grid/PIV_data/Test6/'  # local saving
        Dirbase = './Stat_avg/Panel/' + M.Id.date

    axes = panel_graphs(M, subplot=[2, 3], fignum=fignum)

    frames = select_range(M, Range)

    figs = {}
    if hasattr(M, 'Id'):
        Dirname = Dirbase + '/' + M.Id.get_id() + '/' + graphes.remove_special_chars(str(field)) + '/'
    else:
        Dirname = Dirbase + '/JHTD_Data/' + graphes.remove_special_chars(str(field)) + '/'
    print(Dirname)

    if Dt > 1:
        print('Smoothed data')
        Dirname = Dirname + 'Smooth_Dt_' + str(int(Dt)) + '/'

    figs.update(plot_scales(Mlist, axes, fignum=fignum, color=color, label=label))

    plt.sca(axes[2])
    frame = 1500
    Dt = 1400

    if label is None:
        labels = ['m^', 'b>', 'ko']
    else:
        labels = [label, label, label]

    for i, f in enumerate(field[0]):  # should contain either one or two fields
        figs.update(graphes.pdf_ensemble(Mlist, f, frame, Dt=Dt, fignum=fignum, label=labels[i], norm=False))
        figs.update(graphes.legende(f, 'pdf of ' + f, ''))

    plt.sca(axes[3])
    for f in field[1]:
        figs.update(graphes.pdf_ensemble(Mlist, f, frame, Dt=Dt, fignum=fignum, label=labels[2], norm=False))
        figs.update(graphes.legende(f, 'pdf of ' + f, ''))

    plt.sca(axes[4])
    corr.corr_v_t(Mlist, frame, axes=['Ux', 'Ux'], N=200, p=1, display=True, save=False, label=labels[0], fignum=fignum)
    corr.corr_v_t(Mlist, frame, axes=['Uy', 'Uy'], N=200, p=1, display=True, save=False, label=labels[1], fignum=fignum)

    plt.sca(axes[5])
    corr.corr_v_t(Mlist, frame, axes=['omega', 'omega'], N=200, p=1, display=True, save=False, label=labels[2],
                  fignum=fignum)

    if save:
        graphes.save_figs(figs, savedir=Dirname, prefix='General', suffix='_vs_t', dpi=300, frmt='png', display=True)
    else:
        return figs, Dirname
コード例 #5
0
def make_movie(M, Range=None, field=['E', 'vorticity'], Dirbase=None, Dt=1):
    if Dirbase == None:
        Dirbase = '/Users/stephane/Documents/Experiences_local/Accelerated_grid/PIV_data'  # local saving

    nx, ny, nt = M.shape()

    axes = panel(M)
    if Range is not None:
        start, stop, step = tuple(Range)
    else:
        start, stop, step = tuple([0, nt, 1])
    frames = range(start, stop, step)

    #    field = ['Ux','Uy']
    #  field = ['E','vorticity']
    figs = {}
    Dirname = Dirbase + '/' + M.Id.get_id() + '/' + graphes.remove_special_chars(str(field)) + '/'
    print(Dirname)

    for i, f in enumerate(field):
        if not hasattr(M, f):
            M, field_n[i] = vgradient.compute(M, field[i], Dt=Dt)
            field = field_n

        #    M,field[1] = vgradient.compute(M,field[1],Dt=Dt)

    if Dt > 1:
        print('Smoothed data')
        Dirname = Dirname + 'Smooth_Dt_' + str(int(Dt)) + '/'

    for i in frames:
        graphes.set_fig(1)
        for axe in axes:
            plt.sca(axe)
            plt.cla()

        axes = panel(M, fignum=1)
        plt.sca(axes[1])
        print(i)
        graphes.Mplot(M, field[0], i, fignum=1, log=True)
        plt.text(-10, 80, field[0], fontsize=20)

        plt.sca(axes[2])
        graphes.Mplot(M, field[1], i, fignum=1, log=True)
        plt.text(-10, 80, field[1], fontsize=20)

        figs.update(graphes.legende('', '', 'Front view', cplot=True))
        graphes.save_figs(figs, savedir=Dirname, suffix='_' + str(i), dpi=100, frmt='png', display=False)
    return axes
コード例 #6
0
def vfield(sigma, modes, fignum=1):
    names = {
        'sigma': sigma,
        'n': modes
    }  # name:eval(name) for name in ['sigma','n','N_p']}# this piece of code does not work

    t = distribution(sigma, modes)

    B = 1.
    n = 100
    dx = 2 * B / n
    x = np.arange(-B, B, dx)
    y = 0.
    z = np.arange(-B, B, dx)
    P = np.asarray(np.meshgrid(x, y, z))

    dim = P.shape
    N = np.prod(dim[1:])
    X = np.reshape(P[0, ...], (N, ))
    Y = np.reshape(P[1, ...], (N, ))
    Z = np.reshape(P[2, ...], (N, ))

    Pos = [np.asarray([x0, y0, z0]) for x0, y0, z0 in zip(X, Y, Z)]

    V = biot.velocity_from_line(t.paths, Pos, Gamma=1, d=3)

    V_2d = np.reshape(V, (n, n, 3))
    E = np.sum(np.power(V_2d, 2), axis=2)

    subplot = [111]
    fig, axes = panel.make(subplot, fignum=fignum)
    fig.set_size_inches(10, 10)

    graphes.color_plot(x, z, E, fignum=fignum, vmin=0, vmax=0, log=True)
    c = graphes.colorbar()

    figs = {}
    figs.update(graphes.legende('X', 'Z', 'E'))

    graphes.save_figs(figs,
                      prefix='Random_path/V_Distributions/Fields/',
                      suffix=suf(names),
                      dpi=300,
                      display=True,
                      frmt='png')
コード例 #7
0
ファイル: corr.py プロジェクト: tmatsuzawa/turbulence
def time_corr(data, param, N=800, outdir='/Users/npmitchell/Dropbox/Soft_Matter/turbulence/jhtd/'):
    """

    Parameters
    ----------
    data
    param
    N

    Returns
    -------

    """
    keys = data.keys()

    figs = {}

    for p in range(3):
        print(p)
        keys = np.sort(keys)

        [data[key] for key in keys]
        t = np.asarray([param[key]['t0'] for key in keys[0:N / 2]])

        C = np.zeros(N / 2)
        Dt = np.zeros(N / 2)
        for i in range(N / 2):
            if i % 100 == 0:
                print(i)
            C[i] = np.nanmean(
                np.asarray([data[key1][..., p] * data[keys[i + j]][..., p] for j, key1 in enumerate(keys[0:N / 2])]),
                axis=(0, 1, 2))
            Dt[i] = np.nanmean(np.asarray([param[keys[j + i]]['t0'] - param[keys[j]]['t0'] for j in range(N / 2)]))

            #  print(Dt)
        graphes.graph(Dt, C / C[0], fignum=4)
        graphes.set_axis(0, 400, -1, 1.1)
        figs.update(graphes.legende('t', 'C', 'JHTD corr functions'))

    graphes.save_figs(figs, savedir=outdir + 'corr_functions/', suffix='', prefix='', frmt='pdf', dpi=300)
コード例 #8
0
def example(M, Range=None, field=['E', 'vorticity']):
    nx, ny, nt = M.shape()
    axes = panel(M)
    if Range is not None:
        start, stop, step = tuple(Range)
    else:
        start, stop, step = tuple([0, nt, 1])
    frames = range(start, stop, step)

    #    field = ['Ux','Uy']
    #  field = ['E','vorticity']

    figs = {}

    Dirbase = '/Users/stephane/Documents/Experiences_local/Accelerated_grid/PIV_data'  # local saving
    Dirname = Dirbase + '/' + M.Id.get_id() + '/' + graphes.remove_special_chars(str(field)) + '/'
    print(Dirname)

    M, field[0] = vgradient.compute(M, field[0])
    M, field[1] = vgradient.compute(M, field[1])

    for i in frames:
        graphes.set_fig(1)
        for axe in axes:
            plt.sca(axe)
            plt.cla()
        axes = panel(M, fignum=1)

        plt.sca(axes[1])
        graphes.Mplot(M, field[0], i, log=True)
        plt.text(-10, 20, field[0], fontsize=20)

        plt.sca(axes[2])
        graphes.Mplot(M, field[1], i, fignum=1, log=True)
        plt.text(-10, 20, field[1], fontsize=20)

        figs.update(graphes.legende('', '', 'Front view', cplot=True))
        graphes.save_figs(figs, savedir=Dirname, suffix='_' + str(i), dpi=100, frmt='png')
    return axes
コード例 #9
0
ファイル: corr.py プロジェクト: tmatsuzawa/turbulence
def compute_tc(Mlist, Corr_fun, fields, log=True):
    M = Mlist[0]

    labels = ['ro', 'k^']
    s = ''
    figs = {}

    for i, field in enumerate(fields):
        C = Corr_fun[field]

        t = []
        tau = []
        for tup in C:
            tc = tup[1]
            C_norm = tup[2]
            N = len(C_norm) / 2
            ind1 = np.argmin(np.abs(C_norm[N + 1] / 2. - C_norm[1:N]))
            ind2 = np.argmin(np.abs(C_norm[N + 1] / 2. - C_norm[N:]))
            tau.append(tc[ind2 + N] - tc[ind1])
            t.append(tc[N])

        if log:
            graphes.graphloglog(t, tau, fignum=1, label=labels[i])
            # graphes.set_axis(min(t),max(t),min(t),0.1)
        else:
            graphes.graph(t, tau, fignum=1, label=labels[i])
            graphes.set_axis(0, 0.4, 0, 0.1)
        s = s + field + ', '
        figs.update(graphes.legende('t (s)', 't_c (s)', s[:-2]))

        name = 'fx_' + str(int(np.floor(M.fx * 1000))) + 'm'
        graphes.save_figs(figs,
                          prefix='./Stat_avg/Time_correlation/Overview/' +
                          field + '/' + name,
                          dpi=300,
                          display=True,
                          frmt='png')
コード例 #10
0
def main(Mlist):
    savedir = title(Mlist[0])

    indices = range(400, 2000, 10)
    n = len(indices)
    N = len(Mlist)
    print(N)

    figs = {}

    X = np.zeros((N, n, 2))
    Y = np.zeros((N, n, 2))

    for j, M in enumerate(Mlist):
        print(j)
        Xmin = []
        Xmax = []
        Ymin = []
        Ymax = []

        Vmin = []
        Vmax = []

        Gammamin = []
        Gammamax = []

        t = []
        field = 'omega'
        Omega = access.get_all(M, field)
        for i in indices:
            Z = Omega[:, 5:, i]

            t.append(M.t[i])

            xmin, xmax, ymin, ymax = positions(M, i)

            vmin, vmax, G = amplitude(M, i)
            Gammamin.append(G[0])
            Gammamax.append(G[1])

            Vmin.append(vmin)
            Vmax.append(vmax)

            Xmin.append(xmin)
            Xmax.append(xmax)
            Ymin.append(ymin)
            Ymax.append(ymax)

        X[j, :, 0] = np.asarray(Xmin)
        X[j, :, 1] = np.asarray(Xmax)

        Y[j, :, 0] = np.asarray(Ymin)
        Y[j, :, 1] = np.asarray(Ymax)

        graphes.graph(t, Xmin, label='bo', fignum=1)
        graphes.graph(t, Xmax, label='ro', fignum=1)
        figs.update(graphes.legende('Time (s)', 'Horizontal position (mm)',
                                    ''))

        graphes.graph(Xmin, Ymin, label='bo', fignum=2)
        graphes.graph(Xmax, Ymax, label='ro', fignum=2)
        figs.update(graphes.legende('X (mm)', 'Y(mm)', ''))

        graphes.graph(t, Vmin, label='b', fignum=3)
        graphes.graph(t, Vmax, label='r', fignum=3)
        figs.update(graphes.legende('Time (s)', 'Maximum vorticity (s^-1)',
                                    ''))

        graphes.graph(t, Gammamin, label='b', fignum=4)
        graphes.graph(t, Gammamax, label='r', fignum=4)
        figs.update(graphes.legende('Time (s)', 'Circulation mm^2/s', ''))
        graphes.set_axis(0, 0.32, -25000, 25000)

    Dx = (X - np.tile(np.nanmean(X, axis=0), (N, 1, 1)))
    Dy = (Y - np.tile(np.nanmean(Y, axis=0), (N, 1, 1)))

    D = np.sqrt(Dx**2 + Dy**2)

    D_moy = np.nanmean(D, axis=0)
    # print(t)
    # print(D[j,:,1])
    #    for j in range(N):
    #        graphes.graph(t,D[j,:,0],label='bo',fignum=4)
    #        graphes.graph(t,D[j,:,1],label='ro',fignum=4)

    graphes.graph(t, D_moy[:, 0], label='b', fignum=6)
    graphes.graph(t, D_moy[:, 1], label='r', fignum=6)
    figs.update(
        graphes.legende('Time (s)', 'Distance (mm)', 'Spreading of vortices'))
    graphes.set_axis(0, 0.3, 0, 20)

    graphes.graph(np.power(t, 3),
                  np.power(D_moy[:, 0], 2),
                  label='b',
                  fignum=5)
    graphes.graph(np.power(t, 3),
                  np.power(D_moy[:, 1], 2),
                  label='r',
                  fignum=5)
    graphes.set_axis(0, 0.3**3, 0, 100)

    figs.update(
        graphes.legende('t^3 (s^3)', 'd^2 (mm^2)',
                        'Spreading of vortices : rescaling'))

    graphes.save_figs(figs,
                      savedir=savedir,
                      suffix='',
                      prefix='',
                      frmt='pdf',
                      dpi=300,
                      display=True)
コード例 #11
0
def profile_avg(Mlist, i, display=False, fignum=1):
    field = 'omega'

    R_list = np.arange(0.25, 15., 0.25)
    R = np.arange(0., 15., 0.25)
    n = len(Mlist)

    figs = {}
    Gamma = np.zeros((n, len(R), 2))
    Flux = np.zeros((n, len(R), 2))

    for k, M in enumerate(Mlist):
        x = M.x[0, 5:]
        y = -M.y[:, 0]
        dx = M.x[0, 1] - M.x[0, 0]

        U, d = vgradient.make_Nvec(M, i)  # Z : d+1 dimension np array

        imin, imax, jmin, jmax, Zfilt, X, Y = position_index(M,
                                                             i,
                                                             field=field,
                                                             display=display)

        G = [[] for j in range(len(R_list) + 1)]
        G[0].append(0)
        G[0].append(0)

        D = [[] for j in range(len(R_list) + 1)]
        D[0].append(0)
        D[0].append(0)

        for j, b in enumerate(R_list):
            tau1 = strain.strain_tensor_loc(U, imin, jmin, d, b=b)
            tau2 = strain.strain_tensor_loc(U, imax, jmax, d, b=b)

            for tau in [tau1, tau2]:
                omega, enstrophy = strain.vorticity(tau, d=2, norm=False)
                div = strain.divergence_2d(tau, d=2)
                G[j + 1].append(
                    (omega[0, 0]) * np.pi * b**2 * dx**2)  # -div[0,0]
                D[j + 1].append(
                    (div[0, 0]) * np.pi * b**2 * dx**2)  # -div[0,0]

        Gamma[k, ...] = np.asarray(G)
        Flux[k, ...] = np.asarray(D)

        graphes.graph(R, -Gamma[k, :, 0], label='kv', fignum=fignum * 2)
        graphes.graph(R, Gamma[k, :, 1], label='k^', fignum=fignum * 2)

        graphes.graph(R, Flux[k, :, 0], label='kv', fignum=fignum * 2 + 1)
        graphes.graph(R, Flux[k, :, 1], label='k^', fignum=fignum * 2 + 1)

    Gamma_moy = np.nanmean(Gamma, axis=0)
    Flux_moy = np.nanmean(Flux, axis=0)

    graphes.graph(R, -Gamma_moy[:, 0], label='r--', fignum=fignum * 2)
    graphes.graph(R, Gamma_moy[:, 1], label='r--', fignum=fignum * 2)
    graphes.graph(R,
                  np.nanmean(np.asarray([Gamma_moy[:, 1], -Gamma_moy[:, 0]]),
                             axis=0),
                  label='rs',
                  fignum=fignum * 2)
    figs.update(
        graphes.legende('Distance to center (mm)', 'Circulation (mm^2/s)', ''))

    graphes.graph(R, Flux_moy[:, 0], label='r--', fignum=fignum * 2 + 1)
    graphes.graph(R, Flux_moy[:, 1], label='r--', fignum=fignum * 2 + 1)
    graphes.graph(R,
                  np.nanmean(np.asarray([Flux_moy[:, 1], Flux_moy[:, 0]]),
                             axis=0),
                  label='rs',
                  fignum=fignum * 2 + 1)
    figs.update(
        graphes.legende('Distance to center (mm)', 'Divergence (mm^2/s)', ''))

    savedir = title(Mlist[0])
    graphes.save_figs(figs,
                      savedir=savedir,
                      suffix='',
                      prefix='frame_' + str(i),
                      frmt='pdf',
                      dpi=300,
                      display=True)

    M_profile = np.nanmean(np.asarray([Gamma_moy[:, 1], -Gamma_moy[:, 0]]),
                           axis=0)
    return np.mean(M_profile[-10:]), np.std(Gamma[:, -10:, 1])
コード例 #12
0
def compile(Mlist, V=None, method='circulation'):
    symbol = {'50': '^', '125': 'o', '250': 's'}
    color = {'circulation': 'r', 'vorticity': 'b', 'joseph': 'k'}
    labels = {key: color[method] + symbol[key] for key in symbol.keys()}
    if V == None:
        sub_labels = labels
        piston_v = None
    else:
        piston_v = str(V)
        sub_labels = {piston_v: labels[piston_v]}  # ,'125':'ro','250':'bs'}

    figs = {}

    for i, M in enumerate(Mlist):
        piston1 = browse.get_string(M.Sdata.fileCine,
                                    '_v',
                                    end='.cine',
                                    shift=0,
                                    display=False,
                                    from_end=True)
        piston2 = browse.get_string(M.Sdata.fileCine,
                                    '_v',
                                    end='_p30mum',
                                    shift=0,
                                    display=False,
                                    from_end=True)

        error = 0.25
        for piston in [piston1, piston2]:
            if piston in sub_labels.keys():
                print(M.dataDir)
                dx = np.mean(np.diff(M.x[0, :]))
                print('Spatial scale : ' + str(dx) + ' mm/box')
                lc, std_lc, Gamma, std_Gamma = compute(M,
                                                       method=method,
                                                       display=False,
                                                       fignum=(i + 1) * 2)

                #                print(piston,dx,lc,std_lc)
                if std_lc / lc < error:
                    graphes.errorbar(dx,
                                     lc, [0],
                                     std_lc,
                                     label=labels[piston],
                                     fignum=250)
                    figs.update(graphes.legende('mm/box', 'Core size (mm)',
                                                ''))
                    graphes.set_axis(0, 1.5, 0, 6.)

                    if method == 'circulation':
                        #   if np.abs(std_Gamma/Gamma)<error:
                        graphes.errorbar(dx,
                                         Gamma, [0],
                                         std_Gamma,
                                         label=labels[piston],
                                         fignum=251)
                        figs.update(
                            graphes.legende('mm/box', 'Circulation (mm^2/s)',
                                            ''))
                        graphes.set_axis(0, 1.5, -2 * 10**4, 0)
                # print(piston,dx,lc,std_lc
                print('')

    print('figure', figs)
    print(figs)
    graphes.save_figs(figs,
                      suffix='Compilation_method_' + method + '_v' + piston_v)
コード例 #13
0
def save_graphes(M, figs, method='vorticity'):
    graphes.save_figs(figs,
                      savedir='./Results/' + os.path.basename(M.dataDir) + '/',
                      suffix='_method_' + method + '_')
コード例 #14
0
ファイル: corr.py プロジェクト: tmatsuzawa/turbulence
def corr_v_d(Mlist,
             t,
             axes=['Ux', 'Ux'],
             N=100,
             Dt=1,
             p=1,
             display=False,
             save=False,
             label='^',
             fignum=1):
    """
    compute the correlation function in space at a given time. Average over space (ie along d-1 dimensions of Mlist[axes[0]]),and eventually over time
    INPUT
    ------
    M : Mdata object
        must have attributes : t, fields ('Ux','Uy', ...)
        must have method shape()
    t : int
        time index
    axes : 2 elements string list
        attributes of M to be used for the correlation function
    N : int
        Number of frames before and after time t.
    p : int. default value is 1
        power of the fields C_p(Dt) = U1**p * U2**p / <U1**2p >
    display : bool. default value is false
    """
    #    Ct=[]
    # how to average ?? -> need a mean on several realization ? or just substract the average value (in space) ?
    M = Mlist[0]
    tlist = M.t
    # print("Compute mean values")
    tmin = max(0, t - N)
    tmax = min(len(tlist) - 1, t + N)
    # print(tmin)
    # print(tmax)
    t_c = np.asarray(M.t)[np.arange(tmin, tmax)]  # -M.t[t]
    # print(np.mean(np.diff(t_c)))
    # max number of time step
    #  print("Compute mean values 2")
    # Compute the average flow
    Xm = []
    Ym = []
    for M in Mlist:
        Xref, Yref = chose_axe(M, t, axes)
        Xm.append(Xref)
        Ym.append(Yref)

    Xm = np.asarray(Xm)
    Ym = np.asarray(Ym)
    #  print(Xm.shape)
    Xmoy_ref, Xstd_ref = statP.average(Xref, axis=())

    # idea : compute the flow average over several realizations (ensemble avg)
    Ct = []
    for tc in range(tmin, tmax):
        Sp = []
        Xt_moy = []
        XDt_moy = []
        for M in Mlist:
            Xref, Yref = chose_axe(M, t, axes)
            Xt_m, Xstd_ref = statP.average(Xref)
            Xt_moy.append(Xt_m)

            X, Y = chose_axe(M, tc, axes)
            XDt_m, Xstd = statP.average(X)
            XDt_moy.append(XDt_m)

        Xt_ref = statP.average(Xt_moy)
        XDt_ref = statP.average(XDt_moy)

        for M in Mlist:
            Xref, Yref = chose_axe(M, t, axes)
            #  Xmoy_ref,Xstd_ref=statP.average(Xref)
            X, Y = chose_axe(M, tc, axes)
            #  Xmoy,Xstd=statP.average(X)
            Sp.append((X - XDt_ref)**p * (Xref - XDt_ref)**p)
            #   print(np.shape(Sp))
        Ct.append(statP.average(Sp)[0])
        #   print(Ct)
    C0 = Ct[t - tmin]
    C_norm = np.asarray(Ct) / C0

    indices = np.argsort(t_c)
    t_c = t_c[indices] - M.t[t]
    C_norm = C_norm[indices]

    # plot distribution of Sp values ?
    figs = {}
    if display or save:
        field = axes[0]
        title = str(axes[0]) + ', ' + str(axes[1])
        graphes.graph(t_c, C_norm, fignum=fignum, label=label)
        figs.update(graphes.legende('$t (s)$', '$C$', title))

        if save:
            name = 'fx_' + str(int(np.floor(M.fx * 1000))) + 'm_t_' + str(
                int(np.floor(M.t[t] * 1000))) + 'm_'
            graphes.save_figs(figs,
                              prefix='./Stat_avg/Time_correlation/Serie/' +
                              field + '/' + name,
                              dpi=300,
                              display=True,
                              frmt='png')
    return t_c, C_norm
コード例 #15
0
ファイル: spreading.py プロジェクト: tmatsuzawa/turbulence
def display_profile(M,
                    i,
                    t0,
                    z,
                    Ux_moy,
                    Uy_moy,
                    Ux_rms,
                    Uy_rms,
                    Dt=1,
                    fig=1,
                    logscale=True):
    t = M.t[t0]
    U_noise_low, U_noise_high = check.bounds(M, t0)
    graphes.set_fig(fig)
    title = 't=' + str(int(t * 1000)) + ' ms' + 'Urms_zprofile'

    Dir = M.fileDir + 'Velocity_distribution_log_M_2015_12_28_Meanfield' + '/'

    z, Ux_th = fit_profile(M, t0, z, Ux_rms, p=9, log=True)
    z, Uy_th = fit_profile(M, t0, z, Uy_rms, p=9, log=True)

    #  Ux_adv,Uy_adv = advection(Dt,z,Ux_moy,Uy_moy,Ux_rms,Uy_rms)
    #  print(Ux_adv/Ux_rms)
    #    print(Ux_adv)

    figs = {}
    if logscale:
        #   graphes.semilogx(Ux_rms,z,fignum=0,label='bo--')
        graphes.semilogx(Uy_rms, z, fignum=i, label='k^--')

        graphes.semilogx([U_noise_low, U_noise_low], [-400, -100],
                         fignum=i,
                         label='r--')
        graphes.semilogx([U_noise_high, U_noise_high], [-400, -100],
                         fignum=i,
                         label='r--')

        #   graphes.semilogx(np.sqrt(np.power(Ux_moy,2)),z,fignum=i,label='b+--')
        #   graphes.semilogx(np.sqrt(np.power(Uy_moy,2)),z,fignum=i,label='c ^--')

        graphes.set_axis(10**0, 10**4, -300, -120)
        figs.update(graphes.legende('$U_{rms} (t/t_0)$', '$z$ (m)', ''))
        file = graphes.set_title(M, title)
        filename = Dir + file

    else:
        graphes.graph(Ux_rms, z, fignum=0, label='bo--')
        graphes.graph(Uy_rms, z, fignum=i, label='k^--')

        #   graphes.semilogx(Ux_th,z,fignum=i,label='r-')
        #   graphes.semilogx(Uy_th,z,fignum=i,label='r-')
        graphes.graph([U_noise_low, U_noise_low], [-400, -100],
                      fignum=i,
                      label='r--')
        graphes.graph([U_noise_high, U_noise_high], [-400, -100],
                      fignum=i,
                      label='r--')

        graphes.graph(np.sqrt(np.power(Ux_moy, 2)), z, fignum=i, label='b+--')
        graphes.graph(np.sqrt(np.power(Uy_moy, 2)), z, fignum=i, label='c ^--')

        graphes.set_axis(0, 2.5 * 10**3, -300, -120)
        figs.update(graphes.legende('$U_{rms} (t/t_0)$', '$z$ (m)', ''))
        file = graphes.set_title(M, title)
        filename = Dir + file

        graphes.save_figs(figs,
                          savedir='./Spreading/Stat_average_lin/',
                          suffix='',
                          prefix='2015_12_28_front_' + str(t0),
                          frmt='png')

    return figs
コード例 #16
0
ファイル: spreading.py プロジェクト: tmatsuzawa/turbulence
def spreading(Mlist, logscale=False):
    labels = ['k^', 'ro', 'bs']
    M = Mlist[0]
    nx, ny, nt = M.shape()

    # for i,M in enumerate(Mlist):
    #    vertical_spreading(M,10,Dt=20,label=labels[i])
    print(M.shape())
    frame = range(10, 350, 10)
    Dt = np.asarray(
        [M.t[frame[i]] - M.t[frame[i - 1]] for i in range(1, len(frame))])
    # print(Dt)
    #    Ux_adv = np.zeros(nx)
    #    Uy_adv = np.zeros(ny)

    D = 5 * 10**2
    z_init, U_init = initial_shape(offset=140)

    t_init = 0.026

    for i, t0 in enumerate(frame[:-1]):
        z, Ux_moy, Uy_moy, Ux_rms, Uy_rms = profile_average(Mlist,
                                                            t0,
                                                            Dt=10,
                                                            display=False)

        print(M.t[t0])
        z_dif, U_dif = solve_diffusion(-z_init, U_init, D, M.t[t0] - t_init)

        # print(U_dif)

        if i == 0:
            fx = interp.splrep(z, Ux_rms, s=2)  # kind='cubic')
            fy = interp.splrep(z, Uy_rms,
                               s=2)  # interp1d(z, Ux_rms, kind='cubic')

            Ux_adv = interp.splev(z, fx)
            Uy_adv = interp.splev(z, fy)

        figs = display_profile(Mlist[0],
                               i,
                               t0,
                               z,
                               Ux_moy,
                               Uy_moy,
                               Ux_rms,
                               Uy_rms,
                               Dt=Dt[i],
                               fig=i,
                               logscale=logscale)
        #     Ux_adv,Uy_adv = advection(Dt[i],i,z,Ux_moy,Uy_moy,Ux_adv,Uy_adv,display=True)

        graphes.semilogx(U_dif, z_dif, fignum=i, label='r-')
        graphes.set_axis(10**0, 10**4, -300, -120)

        graphes.save_figs(figs,
                          savedir='./Spreading/Diffusion_noNoise/',
                          suffix='',
                          prefix='2015_12_28_front_' + str(t0),
                          frmt='png')

    figs = {}
    graphes.set_fig(1)
    figs.update(graphes.legende('$t$ (s)', '$Front position z$ (mm)', ''))
    graphes.set_fig(2)
    figs.update(graphes.legende('$t$ (s)', '$Front position z (log)$ (mm)',
                                ''))
    graphes.set_fig(3)
    figs.update(graphes.legende('$t$ (s)', '$U_{rms}$ (mm/s)', ''))

    graphes.save_figs(figs,
                      savedir='./Spreading/',
                      suffix='',
                      prefix='2015_12_28_all_')
コード例 #17
0
graphes.color_plot(M.x, M.y, E_moy, fignum=j + 1, vmin=0, vmax=80000)
graphes.colorbar(label=names[j] + ' (' + units[j] + ')')
figs.update(
    graphes.legende('X (mm)', 'Y (mm)', 'Time averaged ' + field, cplot=True))

X, Y = [], []
for i in indices:
    X.append(
        track.positions(M, i, field='E', indices=indices, step=1,
                        sigma=10.)[1])
    Y.append(
        track.positions(M, i, field='E', indices=indices, step=1,
                        sigma=10.)[3])
X0, Y0 = np.nanmean(X), np.nanmean(Y)
# graphes.graph([X0],[Y0],label='ko',fignum=j+1)
graphes.save_figs(figs, savedir=savedir, suffix='smooth')

########################################################
# Time averaged Fluctuating Energy
########################################################
figs = {}
fields, names, vmin, vmax, labels, units = comp.std_fields()
# print(M.param.v)
indices = range(50, Mfluc.Ux.shape[2])
field = 'E'
j = 3  # index to put right units on the graph (j=3 (energy), j=4 (enstrophy))
print(fields)
E_moy = np.nanmean(getattr(Mfluc, field)[..., indices], axis=2)
graphes.color_plot(Mfluc.x, Mfluc.y, E_moy, fignum=j + 1, vmin=0, vmax=80000)
graphes.colorbar(label=names[j] + ' \'' + ' (' + units[j] + ')')
figs.update(
コード例 #18
0
def make_plot(M, Range=None, color='k', field=['E', 'vorticity'], Dirbase=None, Dt=1, example=False, total=True,
              fignum=1, save=True):
    if Dirbase == None:
        Dirbase = '/Users/stephane/Documents/Experiences_local/Accelerated_grid/PIV_data/Test6/'  # local saving
        Dirbase = './Stat_avg/Panel/' + M.Id.date

    axes = flex_panel(M, fignum=fignum)

    # for axe in axes:
    #    plt.sca(axe)
    # plt.cla()

    frames = select_range(M, Range)

    #    field = ['Ux','Uy']
    #  field = ['E','vorticity']
    figs = {}

    if hasattr(M, 'id'):
        Dirname = Dirbase + '/' + M.Id.get_id() + '/' + graphes.remove_special_chars(str(field)) + '/'
    else:
        Dirname = Dirbase + '/JHTD_Data/' + graphes.remove_special_chars(str(field)) + '/'
    print(Dirname)

    if Dt > 1:
        print('Smoothed data')
        Dirname = Dirname + 'Smooth_Dt_' + str(int(Dt)) + '/'

    # Dt = 50
    t_moy, E_moy = access.avg_vs_t(M, 'E', frames, Dt=Dt)
    t_moy, Omega_moy = access.avg_vs_t(M, 'omega', frames, Dt=Dt)
    t_moy, Strain_moy = access.avg_vs_t(M, 'strain', frames, Dt=Dt)
    t_moy, Y_pdf_moy = access.avg_vs_t(M, field[1], frames, Dt=Dt)

    epsilon = scale.dissipation_rate(Omega_moy)  # dissipation rate
    eta = scale.K_scale(epsilon)  # dissipative scale

    micro_1 = np.sqrt(1. / 4 * E_moy / Strain_moy ** 2)
    micro_2 = np.sqrt(E_moy / (Omega_moy) ** 2)

    Re = scale.Re(micro_1, eta)
    Re_lambda_1 = scale.Re_lambda(E_moy, micro_1)
    Re_lambda_2 = scale.Re_lambda(E_moy, micro_2)

    L = scale.I_scale(Re, E_moy)

    #    plt.sca(axes[2])
    #    graphes.graphloglog(t_moy,E_moy,fignum=1,label=color+'o-')
    # Fourier.add_theory(t_moy,E_moy,[-2.],fignum=1)
    #    graphes.graphloglog(t_moy,Y_pdf_moy,fignum=1,label=color+'s-')
    #    graphes.graphloglog(t_moy,epsilon,fignum=1,label='gv-')
    # Fourier.add_theory(t_moy,epsilon,[-3.],fignum=1)
    #    figs.update(graphes.legende('t (s)','E (mm^2/s^2), epsilon(mm^2/s^-3)',''))

    plt.sca(axes[1])
    graphes.graphloglog(t_moy, eta, fignum=fignum, label=color + 'o-')
    graphes.graphloglog(t_moy, micro_1, fignum=fignum, label=color + 's-')
    graphes.graphloglog(t_moy, micro_2, fignum=fignum, label='cp-')
    graphes.graphloglog(t_moy, L, fignum=fignum, label='gv-')
    figs.update(graphes.legende('t (s)', 'eta (mm), lambda (mm)', ''))

    plt.sca(axes[2])
    graphes.graphloglog(t_moy, Re, fignum=fignum, label=color + 'o-')
    graphes.graphloglog(t_moy, Re_lambda_1, fignum=fignum, label=color + 's-')
    graphes.graphloglog(t_moy, Re_lambda_2, fignum=fignum, label='cp-')
    figs.update(graphes.legende('t (s)', 'Re , Re_lambda', ''))

    # print(t_moy)
    #    print(Y_moy)
    # print(t)
    #    print(Y_moy)
    indices = [0, 1]
    #    indices = [1,4]
    cla_axes = [axes[i] for i in indices]

    if save:
        graphes.save_figs(figs, savedir=Dirname, prefix='General', suffix='_vs_t', dpi=300, frmt='png', display=True)

    individual = False

    if example:
        frames_disp = [1200]
    else:
        step = frames[1] - frames[0]
        frames_disp = range(frames[0] + step * 10, frames[-1], step * 10)

    if individual:
        for frame in frames_disp:
            # print(frame)
            # print(frames)
            i = frames.index(frame)
            graphes.set_fig(1)
            for axe in cla_axes:
                plt.sca(axe)
                plt.cla()
            axes = flex_panel(M, fignum=1)

            if total:
                plt.sca(axes[0])
                graphes.Mplot(M, field[0], frame, fignum=1, log=True)
                plt.text(-10, 80, field[0], fontsize=20)

            plt.sca(axes[1])
            #   graphes.graphloglog(t_moy,eta,fignum=1,label='ko-')
            #   graphes.graphloglog(t_moy,micro,fignum=1,label='ks-')
            graphes.graph([t_moy[i]], [eta[i]], fignum=1, label='ro')
            graphes.graph([t_moy[i]], [micro_1[i]], fignum=1, label='rs')
            graphes.graph([t_moy[i]], [micro_2[i]], fignum=1, label='rp')
            graphes.graphloglog([t_moy[i]], [L[i]], fignum=1, label='rv-')

            plt.sca(axes[2])
            graphes.graphloglog([t_moy[i]], [Re[i]], fignum=1, label='ro-')
            graphes.graphloglog([t_moy[i]], [Re_lambda_1[i]], fignum=1, label='rs-')
            graphes.graphloglog([t_moy[i]], [Re_lambda_2[i]], fignum=1, label='rp-')

            plt.sca(axes[3])
            figs.update(graphes.pdf(M, 'Ux', frame, Dt=Dt, fignum=1, label='m^'))
            figs.update(graphes.pdf(M, 'Uy', frame, Dt=Dt, fignum=1, label='b>'))
            figs.update(graphes.legende('t (s)', 'Re , Re_lambda', ''))

            plt.sca(axes[4])
            figs.update(graphes.pdf(M, field[1], frame, Dt=Dt, fignum=1, label=color + '-'))

            #        graphes.Mplot(M,field[1],i,fignum=1,log=True)
            #        plt.text(-10,80,'PDF '+field[1],fontsize=20)
            #        figs.update(graphes.legende('','','Front view',cplot=True))
            graphes.save_figs(figs, savedir=Dirname, suffix='_' + str(frame), dpi=100, frmt='png', display=False)

    return axes
コード例 #19
0
def make_stat_panel(Mlist, fignum=1, **kwargs):
    for M in Mlist:
        make_plot_lin([M], fignum=fignum, **kwargs)

    figs, Dirname = make_plot_lin(Mlist, fignum=fignum, label='r', **kwargs)
    graphes.save_figs(figs, savedir=Dirname, prefix='General', suffix='_vs_t', dpi=300, frmt='png', display=True)
コード例 #20
0
ファイル: spreading.py プロジェクト: tmatsuzawa/turbulence
def vertical_spreading(M, N, Dt=10, label='k^'):
    """
    Compute the vertical profile of RMS velocity as a function of time
    
    INPUT
    -----
    
    OUTPUT
    -----
    figs : dict
        key correspond to figure index, value to their standarzied filename
    """
    n = 160
    ti = 50

    figs = {}

    z0 = -M.param.stroke  # !!!
    z_1 = np.zeros(n)
    z_2 = np.zeros(n)

    t = np.zeros(n)
    E = np.zeros(n)

    indices = [(i + 1) * N + ti for i in range(n)]
    for i, t0 in enumerate(indices):
        z_1[i], z_2[i], E[i], std_E = velocity_profile(M,
                                                       i,
                                                       t0,
                                                       Dt=Dt,
                                                       display=True)
        t[i] = M.t[t0]
        # average on horizontal line (if rotated, correspond to vertical line)
    # compute the vertical RMS velocity profile

    fig = 1
    graphes.set_fig(fig)
    graphes.graph(t, z_1 - z0, fignum=fig, label=label)
    graphes.graph(t, z_2 - z0, fignum=fig, label=label)
    figs.update(graphes.legende('$t$ (s)', '$Front position z$ (mm)', ''))

    fig = 2
    graphes.set_fig(fig)
    graphes.graphloglog(t, np.abs(z0 - z_1), fignum=fig, label=label)
    graphes.graphloglog(t, np.abs(z0 - z_2), fignum=fig, label=label)

    graphes.graphloglog(t, np.power(t, 0.5) * 10**2, fignum=fig, label='r--')
    figs.update(graphes.legende('$t$ (s)', '$Front position z (log)$ (mm)',
                                ''))

    fig = 3
    graphes.set_fig(fig)
    graphes.graphloglog(t, E, fignum=fig, label=label)
    figs.update(graphes.legende('$t$ (s)', '$U_{rms}$ (mm/s)', ''))

    t_min = 6 * 10**-2
    t_max = 4 * 10**-1
    indices = np.where(np.logical_and(t < t_max, t > t_min))
    t_part = t[indices]
    z_part = np.abs(z0 - z_1[indices])

    P = np.polyfit(np.log(t_part / t_min), np.log(z_part), 1)
    C = np.exp(P[1])
    nu = C**2 / t_min
    print(P[0], C)
    print('Effective diffusion coefficient : ' + str(nu) + ' mm^2/s')

    graphes.graphloglog(t, C * np.power(t / t_min, P[0]), fignum=2, label='r-')
    figs.update(graphes.legende('$t$ (s)', '$Front position z (log)$ (mm)',
                                ''))

    graphes.save_figs(figs,
                      savedir='./Spreading/',
                      suffix='',
                      prefix='2015_12_28_front_both_C')

    return figs
コード例 #21
0
def V_distribution2(n, sigma, fignum=1):
    N = 10**4
    N_p = 10
    # names = {name:eval(name) for name in ['sigma','n','N_p']}# this piece of code does not work systematically
    names = {
        'sigma': sigma,
        'n': n,
        'Np': N_p
    }  # name:eval(name) for name in ['sigma','n','N_p']}# this piece of code does not work systematically

    B = 1.
    V_tot = []
    d = 3

    subplot = ['131', '132', '133']
    labels = ['Ux', 'Uy', 'Uz']

    fig, axes = panel.make(subplot, fignum=fignum + 1, axis='on')
    fig.set_size_inches(20, 5)
    figs = {}
    title = 'sigma=' + str(sigma) + ', n=' + str(n) + ', Np=' + str(N_p)
    V_tot = np.zeros((N, N_p, d))

    for p in range(N_p):
        Theta = 2 * np.pi * np.random.random(
            N)  # uniform distribution between 0 and 2pi
        Phi = np.pi * np.random.random(
            N)  # uniform distribution between 0 and pi
        R = B * np.random.random(N)

        X = R * np.cos(Theta) * np.sin(Phi)
        Y = R * np.sin(Theta) * np.sin(Phi)
        Z = R * np.cos(Phi)

        Pos = [np.asarray([x0, y0, z0]) for x0, y0, z0 in zip(X, Y, Z)]

        t = distribution(sigma, n)
        V = biot.velocity_from_line(t.paths, Pos, Gamma=1, d=3)
        if p == 0:
            t_tot = t
        else:
            t_tot.paths = t_tot.paths + t.paths

        V_tot[:, p, :] = V

        figs = radial_density(t, fignum=fignum, label='k')
        figs.update(graphes.legende('R', 'PDF(R)', title))

        for i, num in enumerate(subplot):
            panel.sca(axes[num])
            graphes.distribution(V[..., i],
                                 normfactor=1,
                                 a=10.,
                                 label='k',
                                 fignum=fignum + 1,
                                 norm=True)
            figs.update(graphes.legende(labels[i], 'PDF ' + labels[i], title))

    figs = radial_density(t_tot, fignum=fignum, label='r')
    figs.update(graphes.legende('R', 'PDF(R)', title))

    for i, num in enumerate(subplot):
        panel.sca(axes[num])
        graphes.distribution(V_tot[..., i],
                             normfactor=N_p,
                             a=10.,
                             label='r',
                             fignum=fignum + 1,
                             norm=True)
        figs.update(graphes.legende(labels[i], 'PDF ' + labels[i], title))

    graphes.save_figs(figs,
                      prefix='Random_path/V_Distributions/Compilation/',
                      suffix=suf(names),
                      dpi=300,
                      display=True,
                      frmt='png')