Nothing
## ----set-up, include = FALSE--------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5,
fig.align = "default"
)
## ----aq-params----------------------------------------------------------------
library(raem)
k = 10 # hydraulic conductivity, m/d
top = 10 # aquifer top elevation, m
base = -15 # aquifer bottom elevation, m
n = 0.2 # aquifer effective porosity, -
## ----well---------------------------------------------------------------------
# create well elements
w1 = well(x = 200, y = 0, Q = 300)
w2 = well(x = -200, y = 0, Q = 1000)
# create the model. This automatically solves the system of equations.
m = aem(k = k, top = top, base = base, n = n, w1, w2)
# set up the contouring grid
xg = seq(-600, 600, length = 100)
yg = seq(-300, 300, length = 100)
# plot head contours and streamlines
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20, drawlabels = FALSE)
contours(m, xg, yg, variable = 'streamfunction', col = 'orange',
nlevels = 20, drawlabels = TRUE, add = TRUE)
## ----headwell-----------------------------------------------------------------
# create head-specified wells
hw1 = headwell(xw = 300, yw = 100, hc = 6)
hw2 = headwell(xw = -200, yw = -100, xc = 0, yc = 0, hc = 7)
# create reference point element
rf = constant(x = -1000, y = 0, h = 8)
# create and solve model
m = aem(k, top, base, n, hw1, hw2, rf)
# plot head contours
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
## ----headwell-Q---------------------------------------------------------------
# computed discharge of hw1
m$elements$hw1$parameter
# computed discharge of hw2
element_discharge(m, name = 'hw2')
## ----line-sink----------------------------------------------------------------
# create line-sink
ls = linesink(x0 = -200, y0 = 200, x1 = 200, y1 = -200, sigma = 5)
# create and solve the model
m = aem(k, top, base, n, ls)
# plot head contours and line-sink geometry
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20, drawlabels = FALSE)
plot(m, add = TRUE)
## ----headlinesink-------------------------------------------------------------
el = list(rf = rf) # list of elements
nls = 10 # number of line-sinks
xls = seq(-700, 700, length = nls + 1) # x-coordinates of line-sinks
yls = c(rep(c(-25, 25), nls), -25) # y-coordinates of line-sinks
hc = 7 # stream level, m
res = 2 # hydraulic resistance of streambed, days
width = 3 # stream width, m
# create head-specified line-sinks
for(i in seq(nls)) {
hl = headlinesink(x0 = xls[i],
x1 = xls[i + 1],
y0 = yls[i],
y1 = yls[i + 1],
hc = hc,
resistance = res,
width = width)
el[[paste0('hls_', i)]] = hl
}
# create and solve model
m = aem(k, top, base, n, el, verbose = TRUE)
# plot head contours
contours(m, xg, yg, col = 'dodgerblue', nlevels = 10)
plot(m, add = TRUE)
## ----area-sink----------------------------------------------------------------
# add area-sink to list of elements
el$as = areasink(x = 0, y = 0, N = 0.001, R = 1000)
# create and solve the model
m = aem(k, top, base, n, el)
# plot head contours
contours(m, xg, yg, col = 'dodgerblue', nlevels = 10)
plot(m, add = TRUE)
## ----headareasink-------------------------------------------------------------
# create head-specified area-sink
has = headareasink(x = 0,
y = 200,
h = 5,
resistance = 1,
R = 100)
# create and solve model
m = aem(k, top, base, n, w1, w2, rf, has)
# plot head contours and area-sink geometry
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
plot(has, add = TRUE, col = adjustcolor('grey50', alpha = 0.5))
## ----uniformflow--------------------------------------------------------------
# create uniform flow element
uf = uniformflow(TR = k * (top - base), gradient = 0.001, angle = -30)
# create model
m = aem(k, top, base, n, uf, rf)
# plot head contours
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
# add stream lines
contours(m, xg, yg, variable = 'streamfunction',
col = 'orange', nlevels = 20, add = TRUE)
## ----example-model, fig.show="hold"-------------------------------------------
# aquifer parameters ----
k = 15 # hydraulic conductivity, m/d
top = 20 # aquifer top elevation, m
base = -10 # aquifer bottom elevation, m
n = 0.2 # aquifer effective porosity, -
N = 0.2 / 365 # areal recharge rate, m/d
res = 2 # streambed resistance, d
width = 5 # stream width, m
hr = 17.5 # stream level at head of stream, m
hrg = 0.0005 # gradient of stream level, -
href = 18.5 # head at reference point, m
# stream coordinates and water level
yriv = c(seq(-1000, -300, by = 200),
seq(-200, 200, by = 20),
seq(300, 1000, by = 200))
hriv = hr - (yriv - yriv[1]) * hrg
nls = length(yriv)
# create elements ----
wA = well(x = -300, y = 0, Q = 550)
wB = well(x = -500, y = -300, Q = 450)
as = areasink(x = -50, y = 0, N = N, R = 2000)
rf = constant(x = 1000, y = -1000, h = 18.5)
# create model ----
m = aem(k, top, base, n) |> # first, create model with no elements
add_element(wA) |> # add elements
add_element(wB) |>
add_element(as) |>
add_element(rf)
# add head-specified line-sinks in a loop
for(i in seq(nls - 1)) {
hls = headlinesink(x0 = 0,
x1 = 0,
y0 = yriv[i],
y1 = yriv[i + 1],
h = hriv[i],
resistance = res,
width = width
)
m = add_element(m, hls, name = paste('stream', i, sep = '_'))
}
# solve
m = solve(m)
# view head contours ----
xg = seq(-800, 300, length = 100)
yg = seq(-600, 300, length = 100)
contours(m, xg, yg, col = 'dodgerblue', levels = seq(16, 18.5, 0.1), labcex = 0.8,
xlab = 'x (m)', ylab = 'y (m)')
plot(m, add = TRUE)
polygon(x = c(-500, 50, 50, -500), y = c(-200, -200, 150, 150), border = 'forestgreen')
grid() # add gridlines to plot
## ----fig-inset-well-----------------------------------------------------------
# view inset near well A
xg = seq(-500, 50, length = 100)
yg = seq(-200, 150, length = 100)
contours(m, xg, yg, col = 'dodgerblue', levels = seq(16, 18, 0.05), labcex = 0.8,
xlab = 'x (m)', ylab = 'y (m)')
grid()
# plot control points of line-sinks
for(i in m$elements) {
if(inherits(i, 'linesink')) {
plot(i, add = TRUE, use.widths = FALSE)
points(i$xc, i$yc, pch = 16, cex = 0.8)
}
}
## ----heads--------------------------------------------------------------------
heads(m, x = c(-350, -200), y = -100)
# as a grid
heads(m, x = seq(-500, -100, length = 8), y = seq(-200, 100, 60), as.grid = TRUE)
## ----cross-section-plot, fig.height=3, out.width='75%', fig.align='center'----
xprofile = seq(-800, 400, length = 1000)
hprofile = heads(m, x = xprofile, y = -100)
plot(xprofile, hprofile, type = 'l', xlab = 'x (m)', ylab = 'head (m)')
## ----discharge, warning=TRUE--------------------------------------------------
discharge(m, x = c(-350, -200), y = -100, z = 15)
# NA's for z-component
discharge(m, x = c(-350, -200), y = -100, z = top)
# as.grid
str(discharge(m,
x = seq(-350, -200, length = 5),
y = seq(-200, -100, length = 4),
z = c(10, 15, length = 3),
as.grid = TRUE))
# magnitude
discharge(m, x = c(-350, -200), y = -100, z = 15, magnitude = TRUE)
## ----tracelines---------------------------------------------------------------
# calculate particle traces
paths = tracelines(m,
x0 = -600,
y0 = seq(-200, 200, 50),
z0 = top,
times = seq(0, 5 * 365, 365 / 10)) # 10 steps per year for 5 years
# plot head contours and element geometries around well A
xg = seq(-600, 100, length = 100)
yg = seq(-200, 200, length = 100)
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
plot(m, add = TRUE)
# add tracelines to plot
plot(paths, add = TRUE, col = 'orange')
# compute and plot endpoints
endp = endpoints(paths)
points(endp[,c('x', 'y')])
## ----backward-tracking--------------------------------------------------------
# compute backward particle tracking with retardation
backward = tracelines(m,
x0 = -250,
y0 = -50,
z = 10,
forward = FALSE,
R = 1.5,
times = seq(0, 5 * 365, 365 / 10))
# plot the head contours and element geometries around well A
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
plot(m, add = TRUE)
# plot backward particle trace with a marker every 1.5 years
plot(backward, col = 'forestgreen', add = TRUE, marker = 1.5 * 365)
## ----capzone------------------------------------------------------------------
# 5-year capture zone of well A
cpA_5 = capzone(m, wA, time = 5 * 365, npar = 10)
# plot head contours and element geometries
xg = seq(-800, 300, length = 100)
yg = seq(-600, 300, length = 100)
contours(m, xg, yg, col = 'dodgerblue', nlevels = 20)
plot(m, add = TRUE)
# plot capture zone output
plot(cpA_5, add = TRUE)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.