Compare commits
No commits in common. 'bf916f5f25090f8b1d44c141e62b7ab57e56e5f7' and '4983de64c9405c489abe71850fae0dd5a9cfe229' have entirely different histories.
bf916f5f25
...
4983de64c9
Binary file not shown.
@ -1,88 +0,0 @@
|
|||||||
"""generate_recession_tables.py
|
|
||||||
|
|
||||||
Generate ZSA and ZRFC recession tables (storm demand vs. chainage) based on
|
|
||||||
Nielsen et al. (1992) for lidar-derived beach profiles.
|
|
||||||
|
|
||||||
Reads:
|
|
||||||
Profiles 1 to 12 2019 DEM.xlsx
|
|
||||||
|
|
||||||
Writes:
|
|
||||||
recession_results_zsa.csv
|
|
||||||
recession_results_zrfc.csv
|
|
||||||
|
|
||||||
D Howe
|
|
||||||
d.howe@wrl.unsw.edu.au
|
|
||||||
2022-05-06
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import json
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from nielsen import Gridder, BeachProfile
|
|
||||||
|
|
||||||
BEACH = 'Roches Beach'
|
|
||||||
COLUMNS = ['Chainage', 'Easting', 'Northing', 'Elevation'] # Workbook headers
|
|
||||||
VOLUME = 200 # Storm demand volume for plotting (m^3/m)
|
|
||||||
FIGURE_DIR = 'png' # Save profile plots here
|
|
||||||
|
|
||||||
# Define block and profile IDs
|
|
||||||
with open('settings.json', 'r') as f:
|
|
||||||
DATA = json.loads(f.read())
|
|
||||||
|
|
||||||
print('.', end='', flush=True) # Show progress
|
|
||||||
|
|
||||||
# Load data
|
|
||||||
xlsx_path = 'Profiles 1 to 12 2019 DEM.xlsx'
|
|
||||||
workbook = pd.ExcelFile(xlsx_path)
|
|
||||||
sheets = [s for s in workbook.sheet_names if s[0].isdigit()][::-1]
|
|
||||||
|
|
||||||
# Create output dataframs
|
|
||||||
zsa = pd.DataFrame(index=[[], [], []])
|
|
||||||
zrfc = pd.DataFrame(index=[[], [], []])
|
|
||||||
zsa.index = zsa.index.set_names(['beach', 'block', 'profile'])
|
|
||||||
zrfc.index = zrfc.index.set_names(['beach', 'block', 'profile'])
|
|
||||||
|
|
||||||
for s in sheets:
|
|
||||||
print('.', end='', flush=True) # Show progress
|
|
||||||
|
|
||||||
# Get block and profile IDs
|
|
||||||
block = DATA[s].pop('block')
|
|
||||||
profile = DATA[s].pop('profile')
|
|
||||||
|
|
||||||
# Get additional keyword arguments for Nielsen calculations
|
|
||||||
kwargs = DATA[s]
|
|
||||||
|
|
||||||
# Read current sheet in workbook
|
|
||||||
df = workbook.parse(s, names=COLUMNS)
|
|
||||||
|
|
||||||
# Extract profile coordinates
|
|
||||||
g = Gridder(chainage=df['Chainage'],
|
|
||||||
elevation=df['Elevation'],
|
|
||||||
easting=df['Easting'],
|
|
||||||
northing=df['Northing'],
|
|
||||||
**kwargs)
|
|
||||||
|
|
||||||
# Update recession tables
|
|
||||||
zsa.loc[(BEACH, block, profile), g.volume] = g.chainage['zsa']
|
|
||||||
zrfc.loc[(BEACH, block, profile), g.volume] = g.chainage['zrfc']
|
|
||||||
|
|
||||||
# Plot profiles
|
|
||||||
fig, ax = plt.subplots(1, 1, figsize=(12, 4))
|
|
||||||
|
|
||||||
p = BeachProfile(df['Chainage'], df['Elevation'])
|
|
||||||
p.plot(v=VOLUME, ax=ax, title=f'Roches Beach, P{s}')
|
|
||||||
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
|
|
||||||
png_path = os.path.join(FIGURE_DIR, f'P{s}')
|
|
||||||
plt.savefig(png_path, bbox_inches='tight', dpi=300)
|
|
||||||
|
|
||||||
# Write tables
|
|
||||||
zsa.to_csv('recession_results_zsa.csv', float_format='%0.3f')
|
|
||||||
zrfc.to_csv('recession_results_zrfc.csv', float_format='%0.3f')
|
|
||||||
|
|
||||||
print('\nFinished.')
|
|
@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"1": {
|
|
||||||
"block": 1,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
"block": 2,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"block": 3,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"4s": {
|
|
||||||
"block": 4,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"block": 4,
|
|
||||||
"profile": 2,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"4n": {
|
|
||||||
"block": 4,
|
|
||||||
"profile": 3,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"5": {
|
|
||||||
"block": 5,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"6": {
|
|
||||||
"block": 6,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"7": {
|
|
||||||
"block": 7,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"8": {
|
|
||||||
"block": 8,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"9": {
|
|
||||||
"block": 9,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"10": {
|
|
||||||
"block": 10,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"11": {
|
|
||||||
"block": 11,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
},
|
|
||||||
"12": {
|
|
||||||
"block": 12,
|
|
||||||
"profile": 1,
|
|
||||||
"z_swash": 2
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue