def advection(Dt, i, z, Ux_moy, Uy_moy, Ux_rms, Uy_rms, display=True): """ Advect the current profile by the instantaneous x-averaged Uz profile """ # first spline the vertical profile # then, fx = interp.splrep(z, Ux_rms, s=0) # kind='cubic') fy = interp.splrep(z, Uy_rms, s=0) # interp1d(z, Ux_rms, kind='cubic') dz = np.diff(z[0:2])[0] dzi = dz / 10. zi = np.arange(min(z) - dzi, max(z) + dzi, dzi) dU_x = interp.splev(z, fx, der=1) dU_y = interp.splev(z, fy, der=1) V = Ux_moy # dt = M.t[t0+1]-M.t[t0] print(np.mean(Ux_rms)) print(np.max(Dt * V * dU_x)) print(np.min(Dt * V * dU_x)) Ux_adv = Ux_rms - Dt * V * dU_x Uy_adv = Uy_rms - Dt * V * dU_y if display: graphes.semilogx(Ux_adv, z, fignum=i, label='r-') graphes.semilogx(Uy_adv, z, fignum=i, label='r-') return Ux_adv, Uy_adv
def isotropy(M, label='k^--', display=True, fignum=1): '''for each time, compute the distribution of angles (!) in horizontal plane at a very earlier time, should be peaked along x and y directions. Then spread in box directions. Compute that from 5000 or 10000fps movies ''' step = 1 tl = M.t[0:None:step] N = 50 display_part = False Anisotropy = np.zeros(len(tl)) Meanflow = np.zeros(len(tl)) for i, t in enumerate(tl): print(i * 100 / len(tl)) rho, Phi = angles(M, i) theta, U_moy, U_rms = angular_distribution(M, i) # t,U_moy,U_rms = time_window_distribution(M,i,Dt=40) if display_part: graphes.hist(Phi, fignum=1, num=N) graphes.legende('Phi', 'PDF', '') graphes.graph(theta, U_moy, fignum=3, label='k^') graphes.legende('$\theta$', '$U^p$', 'Angular fluctation distribution') graphes.graph(theta, U_rms, fignum=4, label='ro') graphes.legende('$\theta$', '$U^p$', 'Angular average flow') Anisotropy[i] = np.std(U_rms) / np.nanmean(U_rms) Meanflow[i] = np.std(U_moy) / np.nanmean(U_rms) graphes.semilogx(tl, Anisotropy, label='ro', fignum=fignum, subplot=(1, 2, 1)) graphes.legende('Time (s)', 'I', 'Anisotropy' + graphes.set_title(M)) graphes.set_axes(10**-2, 10**4, 0, 2) graphes.semilogx(tl, Meanflow, label='k^', fignum=fignum, subplot=(1, 2, 2)) graphes.legende('Time (s)', '<U>', 'Average flow') graphes.set_axes(10**-2, 10**4, 0, 4)
def taylor_scale(M, fignum=1, display=True, label='k^'): #author: stephane nx, ny, nt = M.shape() t = M.t Dt = 20 step = 1 lambda_R = {} Urms = [] t_R = [] for i in range(Dt, nt - Dt, step): t_R.append(t[i]) lambdas, U = compute(M, i, Dt=Dt) Urms.append(U) if lambda_R == {}: for key in lambdas.keys(): lambda_R[key] = [lambdas[key]] else: for key in lambdas.keys(): lambda_R[key] += [lambdas[key]] graphes.semilogx(t_R, lambda_R['t_moy'], fignum=fignum, label=label[0] + '^') graphes.semilogx(t_R, lambda_R['l_moy'], fignum=fignum, label=label[0] + '>') graphes.graphloglog(t_R, np.asarray(Urms) * np.asarray(lambda_R['t_moy']), fignum=fignum + 1, label=label) graphes.graphloglog(np.asarray(Urms), np.asarray(lambda_R['t_moy']), fignum=fignum + 2, label=label) graphes.legende('<U' '>', 'lambda', '')
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
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_')
def display_fft_vs_t(m, dimension='1d', Dt=20, fignum=0, label='^', display=False): """ Parameters ---------- m : dimension: Dt: fignum: label: display: Returns ------- t, E_t """ display_part = True # plt.close(1) if dimension == '1d': S_k_2d, kx, ky = energy_spectrum_2d(m, Dt=Dt) S_k, k = energy_spectrum_1d(m, Dt=Dt) if dimension == '2d': S_k, kx, ky = energy_spectrum_2d(m, Dt=Dt) # start=580 # end=700 # step=10 # print(S_k) if dimension == '1d': x = [10 ** 0, 10 ** 1.5] y = [10 ** -0.5, 10 ** -3] # graphes.graph(x,y,-1,'r-') # t0=590 # time_serie=range(t0+10,10000,50)#[round(t0*i**2) for i in np.arange(1,4,0.3)] # origin of time t0 = 0. # .51 tref = np.asarray(m.t) - t0 # tref=1-tref nt = len(tref) # time_serie=[600,900,1200,1600,1900,2900,5000,8000] # time_serie=[i for i in np.arange(400,650,10)] # time_serie=range(10,nt-2) step = 1 time_serie = range(Dt + 1, nt - Dt * 3 - 11, step) # [50,120,200,300,400,450,550] # print(nt-Dt*3-11) # t0=500 # time_serie=[round(i)+t0 for i in np.logspace(1,3.973) if round(i)+t0<nt] # time_serie=range(start,end,50) alpha = np.zeros(len(time_serie)) beta = np.zeros(len(time_serie)) epsilon = np.zeros(len(time_serie)) t_alpha = np.zeros(len(time_serie)) # graphes.hist(k) kmin = -2.7 kmax = -1.7 # print(np.log10(k)) tmax = 300; for i, t in enumerate(time_serie): # print(t) if tref[t] < tmax: if dimension == '1d': k_log = np.log10(k) S_log = np.log10(S_k[:, t]) indices = np.logical_and(k_log > kmin, k_log < kmax) # print(indices) # print(S_log) k_log = k_log[indices] S_log = S_log[indices] P = np.polyfit(k_log, S_log, 1) alpha[i] = 10 ** P[1] # *np.mean(k)**P[0] beta[i] = P[0] C_k = 0.55 epsilon[i] = (alpha[i] / C_k) ** (3 / 2) t_alpha[i] = tref[t] # if t>min(time_serie): # Dt=tref[time_serie.index(t)]-tref[time_serie.index(t-1)] # print(Dt,alpha[time_serie.index(t)]) # print((t_alpha,alpha)) if display_part: graphes.set_fig(1) # graphes.subplot(1,2,1) k0 = np.min(k); display_fft_1d(k, (k / k0) ** (5 / 3) * S_k[:, t] / alpha[i], fignum=1, label='') display_fft_1d(k, (k / k0) * S_k[:, t] / alpha[i], fignum=2, label='') # normalized # print(t_alpha[i]) # display_fft_1d(k,np.abs(S_k[:,t]/t_alpha[i]),fignum=1) # graphes.graphloglog(k[indices],10**np.polyval(P,k_log),label='r--') display_fft(m, t, dimension) # graphes.subplot(1,2,2) # graphes.vfield_plot(m,t,fignum=2) # there is a slighlty degeneracy of the spectrum along both axis. Removes |kx| < epsilon and |ky| < epsilon for every k ? # display_fft_2d(kx,ky,S_k_2d[:,:,t],fignum=3) # display_fft(m,t,dimension) # input() if dimension == '2d': display_fft_2d(kx, ky, S_k[:, :, t]) display_fft(m, t, dimension) if display: # title='$Z$ = '+str(m.Sdata.param.Zplane/10)+' cm' # graphes.legende('$t$ (s)','$E (a.u.)$',title graphes.graphloglog(t_alpha, alpha, label=label, fignum=7) graphes.graphloglog([10 ** -1, 10 ** 3], [10 ** 8, 10 ** 0], label='r--', fignum=7) graphes.legende('$t$ (s)', '$E_{\lambda}$ (a.u.)', graphes.set_title(m)) graphes.semilogx(t_alpha, beta, label=label, fignum=8) # graphes.semilogx(t_alpha,beta,label=label,fignum=0) graphes.semilogx([10 ** -1, 10 ** 3], [-5 / 3, -5 / 3], label='r-', fignum=8) graphes.set_axis(10 ** -1, 10 ** 3, -2.5, 0) graphes.legende('$t$ (s)', 'exponent', graphes.set_title(m)) # plot the dissipative scale as a function of time nu = 1 # in mm^2/s eta = (nu ** 3 / np.asarray(epsilon)) ** (1 / 4) graphes.graphloglog(t_alpha, eta, label=label, fignum=9) graphes.graphloglog([10 ** -1, 10 ** 3], [10 ** 8, 10 ** 0], label='r--', fignum=9) graphes.legende('$t$ (s)', '$\eta$ (mm)', graphes.set_title(m)) E_t = epsilon t = t_alpha return t, E_t