Skip to content

Commit

Permalink
Updated CASCADE to allow for calling B3D subfunctions to allow for sa…
Browse files Browse the repository at this point in the history
…ndbag influences
  • Loading branch information
franklin1895 committed Apr 1, 2024
1 parent ea437b9 commit f8c8ee5
Show file tree
Hide file tree
Showing 106 changed files with 82 additions and 19 deletions.
26 changes: 26 additions & 0 deletions cascade/brie_coupler.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,26 @@ def batchB3D(subB3D):

return sub_x_t_dt, sub_x_s_dt, sub_h_b_dt, subB3D

def splitbatchB3D(subB3D,iB3D,sandbag_need):
"""Parallelize the update function for each B3D domain so the (computationally
expensive) flow routing algorithm operates on separate cores -- i.e., overwash
doesn't need to be simulated sequentially for each domain
"""

DomainWidth, InteriorWidth, InteriorWidth_Avg, Qdg, DuneDomainCrest, OWloss, DuneLoss, numstorm, start, stop, Rhigh, Rlow, dur, = subB3D.update_set_variables()
for i in range(numstorm):
DuneLoss, Hd_TSloss, gaps = subB3D.update_dune_erosion(storm_num = i, DuneDomainCrest = DuneDomainCrest, dur = dur)
# if sandbag_need[iB3D] == True:
#run_sandbags
OWloss = subB3D.update_flow_routing(storm_num = i, DuneDomainCrest = DuneDomainCrest, gaps = gaps, Rlow = Rlow, dur = dur, Hd_TSloss = Hd_TSloss)
subB3D.save_update_information(numstorm = numstorm, InteriorWidth = InteriorWidth, OWloss = OWloss, Qdg = Qdg, DuneLoss = DuneLoss, InteriorWidth_Avg = InteriorWidth_Avg)

# calculate the diff in shoreface toe, shoreline, and height of barrier (dam)
sub_x_t_dt = (subB3D.x_t_TS[-1] - subB3D.x_t_TS[-2]) * 10
sub_x_s_dt = (subB3D.x_s_TS[-1] - subB3D.x_s_TS[-2]) * 10
sub_h_b_dt = (subB3D.h_b_TS[-1] - subB3D.h_b_TS[-2]) * 10

return sub_x_t_dt, sub_x_s_dt, sub_h_b_dt, subB3D

