Script Purpose

This script was created to document the changes seen at LD25 with various gate settings during the following flow events to document deviation request during construction of new features at Lock & Dam 25:

  • 100kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Gates 1-3 (2ft) cracked
    • Gates 1-5 closed
    • Gates 13-17 closed
    • Normal Operations
  • 165kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Gates 1-3 (2ft) cracked
    • Normal Operations
  • 177kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Normal Operations
  • 200kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Normal Operations
  • 225kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Normal Operations
  • 250kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Normal Operations
  • 269kcfs
    • Normal Operations
  • 294kcfs
    • Gates 1-2 Closed
    • Gates 1-3 Closed
    • Normal Operations


Typical Code To Process Data

Install Library

library(dplyr)
library(sf)
library(fs)
library(ggplot2)
library(raster)
library(viridis)
library(broom)
library(purrr)
library(tools)
library(terra)
library(stars)
library(contourPlot)
library(akima)
library(plotly)
library(sp)
library(tidyterra)
library(plotly)
library(ggmap)
library(lattice)
library(rasterVis)

Load Shapefile

# Desired shapefiles that will be in plots
lock <- st_read("F:/LD25/Gate Manipulation/Lock Shapefile/Lock_Layout_New.shp")
dike <- st_read("F:/LD25/Gate Manipulation/Lock Shapefile/Dike_Centerline.shp")
Bank <- st_read("F:/LD25/Gate Manipulation/Lock Shapefile/River_Bank.shp")
island <- st_read("F:/LD25/Gate Manipulation/Lock Shapefile/Islands.shp")
river_mile <- st_read("F:/LD25/Gate Manipulation/Lock Shapefile/river_mile.shp")

