knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

library(dplyr,warn.conflicts=FALSE)
library(tidygraph,warn.conflicts=FALSE)
library(ggraph,warn.conflicts=FALSE)
library(igraph)
library(a5udes)

With a generic graph:

g=create_tree(40, children = 3, directed = TRUE,mode='out') %>%
  mutate(name=as.factor(1:40)) %>%
  mutate(rank=map_dfs_back_int(node_is_root(),.f=function(node,rank,...) {
    return(rank)  
  }))

ggraph(g) +
  geom_node_point() +
  geom_node_label(aes(label = rank)) +# repel=TRUE
  geom_edge_link0(arrow = arrow(length = unit(4, 'mm')))

With a reservoir graph upstream of Orós:

# id='44755' # oros
id='34560' # smaller network
# id='34689' # even smaller

sub=all_simple_paths(reservoir_graph,from=id,mode='in') %>%
  unlist %>%
  unique

subgraph = induced_subgraph(reservoir_graph, sub ,impl='auto')

g=subgraph %>%
  graph_reverse_direction(.) %>%
  as_tbl_graph %>% mutate(rank=map_dfs_back_int(node_is_root(),.f=function(node,rank,...) {
    return(rank)  
  }))

ggraph(g) +
  geom_node_point() +
  geom_node_label(aes(label = name)) +# repel=TRUE
  geom_edge_link0(arrow = arrow(length = unit(4, 'mm')))

Water balance and route overspill:

  1. define neighborhood dataframe (with upstream reservoirs and upstream area)
neigh = g %>% activate(nodes) %>%
  arrange(desc(rank)) %>%
  mutate(neighborhood =   local_members(order = 1,mode='out',mindist=1)) %>%
  as_tibble
  1. define state dataframe (with current state of reservoirs -- volume, incoming runoff, maximum volume and overspill)
state = g %>% activate(nodes) %>%
  arrange(desc(rank)) %>%
  mutate(max_volume=1,volume=0.8,incoming_runoff=0.3,overspill=0,evap=0.1) %>%
  as_tibble
  1. on each reservoir do a water balance and pass results downstream
water_balance(neigh,state) %>% knitr::kable(.)
reservoir_geometry %>% names


jmigueldelgado/a5udes documentation built on Dec. 21, 2021, 1:12 a.m.