Difference between revisions of "Baseflow separation"

From SourceWiki
Jump to navigation Jump to search
 
 
Line 1: Line 1:
nothing in here yet :(
+
==Introduction==
 +
Chapman (1999) gives an excellent overview of baseflow separation techniques. Recursive digital filters are easiest to automate. Below are a few R implementations of the filter equations listed on the site:
 +
 
 +
NOTE: this is work in progress - the scripts have not yet been thoroughly tested and may contain bugs!
 +
 
 +
 
 +
==Filter equations==
 +
 
 +
===One-parameter algorithm===
 +
 
 +
Chapman (1999) equation 8:
 +
 
 +
  bf_oneparam <- function(discharge, k){
 +
  &nbsp;&nbsp;bf <- rep(discharge[1],length(discharge))
 +
  &nbsp;&nbsp;for(i in 2:length(discharge)) {
 +
  &nbsp;&nbsp;&nbsp;&nbsp;bf[i] <- (k*bf[i-1]/(2-k)) + ((1-k)*discharge[i]/(2-k))
 +
  &nbsp;&nbsp;&nbsp;&nbsp;if(bf[i] > discharge[i]) bf[i] <- discharge[i]
 +
  &nbsp;&nbsp;}
 +
  &nbsp;&nbsp;return(bf)
 +
  }
 +
 
 +
Parameter k is the recession constant during periods without direct runoff.
 +
 
 +
===Boughton two-parameter algorithm===
 +
 
 +
Chapman (1999) equation 9:
 +
 
 +
  bf_boughton <- function(discharge, k, C){
 +
  &nbsp;&nbsp;bf <- rep(discharge[1],length(discharge))
 +
  &nbsp;&nbsp;for(i in 2:length(discharge)) {
 +
  &nbsp;&nbsp;&nbsp;&nbsp;bf[i] <- (k*bf[i-1]/(1+C)) + (C*discharge[i]/(1+C))
 +
  &nbsp;&nbsp;&nbsp;&nbsp;if(bf[i] > discharge[i]) bf[i] <- discharge[i]
 +
  &nbsp;&nbsp;}
 +
  &nbsp;&nbsp;return(bf)
 +
  }
 +
 
 +
===IHACRES three-parameter algorithm===
 +
 
 +
Chapman (1999) equation 11:
 +
 
 +
  bf_IHACRES <- function(discharge, k, C, a){
 +
  &nbsp;&nbsp;bf <- rep(discharge[1],length(discharge))
 +
  &nbsp;&nbsp;for(i in 2:length(discharge)) {
 +
  &nbsp;&nbsp;&nbsp;&nbsp;bf[i] <- (k*bf[i-1]/(1+C)) + (C*(discharge[i] + a*discharge[i-1])/(1+C))
 +
  &nbsp;&nbsp;&nbsp;&nbsp;if(bf[i] > discharge[i]) bf[i] <- discharge[i]
 +
  &nbsp;&nbsp;}
 +
  &nbsp;&nbsp;return(bf)
 +
  }
 +
 
 +
<!-- ===Lyne and Hollick algorithm===
 +
 
 +
===Chapman algorithm===
 +
 
 +
===Furey and Gupta filter=== -->
 +
 
 +
 
 +
==References==
 +
 
 +
* Chapman, T., 1999. A comparison of algorithms for stream flow recession and baseflow separation. Hydrol. Process. 13, 701-714

Latest revision as of 21:56, 3 August 2008

Introduction

Chapman (1999) gives an excellent overview of baseflow separation techniques. Recursive digital filters are easiest to automate. Below are a few R implementations of the filter equations listed on the site:

NOTE: this is work in progress - the scripts have not yet been thoroughly tested and may contain bugs!


Filter equations

One-parameter algorithm

Chapman (1999) equation 8:

 bf_oneparam <- function(discharge, k){
   bf <- rep(discharge[1],length(discharge))
   for(i in 2:length(discharge)) {
     bf[i] <- (k*bf[i-1]/(2-k)) + ((1-k)*discharge[i]/(2-k))
     if(bf[i] > discharge[i]) bf[i] <- discharge[i]
   }
   return(bf)
 }

Parameter k is the recession constant during periods without direct runoff.

Boughton two-parameter algorithm

Chapman (1999) equation 9:

 bf_boughton <- function(discharge, k, C){
   bf <- rep(discharge[1],length(discharge))
   for(i in 2:length(discharge)) {
     bf[i] <- (k*bf[i-1]/(1+C)) + (C*discharge[i]/(1+C))
     if(bf[i] > discharge[i]) bf[i] <- discharge[i]
   }
   return(bf)
 }

IHACRES three-parameter algorithm

Chapman (1999) equation 11:

 bf_IHACRES <- function(discharge, k, C, a){
   bf <- rep(discharge[1],length(discharge))
   for(i in 2:length(discharge)) {
     bf[i] <- (k*bf[i-1]/(1+C)) + (C*(discharge[i] + a*discharge[i-1])/(1+C))
     if(bf[i] > discharge[i]) bf[i] <- discharge[i]
   }
   return(bf)
 }


References

  • Chapman, T., 1999. A comparison of algorithms for stream flow recession and baseflow separation. Hydrol. Process. 13, 701-714