1
Fork 0
internship/swash/processing/post.py

70 lines
1.6 KiB
Python

import configparser
import pathlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.signal as sgl
from .read_swash import *
config = configparser.ConfigParser()
config.read("config.ini")
cache = pathlib.Path(config.get("data", "out"))
root = pathlib.Path(config.get("swash", "out"))
bathy = pd.read_hdf(cache.joinpath("bathy.h5"), "bathy")
n = bathy.index.size
botl = read_nohead_scalar(root.joinpath("botl.dat"), n)
dep = np.maximum(0, read_nohead_scalar(root.joinpath("dep.dat"), n))
vel = read_nohead_vect(root.joinpath("vel.dat"), n)
n_t = botl.shape[0]
# Cospectral calculations
pos_x = n // 10
f = 1 / 0.25
eta = (dep - botl)[n_t // 2 :, pos_x]
u = vel[n_t // 2 :, 0, pos_x]
phi_eta = np.abs(sgl.csd(eta, eta, f))
phi_u = np.abs(sgl.csd(u, u, f))
phi_eta_u = np.abs(sgl.csd(eta, u, f))
R = np.sqrt(
(phi_eta[1] + phi_u[1] - 2 * phi_eta_u[1])
/ (phi_eta[1] + phi_u[1] + 2 * phi_eta_u[1])
)
# Plotting
fig, (ax_dep, ax_vel) = plt.subplots(2)
ax_dep.plot((dep - botl)[:, pos_x], label="dep", color="#0066ff")
ax_dep.set(xlabel="t (s)", ylabel="z (m)")
ax_dep.autoscale(axis="x", tight=True)
ax_dep.grid()
ax_vel.plot(vel[:, 0, pos_x], label="vel")
ax_vel.set(xlabel="t (s)", ylabel="U (m/s)")
ax_vel.autoscale(axis="x", tight=True)
ax_vel.grid()
fig.tight_layout()
fig_r, ax_r = plt.subplots()
ax_r.plot(phi_eta[0], R)
ax_r.autoscale(axis="x", tight=True)
ax_r.set(ylim=(0, 1), xlabel="f (Hz)", ylabel="R")
ax_r.grid()
out = pathlib.Path(config.get("post", "out"))
out.mkdir(exist_ok=True)
fig.savefig(out.joinpath(f"{pos_x}.png"))
fig_r.savefig(out.joinpath(f"R{pos_x}.png"))