A recent paper by Khastagir and Jayasuriya from RMIT provides a quick way to estimate the size of a rain tank that is required to meet demands with a specified reliability.

Equations are provided that establish a relationship between:

- A = Roof area (m
^{2}) - D = Annual water demand (L/year)
- R = Rainfall (mm)
- C = Tank volume (L)
- Reliability

Equations are of the form:

Where:

For 85% reliability

For 90% reliability

For 95% reliability

Relationships for three reliabilities are shown in the following figure which shows the scatter of data that has been used to fit the equations.

## Example:

What tank size is required to provide 95% reliability for a 3 person household, roof area = 200 m^{2}, annual rainfall = 700 mm, demand is for toilet flushing.

The paper uses a standard set of demands:

- Toilet flushing = 16 L per person per day
- Laundry = 40 L per person per day

For a three person household, annual demand for toilet flushing will be .

Therefore,

For 95% reliability

Therefore, the required tank capacity is:

### Comparsion

We can compare these results to another tank sizing guide provided in Chapter 12 of WSUD: Engineering procedures stormwater. This book provides the following chart for tank sizing. The chart was developed based on modelling that used rainfall data from Melbourne with a mean annual rainfall 657 mm.

Demand is for toilet flushing at a rate of 20 L per person per day, higher than the 16 L used by Khastagir and Jayasuriya.

Our three person household has a equivalent of 1.5 persons per 100 m^{2} of roof area. For a reliability of 90%, the required tank size is 0.7 * 200 = 1.4 kL.

Using the Khastagir and Jayasuriya approach.

D = 20 x 3 x 365 = 21,900 L

R = 657

For 90% reliability

Therefore, the required tank capacity is:

So the capacities are in the same ballpark and either is probably ok for an initial estimate. Better estimates could be obtained through modelling (for example, see Mitchell, 2007). The advantage of the Khastagir and Jayasuriya approach is that it easy to generalise to different demands, roof areas and rainfalls.

A vectorized R function to implement the method of Khastagir and Jayasuriya is provided below.

CalcTankCapacity <- function(roof.area, demand.annual, rainfall.annual, reliability=c(85, 90, 95)) { reliability.allowed <- c(85, 90, 95) if(!all(reliability %in% reliability.allowed)) stop("Some reliability values are not supported") # recycle arguments to allow vectorization arg.list <- lapply(as.list(match.call())[-1], eval) # arguments provided to the function arg.lengths <- sapply(arg.list,length) equal.elements <- function(x, tol = .Machine$double.eps ^ 0.5 ) {diff(range(x)) < tol} if(!equal.elements(arg.lengths)) { # if arguments don't all have the same length max.length <- max(sapply(arg.list, length)) arg.list <- lapply(arg.list, rep, length=max.length) # recycle for (i in 1:length(arg.list)){ # assign values back to arguments assign(names(arg.list)[i],arg.list[[i]]) } } tank.capacity <- numeric(length=max(arg.lengths)) x <- demand.annual/(roof.area * rainfall.annual) tank.capacity[reliability == 85] <- roof.area[reliability == 85]^(3/2) * 0.08*exp(5.58*x[reliability == 85]) tank.capacity[reliability == 90] <- roof.area[reliability == 90]^(3/2) * 0.15*exp(5.16*x[reliability == 90]) tank.capacity[reliability == 95] <- roof.area[reliability == 95]^(3/2) * 0.29*exp(4.85*x[reliability == 95]) data.frame(roof.area = roof.area, demand.annual = demand.annual, rainfall.annual = rainfall.annual, reliability = reliability, tank.capacity = tank.capacity) } # Example roof.area <- 200 demand.annual <- 21900 rainfall.annual <-657 reliability <- c(85, 90, 95) CalcTankCapacity(roof.area, demand.annual, rainfall.annual, reliability) # roof.area demand.annual rainfall.annual reliability tank.capacity # 1 200 21900 657 85 573.494 # 2 200 21900 657 90 1002.604 # 3 200 21900 657 95 1840.762 #

Pingback: Approximate sizing of rainwater tanks – II | tonyladson