Set the number of simulation replicates in years

nReps <- 10000

Time

The variable “doy” is day of year, 1 through 365

doy <- rep(seq(1, 365, by = 1), nReps)
length(doy)
[1] 3650000
head(doy)
[1] 1 2 3 4 5 6
summary(doy)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1      92     183     183     274     365 

The variable “year” is the year of the simulation, starting with 1 and proceeding to nReps.

year <- rep(1:nReps, each = 365)

River stage

The variable “stage” is the river stage in feet. This is simulated using the arima.sim function. The parameters were estimated in a different file [insert file name].

sqrt(2563)
[1] 50.62608
mean(stage)
[1] 383.2532
sd(stage)
[1] 261.314
sd(stage) / mean(stage)
[1] 0.6818313
summary(stage)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -748.6   204.7   383.2   383.3   561.5  1601.0 

Here are the first few years of simulated stage:

plot(stage[1:(365*5)], type = "l", xlab = "Day", ylab = 'Stage (ft)')

Diversion flow rate

The variable “dcfd” is the flow of water through the diversion in cubic feet per day. This is calculated as a linear function of river stage with a minimum and maximum, which assumes a rectangular notch in the levy with passive flow.

This is a conversion factor for converting cubic feet per second to cubic feet per day.

secToDay <- 60*60*24

Since we do not have operational parameters for the diversion, here we are just setting the minimum and maximum flows at the 25th and 75th percentiles of simulated river stage, respectively.

minStage <- quantile(stage, probs = 0.25, na.rm = TRUE)
maxStage <- quantile(stage, probs = 0.75, na.rm = TRUE)
minDivCfs <- 0
maxDivCfs <- 75000
minDivCfd <- minDivCfs * secToDay
maxDivCfd <- maxDivCfs * secToDay

The slope of the relationship between diversion flow rate and river stage is currently arbitrary.

cfsSlope <- (maxDivCfd - minDivCfd) / (maxStage - minStage) # rise over run

In between the minimum and maximum diversion flows, the diversion flow rate is a linear function of river stage.

dcfd <- stage * cfsSlope - (minStage * cfsSlope)

Below the minStage, the diversion flow rate is zero cfs. Above the maxStage, the diversion flowRate is 75,000 cfs.

dcfd[stage < minStage] <- minDivCfd
dcfd[stage > maxStage] <- maxDivCfd

Plot the relationship between diversion flow rate and river stage.

plot(stage[1:1000], dcfd[1:1000], xlab = 'Stage (ft)', ylab = 'Flow rate (Cubic feet per day)')

Plot discharge over time for a subset of data.

plot(dcfd[1:(365*10)], type = "l", xlab = "Day", ylab = 'Flow rate (Cubic feet per day)')

Water temperature

Low average daily water temperature may result in torpor so that finish are not moving and are, consequently, unavailable to be captured by the diversion. The variable “waterTemp” is a binary variable for which a value of “0” indicates that the average daily water temperature is is sufficiently low to induce torpor, and a value of “1” indicates that it is not low enough to induce torpor. This is a function of the day of year based on historical average daily water temperatures. The parameters were estimated in a different file [insert file name].

The variable “firstDay” is the first cumulative day of the year that is on average above the minimum water temperature threshold, and the variable “lastDay” is the last cumulative day of the year that is on average above the minimum water temperature threshold.

firstDay <- 75
lastDay <- 359

Fill the variable with zeros, then replace with 1 for day of year with temperature above the threshold.

waterTemp <- rep(0, length(doy))
waterTemp[doy >= firstDay & doy <= lastDay] <- 1

Mortality

The variable “mortalityRate” is the number of fish captured by the diversion per cubic feet of water diverted.

mortalityRate <- 1 / (9.472*(10^9)) # 1 fish per that many cubic feet per day of diverted water

The variable “m1” is mortality computed for all days of the year, and the variable “m2” is mortality computed with zero mortality for days of the year that are below the torpidity temperature threshold.

m1 <- mortalityRate * dcfd
m2 <- mortalityRate * dcfd * waterTemp

Plot a few years of daily mortality.

plot(1:(365*5), m1[1:(365*5)], type = "l")

plot(1:(365*5), m2[1:(365*5)], type = "l")

mean(m1)
[1] 0.3421026
sd(m1)
[1] 0.2773446
sd(m1) / mean(m1)
[1] 0.8107059
mean(m2)
[1] 0.2819343
sd(m2)
[1] 0.2877488
sd(m2) / mean(m2)
[1] 1.020624
hist(m1, main = 'Ignoring torpor', xlab = 'Fish taken per day', col = 'grey')