# State Plane Missouri East NAD83 (Meters)
state <- CRS("+proj=tmerc +lat_0=35.8333333333333 +lon_0=-90.5 +k=0.999933333 +
             x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs")
# Standard Geographical lat/lon
wgs84_proj <- CRS("+init=epsg:4326")


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Transform To State Plane~~~~~~~~~~~~~~~~~~~~~~


lock_transform <- st_transform(lock, state)
dike_transform <- st_transform(dike, state)
bank_transform <- st_transform(Bank, state)
island_transform <- st_transform(island, state)
river_mile_transform <- st_transform(river_mile, state)

Process .3dm

# Assign 3dm with base mesh
Base_Mesh <- "F:/LD25/Gate Manipulation/WSE Comparison/Base_165_Normal.3dm"
RockCut_Mesh <- "F:/LD25/Gate Manipulation/WSE Comparison/RockCut_165_Normal.3dm"

# Extract the file name 
Base_Mesh_Name <- basename(Base_Mesh)
RockCut_Mesh_Name <- basename(RockCut_Mesh)

# remove file extension
Base_Mesh_Name <- stringr::str_remove(Base_Mesh_Name, ".3dm")
RockCut_Mesh_Name <- stringr::str_remove(RockCut_Mesh_Name, ".3dm")


#file names that are being processed as base .3dm scenario
print(Base_Mesh)
print(RockCut_Mesh)

################################################################################
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~Rip out text lines in .3dm~~~~~~~~~~~~~~~~~~~~~~~~#
################################################################################

# Read the .3dm file
Base_Mesh <- readLines(Base_Mesh)
RockCut_Mesh <- readLines(RockCut_Mesh)



a=grep("ND", Base_Mesh)-1 # line number where Physics starts
b=grep("ND", RockCut_Mesh)-1 # line number where Physics starts
a_dat <- Base_Mesh[-(1:a[1])] # delete all the lines before Physics
b_dat <- RockCut_Mesh[-(1:b[1])] # delete all the lines before Physics
Base_Mesh_Nodes <- read.table(text = a_dat) #break out into columns
RockCut_Mesh_Nodes <- read.table(text = b_dat) #break out into columns

# add column names to table
colnames(Base_Mesh_Nodes) = c("ND", "Node ID", "X", "Y", "Nodal Elevation (Z) - Meters")
colnames(RockCut_Mesh_Nodes) = c("ND", "Node ID", "X", "Y", "Nodal Elevation (Z) - Meters")
X <- data.frame(length(Base_Mesh_Nodes))
Y <- data.frame(length(Base_Mesh_Nodes))
# Save out X & Y dataframes for later in the process of plotting.
X <-  Base_Mesh_Nodes$X
Y <-  Base_Mesh_Nodes$Y

Interested Mesh Nodes

################################################################################
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Interested Mesh Nodes ~~~~~~~~~~~~~~~~~~~~~~~~~~
################################################################################

tail_25 <- 173842
pool_25 <- 115615
rm_242 <- 72471
rm_243 <- 29355
rm_244 <- 23132
rm_245 <- 31990
rm_246 <- 17122
rm_247 <- 5221
rm_248 <- 2980
rm_249 <- 2569
rm_250 <- 6269

Create Base WSE Values

# read in base condition dep files for base meshes and make WSE table to use
Base_165kcfs_Dep <- readLines("F:/LD25/Gate Manipulation/165kcfs/NormalOperation/Base/Base_165_Normal_dep.dat")
TS <- grep("TS",Base_165kcfs_Dep)
TS[length(TS)] # returns the row number for last timestep import
Base_165kcfs_Dep <- Base_165kcfs_Dep[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
Base_165kcfs_Dep <- head(Base_165kcfs_Dep, -1) # delete last row in file that has the word "ENDDS"
temp <- read.table(text = Base_165kcfs_Dep) # create table to reference indexed depth values in model
Base_165kcfs_WSE <- temp + Base_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
Base_165kcfs_WSE <- Base_165kcfs_WSE * 3.28084 # convert to WSE (feet)

RockCut_165kcfs_Dep <- readLines("F:/LD25/Gate Manipulation/165kcfs/NormalOperation/RockCut/RockCut_165_Normal_dep.dat")
TS <- grep("TS",RockCut_165kcfs_Dep)
TS[length(TS)] # returns the row number for last timestep import
RockCut_165kcfs_Dep <- RockCut_165kcfs_Dep[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
RockCut_165kcfs_Dep <- head(RockCut_165kcfs_Dep, -1) # delete last row in file that has the word "ENDDS"
temp <- read.table(text = RockCut_165kcfs_Dep) # create table to reference indexed depth values in model
RockCut_165kcfs_WSE <- temp + RockCut_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
RockCut_165kcfs_WSE <- RockCut_165kcfs_WSE * 3.28084 # convert to WSE (feet)

Search Directory For DEP Files

root_directory <- "F:/LD25/Gate Manipulation" # Folder that contains all model runs
destination_dir <- "F:/LD25/Gate Manipulation/WSE Comparison/Dep_Files" # Folder I want data copied to 
search_string <- "dep.dat" # string that I'm searching for in file name

# Delete files currently in the directory and ready it for new files
delete_files <- list.files(destination_dir)
#print(delete_files)
file.remove(delete_files)
if (!file.exists(destination_dir)) {
  # If folder doesn't exist, create it
  dir_create(destination_dir, recursive = TRUE)
} else{
  #If folder exists, do nothing
  message("Folder already exists, no action taken")
}

# Search files that have string _dep.dat in it and save to destination_directory

files <- list.files(root_directory, pattern = "_dep.dat", recursive = TRUE, full.names = TRUE)
file.copy(files, file.path(destination_dir, basename(files)))
files <- list.files(destination_dir)
#print(files)

Replace Illegal Characters In File Names

# files have illegal characters in them and some need to be replaced
# remove file extension
temp <- stringr::str_remove(files, ".dat")
#print(temp)
#remove hyphens from files and replace with underscore
temp_clean <- gsub("-", "_", temp)
#print(temp_clean)
# return new file name
temp_final_name <- paste0(temp_clean, ".dat")
#print(temp_final_name)

files <- paste0(destination_dir, "/", files)
temp_final_name <- paste0(destination_dir, "/", temp_final_name)
file.rename(files, temp_final_name)
test <- list.files(destination_dir)
#print(test)

Replace “OR” with Normal

# files have illegal characters in them and some need to be replaced
# remove file extension
temp <- stringr::str_remove(test, ".dat")
#print(test)
#remove hyphens from files and replace with underscore
temp_clean <- gsub("OR", "Normal", test)
#print(temp_clean)

#files <- paste0(destination_dir, "/", files)
temp_final_name <- paste0(destination_dir, "/", temp_clean)
file.rename(files, temp_final_name)
test <- list.files(destination_dir)
#print(test)

Sort Files Based On Discharge

# Sort files based on either Base or RockCut along with discharge
Base_Files <- list()
Base_100kcfs_Files <- list.files(destination_dir, pattern = "Base.*100", recursive = TRUE, full.names = TRUE)
Base_165kcfs_Files <- list.files(destination_dir, pattern = "Base.*165", recursive = TRUE, full.names = TRUE)
Base_177kcfs_Files <- list.files(destination_dir, pattern = "Base.*177", recursive = TRUE, full.names = TRUE)
Base_200kcfs_Files <- list.files(destination_dir, pattern = "Base.*200", recursive = TRUE, full.names = TRUE)
Base_225kcfs_Files <- list.files(destination_dir, pattern = "Base.*225", recursive = TRUE, full.names = TRUE)
Base_250kcfs_Files <- list.files(destination_dir, pattern = "Base.*250", recursive = TRUE, full.names = TRUE)
Base_269kcfs_Files <- list.files(destination_dir, pattern = "Base.*269", recursive = TRUE, full.names = TRUE)
Base_294kcfs_Files <- list.files(destination_dir, pattern = "Base.*294", recursive = TRUE, full.names = TRUE)
Base_NormalOperating_Files <- list.files(destination_dir, pattern = "Base.*Normal", recursive = TRUE, full.names = TRUE)

Rock_Files <- list()
Rock_100kcfs_Files <- list.files(destination_dir, pattern = "Rock.*100", recursive = TRUE, full.names = TRUE)
Rock_165kcfs_Files <- list.files(destination_dir, pattern = "Rock.*165", recursive = TRUE, full.names = TRUE)
Rock_177kcfs_Files <- list.files(destination_dir, pattern = "Rock.*177", recursive = TRUE, full.names = TRUE)
Rock_200kcfs_Files <- list.files(destination_dir, pattern = "Rock.*200", recursive = TRUE, full.names = TRUE)
Rock_225kcfs_Files <- list.files(destination_dir, pattern = "Rock.*225", recursive = TRUE, full.names = TRUE)
Rock_250kcfs_Files <- list.files(destination_dir, pattern = "Rock.*250", recursive = TRUE, full.names = TRUE)
Rock_269kcfs_Files <- list.files(destination_dir, pattern = "Rock.*269", recursive = TRUE, full.names = TRUE)
Rock_294kcfs_Files <- list.files(destination_dir, pattern = "Rock.*294", recursive = TRUE, full.names = TRUE)
Rock_NormalOperating_Files <- list.files(destination_dir, pattern = "Rock.*Normal", recursive = TRUE, full.names = TRUE)

Read In Normal Operating Flows

################################################################################
#~~~~~~~~~~~~~~~~~~~~~~~~Read in Normal Operating Flows To Compare Against~~~~~~
################################################################################




for (i in 1:length(Base_NormalOperating_Files)) {
  
  temp <- readLines(Base_NormalOperating_Files[i])
  TS <- grep("TS",temp) #use grep to look for "TS" in the document
  TS[length(TS)] # returns the row number for last timestep import
  temp <- temp[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
  temp <- head(temp, -1) # delete last row in file that has the word "ENDDS"
  temp_dep <- read.table(text = temp) # create table to reference indexed depth values in model
  temp_dep <- mutate_all(temp_dep, function(x) ifelse(x < 0, NA, x))  # remove all negative values and replace with zero
  temp <- temp_dep + Base_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
  temp <- temp * 3.28084 # convert to WSE (feet)
  
  fileName <- basename(Base_NormalOperating_Files[i]) #return file basename
  fileName <- stringr::str_remove(fileName, ".dat") #remove .dat from file basename
  fileName <- paste0(fileName, "_Base_WSE") #add _BASE_WSE to filename
  assign (fileName, temp, envir=.GlobalEnv)  # assign the results of file to the data name
  
  
  
}


for (i in 1:length(Rock_NormalOperating_Files)) {
  
  temp <- readLines(Rock_NormalOperating_Files[i])
  TS <- grep("TS",temp) #use grep to look for "TS" in the document
  TS[length(TS)] # returns the row number for last timestep import
  temp <- temp[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
  temp <- head(temp, -1) # delete last row in file that has the word "ENDDS"
  temp_dep <- read.table(text = temp) # create table to reference indexed depth values in model
  temp_dep <- mutate_all(temp_dep, function(x) ifelse(x < 0, NA, x))  # remove all negative values and replace with zero
  temp <- temp_dep + RockCut_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
  temp <- temp * 3.28084 # convert to WSE (feet)
  
  fileName <- basename(Rock_NormalOperating_Files[i]) #return file basename
  fileName <- stringr::str_remove(fileName, ".dat") #remove .dat from file basename
  fileName <- paste0(fileName, "_Base_WSE")  #add _BASE_WSE to filename
  assign (fileName, temp, envir=.GlobalEnv)  # assign the results of file to the data name
  
}

Process Various Gate Simulations And Create Rasters

################################################################################
#~~~~~~~~~~~~~~~~~~~~~~~~Read in 100kcfs and process results~~~~~~~~~~~~~~~~~~~~
################################################################################

Base_100kcfs_WSE <- data.frame(length(Base_100kcfs_Files))
Base_100kcfs_Diff <- data.frame(length(Base_100kcfs_Files))
Base_100kcfs_RiverMiles <- matrix(1:6, ncol = 11)
Base_100kcfs_RiverMiles <- as.data.frame(Base_100kcfs_RiverMiles)
Base_100kcfs_RiverMiles_diff <- matrix(1:6, ncol = 11)
Base_100kcfs_RiverMiles_diff <- as.data.frame(Base_100kcfs_RiverMiles_diff)
rm <- c(241.7, 241.8, 242, 243, 244, 245, 246, 247, 248, 249, 250)
indices <- c(tail_25, pool_25, rm_242, rm_243, rm_244, rm_245, rm_246, rm_247, rm_248, rm_249, rm_250)

for (i in 1:length(Base_100kcfs_Files)) {
  
  temp <- readLines(Base_100kcfs_Files[i])
  TS <- grep("TS",temp)
  TS[length(TS)] # returns the row number for last timestep import
  temp <- temp[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
  temp <- head(temp, -1) # delete last row in file that has the word "ENDDS"
  temp_dep <- read.table(text = temp) # create table to reference indexed depth values in model
  temp_dep <- mutate_all(temp_dep, function(x) ifelse(x < 0, NA, x))  # remove all negative values and replace with zero
  temp <- temp_dep + Base_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
  temp_wse <- temp * 3.28084 # convert to WSE (feet)
  temp_wse_1 <- temp_wse
  temp_diff <- temp_wse_1 - Base_100_Normal_dep_Base_WSE #Difference in WSE between base and alternative
  
  
  
  row_wse <- c(temp_wse[tail_25,], temp_wse[pool_25,], temp_wse[rm_242,], temp_wse[rm_243,],
           temp_wse[rm_244,], temp_wse[rm_245,], temp_wse[rm_246,], temp_wse[rm_247,], temp_wse[rm_248,], 
           temp_wse[rm_249,], temp_wse[rm_250,])
  
  row_diff <- c(temp_diff[tail_25,], temp_diff[pool_25,], temp_diff[rm_242,], temp_diff[rm_243,],
               temp_diff[rm_244,], temp_diff[rm_245,], temp_diff[rm_246,], temp_diff[rm_247,], temp_diff[rm_248,], 
               temp_diff[rm_249,], temp_diff[rm_250,])
  

  Base_100kcfs_RiverMiles <- cbind(Base_100kcfs_RiverMiles, row_wse)
  Base_100kcfs_RiverMiles_diff <- cbind(Base_100kcfs_RiverMiles_diff, row_diff)
}

row_names <- c("LD25 Tailwater WSE", "LD25 Pool WSE", "RM 242 WSE", "RM 243 WSE",
               "RM 244 WSE", "RM 245 WSE", "RM 246 WSE", "RM 247 WSE", "RM 248 WSE",
               "RM 249 WSE", "RM 250 WSE")
column_names <- basename(Base_100kcfs_Files)
column_names <- stringr::str_remove(column_names,"_dep.dat")
Base_100kcfs_RiverMiles <- Base_100kcfs_RiverMiles[,c(12,13,14,15,16,17)]
Base_100kcfs_RiverMiles_diff <- Base_100kcfs_RiverMiles_diff[,c(12,13,14,15,16,17)]
colnames(Base_100kcfs_RiverMiles) <- c(column_names)
colnames(Base_100kcfs_RiverMiles_diff) <- c(column_names)
rm <- as.data.frame(rm)
colnames(rm) <- c("RiverMiles")
Base_100kcfs_RiverMiles <- cbind(Base_100kcfs_RiverMiles,rm)
Base_100kcfs_RiverMiles_diff <- cbind(Base_100kcfs_RiverMiles_diff, rm)
row.names(Base_100kcfs_RiverMiles) <- c(row_names)
row.names(Base_100kcfs_RiverMiles_diff) <- c(row_names)

save(Base_100kcfs_RiverMiles, file = "F:\\LD25\\Gate Manipulation\\WSE Comparison\\Processed_Data\\Base_100kcfs_RiverMiles.RData")
save(Base_100kcfs_RiverMiles_diff, file = "F:\\LD25\\Gate Manipulation\\WSE Comparison\\Processed_Data\\Base_100kcfs_RiverMiles_diff.RData")
#save(LD25_Rating_Curve, file = "F:\\LD25\\Gate Manipulation\\WSE Comparison\\Processed_Data\\LD25_Rating_Curve.RData")
################################################################################
#~~~~~~~~~~~~~~~~~~~~~~~~Process Rock Cut Results~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
################################################################################ 


Rock_100kcfs_WSE <- data.frame(length(Rock_100kcfs_Files)) # create new data frame
Rock_100kcfs_Diff <- data.frame(length(Rock_100kcfs_Files))
Rock_100kcfs_RiverMiles <- matrix(1:6, ncol = 11)
Rock_100kcfs_RiverMiles <- as.data.frame(Rock_100kcfs_RiverMiles)
Rock_100kcfs_RiverMiles_diff <- matrix(1:6, ncol = 11)
Rock_100kcfs_RiverMiles_diff <- as.data.frame(Rock_100kcfs_RiverMiles_diff)


for (i in 1:length(Rock_100kcfs_Files)) {
  
  temp <- readLines(Rock_100kcfs_Files[i])
  TS <- grep("TS",temp)
  TS[length(TS)] # returns the row number for last timestep import
  temp <- temp[-(1:TS[length(TS)])] # delete all data before the last time step in the dat file
  temp <- head(temp, -1) # delete last row in file that has the word "ENDDS"
  temp_dep <- read.table(text = temp) # create table to reference indexed depth values in model
  temp_dep <- mutate_all(temp_dep, function(x) ifelse(x < 0, NA, x))  # remove all negative values and replace with zero
  temp <- temp_dep + RockCut_Mesh_Nodes$`Nodal Elevation (Z) - Meters` # add nodal elevation & depth to get WSE
  temp_wse <- temp * 3.28084 # convert to WSE (feet)
  temp_wse_1 <- temp_wse
  temp_diff <- temp_wse_1 - RockCut_100_Normal_dep_Base_WSE #Difference in WSE between base and alternative
  
  
  
  row_wse <- c(temp_wse[tail_25,], temp_wse[pool_25,], temp_wse[rm_242,], temp_wse[rm_243,],
               temp_wse[rm_244,], temp_wse[rm_245,], temp_wse[rm_246,], temp_wse[rm_247,], temp_wse[rm_248,], 
               temp_wse[rm_249,], temp_wse[rm_250,])
  
  row_diff <- c(temp_diff[tail_25,], temp_diff[pool_25,], temp_diff[rm_242,], temp_diff[rm_243,],
                temp_diff[rm_244,], temp_diff[rm_245,], temp_diff[rm_246,], temp_diff[rm_247,], temp_diff[rm_248,], 
                temp_diff[rm_249,], temp_diff[rm_250,])
  
  
  Rock_100kcfs_RiverMiles <- cbind(Rock_100kcfs_RiverMiles, row_wse)
  Rock_100kcfs_RiverMiles_diff <- cbind(Rock_100kcfs_RiverMiles_diff, row_diff)
}
  


row_names <- c("LD25 Tailwater WSE", "LD25 Pool WSE", "RM 242 WSE", "RM 243 WSE",
               "RM 244 WSE", "RM 245 WSE", "RM 246 WSE", "RM 247 WSE", "RM 248 WSE",
               "RM 249 WSE", "RM 250 WSE")
column_names <- basename(Rock_100kcfs_Files)
column_names <- stringr::str_remove(column_names,"_dep.dat")
Rock_100kcfs_RiverMiles <- Rock_100kcfs_RiverMiles[,c(12,13,14,15,16,17)]
Rock_100kcfs_RiverMiles_diff <- Rock_100kcfs_RiverMiles_diff[,c(12,13,14,15,16,17)]
colnames(Rock_100kcfs_RiverMiles) <- c(column_names)
colnames(Rock_100kcfs_RiverMiles_diff) <- c(column_names)
rm <- as.data.frame(rm)
colnames(rm) <- c("RiverMiles")
Rock_100kcfs_RiverMiles <- cbind(Rock_100kcfs_RiverMiles,rm)
Rock_100kcfs_RiverMiles_diff <- cbind(Rock_100kcfs_RiverMiles_diff, rm)
row.names(Rock_100kcfs_RiverMiles) <- c(row_names)
row.names(Rock_100kcfs_RiverMiles_diff) <- c(row_names)

save(Rock_100kcfs_RiverMiles, file = "F:\\LD25\\Gate Manipulation\\WSE Comparison\\Processed_Data\\Rock_100kcfs_RiverMiles.RData")
save(Rock_100kcfs_RiverMiles_diff, file = "F:\\LD25\\Gate Manipulation\\WSE Comparison\\Processed_Data\\Rock_100kcfs_RiverMiles_diff.RData")

Map Of WSE Reading Locations


WSE Impact Results


100kcfs Gate Manipulation Results

Table 1: Water Surface Elevations (ft)
Base_100_Gates1_2_Closed Base_100_Gates1_3_Closed Base_100_Gates1_5_Closed Base_100_Gates13_17_Closed Base_100_Normal BaseCond_100_G1_3_2ftOpen RiverMiles
LD25 Tailwater WSE 424.40 424.37 424.35 424.59 424.54 424.43 241.7
LD25 Pool WSE 429.39 429.26 429.38 429.95 429.55 429.55 241.8
RM 242 WSE 429.41 429.27 429.39 429.99 429.57 429.57 242.0
RM 243 WSE 429.90 429.78 429.88 430.41 430.04 430.03 243.0
RM 244 WSE 430.07 429.96 430.05 430.56 430.20 430.20 244.0
RM 245 WSE 430.29 430.18 430.27 430.77 430.42 430.41 245.0
RM 246 WSE 430.57 430.47 430.57 431.04 430.70 430.70 246.0
RM 247 WSE 430.80 430.70 430.80 431.25 430.92 430.92 247.0
RM 248 WSE 431.06 430.97 431.07 431.49 431.18 431.18 248.0
RM 249 WSE 431.38 431.29 431.39 431.78 431.49 431.49 249.0
RM 250 WSE 431.74 431.66 431.75 432.10 431.84 431.84 250.0


Table 2: Water Surface Elevations (ft)
RockCut_100_G1_3_2ftOpen RockCut_100_Gates1_2_Closed RockCut_100_Gates1_3_Closed RockCut_100_Gates1_5_Closed RockCut_100_Gates13_17_Closed RockCut_100_Normal RiverMiles
LD25 Tailwater WSE 424.47 424.48 424.49 424.41 424.36 424.46 241.7
LD25 Pool WSE 429.52 429.40 429.31 429.54 429.87 429.61 241.8
RM 242 WSE 429.54 429.42 429.33 429.54 429.91 429.63 242.0
RM 243 WSE 430.01 429.90 429.83 430.01 430.33 430.09 243.0
RM 244 WSE 430.18 430.07 430.01 430.17 430.49 430.26 244.0
RM 245 WSE 430.39 430.29 430.23 430.39 430.70 430.47 245.0
RM 246 WSE 430.68 430.58 430.53 430.68 430.97 430.75 246.0
RM 247 WSE 430.91 430.80 430.76 430.91 431.19 430.98 247.0
RM 248 WSE 431.16 431.06 431.02 431.16 431.44 431.23 248.0
RM 249 WSE 431.48 431.37 431.35 431.48 431.74 431.54 249.0
RM 250 WSE 431.83 431.73 431.71 431.83 432.06 431.89 250.0


Table 3: Changes In Water Surface Elevations (ft) Compared To Normal Gate Operations
Base_100_Gates1_2_Closed Base_100_Gates1_3_Closed Base_100_Gates1_5_Closed Base_100_Gates13_17_Closed Base_100_Normal BaseCond_100_G1_3_2ftOpen RiverMiles
LD25 Tailwater WSE -0.14 -0.17 -0.18 0.05 0 -0.11 241.7
LD25 Pool WSE -0.16 -0.30 -0.18 0.40 0 -0.01 241.8
RM 242 WSE -0.16 -0.30 -0.18 0.41 0 -0.01 242.0
RM 243 WSE -0.14 -0.25 -0.16 0.37 0 0.00 243.0
RM 244 WSE -0.13 -0.24 -0.15 0.36 0 0.00 244.0
RM 245 WSE -0.13 -0.24 -0.14 0.35 0 0.00 245.0
RM 246 WSE -0.13 -0.23 -0.13 0.34 0 0.00 246.0
RM 247 WSE -0.12 -0.22 -0.12 0.33 0 0.00 247.0
RM 248 WSE -0.12 -0.21 -0.11 0.31 0 0.00 248.0
RM 249 WSE -0.11 -0.20 -0.10 0.30 0 0.01 249.0
RM 250 WSE -0.10 -0.17 -0.09 0.27 0 0.01 250.0



Table 4: Changes In Water Surface Elevations (ft) Compared To Normal Gate Operations
RockCut_100_G1_3_2ftOpen RockCut_100_Gates1_2_Closed RockCut_100_Gates1_3_Closed RockCut_100_Gates1_5_Closed RockCut_100_Gates13_17_Closed RockCut_100_Normal RiverMiles
LD25 Tailwater WSE 0.01 0.01 0.02 -0.05 -0.10 0 241.7
LD25 Pool WSE -0.09 -0.21 -0.30 -0.07 0.26 0 241.8
RM 242 WSE -0.09 -0.21 -0.30 -0.09 0.28 0 242.0
RM 243 WSE -0.08 -0.19 -0.26 -0.08 0.24 0 243.0
RM 244 WSE -0.08 -0.18 -0.25 -0.08 0.24 0 244.0
RM 245 WSE -0.07 -0.18 -0.24 -0.08 0.23 0 245.0
RM 246 WSE -0.07 -0.18 -0.23 -0.07 0.22 0 246.0
RM 247 WSE -0.07 -0.18 -0.22 -0.07 0.21 0 247.0
RM 248 WSE -0.07 -0.18 -0.21 -0.07 0.20 0 248.0
RM 249 WSE -0.06 -0.17 -0.20 -0.07 0.19 0 249.0
RM 250 WSE -0.06 -0.16 -0.18 -0.06 0.17 0 250.0