Commit 2842bd83 authored by Turner, Sean's avatar Turner, Sean
Browse files

embed sim order

parent c2d7b63f
Loading
Loading
Loading
Loading
+25 −11
Original line number Diff line number Diff line
@@ -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


#===========================
@@ -31,6 +29,7 @@
# Wolf Creek reservoir
WolfCreek:
  object_type: reservoir
  simulation_order: 1
  capacity: 8307
  initial_storage: 8000
  max_release: 10.0
@@ -40,6 +39,7 @@ WolfCreek:
# Dale Hollow reservoir
DaleHollow:
  object_type: reservoir
  simulation_order: 2
  capacity: 2181
  initial_storage: 2000
  max_release: 10.0
@@ -49,6 +49,7 @@ DaleHollow:
# Cordell Hull reservoir
CordellHull:
  object_type: reservoir
  simulation_order: 7
  capacity: 541
  initial_storage: 500
  max_release: 8
@@ -58,6 +59,7 @@ CordellHull:
# Center Hill reservoir
CenterHill:
  object_type: reservoir
  simulation_order: 9
  capacity: 3017
  initial_storage: 3000
  max_release: 8
@@ -67,6 +69,7 @@ CenterHill:
# Old Hickory reservoir
OldHickory:
  object_type: reservoir
  simulation_order: 11
  capacity: 857
  initial_storage: 800
  max_release: 8
@@ -76,6 +79,7 @@ OldHickory:
# J Percy Priest reservoir
JPercyPriest:
  object_type: reservoir
  simulation_order: 13
  capacity: 1414
  initial_storage: 1400
  max_release: 8
@@ -85,6 +89,7 @@ JPercyPriest:
# Cheatham reservoir
Cheatham:
  object_type: reservoir
  simulation_order: 15
  capacity: 1223
  initial_storage: 1200
  max_release: 8
@@ -94,6 +99,7 @@ Cheatham:
# Barkley reservoir
Barkley:
  object_type: reservoir
  simulation_order: 16
  capacity: 2460
  initial_storage: 2000
  max_release: 8
@@ -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

@@ -151,4 +164,5 @@ JPercyPriest_Cheatham:
#===========================
Celina:
  object_type: confluence
  simulation_order: 5
  downstream_object: Celina_CordellHull
 No newline at end of file
+7 −26
Original line number Diff line number Diff line
@@ -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)
@@ -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,
@@ -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){
    
@@ -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,
@@ -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() +
@@ -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() +