Title: | Estimate Streamflow Depletion Due to Groundwater Pumping |
---|---|
Description: | Implementation of analytical models for estimating streamflow depletion due to groundwater pumping, and other related tools. Functions are broadly split into two groups: (1) analytical streamflow depletion models, which estimate streamflow depletion for a single stream reach resulting from groundwater pumping; and (2) depletion apportionment equations, which distribute estimated streamflow depletion among multiple stream reaches within a stream network. See Zipper et al. (2018) <doi:10.1029/2018WR022707> for more information on depletion apportionment equations and Zipper et al. (2019) <doi:10.1029/2018WR024403> for more information on analytical depletion functions, which combine analytical models and depletion apportionment equations. |
Authors: | Sam Zipper [aut, cre] , Ben Kerr [ctb], Tom Gleeson [ctb] , Qiang Li [rev] , Foundry Spatial Ltd. [cph] |
Maintainer: | Sam Zipper <[email protected]> |
License: | BSD_3_clause + file LICENSE |
Version: | 0.2.0 |
Built: | 2024-11-12 05:42:10 UTC |
Source: | https://github.com/foundryspatial/streamdepletr |
Distribute streamflow depletion within a stream network using inverse distance weighting.
apportion_inverse( reach_dist, w, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL )
apportion_inverse( reach_dist, w, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL )
reach_dist |
data frame with two columns: |
w |
inverse distance weighting factor; 1 for inverse distance, 2 for inverse distance squared. |
max_dist |
the maximum distance of a stream to be depleted; defaults to |
min_frac |
the minimum |
reach_name |
The name of the column in |
dist_name |
The name of the column in |
Since analytical models assume the presence of 1 (or sometimes 2) linear streams, the apportion_*
functions
can be used to distribute that depletion to various reaches within a real stream network. These geometric functions are described
in Zipper et al (2018), which found that apportion_web
a weighting factor (w
) of 2 produced the best results.
A data frame with two columns:
the grouping variable input in reach_dist
the proportion of streamflow depletion from the well occurring in that reach.
Zipper, SC, T Dallemagne, T Gleeson, TC Boerman, A Hartmann (2018). Groundwater Pumping Impacts on Real Stream Networks: Testing the Performance of Simple Management Tools. Water Resources Research. doi:10.1029/2018WR022707.
reach_dist <- data.frame(reach = seq(1,5), dist = c(100, 150, 900, 300, 200)) apportion_inverse(reach_dist, w = 2) apportion_inverse(reach_dist, w = 2, max_dist = 500) reach_dist <- data.frame(reach = c("A", "A", "A", "B", "B"), dist = c(100, 150, 900, 300, 200)) apportion_inverse(reach_dist, w = 1) apportion_inverse(reach_dist, w = 1, max_dist = 500)
reach_dist <- data.frame(reach = seq(1,5), dist = c(100, 150, 900, 300, 200)) apportion_inverse(reach_dist, w = 2) apportion_inverse(reach_dist, w = 2, max_dist = 500) reach_dist <- data.frame(reach = c("A", "A", "A", "B", "B"), dist = c(100, 150, 900, 300, 200)) apportion_inverse(reach_dist, w = 1) apportion_inverse(reach_dist, w = 1, max_dist = 500)
Distribute streamflow depletion within a stream network using web distance Thiessen polygons.
apportion_polygon( reach_dist_lon_lat, wel_lon, wel_lat, coord_crs, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL, lon_name = NULL, lat_name = NULL )
apportion_polygon( reach_dist_lon_lat, wel_lon, wel_lat, coord_crs, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL, lon_name = NULL, lat_name = NULL )
reach_dist_lon_lat |
data frame with four columns: |
wel_lon |
longitude of well |
wel_lat |
latitude of well |
coord_crs |
coordinate reference system for sf or sfc object (create with |
max_dist |
the maximum distance of a stream to be depleted; defaults to |
min_frac |
the minimum |
reach_name |
The name of the column in |
dist_name |
The name of the column in |
lon_name |
The name of the column in |
lat_name |
The name of the column in |
Since analytical models assume the presence of 1 (or sometimes 2) linear streams, the apportion_*
functions
can be used to distribute that depletion to various reaches within a real stream network. These geometric functions are described
in Zipper et al (2018), which found that apportion_web
a weighting factor (w
) of 2 produced the best results.
A data frame with two columns:
the grouping variable input in reach_dist
the proportion of streamflow depletion from the well occurring in that reach.
Zipper, SC, T Dallemagne, T Gleeson, TC Boerman, A Hartmann (2018). Groundwater Pumping Impacts on Real Stream Networks: Testing the Performance of Simple Management Tools. Water Resources Research. doi:10.1029/2018WR022707.
rdll <- prep_reach_dist(wel_lon = 295500, wel_lat = 4783200, stream_sf = stream_lines, reach_id = "reach", stream_pt_spacing = 5) apportion_polygon(reach_dist_lon_lat = rdll, wel_lon = 295500, wel_lat = 4783200, max_dist = 5000, coord_crs = sf::st_crs(stream_lines)) apportion_polygon(reach_dist_lon_lat = rdll, wel_lon = 295500, wel_lat = 4783200, max_dist = 5000, min_frac = 0.05, coord_crs = sf::st_crs(stream_lines))
rdll <- prep_reach_dist(wel_lon = 295500, wel_lat = 4783200, stream_sf = stream_lines, reach_id = "reach", stream_pt_spacing = 5) apportion_polygon(reach_dist_lon_lat = rdll, wel_lon = 295500, wel_lat = 4783200, max_dist = 5000, coord_crs = sf::st_crs(stream_lines)) apportion_polygon(reach_dist_lon_lat = rdll, wel_lon = 295500, wel_lat = 4783200, max_dist = 5000, min_frac = 0.05, coord_crs = sf::st_crs(stream_lines))
Distribute streamflow depletion within a stream network using web distance weighting.
apportion_web( reach_dist, w, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL )
apportion_web( reach_dist, w, max_dist = Inf, min_frac = 0, reach_name = NULL, dist_name = NULL )
reach_dist |
data frame with two columns: |
w |
weighting factor; 1 for web, 2 for web squared. |
max_dist |
the maximum distance of a stream to be depleted; defaults to |
min_frac |
the minimum |
reach_name |
The name of the column in |
dist_name |
The name of the column in |
Since analytical models assume the presence of 1 (or sometimes 2) linear streams, the apportion_*
functions
can be used to distribute that depletion to various reaches within a real stream network. These geometric functions are described
in Zipper et al (2018), which found that apportion_web
a weighting factor (w
) of 2 produced the best results.
A data frame with two columns:
the grouping variable input in reach_dist
the proportion of streamflow depletion from the well occurring in that reach.
Zipper, SC, T Dallemagne, T Gleeson, TC Boerman, A Hartmann (2018). Groundwater Pumping Impacts on Real Stream Networks: Testing the Performance of Simple Management Tools. Water Resources Research. doi:10.1029/2018WR022707.
reach_dist <- data.frame(reach = seq(1,5), dist = c(100, 150, 900, 300, 200)) apportion_web(reach_dist, w = 2) # same as inverse because there's only one dist per reach apportion_web(reach_dist, w = 2, max_dist = 500) reach_dist <- data.frame(reach = c("A", "A", "A", "B", "B"), dist = c(100, 150, 900, 300, 200)) apportion_web(reach_dist, w = 1) apportion_web(reach_dist, w = 1, max_dist = 500)
reach_dist <- data.frame(reach = seq(1,5), dist = c(100, 150, 900, 300, 200)) apportion_web(reach_dist, w = 2) # same as inverse because there's only one dist per reach apportion_web(reach_dist, w = 2, max_dist = 500) reach_dist <- data.frame(reach = c("A", "A", "A", "B", "B"), dist = c(100, 150, 900, 300, 200)) apportion_web(reach_dist, w = 1) apportion_web(reach_dist, w = 1, max_dist = 500)
Distribute streamflow depletion between two streams in a wedge-shaped aquifer.
apportion_wedge(angle_total, angle_well)
apportion_wedge(angle_total, angle_well)
angle_total |
angle [radians] between the two streams. |
angle_well |
angle [radians] from the first (lower boundary) stream and the well. |
This function assumes that streams are two linear tributaries which meet at the origin. This function specifically corresponds to Equations 18 and 19 in Yeh et al. (2008).
A numeric of length two with the proportion of steady-state capture fraction from the first (lower) and second (upper) streams.
Yeh, HD, YC Chang, VA Zlotnik (2008). Stream depletion rate and volume from groundwater pumping in wedge-shaped aquifers. Journal of Hydrology 349(3): 501-511. doi:10.1029/2018WR022707.
apportion_wedge(angle_total = (50*pi/2), angle_well = (10*pi/2)) apportion_wedge(angle_total = (50*pi/2), angle_well = (25*pi/2))
apportion_wedge(angle_total = (50*pi/2), angle_well = (10*pi/2)) apportion_wedge(angle_total = (50*pi/2), angle_well = (25*pi/2))
Calculate maximum distance at which streamflow depletion will exceed a user-selected threshold. Note that this only considers a single stream - depletion apportionment does not occur.
depletion_max_distance( Qf_thres = 0.01, d_interval = 100, d_min = NULL, d_max = 5000, method = "glover", t, S, Tr, ... )
depletion_max_distance( Qf_thres = 0.01, d_interval = 100, d_min = NULL, d_max = 5000, method = "glover", t, S, Tr, ... )
Qf_thres |
streamflow depletion fraction ( |
d_interval |
interval to use for testing; this defines the spatial resolution at which output will be returned [L] |
d_min |
minimum search distance [L]. If 'Qf' < 'Qf_thres' at 'd_min', function will return 'd_min' and a warning. If ‘d_min'=NULL (default), 'd_min' will be set to 'd_interval’' |
d_max |
maximum search distance [L]. If 'Qf' > 'Qf_thres' at 'd_max', function will return 'd_max' and a warning. |
method |
analytical solution to use (options= 'glover', 'hunt'). Defaults to 'glover'. |
t |
time you want output for [T] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Tr |
aquifer transmissivity [L2/T] |
... |
any other inputs required for your |
This function is useful for the 'Expanding' stream proximity criteria described in Zipper et al. (2018).
A numeric of the distance at which streamflow depletion fraction (Qf
) drops below the threshold at time 't'.
Zipper, SC, T Gleeson, B Kerr, JK Howard, MM Rohde, J Carah, J Zimmerman (2018). Rapid and accurate estimates of streamflow depletion caused by groundwater pumping using analytical depletion functions. EarthArXiv. doi:10.31223/osf.io/uqbd7.
depletion_max_distance(method = "glover", t = 730, S = 0.1, Tr = 100) depletion_max_distance(Qf_thres = 0.001, method = "glover", t = 730, S = 0.1, Tr = 100) depletion_max_distance(Qf_thres = 0.001, method = "hunt", t = 730, S = 0.1, Tr = 100, lmda = 0.01) depletion_max_distance(Qf_thres = 0.001, method = "hunt", t = 7300, S = 0.1, Tr = 100, lmda = 0.01)
depletion_max_distance(method = "glover", t = 730, S = 0.1, Tr = 100) depletion_max_distance(Qf_thres = 0.001, method = "glover", t = 730, S = 0.1, Tr = 100) depletion_max_distance(Qf_thres = 0.001, method = "hunt", t = 730, S = 0.1, Tr = 100, lmda = 0.01) depletion_max_distance(Qf_thres = 0.001, method = "hunt", t = 7300, S = 0.1, Tr = 100, lmda = 0.01)
Daily discharge data for the 2014-2015 water years for the US Geological Survey gauging stations DORN (SPRING) CREEK AT CT HIGHWAY M NR WAUNAKEE,WI (station ID 05427930) and SIXMILE CREEK @ COUNTY TRNK HGHWY M NR WAUNAKEE,WI (station ID 05427910).
discharge_df
discharge_df
A data frame with 1450 rows and 2 variables:
date of streamflow measurement
discharge, in cubic meters per day
name of stream for each stream reach (Sixmile Creek or Dorn Creek)
...
https://waterdata.usgs.gov/nwis/dv?referred_module=sw&agency_code=USGS&site_no=05427910
https://waterdata.usgs.gov/nwis/dv?referred_module=sw&agency_code=USGS&site_no=05427930
Streamflow depletion with fully-penetrating stream and no streambed.
glover(t, d, S, Tr)
glover(t, d, S, Tr)
t |
times you want output for [T] |
d |
distance from well to stream [L] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Tr |
aquifer transmissivity [L2/T] |
This function is described in Glover & Balmer (1954) based on work by Theis (1941). It contains numerous assumptions:
Horizontal flow >> vertical flow (Dupuit assumptions hold)
Homogeneous, isotropic aquifer
Constant Tr
: Aquifer is confined, or if unconfined change in head is small relative to aquifer thickness
Stream is straight, infinitely long, and remains in hydraulic connection to aquifer
Constant stream stage
No changes in recharge due to pumping
No streambank storage
Constant pumping rate
Aquifer extends to infinity
Stream fully penetrates through aquifer (see hunt or hantush for partially penetrating stream)
No streambed resistance to flow (see hunt or hantush for streambed resistance)
A numeric of Qf
, streamflow depletion as fraction of pumping rate [-].
If the pumping rate of the well (Qw
; [L3/T]) is known, you can calculate volumetric streamflow depletion [L3/T] as Qf*Qw
Glover, RE, and GG Balmer (1954).River Depletion Resulting from Pumping a Well near a River. Eos, Transactions American Geophysical Union 35(3): 468-70. doi:10.1029/TR035i003p00468.
Theis, CV (1941). The Effect of a Well on the Flow of a Nearby Stream. Eos, Transactions American Geophysical Union 22(3): 734-38. https://doi.org/10.1029/TR022i003p00734.
glover(t = 1.5777e8, d = 1000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 1 glover(t = 1.5777e8, d = 5000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 2 glover(t = 1.5777e8, d = 10000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 3
glover(t = 1.5777e8, d = 1000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 1 glover(t = 1.5777e8, d = 5000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 2 glover(t = 1.5777e8, d = 10000, S = 0.2, Tr = 0.1) # Glover & Balmer (1954) Table 1, Well 3
Streamflow depletion in partially penetrating stream with semipervious streambed.
hantush(t, d, S, Kh, b, Kriv, briv, prec = 80)
hantush(t, d, S, Kh, b, Kriv, briv, prec = 80)
t |
times you want output for [T] |
d |
distance from well to stream [L] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Kh |
aquifer horizontal hydraulic conductivity [L/T] |
b |
aquifer saturated thickness [L] |
Kriv |
streambed semipervious layer hydraulic conductivity [L/T] |
briv |
streambed semipervious layer thickness [L] |
prec |
precision for |
This function is described in Hantush (1965). As the leakance term (b*Kh/Kriv)
approaches 0 this is equivalent to glover. It contains numerous assumptions:
Horizontal flow >> vertical flow (Dupuit assumptions hold)
Homogeneous, isotropic aquifer
Constant Tr
: Aquifer is confined, or if unconfined change in head is small relative to aquifer thickness
Stream is straight, infinitely long, and remains in hydraulic connection to aquifer
Constant stream stage
No changes in recharge due to pumping
No streambank storage
Constant pumping rate
Aquifer extends to infinity
A numeric of Qf
, streamflow depletion as fraction of pumping rate [-].
If the pumping rate of the well (Qw
; [L3/T]) is known, you can calculate volumetric streamflow depletion [L3/T] as Qf*Qw
Hantush, MS (1965). Wells near Streams with Semipervious Beds. Journal of Geophysical Research 70(12): 2829-38. doi:10.1029/JZ070i012p02829.
hantush(t = 1826, d = 1000, S = 0.2, Kh = 86.4, b = 100, Kriv = 0.0864, briv = 1) Qf <- hantush(t = seq(1, 1826), d = 1000, S = 0.2, Kh = 86.4, b = 100, Kriv = 0.0864, briv = 1) plot(x = seq(1, 1826), y = Qf, type = "l")
hantush(t = 1826, d = 1000, S = 0.2, Kh = 86.4, b = 100, Kriv = 0.0864, briv = 1) Qf <- hantush(t = seq(1, 1826), d = 1000, S = 0.2, Kh = 86.4, b = 100, Kriv = 0.0864, briv = 1) plot(x = seq(1, 1826), y = Qf, type = "l")
Streamflow depletion in partially penetrating stream with semipervious streambed.
hunt(t, d, S, Tr, lmda, lmda_max = Inf, prec = 80)
hunt(t, d, S, Tr, lmda, lmda_max = Inf, prec = 80)
t |
times you want output for [T] |
d |
distance from well to stream [L] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Tr |
aquifer transmissivity [L2/T] |
lmda |
streambed conductance term, lambda [L/T]. Can be estimated with |
lmda_max |
maximum allowed 'lmda' [L/T]. If 'lmda' is too high, exp and erfc calculations in Hunt solution are not computationally possible, so you may need to artifically reduce 'lmda' using this term. |
prec |
precision for |
This function is described in Hunt (1999). When lmda
term gets very large, this is equivalent to glover. It contains numerous assumptions:
Horizontal flow >> vertical flow (Dupuit assumptions hold)
Homogeneous, isotropic aquifer
Constant Tr
: Aquifer is confined, or if unconfined change in head is small relative to aquifer thickness
Stream is straight, infinitely long, and remains in hydraulic connection to aquifer
Constant stream stage
No changes in recharge due to pumping
No streambank storage
Constant pumping rate
Aquifer extends to infinity
A numeric of Qf
, streamflow depletion as fraction of pumping rate [-].
If the pumping rate of the well (Qw
; [L3/T]) is known, you can calculate volumetric streamflow depletion [L3/T] as Qf*Qw
Hunt, B (1999). Unsteady Stream Depletion from Ground Water Pumping. Ground Water 37 (1): 98-102. doi:10.1111/j.1745-6584.1999.tb00962.x.
hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = 864) # ~equal to glover because lmda=Tr hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = 0.864) # less depletion due to lower lmda lmda <- streambed_conductance(w = 10, Kriv = 0.0864, briv = 1) # estimate lmda hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = lmda) Qf <- hunt(t = seq(1, 1826), d = 1000, S = 0.2, Tr = 8640, lmda = 0.864) plot(x = seq(1, 1826), y = Qf, type = "l")
hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = 864) # ~equal to glover because lmda=Tr hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = 0.864) # less depletion due to lower lmda lmda <- streambed_conductance(w = 10, Kriv = 0.0864, briv = 1) # estimate lmda hunt(t = 1826, d = 1000, S = 0.2, Tr = 8640, lmda = lmda) Qf <- hunt(t = seq(1, 1826), d = 1000, S = 0.2, Tr = 8640, lmda = 0.864) plot(x = seq(1, 1826), y = Qf, type = "l")
Calculate the pumping rate at which pumping will induce infiltration from stream.
induce_infiltration_rate(d, Qa)
induce_infiltration_rate(d, Qa)
d |
distance from well to stream [L] |
Qa |
ambient groundwater inflow rate per unit length of stream [L2/T] |
This calculates the critical pumping rate above which induced infiltration due to groundwater pumping will occur, based on the glover model of streamflow depletion. Derived in Wilson (1993) Eq. 5.
Assumptions:
Groundwater flow is perpendicular to stream
Horizontal flow >> vertical flow (Dupuit assumptions hold)
Homogeneous, isotropic aquifer
Constant Tr
: Aquifer is confined, or if unconfined change in head is small relative to aquifer thickness
Stream is straight, infinitely long, and remains in hydraulic connection to aquifer
Constant stream stage
No changes in recharge due to pumping
No streambank storage
Constant pumping rate
Aquifer extends to infinity
Stream fully penetrates through aquifer
No streambed resistance to flow (see hunt or hantush for streambed resistance)
A numeric of Qc
, critical pumping rate above which induced infiltration due to groundwater pumping will occur [L3/T].
Wilson, JL (1993). Induced Infiltration in Aquifers with Ambient Flow. Water Resources Research 29(10): 3503-12. doi:10.1029/93WR01393.
induce_infiltration_rate(d = 100, Qa = 10) induce_infiltration_rate(d = 100, Qa = 50) induce_infiltration_rate(d = 500, Qa = 50)
induce_infiltration_rate(d = 100, Qa = 10) induce_infiltration_rate(d = 100, Qa = 50) induce_infiltration_rate(d = 500, Qa = 50)
Calculate the critical time at which stream transitions from gaining to losing.
induce_infiltration_time(d, S, Tr, Qa, Qw)
induce_infiltration_time(d, S, Tr, Qa, Qw)
d |
distance from well to stream [L] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Tr |
aquifer transmissivity [L2/T] |
Qa |
ambient groundwater inflow rate per unit length of stream [L2/T] |
Qw |
well pumping rate [L3/T] |
This calculates the critical time at which induced infiltration due to groundwater pumping begins, based on the glover model of streamflow depletion. Derived in Chen (2003) Eq. 4.
Assumptions:
Groundwater flow is perpendicular to stream
Horizontal flow >> vertical flow (Dupuit assumptions hold)
Homogeneous, isotropic aquifer
Constant Tr
: Aquifer is confined, or if unconfined change in head is small relative to aquifer thickness
Stream is straight, infinitely long, and remains in hydraulic connection to aquifer
Constant stream stage
No changes in recharge due to pumping
No streambank storage
Constant pumping rate
Aquifer extends to infinity
Stream fully penetrates through aquifer
No streambed resistance to flow (see hunt or hantush for streambed resistance)
A numeric of tc
, the critical time at which induced infiltration begins [T].
Chen, X (2003). Analysis of Pumping-Induced Stream-Aquifer Interactions for Gaining Streams. Journal of Hydrology 275(1): 1-11. doi:10.1016/S0022-1694(02)00320-7
# recreate Figure 2 in Chen (2003) Qa <- c(0.0001, 0.0003, 0.0005, 0.0008, 0.001) tc <- induce_infiltration_time(d = 575, S = 0.2, Tr = 100*15, Qa = Qa, Qw = 2727) plot(x = (pi * Qa * 100 * 15 * 575 / 2727), y = tc, log = "y")
# recreate Figure 2 in Chen (2003) Qa <- c(0.0001, 0.0003, 0.0005, 0.0008, 0.001) tc <- induce_infiltration_time(d = 575, S = 0.2, Tr = 100*15, Qa = Qa, Qw = 2727) plot(x = (pi * Qa * 100 * 15 * 575 / 2727), y = tc, log = "y")
Streamflow depletion for an intermittent pumping schedule using superposition.
intermittent_pumping(t, starts, stops, rates, method = "glover", d, S, Tr, ...)
intermittent_pumping(t, starts, stops, rates, method = "glover", d, S, Tr, ...)
t |
times you want output for [T] |
starts |
vector of times to start pumping [T] (must be same length as stops and rates) |
stops |
vector of times pumping stops [T] (must be same length as starts and rates) |
rates |
vector of pumping rates [L3/T] (must be same length as starts and stops) |
method |
analytical solution to use (options= 'glover', 'hunt'). Defaults to 'glover'. |
d |
distance from well to stream [L] |
S |
aquifer storage coefficient (specific yield if unconfined; storativity if confined) |
Tr |
aquifer transmissivity [L2/T] |
... |
any other inputs required for your |
This function superimposes wells and image wells to calculate a timeseries of streamflow depletion.
Unlike the streamflow depletion models (e.g. glover, hunt) this is not fractional depletion (Qf
)
because there can be different pumping rates at different times.
A numeric of Qs
, streamflow depletion rate [L3/T].
Jenkins, C.T. (1968). Techniques for Computing Rate and Volume of Stream Depletion by Wells. Ground Water 6(2): 37-46. doi:10.1111/j.1745-6584.1968.tb01641.x
Qs <- intermittent_pumping(t = seq(0, 1000, 5), starts = seq(0, 900, 10), stops = seq(9, 909, 10), rates = seq(1, 1000, length.out=91), method = "hunt", d = 100, S = 0.1, Tr = 100, lmda = 10) Qs <- intermittent_pumping(t = seq(0, 1000, 5), starts = seq(0, 900, 10), stops = seq(9, 909, 10), rates = seq(1, 1000, length.out=91), method = "hunt", d = 100, S = 0.1, Tr = 100, lmda = 100000, lmda_max = 10)
Qs <- intermittent_pumping(t = seq(0, 1000, 5), starts = seq(0, 900, 10), stops = seq(9, 909, 10), rates = seq(1, 1000, length.out=91), method = "hunt", d = 100, S = 0.1, Tr = 100, lmda = 10) Qs <- intermittent_pumping(t = seq(0, 1000, 5), starts = seq(0, 900, 10), stops = seq(9, 909, 10), rates = seq(1, 1000, length.out=91), method = "hunt", d = 100, S = 0.1, Tr = 100, lmda = 100000, lmda_max = 10)
Calculate the distance from a well to each reach within a stream network. This function splits a polyline stream network up into a series of evenly spaced points and calculates the distance from each of those points to a well.
prep_reach_dist( wel_lon, wel_lat, stream_sf, reach_id, stream_pt_spacing, nseed = 1 )
prep_reach_dist( wel_lon, wel_lat, stream_sf, reach_id, stream_pt_spacing, nseed = 1 )
wel_lon |
longitude of well |
wel_lat |
latitude of well |
stream_sf |
simple feature collection of stream lines, i.e., loaded from a shapefile using |
reach_id |
string indicating name of column in |
stream_pt_spacing |
distance between points used for sampling each stream reach. The actual distance between points will be close to this (but not necessarily exact) due to sampling rounding error. The finer spacing you use, the more accurate your results will be but the function will run slower and use more memory. |
nseed |
seed for random number generator (this is used to convert stream polylines to points) |
A data frame with four columns:
a grouping variable with the name of each stream reach
distance of a point on that stream reach to the well of interest
latitude of that point
longitude of that point
This data frame can be plugged directly into apportion_inverse, apportion_polygon (if latlon=T
),
or apportion_web
rdll <- prep_reach_dist(wel_lon = 295500, wel_lat = 4783200, stream_sf = stream_lines, reach_id = "reach", stream_pt_spacing = 5) head(rdll)
rdll <- prep_reach_dist(wel_lon = 295500, wel_lat = 4783200, stream_sf = stream_lines, reach_id = "reach", stream_pt_spacing = 5) head(rdll)
Stream network for Sixmile Creek Watershed, Wisconsin, USA. Extracted from US NHDPlus v2.1 national seamless dataset.
stream_lines
stream_lines
A simple feature LINESTRONG collection with 49 rows and 2 variables:
identifier code for each stream reach
name of stream for each stream reach (Sixmile Creek or Dorn Creek)
...
http://www.horizon-systems.com/NHDPlusData/NHDPlusV21/Data/NationalData/
Estimate streambed conductance.
streambed_conductance(w, Kriv, briv)
streambed_conductance(w, Kriv, briv)
w |
stream width [L] |
Kriv |
streambed semipervious layer hydraulic conductivity [L/T].
Reeves et al. (2009) estimate this as the vertical hydraulic
conductivity of the aquifer ( |
briv |
streambed semipervious layer thickness [L] Reeves et al. (2009) estimate this as the vertical distance from the streambed to the top of the well screen, or the length of the well screen, whichever is greater [L]. |
A numeric of lmda
, the streambed conductance term [L/T]
Reeves, HW, DA Hamilton, PW Seelbach, and AJ Asher (2009). Ground-Water-Withdrawal Component of the Michigan Water-Withdrawal Screening Tool. USGS Scientific Investigations Report, Reston VA. https://pubs.usgs.gov/sir/2009/5003/.
streambed_conductance(w = 10, Kriv = 0.0864, briv = 1) streambed_conductance(w = 5, Kriv = 0.0864, briv = 1) streambed_conductance(w = 10, Kriv = 0.864, briv = 1) streambed_conductance(w = 10, Kriv = 0.0864, briv = 0.1)
streambed_conductance(w = 10, Kriv = 0.0864, briv = 1) streambed_conductance(w = 5, Kriv = 0.0864, briv = 1) streambed_conductance(w = 10, Kriv = 0.864, briv = 1) streambed_conductance(w = 10, Kriv = 0.0864, briv = 0.1)