def initialize_equal(
datadir,
Expand All @@ -74,6 +94,8 @@ def initialize_equal(
MHW=0.46,
berm_elevation=1.9,
beta=0.04,
sandbag_elevation = 1.9,
enable_sandbags = False,
):
"""
For each B3D domain, modify the default parameters to match the shoreface
Expand Down Expand Up @@ -171,6 +193,10 @@ def initialize_equal(
else:
set_yaml("elevation_file", elevation_file, fid)

# Set sandbag_elevation
set_yaml('Sandbag_elevation',sandbag_elevation,fid)
set_yaml('enable_sandbags',enable_sandbags,fid)

# the following parameters CANNOT be changed or else the MSSM storm list &
# storm time series needs to be remade
set_yaml("MHW", MHW, fid) # [m NAVD88] elevation of Mean High Water
Expand Down
22 changes: 19 additions & 3 deletions cascade/cascade.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import numpy as np
from joblib import Parallel, delayed

from .beach_dune_manager import BeachDuneManager, check_sandbag_need
from .beach_dune_manager import BeachDuneManager#, check_sandbag_need
from .brie_coupler import BrieCoupler, batchB3D, initialize_equal
from .chom_coupler import ChomCoupler
from .roadway_manager import RoadwayManager, set_growth_parameters
Expand Down Expand Up @@ -154,6 +154,8 @@ def __init__(
beach_full_cross_shore=70,
sandbag_management_on = False,
sandbag_elevation = 1.5,
enable_shoreline_offset = False,
shoreline_offset = [],
):
"""
CASCADE: The CoAStal Community-lAnDscape Evolution model
Expand Down Expand Up @@ -310,6 +312,8 @@ def __init__(
self._sandbag_management_on = sandbag_management_on
self._sandbag_elevation = sandbag_elevation
self._sandbag_need = [False] * self._ny
self._enable_shoreline_offset = enable_shoreline_offset
self._shoreline_offset = shoreline_offset

# initialization errors
if (
Expand Down Expand Up @@ -361,7 +365,14 @@ def __init__(
storm_file=self._storm_file,
dune_file=self._dune_file, # can be array
elevation_file=self._elevation_file, # can be array
sandbag_elevation = self._sandbag_elevation,
#sandbag_elevation = self._sandbag_elevation,
)

# Create offset shorelines in BRIE
self._brie_coupler.offset_shoreline(
enable_shoreline_offset=self._enable_shoreline_offset,
offset_values=self._shoreline_offset,
ny=self._ny,
)

###############################################################################
Expand Down Expand Up @@ -564,9 +575,15 @@ def update(self):
# parallel processing (debugging) and -2 for all but 1 CPU; note that
# joblib uses a threshold on the size of arrays passed to the workers

# if sandbags are disabled and not needed update regulary
batch_output = Parallel(n_jobs=self._num_cores, max_nbytes="10M")(
delayed(batchB3D)(self._barrier3d[iB3D]) for iB3D in range(self._ny)
)
# elif if sandbags are enabled run a different version instead
#batch_output = Parallel(n_jobs=self._num_cores, max_nbytes="10M")(
# delayed(splitbatchB3D)(subB3D = self._barrier3d[iB3D],iB3D = iB3D, sandbag_need = self._sandbag_need) for iB3D in range(self._ny)
#)


# reshape output from parallel processing and convert from tuple to list
x_t_dt, x_s_dt, h_b_dt, b3d = zip(*batch_output)
Expand Down Expand Up @@ -662,7 +679,6 @@ def update(self):
self._sandbag_need[iB3D] = check_sandbag_need(dune_road_distance = self._roadways[iB3D]._road_setback)

if self._sandbag_need[iB3D] == True:
self._barrier3d[iB3D]._sandbag_need = True
print('Sandbags are needed in Section '+str(iB3D))
elif self._sandbag_need[iB3D] == False:
print('Sandbags are not needed in Section '+str(iB3D))
Expand Down
10 changes: 6 additions & 4 deletions data/Ocracoke_init_data/Ocracoke-CASCADE-parameters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ GrowthParamStart: false
HdDiffu: 0.75
Ki: 7.5e-06
Kr: 7.5e-05
LShoreface: 524.236278118052
LShoreface: 524.8403061768336
MHW: 0.46
MaxShrubHeight: 5.3
MaxUpSlope: 0.25
Expand All @@ -35,6 +35,7 @@ Rat: -1.0
Rin_i: 0.1
Rin_r: 2.0
SalineLimit: 5
Sandbag_elevation: 1.9
SeededRNG: true
Seedmax: 1000.0
Seedmin: 100.0
Expand All @@ -52,8 +53,9 @@ UprootLimit: -0.2
beta: 0.04
disp_mu: -0.721891
disp_sigma: 1.5
dune_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\b3d_high-elevations.csv
elevation_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\b3d_high-elevations.csv
dune_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\dunes\Sample_50_dune.npy
elevation_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\elevations\Sample_50_topography.npy
enable_sandbags: false
growth_param_file: growthparam_1000dam.npy
k_sf: 19324.753176079226
mm: 2.0
Expand All @@ -63,5 +65,5 @@ rmin: 0.55
s_sf_eq: 0.01698590034494604
sandbag_elevation: 1.8
sandbag_need: false
storm_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\s1.npy
storm_file: C:\Users\frank\PycharmProjects\CASCADE\data\Ocracoke_init_data\S1.npy
threshold_in: 0.25
Binary file added data/Ocracoke_init_data/S1.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_10_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_11_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_12_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_13_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_14_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_15_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_16_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_17_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_18_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_19_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_1_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_20_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_21_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_22_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_23_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_24_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_25_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_26_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_27_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_28_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_29_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_2_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_30_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_31_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_32_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_33_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_34_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_35_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_36_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_37_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_38_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_39_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_3_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_40_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_41_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_42_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_43_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_44_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_45_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_46_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_47_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_48_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_49_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_4_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_50_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_5_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_6_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_7_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_8_dune.npy
Binary file not shown.
Binary file added data/Ocracoke_init_data/dunes/Sample_9_dune.npy
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4 changes: 2 additions & 2 deletions scripts/ocracoke_ms/plot_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,12 +323,12 @@ def plot_ElevAnimation_CASCADE(

os.chdir('C:\\Users\\frank\\PycharmProjects\\CASCADE\\Run_output')
# run_name='Wreck_ACC_RSLR3_S3' # 5 Length
run_name = "Sandbag_Test_5" # 4 length
run_name = "Offset_Test_5" # 4 length
# run_name='Metompkin_Marsh_S10_3'
# run_name='Smith_S10_3' # 5

name_prefix = run_name
nt_run = 50
nt_run = 5
number_barrier3d_models = 6
Run_Marsh_Dynamics = False

Expand Down
39 changes: 29 additions & 10 deletions scripts/ocracoke_ms/run_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@
os.chdir('C:\\Users\\frank\\PycharmProjects\\CASCADE')
# Specify variables to use in calling function
# Dune height path name
e_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\b3d_high-elevations.csv'
s_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\s1.npy'
d_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\b3d_high-elevations.csv'
#e_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\b3d_high-elevations.csv'
s_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\S1.npy'
#d_file = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\b3d_high-elevations.csv'
#s_file = 'StormList_0_baseline.npy'
run_name = 'Sandbag_Test_5'
run_name = 'Offset_Test_5'

e_file = []
d_file = []

for i in range(1,51):
dune_name = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\dunes\\Sample_'+str(i)+'_dune.npy'
elev_name = 'C:\\Users\\frank\\PycharmProjects\\CASCADE\\data\\Ocracoke_init_data\\elevations\\Sample_'+str(i)+'_topography.npy'
d_file.append(dune_name)
e_file.append(elev_name)

def alongshore_connected(
nt,
Expand Down Expand Up @@ -45,6 +54,8 @@ def alongshore_connected(
group_roadway_abandonment=None,
sandbag_management_on = False,
sandbag_elevation = 5,
enable_shoreline_offset = False,
shoreline_offset = [0],
):
# ###############################################################################
# 9 - connect cascade domains (human management) with AST
Expand Down Expand Up @@ -88,6 +99,8 @@ def alongshore_connected(
overwash_to_dune=overwash_to_dune,
sandbag_management_on = sandbag_management_on,
sandbag_elevation = sandbag_elevation,
enable_shoreline_offset=enable_shoreline_offset,
shoreline_offset=shoreline_offset,
)

# --------- LOOP ---------
Expand Down Expand Up @@ -149,12 +162,12 @@ def alongshore_connected(

def alongshore_uniform():
# variables that DO NOT change among runs
number_barrier3d_models = 6
number_barrier3d_models = 50
beach_width_threshold = [30] * number_barrier3d_models
rmin = [0.55] * number_barrier3d_models
rmax = [0.95] * number_barrier3d_models
elevation_file = [e_file] * number_barrier3d_models
dune_file = [d_file] * number_barrier3d_models
elevation_file = e_file #[e_file] * number_barrier3d_models
dune_file = d_file #[d_file] * number_barrier3d_models
storm_file = s_file
dune_design_elevation = [2.6] * number_barrier3d_models # 2 m scenario
num_cores = 4 # for my laptop, max is 15
Expand All @@ -167,15 +180,19 @@ def alongshore_uniform():
nourishment_volume = 100 # m^3/m
background_erosion = -1.0 # m/yr, background shoreline erosion
rebuild_dune_threshold = 1 # m
sandbag_management_on = [True] * number_barrier3d_models
sandbag_management_on = [False] * number_barrier3d_models
sandbag_elevation = 1.8 # m

# baseline models for comparison -- all roadways ----------------------------------------
roads_on = [True, True, True, True, True, True]
nourishments_on = [False, False, False, False, False, False]
roads_on = [True] * number_barrier3d_models
nourishments_on = [False] * number_barrier3d_models
sea_level_rise_rate = 0.004
sea_level_constant = True # linear

# Island offsets
shoreline_offset_enabled = False
shoreline_offset = [0,100,200,300,200,100]

# Island is too narrow for roadway to be relocated. Roadway eaten up by dunes at 73 years
alongshore_connected(
nt=50,
Expand Down Expand Up @@ -204,6 +221,8 @@ def alongshore_uniform():
sea_level_constant=sea_level_constant,
sandbag_management_on=sandbag_management_on,
sandbag_elevation=sandbag_elevation,
shoreline_offset=shoreline_offset,
enable_shoreline_offset=shoreline_offset_enabled,
)

alongshore_uniform()

0 comments on commit f8c8ee5

Please sign in to comment.