Loading examples/Cumberland/cascade_config.yaml +25 −11 Original line number Diff line number Diff line Loading @@ -8,21 +8,19 @@ # Example cascade system configuration: # Cumberland River Basin Reservoir Cascade # *Reservoir* objects have the following attributes: # object_type: Always "reservoir" # All objects must have the following attributes: # object_type: reservoir, river, or confluence # simulation_order: order in which to run the simulation # downstream_object: object to which outflows are destined # *Reservoir* objects have the following additional, unique attributes: # capacity: The storage capacity of the reservoir in Million Cubic Meters (MCM) # initial_storage: The initial storage in MCM # max_release: the maximum release # downstream_object: the name of the next object downstream # max_release: the maximum release volume over one hour (MCM) # min_release: the minimum release volume over one hour (MCM) # *River* objects have the following attributes: # object_type: Always "river" # *River* objects have the following additional, unique attributes: # lag: the lag time between upstream and downstream ends of the river object (in hours) # downstream_object: the name of the next object downstream # *Confluence* objects have the following attributes: # object_type: Always "confluence" # downstream_object: the name of the next object downstream #=========================== Loading @@ -31,6 +29,7 @@ # Wolf Creek reservoir WolfCreek: object_type: reservoir simulation_order: 1 capacity: 8307 initial_storage: 8000 max_release: 10.0 Loading @@ -40,6 +39,7 @@ WolfCreek: # Dale Hollow reservoir DaleHollow: object_type: reservoir simulation_order: 2 capacity: 2181 initial_storage: 2000 max_release: 10.0 Loading @@ -49,6 +49,7 @@ DaleHollow: # Cordell Hull reservoir CordellHull: object_type: reservoir simulation_order: 7 capacity: 541 initial_storage: 500 max_release: 8 Loading @@ -58,6 +59,7 @@ CordellHull: # Center Hill reservoir CenterHill: object_type: reservoir simulation_order: 9 capacity: 3017 initial_storage: 3000 max_release: 8 Loading @@ -67,6 +69,7 @@ CenterHill: # Old Hickory reservoir OldHickory: object_type: reservoir simulation_order: 11 capacity: 857 initial_storage: 800 max_release: 8 Loading @@ -76,6 +79,7 @@ OldHickory: # J Percy Priest reservoir JPercyPriest: object_type: reservoir simulation_order: 13 capacity: 1414 initial_storage: 1400 max_release: 8 Loading @@ -85,6 +89,7 @@ JPercyPriest: # Cheatham reservoir Cheatham: object_type: reservoir simulation_order: 15 capacity: 1223 initial_storage: 1200 max_release: 8 Loading @@ -94,6 +99,7 @@ Cheatham: # Barkley reservoir Barkley: object_type: reservoir simulation_order: 16 capacity: 2460 initial_storage: 2000 max_release: 8 Loading @@ -107,42 +113,49 @@ Barkley: # Wolf Creek to Celina WolfCreek_Celina: object_type: river simulation_order: 3 downstream_object: Celina lag: 20 # Celina to Cordell Hull Celina_CordellHull: object_type: river simulation_order: 6 downstream_object: CordellHull lag: 10 # Dale Hollow to Celina DaleHollow_Celina: object_type: river simulation_order: 4 downstream_object: Celina lag: 2 # Cordell Hull to Old Hickory CordellHull_OldHickory: object_type: river simulation_order: 8 downstream_object: OldHickory lag: 6 # Center Hill to Old Hickory CenterHill_OldHickory: object_type: river simulation_order: 10 downstream_object: OldHickory lag: 15 # Old Hickory to Cheatham OldHickory_Cheatham: object_type: river simulation_order: 13 downstream_object: Cheatham lag: 5 # J Percy Priest to Chetham JPercyPriest_Cheatham: object_type: river simulation_order: 14 downstream_object: Cheatham lag: 6 Loading @@ -151,4 +164,5 @@ JPercyPriest_Cheatham: #=========================== Celina: object_type: confluence simulation_order: 5 downstream_object: Celina_CordellHull No newline at end of file examples/Cumberland/script.qmd +7 −26 Original line number Diff line number Diff line Loading @@ -61,25 +61,6 @@ class CascadeData: rivers: dict[str, RiverData] confluences: dict[str, ConfluenceData] simulation_orders = { "WolfCreek": 1, "DaleHollow": 2, "WolfCreek_Celina": 3, "DaleHollow_Celina": 4, "Celina": 5, "Celina_CordellHull": 6, "CordellHull": 7, "CordellHull_OldHickory" : 8, "CenterHill": 9, "CenterHill_OldHickory" : 10, "OldHickory": 11, "OldHickory_Cheatham": 12, "JPercyPriest": 13, "JPercyPriest_Cheatham": 14, "Cheatham": 15, "Barkley": 16 } # Read the reservoir configuration with open('cascade_config.yaml', 'r') as file: config_dict = yaml.safe_load(file) Loading @@ -90,7 +71,7 @@ river_dict = {} confluence_dict = {} for name, specs in config_dict.items(): specs['simulation_order'] = simulation_orders[name] # Add simulation order to specs #specs['simulation_order'] = simulation_orders[name] # Add simulation order to specs if specs['object_type'] == 'reservoir': reservoir_dict[name] = ReservoirData( **specs, Loading Loading @@ -127,7 +108,7 @@ results = powersheds.simulate_cascade( ``` ```{r} names(py$simulation_orders) -> reservoirs_ordered names(py$reservoir_dict) -> reservoirs_ordered reservoirs_ordered |> map_dfr(function(reservoir){ Loading @@ -135,8 +116,8 @@ reservoirs_ordered |> map_dfr(function(reservoir){ tibble( reservoir = !!reservoir, flow = reservoir_results$inflow, outflow = reservoir_results$outflow, #flow = reservoir_results$inflow, #outflow = reservoir_results$outflow, inflow = reservoir_results$total_inflow, target_release = reservoir_results$target_release, storage = reservoir_results$storage, Loading @@ -159,8 +140,8 @@ powersheds_plot_theme <- function(){ plot_cols <- length(reservoirs_ordered) ts_data_for_plot |> filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, flow, inflow, outflow, target_release, release_implemented, spill) |> #filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, inflow, target_release, release_implemented, spill) |> tidyr::pivot_longer(-c(hr_index, reservoir), names_to = "variable") |> ggplot(aes(hr_index, value, col = variable)) + geom_line() + Loading @@ -168,7 +149,7 @@ ts_data_for_plot |> facet_wrap(~reservoir, ncol = plot_cols) -> flows_plot ts_data_for_plot |> filter(!grepl("_", reservoir), reservoir != "Celina") |> #filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, storage) |> ggplot(aes(hr_index, storage)) + geom_line() + Loading Loading
examples/Cumberland/cascade_config.yaml +25 −11 Original line number Diff line number Diff line Loading @@ -8,21 +8,19 @@ # Example cascade system configuration: # Cumberland River Basin Reservoir Cascade # *Reservoir* objects have the following attributes: # object_type: Always "reservoir" # All objects must have the following attributes: # object_type: reservoir, river, or confluence # simulation_order: order in which to run the simulation # downstream_object: object to which outflows are destined # *Reservoir* objects have the following additional, unique attributes: # capacity: The storage capacity of the reservoir in Million Cubic Meters (MCM) # initial_storage: The initial storage in MCM # max_release: the maximum release # downstream_object: the name of the next object downstream # max_release: the maximum release volume over one hour (MCM) # min_release: the minimum release volume over one hour (MCM) # *River* objects have the following attributes: # object_type: Always "river" # *River* objects have the following additional, unique attributes: # lag: the lag time between upstream and downstream ends of the river object (in hours) # downstream_object: the name of the next object downstream # *Confluence* objects have the following attributes: # object_type: Always "confluence" # downstream_object: the name of the next object downstream #=========================== Loading @@ -31,6 +29,7 @@ # Wolf Creek reservoir WolfCreek: object_type: reservoir simulation_order: 1 capacity: 8307 initial_storage: 8000 max_release: 10.0 Loading @@ -40,6 +39,7 @@ WolfCreek: # Dale Hollow reservoir DaleHollow: object_type: reservoir simulation_order: 2 capacity: 2181 initial_storage: 2000 max_release: 10.0 Loading @@ -49,6 +49,7 @@ DaleHollow: # Cordell Hull reservoir CordellHull: object_type: reservoir simulation_order: 7 capacity: 541 initial_storage: 500 max_release: 8 Loading @@ -58,6 +59,7 @@ CordellHull: # Center Hill reservoir CenterHill: object_type: reservoir simulation_order: 9 capacity: 3017 initial_storage: 3000 max_release: 8 Loading @@ -67,6 +69,7 @@ CenterHill: # Old Hickory reservoir OldHickory: object_type: reservoir simulation_order: 11 capacity: 857 initial_storage: 800 max_release: 8 Loading @@ -76,6 +79,7 @@ OldHickory: # J Percy Priest reservoir JPercyPriest: object_type: reservoir simulation_order: 13 capacity: 1414 initial_storage: 1400 max_release: 8 Loading @@ -85,6 +89,7 @@ JPercyPriest: # Cheatham reservoir Cheatham: object_type: reservoir simulation_order: 15 capacity: 1223 initial_storage: 1200 max_release: 8 Loading @@ -94,6 +99,7 @@ Cheatham: # Barkley reservoir Barkley: object_type: reservoir simulation_order: 16 capacity: 2460 initial_storage: 2000 max_release: 8 Loading @@ -107,42 +113,49 @@ Barkley: # Wolf Creek to Celina WolfCreek_Celina: object_type: river simulation_order: 3 downstream_object: Celina lag: 20 # Celina to Cordell Hull Celina_CordellHull: object_type: river simulation_order: 6 downstream_object: CordellHull lag: 10 # Dale Hollow to Celina DaleHollow_Celina: object_type: river simulation_order: 4 downstream_object: Celina lag: 2 # Cordell Hull to Old Hickory CordellHull_OldHickory: object_type: river simulation_order: 8 downstream_object: OldHickory lag: 6 # Center Hill to Old Hickory CenterHill_OldHickory: object_type: river simulation_order: 10 downstream_object: OldHickory lag: 15 # Old Hickory to Cheatham OldHickory_Cheatham: object_type: river simulation_order: 13 downstream_object: Cheatham lag: 5 # J Percy Priest to Chetham JPercyPriest_Cheatham: object_type: river simulation_order: 14 downstream_object: Cheatham lag: 6 Loading @@ -151,4 +164,5 @@ JPercyPriest_Cheatham: #=========================== Celina: object_type: confluence simulation_order: 5 downstream_object: Celina_CordellHull No newline at end of file
examples/Cumberland/script.qmd +7 −26 Original line number Diff line number Diff line Loading @@ -61,25 +61,6 @@ class CascadeData: rivers: dict[str, RiverData] confluences: dict[str, ConfluenceData] simulation_orders = { "WolfCreek": 1, "DaleHollow": 2, "WolfCreek_Celina": 3, "DaleHollow_Celina": 4, "Celina": 5, "Celina_CordellHull": 6, "CordellHull": 7, "CordellHull_OldHickory" : 8, "CenterHill": 9, "CenterHill_OldHickory" : 10, "OldHickory": 11, "OldHickory_Cheatham": 12, "JPercyPriest": 13, "JPercyPriest_Cheatham": 14, "Cheatham": 15, "Barkley": 16 } # Read the reservoir configuration with open('cascade_config.yaml', 'r') as file: config_dict = yaml.safe_load(file) Loading @@ -90,7 +71,7 @@ river_dict = {} confluence_dict = {} for name, specs in config_dict.items(): specs['simulation_order'] = simulation_orders[name] # Add simulation order to specs #specs['simulation_order'] = simulation_orders[name] # Add simulation order to specs if specs['object_type'] == 'reservoir': reservoir_dict[name] = ReservoirData( **specs, Loading Loading @@ -127,7 +108,7 @@ results = powersheds.simulate_cascade( ``` ```{r} names(py$simulation_orders) -> reservoirs_ordered names(py$reservoir_dict) -> reservoirs_ordered reservoirs_ordered |> map_dfr(function(reservoir){ Loading @@ -135,8 +116,8 @@ reservoirs_ordered |> map_dfr(function(reservoir){ tibble( reservoir = !!reservoir, flow = reservoir_results$inflow, outflow = reservoir_results$outflow, #flow = reservoir_results$inflow, #outflow = reservoir_results$outflow, inflow = reservoir_results$total_inflow, target_release = reservoir_results$target_release, storage = reservoir_results$storage, Loading @@ -159,8 +140,8 @@ powersheds_plot_theme <- function(){ plot_cols <- length(reservoirs_ordered) ts_data_for_plot |> filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, flow, inflow, outflow, target_release, release_implemented, spill) |> #filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, inflow, target_release, release_implemented, spill) |> tidyr::pivot_longer(-c(hr_index, reservoir), names_to = "variable") |> ggplot(aes(hr_index, value, col = variable)) + geom_line() + Loading @@ -168,7 +149,7 @@ ts_data_for_plot |> facet_wrap(~reservoir, ncol = plot_cols) -> flows_plot ts_data_for_plot |> filter(!grepl("_", reservoir), reservoir != "Celina") |> #filter(!grepl("_", reservoir), reservoir != "Celina") |> select(reservoir, hr_index, storage) |> ggplot(aes(hr_index, storage)) + geom_line() + Loading