Kernel: Python 3 (system-wide)
In [3]:
import os import cv2 as cv import numpy as np import matplotlib.pyplot as plt plt.style.use('../jfm.mplstyle')
In [4]:
!find ../Experimental_Dataset -type f -name "elevation.csv.gz" | xargs dirname | sort | grep "undular" | tee "data_directories.txt" > /dev/null
In [5]:
def find_idx_nearest(x,v): return np.argmin(np.abs(x-v)) with open("data_directories.txt","r") as data_directories_file: data_directories = data_directories_file.read().splitlines() data_directories = sorted([data_dir for data_dir in data_directories if 'y=+00.00cm' in data_dir]) h0, a0, g = 50, 5, 9810 c0 = np.sqrt(g*h0) t0 = h0/c0 #fig2, ax2 = plt.subplots() fig, ax = plt.subplots(figsize=(4,2.0),layout='constrained') linestyles = ['--','-'] for data_dir, linestyle in zip(data_directories,linestyles): time = np.loadtxt(f"{data_dir}/time.csv",delimiter=',',dtype=int) space = np.loadtxt(f"{data_dir}/space.csv",delimiter=',',dtype=int) elev = np.loadtxt(f"{data_dir}/elevation.csv",delimiter=',') crestnames = sorted([ f"{data_dir}/{name}" for name in os.listdir(data_dir) if "crests" in name ]) troughnames = sorted([ f"{data_dir}/{name}" for name in os.listdir(data_dir) if "troughs" in name ]) crestname = [name for name in crestnames if "1st" in name][0] troughname = [name for name in troughnames if "4th" in name][0] c_t_kwargs = {'delimiter':',','dtype':int,'usecols':(0,)} #c_v_kwargs = {'delimiter':',','dtype':float,'usecols':(1,)} c_t = np.loadtxt(crestname,**c_t_kwargs) t_t = np.loadtxt(troughname,**c_t_kwargs) x = (space*0.3)/h0 t = (time/125)/t0 eta = elev/h0 x_idx = find_idx_nearest(x,20) plateau_fit = np.empty((1000,)) levels = np.linspace(0.1,0.2,1000) for i, mwl in enumerate(levels): # find the zero up crossings eta_new = eta[:,x_idx] - mwl # because the first crossing is an up crossing, just take every other zero_crossings = np.where(np.diff(np.sign(eta_new)))[0][::2] if zero_crossings.size == 0 or zero_crossings.size < 5: plateau_fit[i] = np.nan continue t_start = zero_crossings[0] t_stop = zero_crossings[4] # we assure there are 5 zeros (index 4) plateau_fit[i] = np.mean(eta_new[t_start:t_stop]) plateau_height = levels[np.nanargmin(np.abs(plateau_fit))] ax.plot(t,eta[:,x_idx],color='k',linestyle=linestyle) ax.axhline(plateau_height,color='k',linestyle=linestyle,linewidth=0.9) ax.set_xlim(80,140) ax.set_ylim(0,0.26) ax.set_xlabel(r'$t$') ax.set_ylabel(r'$\eta$') plt.savefig('Fig_25.pdf')
Out[5]:
In [0]: