2022-03-03 15:51:51 +01:00
import configparser
import pathlib
import argparse
import logging
import numpy as np
import pandas as pd
import matplotlib . pyplot as plt
import scipy . signal as sgl
from . read_swash import *
parser = argparse . ArgumentParser ( description = " Post-process swash output " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " post " )
log . info ( " Starting post-processing " )
config = configparser . ConfigParser ( )
config . read ( " config.ini " )
cache = pathlib . Path ( config . get ( " data " , " out " ) )
root = pathlib . Path ( config . get ( " swash " , " out " ) )
log . info ( f " Reading bathymetry from ' { cache } ' " )
bathy = pd . read_hdf ( cache . joinpath ( " bathy.h5 " ) , " bathy " )
2022-03-03 16:02:52 +01:00
data = np . load ( pathlib . Path ( config . get ( " post " , " inp " ) ) . joinpath ( " sws.npz " ) )
x , t = data [ " x " ] , data [ " t " ]
2022-03-03 15:51:51 +01:00
# Cospectral calculations
x0 = config . getint ( " post " , " x0 " )
2022-03-03 16:02:52 +01:00
t0 = config . getfloat ( " post " , " t0 " )
dt = config . getfloat ( " post " , " dt " )
2022-03-03 15:51:51 +01:00
f = 1 / dt
log . info ( f " Computing reflection coefficient at x= { x0 } " )
2022-03-03 16:02:52 +01:00
eta = ( data [ " dep " ] - data [ " botl " ] ) [ t > t0 , x0 ]
u = data [ " vel " ] [ t > t0 , 0 , x0 ]
2022-03-03 15:51:51 +01:00
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
log . info ( " Plotting results " )
fig , ( ax_dep , ax_vel ) = plt . subplots ( 2 )
2022-03-03 16:02:52 +01:00
ax_dep . plot ( t , data [ " dep " ] [ : , x0 ] - data [ " botl " ] [ x0 ] , label = " dep " )
2022-03-03 15:51:51 +01:00
ax_dep . set ( xlabel = " t (s) " , ylabel = " z (m) " )
ax_dep . autoscale ( axis = " x " , tight = True )
ax_dep . grid ( )
ax_dep . axvline ( t0 , c = " k " , alpha = 0.2 )
2022-03-03 16:02:52 +01:00
ax_vel . plot ( t , data [ " vel " ] [ : , 0 , x0 ] , label = " vel " )
2022-03-03 15:51:51 +01:00
ax_vel . set ( xlabel = " t (s) " , ylabel = " U (m/s) " )
ax_vel . autoscale ( axis = " x " , tight = True )
ax_vel . grid ( )
ax_vel . axvline ( t0 , c = " k " , alpha = 0.2 )
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 ( )
fig_x , ax_x = plt . subplots ( )
2022-03-03 16:02:52 +01:00
ax_x . plot ( - data [ " botl " ] , color = " k " )
ax_x . plot ( data [ " dep " ] [ t == t0 , : ] - data [ " botl " ] )
2022-03-03 15:51:51 +01:00
ax_x . axvline ( x0 , c = " k " , alpha = 0.2 )
ax_x . set ( xlabel = " x (m) " , ylabel = " z (m) " )
ax_x . autoscale ( axis = " x " , tight = True )
ax_x . grid ( )
out = pathlib . Path ( config . get ( " post " , " out " ) )
log . info ( f " Saving plots in ' { out } ' " )
out . mkdir ( exist_ok = True )
fig . savefig ( out . joinpath ( f " t { x0 } .png " ) )
fig_r . savefig ( out . joinpath ( f " R { x0 } .png " ) )
fig_x . savefig ( out . joinpath ( f " x { t0 } .png " ) )
log . info ( " Finished post-processing " )