hist(m2, main = 'Including torpor', xlab = 'Fish taken per day', col = 'grey')

Results

First we need to aggregate the data annually, getting the total fish taken per year.

m1Annual <- tapply(m1, INDEX = list(year), FUN = sum)
m2Annual <- tapply(m2, INDEX = list(year), FUN = sum)
hist(m1Annual, main = 'Ignoring torpor', xlab = 'Fish taken per year', col = 'grey')

hist(m2Annual, main = 'Including torpor', xlab = 'Fish taken per year', col = 'grey')

These are the results to be used in RAMAS. These are the average number of fish taken by the diversion per year, and the standard deviation in the number of fish taken per year. …for the m1 scenario

mean(m1Annual)
[1] 125.0085
sd(m1Annual)
[1] 44.79841

…and for the m2 scenario

mean(m2Annual)
[1] 102.9118
sd(m2Annual)
[1] 38.02213
LS0tDQp0aXRsZTogIlBhbGxpZCBTdHVyZ2VvbiBNb3J0YWxpdHkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpTZXQgdGhlIG51bWJlciBvZiBzaW11bGF0aW9uIHJlcGxpY2F0ZXMgaW4geWVhcnMNCmBgYHtyfQ0KblJlcHMgPC0gMTAwMDANCmBgYA0KDQoNCiMjIyBUaW1lDQoNClRoZSB2YXJpYWJsZSAiZG95IiBpcyBkYXkgb2YgeWVhciwgMSB0aHJvdWdoIDM2NQ0KYGBge3J9DQpkb3kgPC0gcmVwKHNlcSgxLCAzNjUsIGJ5ID0gMSksIG5SZXBzKQ0KbGVuZ3RoKGRveSkNCmhlYWQoZG95KQ0Kc3VtbWFyeShkb3kpDQpgYGANCg0KVGhlIHZhcmlhYmxlICJ5ZWFyIiBpcyB0aGUgeWVhciBvZiB0aGUgc2ltdWxhdGlvbiwgc3RhcnRpbmcgd2l0aCAxIGFuZCBwcm9jZWVkaW5nIHRvIG5SZXBzLg0KYGBge3J9DQp5ZWFyIDwtIHJlcCgxOm5SZXBzLCBlYWNoID0gMzY1KQ0KYGBgDQoNCg0KIyMjIFJpdmVyIHN0YWdlDQoNClRoZSB2YXJpYWJsZSAic3RhZ2UiIGlzIHRoZSByaXZlciBzdGFnZSBpbiBmZWV0LiBUaGlzIGlzIHNpbXVsYXRlZCB1c2luZyB0aGUgYXJpbWEuc2ltIGZ1bmN0aW9uLiBUaGUgcGFyYW1ldGVycyB3ZXJlIGVzdGltYXRlZCBpbiBhIGRpZmZlcmVudCBmaWxlIFtpbnNlcnQgZmlsZSBuYW1lXS4NCmBgYHtyfQ0Kc3RhZ2UgPC0gbXlQcmVkIDwtIDE4NS4xNjc4KmNvcygyKnBpLzM2NSpkb3kgKyAyKnBpLzQuNjE4NDA5KSArIDM4MC44NjkgKyBhcmltYS5zaW0obiA9IG5SZXBzICogMzY1LCANCiAgbGlzdChhciA9IGMoMC45ODQ5KSwgbWEgPSBjKC0wLjMyNjMsIC0wLjAwNjQsIDAuMTY1NSwgLTAuMDU4NCkpLA0KICBzZCA9IHNxcnQoMjU2MykNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KbWVhbihzdGFnZSkNCnNkKHN0YWdlKQ0Kc2Qoc3RhZ2UpIC8gbWVhbihzdGFnZSkNCmBgYA0KDQpgYGB7cn0NCnN1bW1hcnkoc3RhZ2UpDQpgYGANCg0KSGVyZSBhcmUgdGhlIGZpcnN0IGZldyB5ZWFycyBvZiBzaW11bGF0ZWQgc3RhZ2U6DQpgYGB7cn0NCnBsb3Qoc3RhZ2VbMTooMzY1KjUpXSwgdHlwZSA9ICJsIiwgeGxhYiA9ICJEYXkiLCB5bGFiID0gJ1N0YWdlIChmdCknKQ0KYGBgDQoNCg0KIyMjIERpdmVyc2lvbiBmbG93IHJhdGUNCg0KVGhlIHZhcmlhYmxlICJkY2ZkIiBpcyB0aGUgZmxvdyBvZiB3YXRlciB0aHJvdWdoIHRoZSBkaXZlcnNpb24gaW4gY3ViaWMgZmVldCBwZXIgZGF5LiBUaGlzIGlzIGNhbGN1bGF0ZWQgYXMgYSBsaW5lYXIgZnVuY3Rpb24gb2Ygcml2ZXIgc3RhZ2Ugd2l0aCBhIG1pbmltdW0gYW5kIG1heGltdW0sIHdoaWNoIGFzc3VtZXMgYSByZWN0YW5ndWxhciBub3RjaCBpbiB0aGUgbGV2eSB3aXRoIHBhc3NpdmUgZmxvdy4NCg0KVGhpcyBpcyBhIGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIGN1YmljIGZlZXQgcGVyIHNlY29uZCB0byBjdWJpYyBmZWV0IHBlciBkYXkuDQpgYGB7cn0NCnNlY1RvRGF5IDwtIDYwKjYwKjI0DQpgYGANCg0KU2luY2Ugd2UgZG8gbm90IGhhdmUgb3BlcmF0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGRpdmVyc2lvbiwgaGVyZSB3ZSBhcmUganVzdCBzZXR0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZsb3dzIGF0IHRoZSAyNXRoIGFuZCA3NXRoIHBlcmNlbnRpbGVzIG9mIHNpbXVsYXRlZCByaXZlciBzdGFnZSwgcmVzcGVjdGl2ZWx5Lg0KYGBge3J9DQptaW5TdGFnZSA8LSBxdWFudGlsZShzdGFnZSwgcHJvYnMgPSAwLjI1LCBuYS5ybSA9IFRSVUUpDQptYXhTdGFnZSA8LSBxdWFudGlsZShzdGFnZSwgcHJvYnMgPSAwLjc1LCBuYS5ybSA9IFRSVUUpDQptaW5EaXZDZnMgPC0gMA0KbWF4RGl2Q2ZzIDwtIDc1MDAwDQptaW5EaXZDZmQgPC0gbWluRGl2Q2ZzICogc2VjVG9EYXkNCm1heERpdkNmZCA8LSBtYXhEaXZDZnMgKiBzZWNUb0RheQ0KYGBgDQoNClRoZSBzbG9wZSBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGl2ZXJzaW9uIGZsb3cgcmF0ZSBhbmQgcml2ZXIgc3RhZ2UgaXMgY3VycmVudGx5IGFyYml0cmFyeS4NCmBgYHtyfQ0KY2ZzU2xvcGUgPC0gKG1heERpdkNmZCAtIG1pbkRpdkNmZCkgLyAobWF4U3RhZ2UgLSBtaW5TdGFnZSkgIyByaXNlIG92ZXIgcnVuDQpgYGANCg0KSW4gYmV0d2VlbiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBkaXZlcnNpb24gZmxvd3MsIHRoZSBkaXZlcnNpb24gZmxvdyByYXRlIGlzIGEgbGluZWFyIGZ1bmN0aW9uIG9mIHJpdmVyIHN0YWdlLg0KYGBge3J9DQpkY2ZkIDwtIHN0YWdlICogY2ZzU2xvcGUgLSAobWluU3RhZ2UgKiBjZnNTbG9wZSkNCmBgYA0KDQpCZWxvdyB0aGUgbWluU3RhZ2UsIHRoZSBkaXZlcnNpb24gZmxvdyByYXRlIGlzIHplcm8gY2ZzLiBBYm92ZSB0aGUgbWF4U3RhZ2UsIHRoZSBkaXZlcnNpb24gZmxvd1JhdGUgaXMgNzUsMDAwIGNmcy4NCmBgYHtyfQ0KZGNmZFtzdGFnZSA8IG1pblN0YWdlXSA8LSBtaW5EaXZDZmQNCmRjZmRbc3RhZ2UgPiBtYXhTdGFnZV0gPC0gbWF4RGl2Q2ZkDQpgYGANCg0KUGxvdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGl2ZXJzaW9uIGZsb3cgcmF0ZSBhbmQgcml2ZXIgc3RhZ2UuDQpgYGB7cn0NCnBsb3Qoc3RhZ2VbMToxMDAwXSwgZGNmZFsxOjEwMDBdLCB4bGFiID0gJ1N0YWdlIChmdCknLCB5bGFiID0gJ0Zsb3cgcmF0ZSAoQ3ViaWMgZmVldCBwZXIgZGF5KScpDQpgYGANCg0KUGxvdCBkaXNjaGFyZ2Ugb3ZlciB0aW1lIGZvciBhIHN1YnNldCBvZiBkYXRhLg0KYGBge3J9DQpwbG90KGRjZmRbMTooMzY1KjEwKV0sIHR5cGUgPSAibCIsIHhsYWIgPSAiRGF5IiwgeWxhYiA9ICdGbG93IHJhdGUgKEN1YmljIGZlZXQgcGVyIGRheSknKQ0KYGBgDQoNCg0KIyMjIFdhdGVyIHRlbXBlcmF0dXJlDQoNCkxvdyBhdmVyYWdlIGRhaWx5IHdhdGVyIHRlbXBlcmF0dXJlIG1heSByZXN1bHQgaW4gdG9ycG9yIHNvIHRoYXQgZmluaXNoIGFyZSBub3QgbW92aW5nIGFuZCBhcmUsIGNvbnNlcXVlbnRseSwgdW5hdmFpbGFibGUgdG8gYmUgY2FwdHVyZWQgYnkgdGhlIGRpdmVyc2lvbi4gVGhlIHZhcmlhYmxlICJ3YXRlclRlbXAiIGlzIGEgYmluYXJ5IHZhcmlhYmxlIGZvciB3aGljaCBhIHZhbHVlIG9mICIwIiBpbmRpY2F0ZXMgdGhhdCB0aGUgYXZlcmFnZSBkYWlseSB3YXRlciB0ZW1wZXJhdHVyZSBpcyBpcyBzdWZmaWNpZW50bHkgbG93IHRvIGluZHVjZSB0b3Jwb3IsIGFuZCBhIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3QgbG93IGVub3VnaCB0byBpbmR1Y2UgdG9ycG9yLiBUaGlzIGlzIGEgZnVuY3Rpb24gb2YgdGhlIGRheSBvZiB5ZWFyIGJhc2VkIG9uIGhpc3RvcmljYWwgYXZlcmFnZSBkYWlseSB3YXRlciB0ZW1wZXJhdHVyZXMuIFRoZSBwYXJhbWV0ZXJzIHdlcmUgZXN0aW1hdGVkIGluIGEgZGlmZmVyZW50IGZpbGUgW2luc2VydCBmaWxlIG5hbWVdLg0KDQpUaGUgdmFyaWFibGUgImZpcnN0RGF5IiBpcyB0aGUgZmlyc3QgY3VtdWxhdGl2ZSBkYXkgb2YgdGhlIHllYXIgdGhhdCBpcyBvbiBhdmVyYWdlIGFib3ZlIHRoZSBtaW5pbXVtIHdhdGVyIHRlbXBlcmF0dXJlIHRocmVzaG9sZCwgYW5kIHRoZSB2YXJpYWJsZSAibGFzdERheSIgaXMgdGhlIGxhc3QgY3VtdWxhdGl2ZSBkYXkgb2YgdGhlIHllYXIgdGhhdCBpcyBvbiBhdmVyYWdlIGFib3ZlIHRoZSBtaW5pbXVtIHdhdGVyIHRlbXBlcmF0dXJlIHRocmVzaG9sZC4NCmBgYHtyfQ0KZmlyc3REYXkgPC0gNzUNCmxhc3REYXkgPC0gMzU5DQpgYGANCg0KRmlsbCB0aGUgdmFyaWFibGUgd2l0aCB6ZXJvcywgdGhlbiByZXBsYWNlIHdpdGggMSBmb3IgZGF5IG9mIHllYXIgd2l0aCB0ZW1wZXJhdHVyZSBhYm92ZSB0aGUgdGhyZXNob2xkLg0KYGBge3J9DQp3YXRlclRlbXAgPC0gcmVwKDAsIGxlbmd0aChkb3kpKQ0Kd2F0ZXJUZW1wW2RveSA+PSBmaXJzdERheSAmIGRveSA8PSBsYXN0RGF5XSA8LSAxDQpgYGANCg0KDQojIyMgTW9ydGFsaXR5DQoNClRoZSB2YXJpYWJsZSAibW9ydGFsaXR5UmF0ZSIgaXMgdGhlIG51bWJlciBvZiBmaXNoIGNhcHR1cmVkIGJ5IHRoZSBkaXZlcnNpb24gcGVyIGN1YmljIGZlZXQgb2Ygd2F0ZXIgZGl2ZXJ0ZWQuDQpgYGB7cn0NCm1vcnRhbGl0eVJhdGUgPC0gMSAvICg5LjQ3MiooMTBeOSkpICMgMSBmaXNoIHBlciB0aGF0IG1hbnkgY3ViaWMgZmVldCBwZXIgZGF5IG9mIGRpdmVydGVkIHdhdGVyDQpgYGANCg0KVGhlIHZhcmlhYmxlICJtMSIgaXMgbW9ydGFsaXR5IGNvbXB1dGVkIGZvciBhbGwgZGF5cyBvZiB0aGUgeWVhciwgYW5kIHRoZSB2YXJpYWJsZSAibTIiIGlzIG1vcnRhbGl0eSBjb21wdXRlZCB3aXRoIHplcm8gbW9ydGFsaXR5IGZvciBkYXlzIG9mIHRoZSB5ZWFyIHRoYXQgYXJlIGJlbG93IHRoZSB0b3JwaWRpdHkgdGVtcGVyYXR1cmUgdGhyZXNob2xkLg0KYGBge3J9DQptMSA8LSBtb3J0YWxpdHlSYXRlICogZGNmZA0KbTIgPC0gbW9ydGFsaXR5UmF0ZSAqIGRjZmQgKiB3YXRlclRlbXANCmBgYA0KDQpQbG90IGEgZmV3IHllYXJzIG9mIGRhaWx5IG1vcnRhbGl0eS4NCmBgYHtyfQ0KcGxvdCgxOigzNjUqNSksIG0xWzE6KDM2NSo1KV0sIHR5cGUgPSAibCIpDQpgYGANCg0KYGBge3J9DQpwbG90KDE6KDM2NSo1KSwgbTJbMTooMzY1KjUpXSwgdHlwZSA9ICJsIikNCmBgYA0KDQpgYGB7cn0NCm1lYW4obTEpDQpzZChtMSkNCnNkKG0xKSAvIG1lYW4obTEpDQptZWFuKG0yKQ0Kc2QobTIpDQpzZChtMikgLyBtZWFuKG0yKQ0KYGBgDQoNCg0KYGBge3J9DQpoaXN0KG0xLCBtYWluID0gJ0lnbm9yaW5nIHRvcnBvcicsIHhsYWIgPSAnRmlzaCB0YWtlbiBwZXIgZGF5JywgY29sID0gJ2dyZXknKQ0KYGBgDQoNCmBgYHtyfQ0KaGlzdChtMiwgbWFpbiA9ICdJbmNsdWRpbmcgdG9ycG9yJywgeGxhYiA9ICdGaXNoIHRha2VuIHBlciBkYXknLCBjb2wgPSAnZ3JleScpDQpgYGANCg0KDQojIyMgUmVzdWx0cw0KDQpGaXJzdCB3ZSBuZWVkIHRvIGFnZ3JlZ2F0ZSB0aGUgZGF0YSBhbm51YWxseSwgZ2V0dGluZyB0aGUgdG90YWwgZmlzaCB0YWtlbiBwZXIgeWVhci4NCmBgYHtyfQ0KbTFBbm51YWwgPC0gdGFwcGx5KG0xLCBJTkRFWCA9IGxpc3QoeWVhciksIEZVTiA9IHN1bSkNCm0yQW5udWFsIDwtIHRhcHBseShtMiwgSU5ERVggPSBsaXN0KHllYXIpLCBGVU4gPSBzdW0pDQpgYGANCg0KYGBge3J9DQpoaXN0KG0xQW5udWFsLCBtYWluID0gJ0lnbm9yaW5nIHRvcnBvcicsIHhsYWIgPSAnRmlzaCB0YWtlbiBwZXIgeWVhcicsIGNvbCA9ICdncmV5JykNCmBgYA0KDQpgYGB7cn0NCmhpc3QobTJBbm51YWwsIG1haW4gPSAnSW5jbHVkaW5nIHRvcnBvcicsIHhsYWIgPSAnRmlzaCB0YWtlbiBwZXIgeWVhcicsIGNvbCA9ICdncmV5JykNCmBgYA0KDQpUaGVzZSBhcmUgdGhlIHJlc3VsdHMgdG8gYmUgdXNlZCBpbiBSQU1BUy4NClRoZXNlIGFyZSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZmlzaCB0YWtlbiBieSB0aGUgZGl2ZXJzaW9uIHBlciB5ZWFyLCBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiB0aGUgbnVtYmVyIG9mIGZpc2ggdGFrZW4gcGVyIHllYXIuDQouLi5mb3IgdGhlIG0xIHNjZW5hcmlvDQpgYGB7cn0NCm1lYW4obTFBbm51YWwpDQpzZChtMUFubnVhbCkNCmBgYA0KDQouLi5hbmQgZm9yIHRoZSBtMiBzY2VuYXJpbw0KYGBge3J9DQptZWFuKG0yQW5udWFsKQ0Kc2QobTJBbm51YWwpDQpgYGANCg0K