AJMR-Python-Baird/Mustique/MustiquePlotting_HD3.py

586 lines
23 KiB
Python

## Plotting Mike21 SW results for SouthShore
# Author: AJMR
# December 22, 2021
# %% Setup Project
from mikeio import Dfsu, Mesh, Dfs2, Dfs0, Dfs1
import pandas as pd
import pathlib as pl
import numpy as np
import geopandas as gp
import datetime as datetime
import matplotlib.pyplot as plt
import contextily as ctx
import matplotlib.font_manager as fm
# %% Read Model Log
pth = pl.Path("//srv-ott3.baird.com/", "Projects", "13539.101 L'Ansecoy Bay, Mustique", "06_Models",
"Model Log Mustique.xlsx")
runLog = pd.read_excel(pth.as_posix(), "ModelLog")
# %% Read Model Results
modelPlot = range(10, 11)
curSpeed_list = [None] * (max(modelPlot) + 1)
curElm_list = [None] * (max(modelPlot) + 1)
curU_list = [None] * (max(modelPlot) + 1)
curV_list = [None] * (max(modelPlot) + 1)
curW_list = [None] * (max(modelPlot) + 1)
dfs_list = [None] * (max(modelPlot) + 1)
dfs2d_list = [None] * (max(modelPlot) + 1)
ds_list = [None] * (max(modelPlot) + 1)
wl_list = [None] * (max(modelPlot) + 1)
wd_list = [None] * (max(modelPlot) + 1)
bed_list = [None] * (max(modelPlot) + 1)
z_list = [None] * (max(modelPlot) + 1)
z_profile_list = [None] * (max(modelPlot) + 1)
elm_list = [None] * (max(modelPlot) + 1)
elm_df_list = [None] * (max(modelPlot) + 1)
elm2d_list = [None] * (max(modelPlot) + 1)
elm2d_df_list = [None] * (max(modelPlot) + 1)
readPointsName = pd.read_csv("//srv-ott3.baird.com/Projects/13539.101 L'Ansecoy Bay, Mustique/03_Data/03_Field/01_September 2021 trip/Dataset locations_RevB.csv",
delimiter=",")
readPoints = pd.read_csv("//srv-ott3.baird.com/Projects/13539.101 L'Ansecoy Bay, Mustique/03_Data/03_Field/01_September 2021 trip/Dataset locations_RevE.csv",
delimiter=",").iloc[0:, 2:-2].values
# readPoints = np.zeros((14, 2))
# readPoints[0, :] = [693000, 1425500]
# readPoints[1, :] = [697000, 1429500]
# readPoints[2, :] = [697000, 1421500]
# readPoints[3, :] = [701000, 1425500]
#
# # readPoints[4, :] = [697576.96, 1425767.10] # RBR NEAR
# # readPoints[5, :] = [697760.89, 1426109.73] # RBR FAR
#
# # From Mathew
# readPoints[4, :] = [697858.00, 1426095.00] # RBR NEAR
# readPoints[5, :] = [697613.00, 1426509.00] # RBR FAR
#
# # Location Uncertainty
# # 500 -x
# readPoints[6, :] = [697858.00-100, 1426095.00-0] # RBR NEAR
# readPoints[7, :] = [697613.00-150, 1426509.00+150] # RBR FAR
# # 500 +x
# readPoints[8, :] = [697858.00+100, 1426095.00-0] # RBR NEAR
# readPoints[9, :] = [697613.00-50, 1426509.00+50] # RBR FAR
# # 500 -x
# readPoints[10, :] = [697858.00+150, 1426095.00+150] # RBR NEAR
# readPoints[11, :] = [697613.00+150, 1426509.00+150] # RBR FAR
# # 500 -x
# readPoints[12, :] = [697858.00-150, 1426095.00+150] # RBR NEAR
# readPoints[13, :] = [697613.00-150, 1426509.00+150] # RBR FAR
#125 +125
for m in modelPlot:
dfsIN = Dfsu(pl.Path(runLog['Run Location'][m], 'fullDomain2D.dfsu').as_posix())
dfs2d_list[m] = dfsIN
# Read Map
# ds_list[m] = dfs_list[m].read()
# curU_list[m] = ds_list[m]["Depth averaged U velocity"]
# curV_list[m] = ds_list[m]["Depth averaged V velocity"]
# curElm_list[m] = dfs_list[m].element_coordinates
# wl_list[m] = ds_list[m]["Surface elevation"]
# z_list[m] = ds_list[m]["Z coordinate"]
## Read specific points in 2D
# Find nearest elements
elem_ids = dfs2d_list[m].find_nearest_elements(readPoints[:, 0], readPoints[:, 1])
# Read in data from nearest elements
elm2d_list[m] = dfs2d_list[m].read(elements=elem_ids)
# Convert to Pandas DataFrame
elm2d_df_list[m] = [None] * readPoints.shape[0]
for p in range(0, readPoints.shape[0]):
elm2d_df_list[m][p] = elm2d_list[m].isel(idx=p).to_dataframe()
## Read specific points 3D
# Setup MIKE object
dfsIN = Dfsu(pl.Path(runLog['Run Location'][m], 'fullDomain3D.dfsu').as_posix())
dfs_list[m] = dfsIN
# Find nearest elements
elem_ids = dfs_list[m].find_nearest_profile_elements(readPoints[:, 0], readPoints[:, 1])
# Read from elements- flatten 2d element array (xy and z) to 1d for reading
elm_list[m] = dfs_list[m].read(elements=elem_ids.flatten().astype(int))
elm_df_list[m] = [None] * readPoints.shape[0]
z_profile_list[m] = [None] * readPoints.shape[0]
# Convert to Pandas DataFrame
# Loop through points, selecting corresponding depths
for p in range(0, readPoints.shape[0]):
z_profile_list[m][p] = dfs_list[m].element_coordinates[elem_ids[p, :].astype(int), 2]
# Convert to Pandas and add zidx
for z in range(0, z_profile_list[m][p].shape[0]):
df_tmp = elm_list[m].isel(idx=p * 5 + z).to_dataframe()
df_tmp['Z'] = z_profile_list[m][p][z]
df_tmp['Z_IDX'] = z
if z == 0:
elm_df_list[m][p] = df_tmp
else:
elm_df_list[m][p] = elm_df_list[m][p].append(df_tmp)
del df_tmp
# %% Import RBR data
rbr_path = "C:/Users/arey/files/Projects/Mustique/041279_20211203_1541Ruskin.xlsx"
rbr_pd = pd.read_excel(rbr_path, sheet_name='Wave', parse_dates=True, header=1, index_col=0)
rbr_pd['WL'] = rbr_pd['Depth'] - rbr_pd['Depth'].mean() - 0.2
# Correct time zone
rbr_pd.index = rbr_pd.index + datetime.timedelta(hours=4)
# %% Import Nortek Eco data
eco_path_1 = "//srv-ott3/Projects/13539.101 L'Ansecoy Bay, Mustique/03_Data/03_Field/01_September 2021 trip/02_Nortek ECO/Eco61_20210910184606.csv"
eco_path_2 = "//srv-ott3/Projects/13539.101 L'Ansecoy Bay, Mustique/03_Data/03_Field/01_September 2021 trip/02_Nortek ECO/Eco214_20210902120703.csv"
eco1_pd = pd.read_csv(eco_path_1, sep=',', header=[28], index_col=0,
parse_dates=False)
eco2_pd = pd.read_csv(eco_path_2, sep=',', header=[28], index_col=0,
parse_dates=False)
# Drop first row
eco1_pd.drop(eco1_pd.index[0], inplace=True)
eco2_pd.drop(eco2_pd.index[0], inplace=True)
eco1_pd.index = pd.to_datetime(eco1_pd.index, format='%m/%d/%Y %I:%M:%S %p')
eco2_pd.index = pd.to_datetime(eco2_pd.index, format='%m/%d/%Y %I:%M:%S %p')
# Set water level to zero
eco1_pd['WL'] = eco1_pd['Depth'].astype(float) - eco1_pd['Depth'].astype(float).mean(skipna=True) + 0.2
eco2_pd['WL'] = eco2_pd['Depth'].astype(float) - eco2_pd['Depth'].astype(float).mean(skipna=True) + 0.2
# Correct time zone
eco1_pd.index = eco1_pd.index + datetime.timedelta(hours=4)
eco2_pd.index = eco2_pd.index + datetime.timedelta(hours=4)
# %% Read in boundary conditions
ds_wl = []
dfs1 = Dfs1("//oak-spillway.baird.com/D/13539.101 L'Ansecoy Bay, Mustique/MIKE3/02_Bounds/NCOM2_EastBound.dfs1")
ds_wl.append(dfs1.read())
dfs1 = Dfs1("//oak-spillway.baird.com/D/13539.101 L'Ansecoy Bay, Mustique/MIKE3/02_Bounds/NCOM2_NorthBound.dfs1")
ds_wl.append(dfs1.read())
dfs1 = Dfs1("//oak-spillway.baird.com/D/13539.101 L'Ansecoy Bay, Mustique/MIKE3/02_Bounds/NCOM2_SouthBound.dfs1")
ds_wl.append(dfs1.read())
dfs1 = Dfs1("//oak-spillway.baird.com/D/13539.101 L'Ansecoy Bay, Mustique/MIKE3/02_Bounds/NCOM2_WestBound.dfs1")
ds_wl.append(dfs1.read())
# %% Plot Water Level at a point
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(8, 8), sharex=True)
# plotstart = '2021-10-01 00:00:00'
# plotend = '2021-10-21 00:00:00'
plotstart = '2021-10-05 00:00:00'
plotend = '2021-10-07 00:00:00'
for sub, p in enumerate([5, 6, 9]):
if p == 9:
rbr_pd['WL'].plot(ax=axes[sub], color='k', label='Obervations')
elif p == 5:
eco1_pd['WL'].plot(ax=axes[sub], color='k', label='Obervations')
elif p == 6:
eco2_pd['WL'].plot(ax=axes[sub], color='k', label='Obervations')
elm2d_df_list[m][p].plot(y='Surface elevation', ax=axes[sub], label=readPointsName.Dataset[p])
axes[sub].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[sub].set_ylim(-1.0, 1.0)
plt.show()
# %% Plot Water Level at a 3D point
plotstart = '2021-09-14 00:00:00'
# plotend = '2021-09-16 00:00:00'
plotend = '2021-10-03 00:00:00'
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(8, 8), sharex=True)
# elm_df_list[m][6].loc[elm_df_list[m][6]['Z_IDX'] == 4, :].plot(
# y='Z', ax=axes[0], label='Model')
axes[0].plot(elm_df_list[m][5].loc[elm_df_list[m][5]['Z_IDX'] == 4, :].index,
elm_list[m]['Z coordinate'][:, 30*6-1]+0.1, label='Model')
eco1_pd['WL'].plot(ax=axes[0], color='k', label='Observations')
axes[0].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[0].set_ylabel('Water Level Offshore (m)')
axes[0].legend()
# elm_df_list[m][7].loc[elm_df_list[m][7]['Z_IDX'] == 4, :].plot(
# y='Z', ax=axes[1], label='Model')
axes[1].plot(elm_df_list[m][7].loc[elm_df_list[m][7]['Z_IDX'] == 4, :].index,
elm_list[m]['Z coordinate'][:, 14*6-1]+0.1, label='Model')
eco2_pd['WL'].plot(ax=axes[1], color='k', label='Observations')
axes[1].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[1].set_ylabel('Water Level Nearshore (m)')
axes[1].legend()
axes[1].set_xlabel('Date')
plt.show()
fig.savefig('//srv-ott3.baird.com/Projects/13539.101 L\'Ansecoy Bay, Mustique/06_Models/01_MIKE3/00_Figures/' +
'/wl_TS.png', bbox_inches='tight')
# %% Velocity point
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(8, 8), sharex=True)
eco1_pd['Upper speed'].astype(float).plot(ax=axes[0], color='tab:red', label='Observations')
elm_df_list[m][5]['Current Speed'] = np.sqrt(
elm_df_list[m][5]['U velocity'] ** 2 + elm_df_list[m][5]['V velocity'] ** 2)
elm_df_list[m][5].loc[elm_df_list[m][4]['Z_IDX'] == 4, :].plot(
y='Current Speed', ax=axes[0], label='Model')
axes[0].set_xlim(pd.Timestamp('2021-09-15 00:00:00'), pd.Timestamp('2021-10-3 00:00:00'))
axes[0].set_ylabel('Nearshore Eco Current')
axes[0].legend()
eco2_pd['Upper speed'].astype(float).plot(ax=axes[1], color='tab:red', label='Observations')
elm_df_list[m][5]['Current Speed'] = np.sqrt(
elm_df_list[m][5]['U velocity'] ** 2 + elm_df_list[m][5]['V velocity'] ** 2)
elm_df_list[m][5].loc[elm_df_list[m][5]['Z_IDX'] == 4, :].plot(
y='Current Speed', ax=axes[1], label='Model')
axes[1].set_xlim(pd.Timestamp('2021-09-15 00:00:00'), pd.Timestamp('2021-10-3 00:00:00'))
axes[1].set_ylabel('Offshore Eco Current')
plt.show()
# %% Velocity point U and V
# Z_IDX = 4
# ecoVar1 = 'Upper speed U'
# ecoVar2 = 'Upper speed V'
# ecoVar3 = 'Upper speed'
# ecoVar4 = 'Upper direction'
# plotstart = '2021-09-14 00:00:00'
# # plotend = '2021-09-16 00:00:00'
# plotend = '2021-10-03 00:00:00'
plotstart = '2021-10-01 00:00:00'
# plotend = '2021-09-16 00:00:00'
plotend = '2021-10-21 00:00:00'
Z_IDX = 2
ecoVar1 = 'Middle speed U'
ecoVar2 = 'Middle speed V'
ecoVar3 = 'Middle speed'
ecoVar4 = 'Middle direction'
# Z_IDX = 1
# ecoVar1 = 'Lower speed U'
# ecoVar2 = 'Lower speed V'
# ecoVar3 = 'Lower speed'
# ecoVar4 = 'Lower direction'
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(8, 8), sharex=True)
eco1_pd[ecoVar1] = eco1_pd[ecoVar3].astype(float) * \
np.sin(np.radians(eco1_pd[ecoVar4].astype(float).to_numpy()))
eco1_pd[ecoVar1].astype(float).plot(ax=axes[0], color='k', label='Observations')
elm_df_list[m][3].loc[elm_df_list[m][3]['Z_IDX'] == Z_IDX, :].plot(
y='U velocity', ax=axes[0], label='Model')
elm_df_list[m][5].loc[elm_df_list[m][5]['Z_IDX'] == Z_IDX, :].plot(
y='U velocity', ax=axes[0], label='Model Shift')
axes[0].set_ylim(-0.5, 0.5)
axes[0].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[0].set_ylabel('Nearshore U (m/s)')
axes[0].legend(bbox_to_anchor=(0.90, 1), loc="upper left")
eco1_pd[ecoVar2] = eco1_pd[ecoVar3].astype(float) * \
np.cos(np.radians(eco1_pd[ecoVar4].astype(float).to_numpy()))
eco1_pd[ecoVar2].astype(float).plot(ax=axes[1], color='k', label='Observations')
elm_df_list[m][3].loc[elm_df_list[m][3]['Z_IDX'] == Z_IDX, :].plot(
y='V velocity', ax=axes[1], label='Model')
elm_df_list[m][5].loc[elm_df_list[m][5]['Z_IDX'] == Z_IDX, :].plot(
y='V velocity', ax=axes[1], label='Model Shift')
axes[1].set_ylim(-0.5, 0.5)
axes[1].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[1].set_ylabel('Nearshore V (m/s)')
axes[1].legend(bbox_to_anchor=(0.90, 1), loc="upper left")
eco2_pd[ecoVar1] = eco2_pd[ecoVar3].astype(float) * \
np.sin(np.radians(eco2_pd[ecoVar4].astype(float).to_numpy()))
eco2_pd[ecoVar1].astype(float).plot(ax=axes[2], color='k', label='Observations')
elm_df_list[m][4].loc[elm_df_list[m][4]['Z_IDX'] == Z_IDX, :].plot(
y='U velocity', ax=axes[2], label='Model')
elm_df_list[m][6].loc[elm_df_list[m][6]['Z_IDX'] == Z_IDX, :].plot(
y='U velocity', ax=axes[2], label='Model Shift')
axes[2].set_ylim(-1.5, 1.5)
axes[2].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[2].set_ylabel('Offshore U (m/s)')
axes[2].legend(bbox_to_anchor=(0.90, 1), loc="upper left")
eco2_pd[ecoVar2] = eco2_pd[ecoVar3].astype(float) * \
np.cos(np.radians(eco2_pd[ecoVar4].astype(float).to_numpy()))
eco2_pd[ecoVar2].astype(float).plot(ax=axes[3], color='k', label='Observations')
elm_df_list[m][4].loc[elm_df_list[m][4]['Z_IDX'] == Z_IDX, :].plot(
y='V velocity', ax=axes[3], label='Model')
elm_df_list[m][5].loc[elm_df_list[m][5]['Z_IDX'] == Z_IDX, :].plot(
y='V velocity', ax=axes[3], label='Model Shift')
axes[3].set_ylim(-1.00, 1.00)
axes[3].set_xlim(pd.Timestamp(plotstart), pd.Timestamp(plotend))
axes[3].set_ylabel('Offshore V (m/s)')
axes[3].legend(bbox_to_anchor=(0.90, 1), loc="upper left")
axes[3].set_xlabel('Date')
plt.show()
# fig.savefig('//srv-ott3.baird.com/Projects/13539.101 L\'Ansecoy Bay, Mustique/06_Models/01_MIKE3/00_Figures/' +
# '/uVel_TS.png', bbox_inches='tight')
# %% Plotting
# Shaded Water
mapbox = 'https://api.mapbox.com/styles/v1/alexander0042/ckemxgtk51fgp19nybfmdcb1e/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiYWxleGFuZGVyMDA0MiIsImEiOiJjazVmdG4zbncwMHY4M2VrcThwZGUzZDFhIn0.w6oDHoo1eCeRlSBpwzwVtw'
x, y, arrow_length = 0.93, 0.95, 0.12
fontprops = fm.FontProperties(size=12)
modelPlot = range(6, 7)
vmin = 0
vmax = 1
scale = 1 # 5
for m in modelPlot:
if m < 4 or m == 6:
vmax = 5
qmax = 4
scale = 50
amin = 1
else:
vmax = 1
qmax = 0.25
scale = 75
amin = 3
fig, axes = plt.subplots(figsize=(8, 8))
# Convert to feet and ignore missing
cur_plot = curSpeed_list[m] * 3.28084
cur_nan = np.isnan(cur_plot)
axDHI = dfs_list[m].plot(cur_plot[~cur_nan], plot_type='contourf', show_mesh=False, cmap='viridis', ax=axes,
levels=11,
vmin=vmin, vmax=vmax, label='Current Speed (ft/s)',
elements=dfs_list[m].element_ids[~cur_nan])
# Plot arrows on overset grid
overGrid = dfs_list[m].get_overset_grid(dx=50)
interpolant = dfs_list[m].get_2d_interpolant(overGrid.xy, n_nearest=1)
# Interpolate velocity at last time step by selecting time from dataset
overGrid_Cur = dfs_list[m].interp2d(ds_list[m][ds_list[m].time[-1]:], *interpolant,
shape=(overGrid.ny, overGrid.nx))
overGrid_U = overGrid_Cur["U velocity"][-1]
overGrid_V = overGrid_Cur["V velocity"][-1]
# Normalize velocity above limit
overGrid_U_Scale = overGrid_U * 3.28084
overGrid_V_Scale = overGrid_V * 3.28084
r = np.power(np.add(np.power(overGrid_U_Scale, 2), np.power(overGrid_V_Scale, 2)), 0.5)
curPlotMask = np.sqrt((overGrid_U_Scale) ** 2 + (overGrid_V_Scale) ** 2) > qmax
overGrid_U_Plot = np.zeros(overGrid_U_Scale.shape)
overGrid_V_Plot = np.zeros(overGrid_V_Scale.shape)
# Normalize arrows to 1
overGrid_U_Plot = overGrid_U_Scale / r
overGrid_V_Plot = overGrid_V_Scale / r
# Scale arrows below qmax
overGrid_U_Plot[~curPlotMask] = overGrid_U_Plot[~curPlotMask] * (r[~curPlotMask] / qmax)
overGrid_V_Plot[~curPlotMask] = overGrid_V_Plot[~curPlotMask] * (r[~curPlotMask] / qmax)
qv = axDHI.quiver(overGrid.x, overGrid.y, overGrid_U_Plot, overGrid_V_Plot, scale=scale,
color='k', headlength=3.5, headwidth=3.5, headaxislength=3.5, width=0.0015, minlength=amin) # 200
axes.set_xlim(left=427800, right=431000)
axes.set_ylim(bottom=4758000, top=4762000)
ctx.add_basemap(axes, source=mapbox, crs='EPSG:32616')
# axes.title.set_text(runLog['Short Description'][m])
# axes.titlesize = 'x-large'
fig.suptitle(runLog['Short Description'][m], fontsize=18)
axes.set_xlabel('Easting [m]')
axes.set_ylabel('Northing [m]')
plt.show()
fig.savefig(
'//srv-mad3.baird.com/Projects/13632.101 South Shore Breakwater/06_Models/04_MIKE21_HD/Images/Production/' +
runLog['Short Description'][m] + '_RevC_Current.png', bbox_inches='tight', dpi=300)
# %% Plot Bathymetry
fig, axes = plt.subplots(figsize=(8, 8))
# Convert to feet and ignore missing
bed_plot = (bed_list[m] * 3.28084) - 578.007
bed_nan = np.isnan(bed_plot)
axDHI = dfs_list[m].plot(bed_plot[~bed_nan], plot_type='contourf', show_mesh=False, cmap='magma_r', ax=axes, levels=9,
vmin=-80, vmax=0, label='Bed Elevation (ft)',
elements=dfs_list[m].element_ids[~bed_nan])
axes.set_xlim(left=427800, right=431000)
axes.set_ylim(bottom=4758000, top=4762500)
ctx.add_basemap(axes, source=mapbox, crs='EPSG:32616')
fig.suptitle('Bed Elevation', fontsize=18)
axes.set_xlabel('Easting [m]')
axes.set_ylabel('Northing [m]')
plt.show()
fig.savefig(
'//srv-mad3/Projects/13632.101 South Shore Breakwater/10_Reports&Pres/13632.101.R3 Ph I BOD/Support files/' +
'Bed_Elevation.png', bbox_inches='tight', dpi=300)
# %% Read time series
MIKEds_list = [None] * (max(modelPlot) + 1)
MIKEdsT_list = [None] * (max(modelPlot) + 1)
for m in modelPlot:
dfsIN = Dfs0(pl.Path(runLog['Run Location'][m], str(runLog['Number'][m]) + '_' +
runLog['Run Name'][m] + '.sw - Result Files', 'BreakPts.dfs0').as_posix())
dfsIN_read = dfsIN.read()
MIKEds_list[m] = dfsIN_read.to_dataframe()
dfsTIN = Dfs0(pl.Path(runLog['Run Location'][m], str(runLog['Number'][m]) + '_' +
runLog['Run Name'][m] + '.sw - Result Files', 'TransectPTS.dfs0').as_posix())
dfsTIN_read = dfsTIN.read()
MIKEdsT_list[m] = dfsTIN_read.to_dataframe()
# Cleanup unnecessary variables
del dfsIN_read
del dfsIN
del dfsTIN_read
del dfsTIN
# %% Read in Toe and Crest Shapefiles
breakwaterPTS = gp.read_file("//srv-mad3.baird.com/Projects/"
"13632.101 South Shore Breakwater/08_CADD/Outgoing/"
"20211211_Toe Extents (to Alexander)/"
"20211211_Toe_Extents_NAD83_WISStatePlaneSZn_USFt_Lines_OffshoreClipSimple_10m_vertexUTM.shp")
breakCrest = pd.read_csv(
'//srv-mad3.baird.com/Projects/13632.101 South Shore Breakwater/08_CADD/Outgoing/20211214_Crest Points (to Alexander)/20211214_Crest_Points_m.csv',
header=None, names=['x', 'y', 'z'])
breakCrest_gdf = gp.GeoDataFrame(breakCrest, crs='EPSG:32154',
geometry=gp.points_from_xy(breakCrest.x, breakCrest.y))
breakCrest_gdf.to_crs('EPSG:32616', inplace=True)
breakwaterPTS_Crest = breakwaterPTS.sjoin_nearest(breakCrest_gdf)
breakwaterPTS_Crest.rename(columns={'x': 'breakCrest_x', 'y': 'breakCrest_y', 'z': 'Crest'}, inplace=True)
# %% Merge with data
breakPointsOut = [None] * (max(modelPlot) + 1)
breakTimesOut = [None] * (max(modelPlot) + 1)
for m in modelPlot:
breakwaterPTS_times = None
for t in range(0, MIKEds_list[m].shape[0]):
breakwaterPTS_merge = None
breakwaterPTS_merge = breakwaterPTS_Crest
for i in range(0, MIKEds_list[m].shape[1]):
paramName = MIKEds_list[m].columns.values[i][MIKEds_list[m].columns.values[i].find('"', 5, -1) + 3:]
if paramName not in breakwaterPTS_merge.columns:
breakwaterPTS_merge[paramName] = np.full([breakwaterPTS_merge.shape[0], 1], np.nan)
tmpFID = int(MIKEds_list[m].columns.values[i][1:MIKEds_list[m].columns.values[i].find('"', 1)])
tmpIND = int(MIKEds_list[m].columns.values[i][5:MIKEds_list[m].columns.values[i].find('"', 5)])
breakwaterPTS_merge.loc[((breakwaterPTS_merge.FID == tmpFID) &
(breakwaterPTS_merge.vertex_ind == tmpIND)),
paramName] = MIKEds_list[m].iloc[t, i]
breakwaterPTS_merge['Time'] = MIKEds_list[m].index[t]
breakwaterPTS_times = pd.concat([breakwaterPTS_times, breakwaterPTS_merge], ignore_index=True)
breakTimesOut[m] = breakwaterPTS_times
# %% Read in Breakwater Transect Points Sh
breakwaterT = pd.read_csv("C:/Users/arey/files/Projects/SouthShore/Bathy/BreakTransectPTS_Names.csv", sep='\t')
breakwaterT_PTS = gp.GeoDataFrame(breakwaterT, geometry=gp.points_from_xy(breakwaterT.X, breakwaterT.Y),
crs='EPSG:32616')
# %% Merge with data
breakPoints_TOut = [None] * (max(modelPlot) + 1)
breakTimes_TOut = [None] * (max(modelPlot) + 1)
for m in modelPlot:
breakwaterPTS_times = None
for t in range(0, MIKEdsT_list[m].shape[0]):
breakwaterPTS_merge = None
breakwaterPTS_merge = breakwaterT_PTS
for i in range(0, MIKEdsT_list[m].shape[1]):
paramName = MIKEdsT_list[m].columns.values[i][MIKEdsT_list[m].columns.values[i].find(':', 5, -1) + 2:]
if paramName not in breakwaterPTS_merge.columns:
breakwaterPTS_merge[paramName] = np.full([breakwaterPTS_merge.shape[0], 1], np.nan)
tmpName = MIKEdsT_list[m].columns.values[i][0:MIKEdsT_list[m].columns.values[i].find(':', 1)]
breakwaterPTS_merge.loc[(breakwaterPTS_merge.Name == tmpName),
paramName] = MIKEdsT_list[m].iloc[t, i]
breakwaterPTS_merge['Time'] = MIKEdsT_list[m].index[t]
breakwaterPTS_times = pd.concat([breakwaterPTS_times, breakwaterPTS_merge], ignore_index=True)
breakTimes_TOut[m] = breakwaterPTS_times
# %% Format and save
for m in modelPlot:
saveTmp = breakTimesOut[m].copy()
saveTmp['X'] = saveTmp.geometry.x
saveTmp['Y'] = saveTmp.geometry.y
saveTmp.drop(['vertex_par', 'vertex_p_1', 'angle', 'geometry', 'index_right',
'breakCrest_x', 'breakCrest_y', 'Length'], axis=1, inplace=True)
saveTmp.sort_values(by=['FID', 'vertex_ind'], inplace=True, ignore_index=True)
# Reorder columns
colNames = saveTmp.columns.values
saveTmp = saveTmp[['X', 'Y', *colNames[0:-2]]]
saveTmpT = saveTmp.transpose(copy=True)
# Transect points
saveTmp2 = breakTimes_TOut[m].copy()
saveTmp2.drop(['geometry'], axis=1, inplace=True)
saveTmp2T = saveTmp2.transpose(copy=True)
saveTmpT.to_csv('//srv-mad3.baird.com/Projects/13632.101 South Shore Breakwater/06_Models/02_Mike21SW/Results/' +
'Toe' + runLog['Short Description'][m] + '.csv')
saveTmp2T.to_csv('//srv-mad3.baird.com/Projects/13632.101 South Shore Breakwater/06_Models/02_Mike21SW/Results/' +
'Transect' + runLog['Short Description'][m] + '.csv')