Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Copyright
by
Travis Eric Swanson
2010
The Thesis Committee for Travis Eric Swanson Certifies that this is the approved version of the following thesis:
HEAT TRANSPORT AND TRACING WITHIN THE HYPORHEIC
ZONE OF A POOL-RIFFLE-POOL SEQUENCE
APPROVED BY
SUPERVISING COMMITTEE:
Meinhard Bayani Cardenas, Supervisor Phillip Bennett John Sharp Jr.
HEAT TRANSPORT AND TRACING WITHIN THE HYPORHEIC
ZONE OF A POOL-RIFFLE-POOL SEQUENCE
by
Travis Eric Swanson, BSGeoSci
Thesis
Presented to the Faculty of the Graduate School of
The University of Texas at Austin
in Partial Fulfillment
of the Requirements
for the Degree of
Master of Science in Geological Sciences
The University of Texas at Austin
May 2010
Dedication
This thesis is dedicated to my supportive family: Eric and Nancy Swanson as well as
Jenny and Christopher Deppe.
v
Acknowledgements
I owe a deep thanks to Bayani Cardenas for support and encouragement. I also thank Bob
Parmenter of the Valles Caldera National Preserve for access to the field site and
facilities. Audrey Sawyer, John Nowinski, Jenna Harlow and Anne Dunckel assisted with
field work. This work was partly supported by the American Chemical Society-Petroleum
Research Fund (46655-G8) and by a Geological Society of America student grant to
Travis Eric Swanson.
May 2010
vi
Abstract
HEAT TRANSPORT AND TRACING WITHIN THE HYPORHEIC
ZONE OF A POOL-RIFFLE-POOL SEQUENCE
Travis Eric Swanson, MS GeoSci
The University of Texas at Austin, 2010
Supervisor: Meinhard Bayani Cardenas
Hyporheic water is thought to infiltrate at the head of a riffle which in turn is
complemented by upwelling back to the stream at the tail of the riffle in a pool-riffle-pool
(PRP) sequence. Heat tracing is a potentially useful method to characterize these
hyporheic flow paths and quantify associated fluxes. Temperature was monitored within
a PRP sequence for several days. Temperature in the hyporheic zone reflected the diel
temperature change in the river but not uniformly. The observed thermal pattern
exhibited deeper penetration of thermal oscillations below the head pool and shallower
penetration below the tail pool. This pattern is consistent with the conceptual model of
hyporheic exchange over a PRP sequence. One-dimensional analytical heat transport
models were used at different points below the PRP sequence to estimate distributed
vii
vertical fluid fluxes. The calculated fluxes exhibit a trend that follows the expected
distribution for a PRP sequence but modified for a losing stream. Deviation of both
magnitude and distribution of fluxes from the conceptual ‘downwelling-to-upwelling’
model is partly due to the dominantly losing conditions at the study site but the trends are
consistent with a losing stream undergoing hyporheic exchange. Violation of the
assumptions in the analytical models most likely adds error to flux estimates. For this
study, flux estimation methods using a temperature time series amplitude analysis more
closely matched field measurements than phase methods.
viii
Table of Contents
LIST OF TABLES IX
LIST OF FIGURES X
LIST OF FIGURES X
CHAPTER 1: INTRODUCTION 1 1.1. Overview of the Hyporheic Zone ..........................................................1 1.2. Overview of Hyporheic Heat Tracing Studies.......................................2 1.3. Research Motivations...............................................................................6 1.4. Study Site ...............................................................................................6
CHAPTER 2: METHODS 13 2.1. Piezometer installation and temperature monitoring .............................13 2.2. Amplitude and phase analysis................................................................15 2.3. Calculation of vertical fluid fluxes: .......................................................16 2.4. Ex-Stream Program Structure ................................................................22
CHAPTER 3: RESULTS 27 3.1. Thermal regime......................................................................................27 3.2. Thermal properties of Jaramillo Creek Sediments.................................35 3.3. Hydraulic regime ...................................................................................37 3.4. Discussion ..............................................................................................47
CHAPTER 4: CONCLUSIONS 53
APPENDIX A: GRAIN SIZE DATA 55
APPENDIX B: EX-STREAM SOURCE CODE 56
REFERENCES: 91
VITA 95
ix
List of Tables
TABLE 1. PARAMETERS USED FOR VERTICAL FLUID FLUX ESTIMATIONS 21
x
List of Figures
FIGURE 1. CONCEPTUAL MODEL OF HYPORHEIC EXCHANGE 4
FIGURE 2. LOCATION AND MAP 9
FIGURE 3. MEANDER PIEZOMETERS 10
FIGURE 4. WATER TABLE MAP. 11
FIGURE 5. PHOTOGRAPH OF STUDY REACH. 12
FIGURE 6. VERTICAL SECTIONS OF JARAMILLO CREEK 14
FIGURE 7. EX-STREAM’S GUI. 23
FIGURE 8. EX-STREAM EXECUTION FLOW CHART 26
FIGURE 9. TIME-SERIES OF TEMPERATURE 28
FIGURE 10. 2008 TEMPERATURE MAPS FOR JARAMILLO CREEK 29
FIGURE 11. 2009 TEMPERATURE MAPS FOR JARAMILLO CREEK 31
FIGURE 12. AR AND DP MAPS. 34
FIGURE 13. THERMAL CONDUCTIVITY 36
FIGURE 14. 2008 FLUID FLUXES THROUGH THE SWI 38
FIGURE 15. 2009 FLUID FLUXES THROUGH THE SWI 39
FIGURE 16. 2008 MAP OF VERTICAL FLUXES 42
FIGURE 17. 2009 MAP OF VERTICAL FLUXES 43
FIGURE 18. VERTICAL FLUX TRENDS 45
1
Chapter 1: Introduction
1.1. Overview of the Hyporheic Zone
Streams are dynamically linked to their peripheral sediments and underlying
aquifers. Therefore, much attention has been given to the inter-related biogeochemical
and thermal budgets of both systems especially where these are strongly coupled at the
streambed (Evans et al. 1998; Mcclain et al. 2003). Streambed sediments provide a
mixing zone that is important in the understanding of nutrient cycling and spiraling (
Findlay 1995; Battin et al. 2008; Mulholland et al. 2008), metal cycles (Harvey and
Fuller 1998; Nimick et al. 2003), streambed temperature distributions (Cardenas and
Wilson 2007b-d; Hester et al. 2009), residence time distributions ( Worman et al. 2007;
Sawyer and Cardenas 2009), and transient storage of solutes (Harvey and Bencala 1993;
Valett et al. 1996; Gooseff et al. 2004). Solute and energy exchange is typically forced by
fluid flow, which is called hyporheic exchange for the near-stream zone. Streambed
topography-driven hyporheic exchange has been studied for ripples (Elliott and Brooks
1997), dunes (Cardenas and Wilson 2007a), and pool-riffle-pool (PRP) sequences
(Harvey and Bencala 1993). One of the underlying goals of most studies of near-stream
processes is therefore to identify fluid flow paths and quantify fluxes since hyporheic
water is the conveyor of all water-borne entities and the mediator of biogeochemical and
ecological functioning (Bencala 2000).
2
1.2. Overview of Hyporheic Heat Tracing Studies
Field studies seldom address hyporheic flow associated heat transport, especially
under dynamic conditions. While there have been many studies based on synoptic
observations both in two dimensions (2D) along the sediment water interface (SWI)
(Conant 2004) and in three dimensions (3D) within the sediment (White et al. 1987;
White 1993), dynamic studies which illustrate hyporheic heat transport processes within
the sediment are rare. Recently, Hester et al (2009) illustrated how a weir induces
hyporheic flow underneath it thereby inducing heat advection. They postulated but did
not find in their given field scenario that hyporheic mixing of warm river water with
cooler groundwater has a measurable effect on temperature of the surface water. Fanelli
and Lautz (2008) deployed a 2D grid of thermistors at similar depths in the bed upstream
and downstream of a man-made log dam, not very different to that analyzed by Hester et
al (2009). They found that there are subtle differences in thermal signals within the
subsurface upstream and downstream of the dam and attribute this to hyporheic transport
induced by both the dam and the streambed topography that developed around it. While
these two studies illustrate the importance of heat transport in the hyporheic zone, they
were conducted around man-made structures although these may be used as analogs for
natural structures (e.g., log jams and beaver dams). However, hyporheic exchange and
associated heat transport due to more ubiquitous natural features such as bedforms, bars,
and larger basic geomorphic elements such as pool-riffle or pool-step sequences have yet
to be systematically studied. In fact, White and others (1987) earlier mapped 3D
snapshots of hyporheic temperatures within the streambed and also in detailed 2D
3
sections across PRP sections. Their results suggest warm river water (warm relative to
groundwater which is thought to follow mean annual air temperature) infiltrating at the
heads of riffles. Unfortunately, their static vertical temperature cross-sections were
presented referenced to depth from the irregular topography of the SWI, not by
referencing to a fixed datum, thereby skewing their actual temperature distributions (see
their figs. 1, 5, 6). Nevertheless, their data suggest thermal patterns that might be
expected when hyporheic water enters the sediment at the head of a riffle and returns to
the river at the tail (Fig. 1).
4
FIGURE 1. CONCEPTUAL MODEL OF HYPORHEIC EXCHANGE through a PRP sequence in a neutral stream. (Lower), corresponding vertical fluid flux distribution for a gaining, neutral and losing stream scenarios (Upper).
5
This conceptual model of hyporheic exchange over a pool riffle pool can be
extended to include scenarios when the river is gaining water from the underlying aquifer
(gaining) or is recharging the aquifer (losing) (Fig. 1). Diel warming and cooling of such
hyporheic zones needs to be studied further since these may be driving nutrient and metal
cycles (Nimick et al. 2003). This missing information is critical to understanding
thermally-sensitive biogeochemical and ecological processes in aquatic systems.
The quantification of heat transport and fluid fluxes are intertwined in hyporheic
zones. Determining the fluid flux and the corresponding flux of solutes through the SWI
seems a straightforward endeavor but in actuality many field approaches present different
challenges. Vertical hydraulic head gradients (VHG) in tandem with hydraulic
conductivity measurements, seepage meter measurements, differential gauging and tracer
tests are all useful ways to describe the fluid flux through the SWI. However, VHG
measurements need to be carefully done due to small head differences (Kennedy et al.
2007) and several measurements are needed due to inherent heterogeneity of streambeds
(Cardenas and Zlotnik 2003b). Seepage meters deployed in flowing surface water, such
as a river, may be affected by dynamic pressures and may also be inducing hyporheic
flow around the meter (Rosenberry 2008). Differential gauging and in-stream tracer test
can be cumbersome to implement and can only give reach-averaged values with large
error and uncertainty.
One alternative is to use heat as a tracer for vertical fluid fluxes (Constantz 2008).
Recently, several one-dimensional analytical heat transport models were applied to
streambeds with the specific purpose of calculating vertical fluid fluxes through the SWI
(Hatch et al. 2006; Keery et al. 2007; Schmidt et al. 2007). The Hatch (2006) and Keery
6
(2007) methods use periodic (diel) temperature fluctuations within the hyporheic zone to
trace the vertical flux of water and are based on the analytical solution by Stallman
(1965). The Schmidt method uses a quasi-steady-state thermal profile to calculate a
vertical fluid flux (Schmidt et al. 2007).
Although implementing a low-cost heat tracing study is straightforward, data
interpretation may be obfuscated by the multi-dimensional nature of ubiquitous hyporheic
exchange. Since the accuracy of the Hatch and Keery methods depend on the strength
and clarity of a diel signal, they would typically work better when temperature
measurements are conducted closer to the SWI. Unfortunately, hyporheic exchange and
associated heat advection also increases with proximity to the SWI (Cardenas and Wilson
2007b-d).
1.3. Research Motivations
The goal of this study is two-fold: characterize the dynamic thermal regime of a
hyporheic zone underlying a PRP sequence and test the prevailing conceptual model for
hyporheic flow paths; and assess the ability of analytical heat transport models for
quantifying vertical fluid fluxes.
1.4. Study Site
The Valles Caldera was formed approximately 1.2 million years ago (Mya) when a
large body of volatile rich granitic magma rose from depth. Eventually the rock overlying
the magma chamber broke along a “ring fracture” (Treiman, 2003). The resulting caldera
style eruption was catastrophic as volitiles within the magma expelled great volumes of
7
volcanic ash, forming the Bandiler Tuff (1.14 Mya). After the overlying rock had come to
rest atop the depleted magma chamber steep walls remained along the inside of the ring
fracture other smaller eruptive events occurred inside of the caldera walls. The resulting
depression filled with water to a depth of approximately 300 meters during the ongoing
post-caldera eruptions. This lake was drained approximately 0.5 Mya when the Valles
Caldera rim broke (Treiman, 2003). The area is currently hydrothermally active with
numerous features including reported borehole temperatures of up to 300°C (Goff, 2002).
The stratigraphy under Valle Grande was sampled by the DOSECC group (Drilling,
Observation and Sampling of the Earths Continental Crust). They successfully drilled and
sampled to a depth of 83.1 meters at a location close in proximity to our study area in
Valle Grande. The drilling report consisted of the following log (from surface to depth):
1m of soil; 3.3m of terrace gravel; 71.9m of lacustrine deposits; 5.9m of volcaniclastic
sand, silt, gravel and clay (Goff, 2010).
The study was conducted at Jaramillo Creek which is located within Valle Grande of
the Valles Caldera National Preserve in northern New Mexico (Fig. 2). The site was
selected due to the presence of large diel temperature changes (5-10°C) within the top
five centimeters of the highly permeable streambed sediments, ease of piezometer
installation by hand, the presence of repeated PRP streambed topography, and the
presence of a previously installed piezometer network in the adjacent meander (Figs.
3,4). Jaramillo Creek is sinuous, with steep stream banks stabilized by dense
communities of grasses (Fig. 5). These grasses most likely transpire water directly from
the shallow water table, but any such groundwater withdrawal would be distributed
8
roughly symmetrically about the stream. Water table elevation data from the piezometer
network in the adjacent meander (Fig. 4) suggest that the water from Jaramillo Creek
flows into the meander. Stream gauging above and below the study reach using an
acoustic Doppler velocimeter (Sontek Flowtracker) indicated discharges of 0.042 m3s-1
above and 0.029 m3s-1 below the study reach; Jaramillo Creek was generally losing over
the reach right before temperature data were obtained. Vertical hydraulic gradients taken
from one piezometer screened within the streambed and in one screened through the free
surface of the river in conjunction with the differential stream gauging results verify the
losing conditions. The studied river section whose depth ranges from about 10 to 50 cm is
straight and contains a single PRP sequence (Figs. 2,5). The streambed is mostly gravel
and course sand. The median grain diameter (D50) is approximately 11mm and the 10%
finer diameter (D10) is 2mm. The sediments are composed mainly of larger (>10mm)
clasts of moderately to densely welded volcanic tuff with numerous quartz crystals,
smaller (~4-1.4mm) clasts of quartz crystals and volcanic tuff and very little silt and clay
(see Appendix A). The observed porosity of the streambed sediments was visually
estimated to be approximately 0.3 (30%). The sediments appeared to be relatively
uniformly distributed across the instrumented sections of Jaramillo Creek for both study
periods. Pneumatic instream slug tests (Cardenas and Zlotnik 2003a) resulted in
hydraulic conductivity typical of these materials (10-5-10-4 m s-1) (Table 1). This range of
values is also consistent with hydraulic conductivity estimates obtained from grain size
information, porosity estimates, and empirical relationships (Hazen, 1911).
9
FIGURE 2. LOCATION AND MAP of the study reach of Jaramillo Creek, New Mexico.
10
FIGURE 3. MEANDER PIEZOMETERS were installed in the meander to the West of Jaramillo Creek. All meander piezometers were screened through the water table.
3.6674 3.66753.6676 3.66773.6678 3.6679 3.668 3.66813.6682 3.6683
x 105
3.9712
3.9712
3.9712
3.9712
3.9712
3.9712
3.9712
3.9712
3.9712x 10
6
Easting (m)
Nor
thin
g (m
)
Jaramillo CreekMeander Piezometers
11
FIGURE 4. WATER TABLE MAP. The grey asterisks are locations of piezometers installed within the meander and screened through the water table interface. Jaramillo Creek flows along the left and lower boundary of the linearly interpolated water table. Water flows generally in a direction that is inbetween the direction of the stream (North to South) and into the meander (West to East).
0 5 10 15 20 250
5
10
15
20
25
30
35
40
45
Relative Easting (m)
Rel
ativ
e N
orth
ing
(m)
0.1
0.20.30.4
Watertable ElevationPiezometer Water table Elevation (m)
12
FIGURE 5. PHOTOGRAPH OF STUDY REACH. Installation of thermistors in piezometers (white vertical PVC pipes). Field assistants Anne Dunkle (left) and John Nowinski (right).
13
Chapter 2: Methods
2.1. Piezometer installation and temperature monitoring
In August 2008, Jaramillo Creek was instrumented with 13 piezometers
constructed from 1-inch (2.54 cm) outside diameter schedule-40 PVC (Fig. 5,6a). Each
piezometer was screened only below the SWI and cased above. Each piezometer
contained a vertical array of four HOBO TMC thermistors located 5, 15, 25, and 35 cm
below the SWI. These thermistors, when connected to the four channel HOBO U12
(outdoor) data logger, have an accuracy of ±0.25°C and a resolution of 0.03°C. The U12
recorded temperatures every 10 minutes. This set-up is cost effective and has comparable
accuracy to the more popular iButtons (Conant 2004; Fanelli and Lautz 2008; Hester et
al. 2009).
The following June and a portion of July (2009) a similar transect was deployed at
the same site but with twelve piezometers (Fig. 6b). Piezometers in the 2009 deployment
were installed deeper to investigate fluxes farther underneath the PRP sequence. Each
piezometer was driven into the streambed by hand with a post-driver until refusal. Four
thermistors were deployed in each piezometer starting at the bottom of the piezometer
and spaced upwards uniformly every 10 cm. Piezometer and streambed elevation was
surveyed using a Sokkia Total Station referenced from an arbitrary local datum.
Streambed bulk thermal properties (specific heat and thermal conductivity) were
measured at the site using grab samples with a Decagon Devices KD2 Pro probe.
14
FIGURE 6. VERTICAL SECTIONS OF JARAMILLO CREEK showing the locations of temperature sensors (A) 2008, B) 2009). The solid black line is the sediment water interface (SWI) and the grey asterisks are sensor locations within the subsurface. Jaramillo Creek flows from left to right.
15
2.2. Amplitude and phase analysis
The Amplitude ratio (Ar) and Difference in phase (Dp) parameters are extracted
from the temperature data at locations i by determining amplitude and phase for each
observation point in the temperature sensor array with a nonlinear least squares fiting of
three parameters to a single period of data with the model equation:
iiii CBP
tAtzzT +⎟⎠⎞
⎜⎝⎛ +==
π2sin),(
Where:
Ai is the amplitude of the diurnal oscillation [°C] Bi is the phase (sec), and Ci is
the average temperature [°C] over the period of analysis P (=86400 s).
Ar is then computed as:
i
ir Amplitude
AmplitudeARatioAmplitude 1)( +=
Where:
Amplitudei+1 and Amplitudei are the fitted amplitude parameters from the
nonlinear least squares fit. Amplitude Ratio (Ar) has a magnitude varying from 0 to 1 and
is dimensionless.
Dp is computed as:
iip PhasePhaseDDifferencePhase −= +1)(
16
Where:
Phasei+1 and Phasei are the fitted phase angle parameters from the nonlinear least
squares fit. Phase Difference has a magnitude from 0 to the period used in the fitting
model and is in congruent units.
Ar and Dp can be used to determine a relative “age” of recently infiltrated
groundwater (eg: Cardenas and Wilson 2007b). If one compares the amplitude and phase
angles of an observation point in the surface water to one within the subsurface recently
infiltrated water will have a large amplitude ratio and small difference in phase. “Older”
water will have small amplitude ratios and large differences in phase. Due to the
periodicity of temperature oscillations, one cannot determine a relative age beyond one
period based on phase.
2.3. Calculation of vertical fluid fluxes:
Two very similar approaches, Hatch (2006) and Keery (2007), were used to
analyze the temperature data obtained from both field campaigns. These one dimensional
models (as well as those of Bredehoeft and Papaopulos (1965) and Schmidt et al. (2007),
also one dimensional) were implemented in a MATLAB program called ‘Ex-Stream’
developed for this study. The program processes diel temperature time series along
vertical profiles in streambeds and calculates vertical fluid fluxes from any or all of the
aforementioned models. Both the Hatch and Keery method utilize time series analysis
methods derived from the analytical solution of Stallman (1965). The Stallman analytical
solution describes transient temperature along a one-dimensional half-space with a time-
17
periodic temperature boundary condition at the origin. The half-space can be
conceptualized for the purposes of this study as the sediments underlying the surface
water. The origin of the half-space is the SWI where the time-periodic boundary
condition is imposed. Diel temperature changes along the SWI create thermal fronts as
water and its associated heat are advected through the subsurface. Physical assumptions
included in this model are mentioned in detail by Stallman (1965). Both the Hatch and
Keery methods calculate fluxes based on the analytical solution using ratios of amplitude
or difference in phase from two points along the half-space (in this case the depth from
the SWI). These two methods require at least one full period (approximately 24 hours) of
temperature data to calculate a streambed flux, with the flux assumed to be constant
throughout the (diel) period.
The Hatch method independently utilizes the ratio of amplitude (Ar) and
difference in phase (Dp) of periodic temperature signals between two observation points.
The thermal front velocity based on the amplitude ratio (VAr) [m s-1] is calculated as
follows:
2
8
ln22
2/124
Are
Ar
re
Ar
VP
VA
zV
−⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛+
+Δ
=
πκ
κ
(1)
where Δz is vertical sensor spacing [m], Ar is the ratio of the amplitudes of the
temperature time series of the deeper sensor divided by that of the shallower sensor [-],
and P is the oscillation period (=86400 s). The effective thermal diffusivity, κe [m2s-1], is
given by:
18
fe
e Vcc
βρλ
ρλ
κ +== 0
(2)
where λe is the effective thermal conductivity [W m-1 °C-1], ρ is the bulk density of the
saturated sediment system [kg m-3], c is the bulk heat capacity of the saturated sediment
system [J kg-1 °C-1], λ0 is the baseline thermal conductivity [W m-1 °C-1], and β is the
thermal dispersivity [m]. Vf is the fluid velocity [m s-1]. The fluid velocity from the Ar
method, Vf,Ar [m s-1], is related to the thermal front velocity by:
γArArf VV =, (3)
where:
ff cc
ρργ =
(4)
where ρf is the density of the fluid [kg m-3] and cf is the heat capacity of the fluid [J kg-1
°C-1].
The thermal front velocity based on the phase difference (VDp ) [m s-1] is
calculated as follows:
22/124 4
28
⎟⎟⎠
⎞⎜⎜⎝
⎛Δ
−⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛+=
zPD
PVV epe
DpDp
πκπκ (5)
The fluid velocity Vf,Dp [m s-1] is related to the thermal front velocity by:
γDpDpf VV =, (6)
The Hatch method does not explicitly state the vertical flux as a function of independent
variables (Eqs. 1 and 5 are implicit). Therefore an iterative solver must be used to
calculate a flux using Ar or Dp.
19
The Keery method is conceptually similar to the Hatch method but only slightly
different as thermo-mechanical dispersion (last term in right-hand side of Eq. 2) is not
considered. This assumption allows for explicit calculation of the vertical flux as a
function of independent variables. Therefore, implementing the Keery method is
somewhat more straightforward than the Hatch method. To solve for fluid flux (q) using
Keery’s amplitude ratio method, one must find the real roots of a third-order polynomial:
( ) ( ) ( ) ( )0lnln2
2ln5
4ln 423
22
33
=⎟⎠⎞
⎜⎝⎛
Δ−⎟⎟
⎠
⎞⎜⎜⎝
⎛+⎟
⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
Δ+⎟
⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
Δ+⎟⎟
⎠
⎞⎜⎜⎝
⎛Δ z
APcq
zAHq
zAHq
zAH r
e
rrr
λπρ
(7)
where:
e
ff cH
λρ
= (8)
In the event that there is more than one real root, the method becomes less intuitive
(Keery et al. 2007). Calculating q from Dp using the Keery method is simpler via:
224
⎟⎟⎠
⎞⎜⎜⎝
⎛
Δ+⎟
⎟⎠
⎞⎜⎜⎝
⎛ Δ=
ff
ep
ffp zcPD
cDzcq
ρλπ
ρρ
(9)
The Ar and Dp parameters are extracted from the temperature data at locations i by
determining amplitude and phase for each location with a nonlinear least squares fit to the
data with the model equation:
iiii CBP
tAtzzT +⎟⎠⎞
⎜⎝⎛ +==
π2sin),( (10)
where Ai is the amplitude of the diel oscillation [°C], Bi is the phase [sec], and Ci
is the average temperature [°C] over the period of analysis P (=86400 s). Parameters used
20
for flux estimation using the two approaches are listed in Table 1; some parameters were
measured while some were estimated or taken from the literature.
21
Parameter Units Symbol Value
Thermal conductivity* W (m °C)-1 λ 1.233
Thermal dispersivity m β 4.7×10-7 Thermal diffusivity* m2 sec-1 κe defined by (2) Oscillation period min P 1440 Fluid density kg. m-3 ρf 1000 Porosity - θ 0.3 Fluid specific heat J (kg. °C)-1 Cf 4186 Bulk specific heat J (kg. °C) -1 Cs 3097 Grain density kg. m-3 ρs 2650 Hydraulic conductivity* m s-1 Κ 3.2×10-5
Table 1. Parameters used for vertical fluid flux estimations. Measured parameters indicated by (*).
22
2.4. Ex-Stream Program Structure
Ex-Stream is a suite of Matlab scripts, data files, and figures that were developed
using Matlab7.6.0. Some of these scripts can utilize the Curve fitting toolbox 1.2.1,
although this software package is not required to run Ex-Stream. Ex-Stream features a
graphical user interface that allows for the input of physical parameters, selection various
run-time options, and the selection of a temperature time series file (Fig. 7). Omitting the
Curve fitting toolbox functions which are not required for complete functionality of the
program, the source code of Ex-Stream can be compiled to a produce a stand-alone
executable file. At the time of this study no code has been published that uses existing
analytical heat tracing methods (Bredehoeft et al. 1965, Schmidt et al. 2007, Keery et al.
2007, Hatch et al. 2006).
23
FIGURE 7. EX-STREAM’S GUI. The Graphical User Interface (GUI) of Ex-Stream is a
single window where physical parameters and run-time options are specified. Upon model execution all entered parameters are saved.
24
Ex-Stream is designed around six basic modules: Graphical user interface (GUI)
front end, Schmidt method file, Hatch method files, Keery method file, Bredehoeft
method file, and Fitcurve time series analysis method file. The GUI front end handles
physical parameter and run-time options input and storage. The GUI front end collects all
relevant data, saves it both within the GUI figure file and a comma separated values
(CSV) file, and passes it to selected heat tracing methods. The only exception is
temperature data. Time series of temperature values are read from CSV files by the GUI
front end and temporarily stored and then passed to method modules. When a heat tracing
module is called, the method file is passed all physical parameters, temperature time
series data, and relevant run-time options. Keery et al. and Hatch et al. based method files
require a simple time series analysis of the temperature data. The amplitude and phase of
the diel temperature signal must be found at two observation points separated by some
vertical distance Δz. The amplitude and phase of the diel temperature oscillations are
calculated by the method routine calling the Fitcurve module which performs a simple
non-linear least squares fit of Eq. 10 to temperature data. All original and fitted data are
written in CSV files in a directory within the program directory for reference. Fitcurve
analyzes the temperature time series data one oscillation period at a time. Fitcurve then
returns a value of Ar and Dp for a pair of observation points for each oscillation period to
the method module. For each value of Ar and Dp the Hatch module solves the implicit
equations 1 and 5 using a built-in function within Matlab. The Keery module solves for
the real root of equation 7 and simply evaluates equation 9. Both the Bredehoeft and
Schmidt method modules use period averaged temperature profiles to solve explicit
equations for vertical fluid flux. These calculated vertical fluid fluxes are then returned to
GUI front end module and written to CSV files. If selected, the GUI front end module
25
then graphs the calculated fluid fluxes. The schematic flow chart showing the order of
Ex-Stream’s operations is shown in Figure 8.
26
FIGURE 8. EX-STREAM EXECUTION FLOW CHART. Execution of Ex-Stream is highly customizable based on run-time options selectable using the GUI.
Start
Read input parameters
Load GUI – Saved Options
Use Hatch
Use Keery
Use Schmidt
Manual User Input
Hatch.m
Keery.m
Schmidt.m
CSV file
CSV file
CSV file
END
Use Bredehoeft
Bredehoeft.m CSV file
Graph Output
27
Chapter 3: Results
3.1. Thermal regime
The temperature data are analyzed, visualized, and then animated using
MATLAB. The temperature time series data are first linearly interpolated from a ten-
minute time step to a one-minute time step for animation purposes. To visualize
temperature distributions within the sediment, the data were contoured to a uniform two-
dimensional grid using linear interpolation for each time. Movies with each time step (1
min) of contoured temperature distributions were then made to better examine the
thermal dynamics within the streambed sediment.
Jaramillo Creek warmed up and cooled down from 14.38°C to 19.03°C over a 24
hour period for three days in 2008 and from 10.18°C to 16.70°C in 2009 (Fig. 9). The
river is assumed to be thermally well-mixed due to lack of stagnation zones and the
relatively shallow flow depths. The sediment comprising the riffle responded to these
temperature perturbations with temperature variations detected in all our thermistors in
both years but some were small (~0.2°C) but well within the sensitivity of our
thermistors. However, as would be expected, the temperature oscillations varied
vertically and also longitudinally (Figs. 10,11).
The 2008 temperature observations (Fig. 10) show warmer temperatures beneath
the upstream pool and cooler temperatures at the downstream pool through time. Thermal
fronts (either warm or cold) are found in
28
FIGURE 9. TIME-SERIES OF TEMPERATURE for Jaramillo Creek during the two study periods. Temperature was recorded every 10 minutes.
29
FIGURE 10. 2008 TEMPERATURE MAPS FOR JARAMILLO CREEK (assumed and visualized as thermally well-mixed) and its streambed underneath the studied pool-riffle-pool sequence. The interval between the time snapshots is six hours. Jaramillo Creek flows from left to right.
30
between peaks (or troughs) in temperature time series suggesting that the diel
signal is preserved and not significantly dispersed with depth. For example, Fig. 5d
shows a warm signal sandwiched in between the previous day’s cold water that has
infiltrated and the current day’s cool water front currently downwelling.
The temperature variations observed in 2009, when the thermistors were located
about 0.5 m deeper, were muted (Fig. 11). However, they still clearly indicated diel
warming and cooling and the variations are well within instrumental accuracy. The
lowermost sensors of the 2009 data set display very small diel variations (< ~0.2°C). The
thermal variations appear to be more uniformly distributed longitudinally compared to
the 2008 temperatures.
31
FIGURE 11. 2009 TEMPERATURE MAPS FOR JARAMILLO CREEK (assumed and visualized as thermally well-mixed) and its streambed underneath the studied pool-riffle-pool sequence. The interval between the time snapshots is six hours. Jaramillo Creek flows from left to right
32
The timing and magnitude of the temperature variation within the sediment is
further analyzed by mapping the relative amplitude of temperature variations to that in
the river (Cardenas and Wilson 2007b) and phase shift (lag) compared to the timing of
warming and cooling in the river (Figs. 10,11). The normalized temperature amplitude,
T*, at a given observation location is calculated as follows:
ATTT minmax* −
= (11)
where Tmax and Tmin are the maximum and minimum temperatures observed over one
period at one point and A is twice the amplitude of the temperature variation in the river.
T*=1.0 at the SWI by definition; the river is assumed to be thermally well-mixed. The
normalized phase, B*, at a given point is calculated as follows:
PBB =* (12)
B*=0.0 at the SWI by definition.
The spatial distribution of T* further highlights the differences in thermal
variations between the riffle head and riffle tail (up and downstream portion of the riffle,
respectively) in 2008 (left and right side of Fig. 10a). This is accompanied by a
systematic variation in B*with the tail exhibiting larger lags than the head (Fig. 12b).
Vertical variations of both T* and B* along the thermistor strings also diminishes from the
head to the tail of the riffle. Beneath the riffle head, the first three vertical profiles from
the left had deeper thermistors and larger T* values than the shallowest thermistors in the
remainder of the transect (Fig. 12a,12d).
Since the thermal variations detected by the deeper thermistors in 2009 were smaller, any
33
longitudinal patterns in T*, such as those observed from 2008, are less obvious (Fig. 12c).
The thermal variations are much more uniform. But contrary to the 2008 observations,
larger lags were observed at the riffle head and smaller B* were observed at the tail in
2009 (Fig. 12d). The lag distribution is also patchier compared to 2008 which had a more
systematic variation in B* vertically and longitudinally. However, there is larger error in
quantifying the lag, i.e., by fitting Eq. 10, based on the 2009 data since the variations are
muted.
34
FIGURE 12. AR AND DP MAPS. Maps of normalized amplitude of temperature change (T*) in the streambed relative to the river and time lag (phase) in temperature (B*) relative to the timing of river warming and cooling cycles. (A) and (B) are normalized amplitudes and phases, respectively, for 2008; (C) and (D) are for 2009. Jaramillo Creek flows from left to right.
35
3.2. Thermal properties of Jaramillo Creek Sediments
Thermal properties of the sediments of Jaramillo Creek were found using a KD2-
Pro Thermal properties probe manufactured by Decagon Devices. Fifty three
measurements were recorded (Fig. 13). The arithmetic mean of the measurements was
used in the calculation of vertical fluid fluxes. Nine measurements were conducted with a
sensor that was capable of measuring bulk heat capacity and thermal dispersivity. The
thermal properties of Jaramillo Creek were found to have little variation. Well over half
of all measured values of thermal conductivity fell between values of 1.0 and 1.2
(W*(m*K)-1). The average values are shown in Table 1. All measurements obtained with
the KD2-Pro Thermal properties probe met or exceeded the internal data quality
tolerance. An empirical two phase geometric mean model of thermal conductivity (after
Woodside & Messmer, 1961) considering only pure water and quartz phases (with a
volume fraction of 0.30 and 0.70, respectively) gives an estimated thermal conductivity
of approximately 1.08 W*(m*K)-1. This empirical two phase model result agrees well
with the measured values.
36
FIGURE 13. THERMAL CONDUCTIVITY measurements obtained from the KD2-Pro thermal properties probe.
0.8 1 1.2 1.4 1.6 1.8 20
5
10
15
20
25
30
35
Thermal conductivity [W*(m*K)-1]
Coun
t
Thermal Conductivity Histogram
37
3.3. Hydraulic regime
The data collected from the 2008 and 2009 field campaigns each represent three
diel cycles. From each period, a single flux based on Ar and Dp for Hatch and Keery
methods (four total) was calculated for each vertical profile. Two profiles from both the
2008 and 2009 datasets were removed due to unknown sensor placement caused by
collapse of the PVC piezometer casing that was discovered upon the removal of the
piezometers (removed vertical profiles not shown). Fluxes were evaluated for every
combination of two neighboring sensors within a given vertical profile but out of the
possible combinations of temperature sensors, the second and third sensors below the
SWI were chosen for comparison between the 2008 and 2009 datasets (Figs. 14b-e, 15b-
e). Sensors are referred to with numbers with ‘1’ being the shallowest or first from the
SWI and so on. Sensors two and three were chosen due to the useable data spanning both
2008 and 2009 and the availability of auxiliary temperature and flux estimates both above
and below in each profile.
38
FIGURE 14. 2008 FLUID FLUXES THROUGH THE SWI plotted as a function of distance downstream. The fluxes were calculated using data from temperature sensors located 15 and 25 cm below the SWI. (A) Hatch Dp method fluxes (m day-1). (B) Hatch Ar method fluxes (m day-1). (C) Keery Dp method fluxes (m day-1). (D) Keery Ar method fluxes (m day-1). Each line represents the period-averaged fluid flux through the SWI for one day. Jaramillo Creek flows from left to right.
39
FIGURE 15. 2009 FLUID FLUXES THROUGH THE SWI plotted as a function of distance downstream. The fluxes were calculated using data from temperature sensors located 30 and 40 cm above bottom of the screened interval. (A) Hatch Dp method fluxes (m day-1). (B) Hatch Ar method fluxes (m day-
1). (C) Keery Dp method fluxes (m day-1). (D) Keery Ar method fluxes (m day-1). Each line represents the period-averaged fluid flux through the SWI for one day.
40
The estimated vertical fluxes all indicate that Jaramillo Creek within the study
reach is losing during both years (Figs. 14, 15; negative flux corresponds to downward
flow); this is consistent with differential stream gauging results. In 2008, the larger
downward fluxes tend to be near the head of the riffle and end of the upstream pool with
an apparent decrease in downward flux through the riffle (Fig. 14). The patterns are
similar for both the Ar and Dp approaches although the latter leads to much larger fluxes.
The pattern also persists for the 3 days we collected data with the last day exhibiting the
largest downward flux.
The heat-based flux estimates again indicate that Jaramillo Creek is mostly losing
in 2009 (Fig. 15). Note that the thermistors were placed deeper during this campaign. The
riffle morphology also changed with less local variability compared to 2008. The flux
distribution from the Ar and Dp estimates no longer have very similar patterns although
the latter still leads to larger estimates similar to 2009. The Dp based estimates for the
first two days indicate an area of small downward flux at the end of the head pool, a
broad area under the head of the riffle that has larger downward fluxes, and then an area
with decreasing downward flux with the downstream distance towards the tail of the
riffle and the downstream pool.
Since there were four thermistors at different depths at each location, a vertical
flux distribution can be mapped as flux can be estimated using different pairings of
thermistors. We only used vertically neighboring pairs (1:2, 2:3, and 3:4) so that differing
sensitivity to different sensor spacing (Hatch et al. 2006) is eliminated. The vertical flux
map for 2008 shows that larger downward fluxes occur near the head of the riffle and that
smaller fluxes tend occur near the riffle tail for both Ar and Dp based estimates (Figs. 16a,
41
b). However, this pattern of apparent decrease in vertical flux from riffle head to tail is
not obvious for 2009 (Figs. 17a, b).
42
FIGURE 16. 2008 MAP OF VERTICAL FLUXES calculated using the Hatch Ar and Dp methods. A) Ar-based estimates for Day 2 of 2008, and B) Dp - based estimates for Day 2 of 2008.
43
FIGURE 17. 2009 MAP OF VERTICAL FLUXES calculated using the Hatch Ar and Dp methods. A) Ar-based estimates for Day 2 of 2009, and B) Dp - based estimates for Day 2 of 2009. Note: SWI is lowered for space allocation.
44
The flux maps also suggest a slight increase in flux with distance from the SWI.
Vertical fluxes within the streambed are therefore further analyzed as an ensemble by
plotting average of fluxes with distance from the SWI. This was conducted for the 2009
data set (Fig. 18).
45
FIGURE 18. VERTICAL FLUX TRENDS A) Plot of stream stage and stream temperature for 2009. B-G) Plots of averages for all estimated vertical flux ± standard deviation (m s-1) for a given depth (m).
46
Acceleration in downward flux with depth would be expected as hyporheic exchange
driven by the PRP sequence is depth limited. At depth, the regional pressure gradients
become larger, and for the case of the study reach of Jaramillo Creek, a losing stream,
downward fluid fluxes increase. For normal stage variations (i.e., Day 1, Day 2)
streambed fluxes does generally increase with depth. However, when the stream
responded to a storm that passed through the watershed on Day 3 (Fig. 18), the thermal
regime of the riffle changed and the trend in the flux distribution disappeared.
Time-series of vertical Darcy flux was estimated directly using vertical hydraulic
head gradients calculated between a piezometer screened in the bed and one screened
through the water column and Darcy’s Law while assuming the hydraulic conductivity
presented in Table 1. The piezometer used for the flux calculation is located a distance of
~2 m in Figs. 6, 9. These fluxes averaged -0.19 (m day-1) with a standard deviation of
0.06 (m day-1) over a one week period after the temperature data were collected in 2009.
Unfortunately, we were not able to get independent estimates of fluxes during 2008.
While the persistent downward fluxes at this single point are consistent with the losing
conditions at Jaramillo Creek, the values are smaller than those estimated from the
thermal data. However, these direct estimates may have some error since the head
gradients are very small (a few mm) while the accuracy of the probe that monitored and
logged pressured is ~2-3 mm with a resolution of 1/10th of the accuracy. This is partly
the reason why we did not pursue detailed time-series measurements of head gradients
since equipment for accurate measurements were not available at the time of our study.
47
3.4. Discussion
Temperature data is essential for understanding physical, biogeochemical and biological
processes within saturated sediments with periodic temperature oscillations. Most
biogeochemical reactions and abiotic processes are sensitive to temperature including, for
example, bacterially mediated cycling of nutrients, organic matter degradation, nitrogen
and sulfur redox (Westrich and Berner, 1988), and diagenetic (Berner and Berner, 1996)
as well as sorption processes for both trace metals (Barrow, 1992; Nimick et al., 2003)
and organic compounds (Wu and Gschwend, 1986; Cornelissen et al.,1997; Kleinedam et
al., 2004). Diel temperature fluctuations exert a large influence on both biotic and abiotic
chemical processes within porous media. The dynamic thermal regime presented in Figs.
10 and 11 serve as a high resolution model for diel thermal oscillations in saturated
streambed sediments beneath a PRP sequence in streambed morphology under losing
conditions, and can be extended conceptually for streams under neutral and gaining
conditions. Since heat tracing methods provide a convenient approach to simultaneously
obtain temperature while estimating fluid fluxes, we applied it to a PRP.
Hyporheic flow, by definition, entails infiltration from the river, flow through the
sediment and then back into the river (Harvey and Bencala 1993; Bencala 2000). Even
under losing conditions, hyporheic flow paths may still persist so long as regional or
ambient hydraulic head gradients between the deep aquifer and the river are smaller than
the head gradients along the SWI (Cardenas and Wilson 2007d). Losing rivers may still
have subsurface flow paths that return to the river. Under completely losing conditions,
48
downwelling tends to be weaker in areas where there would normally be upwelling if the
stream was under neutral conditions. Areas of upwelling will exhibit weaker or shallower
penetration of any thermal variations originating from the stream (Cardenas and Wilson
2007c-d). This causes areas where upwelling would normally occur under neutral
conditions (neither losing nor gaining) to experience smaller thermal variations since the
thermal fronts from the river do not penetrate as deep or as fast (Cardenas and Wilson
2007d). The thermal observations in Jaramillo Creek are consistent with either a weakly
losing or dominantly losing scenario (Fig. 1). Downward fluxes persisted in time, or at
least there clearly is a downward advective transport component, and our heat-tracing
analyses did not result in any positive (or upward) fluxes. However, there seems to be a
systematic variation in downward flux. Under neutral conditions, the prevailing
conceptual model for hyporheic flow through a riffle is that there is downwelling in its
head area, upwelling near its tail, and sub-horizontal flow in between. Presumably, under
losing conditions, the upwelling at the tail would gradually transform to weak
downwelling. The generally decreasing downward fluxes towards the tail of the riffle in
Jaramillo Creek are consistent with this pattern (Figs. 1,14,15). The pattern is not clear-
cut, however, which is to be expected due to presence of local topography which could
induce smaller-scale and localized hyporheic flow paths nested in the larger scale flow
paths (Worman et al. 2007). Moreover, local variations in permeability could be affecting
fluid flow and heat transport (Cardenas et al. 2004; Sawyer and Cardenas 2009). Despite
these confounding factors, it is clear that the sediment comprising the PRP unit is
undergoing substantial variations in temperature in response to diel warming and cooling
of Jaramillo Creek. This variation is mostly due to heat advection as conductive heat
49
transport would lead to an insignificant portion of the thermal variation. For diel-forced
pure conduction, the extinction depth of the thermal signal would be approximately 0.10-
0.20 m based on calculations following Stallman (1965). This conduction extinction
depth is much shallower compared to the depth up to where significant variations were
observed (essentially up to the deepest thermistors).
The results of Keery and Hatch based calculations are very close to each other for
both 2008 and 2009 data sets (Figs. 14, 15). It should be noted that the 2008 and 2009
flux distribution calculated by the Hatch and Keery Ar methods are almost in perfect
agreement. The Hatch and Keery Dp methods also agree well with each other. Keery et al.
(2007) suggested that the lack of a dispersion term in their method did not introduce large
errors in their analysis. The insignificant differences in results between methods
including and methods not including dispersion suggest that at the magnitude of the
fluxes at Jaramillo Creek thermo-mechanical dispersion can be neglected.
The fluxes calculated by the Ar and Dp methods may agree well across the two
methods (Hatch vs. Keery), but they do not agree well with each other (Ar vs. Dp). This
disagreement is largely attributed to the differing sensitivities of the Ar and Dp methods to
input parameters (Hatch et al. 2006; Keery et al. 2007) and partly due to the multi-
dimensional nature of flow paths violating the one-dimensional (or uni-directional)
assumption in the analytical models and non-horizontal, non-uniform thermal front
propagation. If a thermal front propagates from a horizontal interface (i.e., flat SWI) and
the streambed flux is uniformly distributed across the interface, both the Hatch and Keery
methods can resolve a vertical component of flux (Hatch et al. 2006; Keery et al. 2007).
However, streambed topography causes the thermal front to propagate from a complex
50
surface, not a straight, let alone, horizontal line. Any sub-horizontal feature in streambed
topography will cause thermal fronts to propagate in a similar orientation. Moreover, the
conceptual model for hyporheic flow through a PRP sequence in a neutral stream would
result in thermal fronts propagating sub-horizontally from the head pool, horizontally
underneath the core of the riffle and sub-horizontally but upwards towards the lower pool
(Fig. 1). If a thermal front approaches a vertical sensor array at an oblique angle due to a
non-horizontal SWI, the distance traveled by the thermal front from the upper sensor to
the lower sensor will be less than the actual vertical separation of the sensors. This
change in sensor separation that is apparent to a non-orthogonal thermal front is an
‘apparent sensor separation’. An apparent sensor separation distance would result
anytime the sensor array orientation is not perpendicular to the top boundary where the
thermal perturbation is originating from even if the flow field was unidirectional and
there is no refraction of flow paths due to hyporheic forcing. The reduced distance
traveled by the thermal front would cause an over-estimation of flux for Ar methods and
an underestimation for Dp methods for a given Ar and Dp (see their fig. 5) (Hatch et al.
2006). To further confound the issue, oblique thermal fronts will cause anomalous values
of Ar and Dp to be calculated. In the case of this study, the weakly oblique thermal fronts
under the head and tail pools are thought to increase Ar and decrease Dp. Over the riffle
section, the SWI is more uniform and thermal fronts appear to propagate in a manner that
agrees better with modeling assumptions. These ‘topographic effects’ would diminish
with distance from the SWI as hyporheic exchange weakens.
The Ar methods are less sensitive than the Dp methods (to minute changes in Ar
and Dp respectively) within the range of fluxes expected (0-1 m day-1) (Hatch et al.
51
2006). While larger sensitivity would seem to be a desired feature, the higher sensitivity
of the Dp based methods could also pose problems. For a given apparent change in sensor
separation, the change in the resulting flux calculated for a given Dp is much larger than
for a given Ar (see Figs. 4, 5 in (Hatch et al. 2006)). In addition, anomalously large Ar and
small Dp values combined with the differing sensitivities of the methods to changes in Ar
and Dp introduce discrepancies between the two methods. This partly explains the
qualitative similarity but differing magnitudes of fluxes between the Ar and Dp methods
(Figs. 14, 15).
By definition, the analytical models do not resolve any flux components that are
not parallel to the thermistor array orientation. Although the longitudinal variability in
amplitude decay and time lag (phase) increase from riffle head to tail (Figs. 12a, b) can
be fully explained by larger downward flux at the head compared to the tail, the patterns
do suggest a strong horizontal heat transport component. In fact, some deeper parts of the
riffle head exhibited larger variations in temperature compared to shallower portions (Fig.
12a). This zone is where a narrow thermal ‘plume’ (warm or cold) enveloped by other
warmer or colder fronts persists (Fig. 10d). This is impossible if heat advection was
dominantly vertical. Further, if one ignores where the SWI is, a natural interpretation of
Fig. 12a,b is that transport is from left to right and the origin of the perturbation is the left
boundary.
Vertical fluid flux varies systematically along the PRP sequence. In most
instances, vertical fluid fluxes decreased in magnitude with increasing distance
downstream from the head pool (Fig. 16b-e,17b-e). This general trend agrees well with
the conceptual model illustrating trends in vertical flux modified for a losing stream (Fig.
52
1). This trend is not an artifact of ‘apparent sensor separation’ or anomalous values of Ar
and Dp. Time series analysis of amplitude and phase between the surface water and
groundwater agree well with the conceptual model (Fig. 12a,b). In addition, the
topographic relief of a PRP sequence is mild (maximum 11.3° deviation from horizontal).
Furthermore, the topography of the SWI is roughly symmetric about the center of the
PRP sequence. Therefore, the sediments under the head pool would be subjected to
similar ‘topographic effects’ as the tail pool; only persistent hyporheic exchange
consistent with the ‘upwelling-to-downwelling’ conceptual model could generate the
thermal patterns in Fig. 12a,b and the systematic distribution of vertical fluid fluxes in
Fig. 14,15.
Simultaneous consideration of a non-vertical component would entail complete
2D (Cardenas and Wilson 2007b-d) or even 3D coupled numerical models of free-surface
turbulent open channel flow, groundwater flow and heat transport, with well defined
boundary conditions for both models. Lack of additional information precludes this and
we are not aware of any non-hydrostatic free-surface turbulent flow modeling studies for
a PRP sequence. Unfortunately, a detailed pressure distribution along the SWI and lateral
boundaries of the riffle are necessary to drive an accurate subsurface flow model.
Acquiring this via numerical modeling or through very precise pressure measurements
along the SWI are key steps that need to be conducted in future studies.
53
Chapter 4: Conclusions
The sediments underlying the PRP sequence within the study reach of Jaramillo
Creek experienced pronounced thermal variations in response to diel warming and
cooling of the creek. The thermal patterns within the sediment varied across the PRP
sequence are due to shallow hyporheic flow (Fig. 1). The riffle head experienced a larger
portion of diel temperature swings originating from the river compared to the riffle tail.
The same areas with larger thermal variation also showed smaller lags. Analysis of
observed thermal profiles with analytical models that ignore any horizontal heat transport
components suggests that downward fluid fluxes are largest beneath the head of the riffle
and gradually decreases in magnitude towards the tail of the riffle, consistent with a
geomorphologic feature inducing hyporheic return flow to an otherwise losing stream
(Fig. 1).
Estimating vertical fluid fluxes in streambeds from temperature observations
using analytical models which take advantage of amplitude and phase differences in time
series data are valuable but may not be straightforward due to hyporheic exchange and
topography of the bed. Complex hyporheic exchange induced by streambed topography
may lead to violation of the one-dimensional assumption of the analytical heat tracing
methods. This is unfortunate since the shallow streambed sediments where the envelope
of diel temperature changes are most pronounced and useful are also the most strongly
influenced by multi-dimensional and multi-scale hyporheic exchange. Even relatively
small angles between thermal fronts and vertical sensor arrays will lead to errors in flux
estimates. Due to the differing sensitivities of the amplitude ratio and phase difference
54
methods to changes in apparent sensor spacing, amplitude ratio methods were found to
generate more consistent estimates of vertical fluxes. However, care must be taken when
selecting a heat-tracing analysis method (amplitude ratio or phase difference), interpreting
estimated fluxes, and selecting sites for installation of thermistor arrays.
55
Appendix A: Grain size data
Grain size distributions of sediments from Jaramillo Creek. Note: logarithmic horizontal
axis.
10-11001011020
10
20
30
40
50
60
70
80
90
Grain size (mm)
Per
cent
Fin
er (%
)
Sample 1Sample 2Sample 3
56
Appendix B: Ex-Stream source code
%ex_stream.m MAIN PROGRAM FILE function varargout = ex_stream(varargin) %Ex-Stream, 2009 %Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @ex_stream_OpeningFcn, ... 'gui_OutputFcn', @ex_stream_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function ex_stream_OpeningFcn(hObject, eventdata, handles, varargin) % Choose default command line output for ex_stream handles.output = hObject; % Update handles structure %handles = load('input_parameters.mat'); guidata(hObject, handles); m = csvread('input_parameters.txt'); handles.hv_use_method = m(1); handles.hv_use_ar = m(2); handles.hv_use_dp = m(3); handles.hv_view_models = m(4); handles.hv_sensor_sep = m(5); handles.hv_therm_disp = m(6); handles.hv_sensor_1 = m(7); handles.hv_sensor_2 = m(8); handles.kv_use_method = m(9); handles.kv_view_models = m(10); handles.kv_sensor_sep = m(11); handles.kv_sensor_1 = m(12); handles.kv_sensor_2 = m(13); handles.kv_use_ar =m(14);
57
handles.kv_use_dp =m(15); handles.sv_use_method = m(16); handles.sv_depth_z = m(17); handles.sv_sensor_1 = m(18); handles.sv_sensor_2 = m(19); handles.sv_sensor_3 = m(20); handles.mv_osc_period = m(21); handles.mv_ke = m(22); handles.mv_fluid_dens = m(23); handles.mv_porosity = m(24); handles.mv_fluid_spec_heat = m(25); handles.mv_sys_spec_heat = m(26); handles.mv_num_profiles = m(27); handles.mv_num_sensors = m(28); handles.mv_graph_results = m(29); handles.mv_grain_dens = m(30); handles.mv_use_hb = m(31); handles.bv_use_method = m(32); handles.bv_depth_to_tz = m(33); handles.bv_stream_bed_sensor = m(34); handles.bv_z_sensor = m(35); handles.bv_tl_sensor = m(36); function varargout = ex_stream_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function keery_view_models_Callback(hObject, eventdata, handles) handles.kv_view_models = get(hObject,'Value'); if handles.kv_view_models fprintf('Keery Method - View Models - Activated\n\n'); else fprintf('Keery Method - View Models - Deactivated\n\n'); end guidata(hObject, handles); function keery_sensor_sep_Callback(hObject, eventdata, handles) handles.kv_sensor_sep = str2double(get(hObject,'String')); fprintf('Keery Method - Sensor Seperation set to: %d\n\n', handles.kv_sensor_sep); guidata(hObject, handles); function keery_sensor_sep_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function keery_use_method_Callback(hObject, eventdata, handles) handles.kv_use_method = get(hObject,'Value'); if handles.kv_use_method fprintf('Keery Method - Activated\n\n'); else
58
fprintf('Keery Method - Deactivated\n\n'); end guidata(hObject, handles); function keery_sensor_1_Callback(hObject, eventdata, handles) handles.kv_sensor_1 = str2double(get(hObject,'String')); fprintf('Keery Method - Sensor one set to: %d\n\n', handles.kv_sensor_1); guidata(hObject, handles); function keery_sensor_1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function keery_sensor2_Callback(hObject, eventdata, handles) handles.kv_sensor_2 = str2double(get(hObject,'String')); fprintf('Keery Method - Sensor two set to: %d\n\n', handles.kv_sensor_2); guidata(hObject, handles); function keery_sensor2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_num_sensor_Callback(hObject, eventdata, handles) handles.mv_num_sensors= str2double(get(hObject,'String')); fprintf('Common Model Parameter - Number of Sensors per Profile set to: %d\n\n', handles.mv_num_sensors); guidata(hObject, handles); function model_num_sensor_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_num_prof_Callback(hObject, eventdata, handles) handles.mv_num_profiles = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Number of Profiles set to: %d\n\n', handles.mv_num_profiles); guidata(hObject, handles); function model_num_prof_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
59
function mode_temp_browse_Callback(hObject, eventdata, handles) [file_name, path] = uigetfile('*.txt', 'Pick your CSV text file'); handles.mv_file_name = fullfile(path,file_name); a = handles.mv_file_name; save 'temp_file_name.mat' a fprintf('The file name and path for the temperature filename is: \n'); disp(handles.mv_file_name) fprintf('Please observe the convention of the temperature file:\n\n'); fprintf('-All readings should either be obtained or interpolated to\n'); fprintf(' one minute intervals.\n\n'); fprintf('-Each row within the comma seperated values file is a reading in\n'); fprintf(' time.\n\n'); fprintf('-Each column within the file is a sensor within a profile\n\n'); fprintf('-Profiles are numbered 1-n, each column within a profile should be\n'); fprintf(' should be a consecutive sensor, each further away from the \n'); fprintf(' periodic boundary.\n\n'); guidata(hObject, handles); function model_save_input_Callback(hObject, eventdata, handles) export_data = [handles.hv_use_method handles.hv_use_ar handles.hv_use_dp handles.hv_view_models handles.hv_sensor_sep handles.hv_therm_disp handles.hv_sensor_1 handles.hv_sensor_2 handles.kv_use_method handles.kv_view_models handles.kv_sensor_sep handles.kv_sensor_1 handles.kv_sensor_2 handles.kv_use_ar handles.kv_use_dp handles.sv_use_method handles.sv_depth_z handles.sv_sensor_1 handles.sv_sensor_2 handles.sv_sensor_3 handles.mv_osc_period handles.mv_ke handles.mv_fluid_dens handles.mv_porosity handles.mv_fluid_spec_heat handles.mv_sys_spec_heat handles.mv_num_profiles
60
handles.mv_num_sensors handles.mv_graph_results handles.mv_grain_dens handles.mv_use_hb handles.bv_use_method handles.bv_depth_to_tz handles.bv_stream_bed_sensor handles.bv_z_sensor handles.bv_tl_sensor]; csvwrite('input_parameters.txt',export_data); hgsave('ex_stream.fig') %END OF SAVE INPUT ################### function model_run_Callback(hObject, eventdata, handles) fprintf('\n\n'); fprintf('*============================================================*\n'); fprintf('|ExStream by Travis Swanson, [email protected] |\n'); fprintf('|No warranty implied or responsibility assumed for potential |\n'); fprintf('|damages, rejected publications or horrid puns. |\n'); fprintf('*============================================================*\n\n\n'); fprintf('Starting Timer...\n\n'); tic handles.mv_all_temp = csvread(handles.mv_file_name); guidata(hObject, handles); if handles.hv_use_method fprintf('Starting Hatch Method...\n\n'); [hatch_v_ar, hatch_v_dp] = hatch(handles); csvwrite('output\hatch_v_ar.txt',hatch_v_ar); csvwrite('output\hatch_v_dp.txt',hatch_v_dp); if handles.mv_graph_results fprintf('Plotting Results from Hatch Method...\n\n'); [n,m]= size(handles.mv_all_temp); max_time_loop = floor(n/handles.mv_osc_period); if handles.hv_use_ar figure for time_counter = 1:1:(max_time_loop) p112(time_counter) = plot(1:handles.mv_num_profiles,(hatch_v_ar(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Hatch Method Flux based on Ar'); xlabel('Profile'); ylabel('Flux (m/day)');
61
hold on end hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end if handles.hv_use_dp figure for time_counter = 1:1:(max_time_loop) p112(time_counter) = plot(1:handles.mv_num_profiles,(hatch_v_dp(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Hatch Method Flux based on Dp'); xlabel('Profile'); ylabel('Flux (m/day)'); hold on end hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end end end if handles.kv_use_method fprintf('Starting Keery Method...\n\n'); [keery_v_dp, keery_v_ar] = keery(handles); csvwrite('output\keery_v_dp.txt',keery_v_dp); csvwrite('output\keery_v_ar.txt',keery_v_ar); if handles.mv_graph_results if handles.kv_use_dp fprintf('Plotting Results from Keery Method...\n\n'); [n,m]= size(handles.mv_all_temp); max_time_loop = floor(n/handles.mv_osc_period); figure for time_counter = 1:1:(max_time_loop) p112(time_counter) = plot(1:handles.mv_num_profiles,(keery_v_dp(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Keery Method Flux - Dp'); xlabel('Profile'); ylabel('Flux (m/day)');
62
hold on end hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end if handles.kv_use_ar fprintf('Plotting Results from Keery Method...\n\n'); [n,m]= size(handles.mv_all_temp); max_time_loop = floor(n/handles.mv_osc_period); figure for time_counter = 1:1:(max_time_loop) p112(time_counter) = plot(1:handles.mv_num_profiles,(keery_v_ar(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Keery Method Flux - Ar'); xlabel('Profile'); ylabel('Flux (m/day)'); hold on end hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end end end if handles.sv_use_method fprintf('Starting Schmidt Method...\n\n'); [schmidt_v] = schmidt(handles); csvwrite('output\schmidt_v.txt',schmidt_v); if handles.mv_graph_results fprintf('Plotting Results from Schmidt Method...\n\n'); [n,m]= size(handles.mv_all_temp); max_time_loop = floor(n/handles.mv_osc_period); figure for time_counter = 1:1:(max_time_loop) %save figure to varible p112(time_counter) = plot(1:handles.mv_num_profiles,(schmidt_v(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); %save information
63
set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Schmidt Method Flux'); xlabel('Profile'); ylabel('Flux (m/day)'); hold on end %get saved information hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end end if handles.bv_use_method fprintf('Starting Bredehoeft Method...\n\n'); [bredehoeft_v] = bredehoeft(handles); csvwrite('output\bredehoeft_v.txt',bredehoeft_v); if handles.mv_graph_results fprintf('Plotting Results from bredehoeft Method...\n\n'); [n,m]= size(handles.mv_all_temp); max_time_loop = floor(n/handles.mv_osc_period); figure for time_counter = 1:1:(max_time_loop) %save figure to varible p112(time_counter) = plot(1:handles.mv_num_profiles,(bredehoeft_v(time_counter,1:handles.mv_num_profiles)),'color',[rand, rand, rand]); %save information set(p112(time_counter),'userdata',['Series: ' num2str(time_counter)]) title('Bredehoeft Method Flux'); xlabel('Profile'); ylabel('Flux (m/day)'); hold on end %get saved information hc=get(gca,'children'); s={}; for h=hc' s={s{:},get(h,'userdata')}; end legend(hc,s) end end fprintf('Stopping Timer...'); toc
64
function model_osc_period_Callback(hObject, eventdata, handles) handles.mv_osc_period = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Osc. Period set to: %d\n\n', handles.mv_osc_period); guidata(hObject, handles); function model_osc_period_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_ke_Callback(hObject, eventdata, handles) handles.mv_ke = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Ke set to: %d\n\n', handles.mv_ke); guidata(hObject, handles); function model_ke_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_fluid_dens_Callback(hObject, eventdata, handles) handles.mv_fluid_dens = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Fluid Density set to: %d\n\n', handles.mv_fluid_dens); guidata(hObject, handles); function model_fluid_dens_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_porosity_Callback(hObject, eventdata, handles) handles.mv_porosity = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Porosity set to: %d\n\n', handles.mv_porosity); guidata(hObject, handles); function model_porosity_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_spec_heat_fluid_Callback(hObject, eventdata, handles) handles.mv_fluid_spec_heat = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Fluid Spec. Heat set to: %d\n\n', handles.mv_fluid_spec_heat);
65
guidata(hObject, handles); function model_spec_heat_fluid_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_spec_heat_sys_Callback(hObject, eventdata, handles) handles.mv_sys_spec_heat = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Sys. Spec. Heat set to: %d\n\n', handles.mv_sys_spec_heat); guidata(hObject, handles); function model_spec_heat_sys_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function schmidt_depth_z_Callback(hObject, eventdata, handles) handles.sv_depth_z = str2double(get(hObject,'String')); fprintf('Schmidt Method - Depth to Z set to: %d\n\n', handles.sv_depth_z); guidata(hObject, handles); function schmidt_depth_z_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function use_schmidt_Callback(hObject, eventdata, handles) handles.sv_use_method = get(hObject,'Value'); if handles.sv_use_method fprintf('Schmidt Method - Activated\n\n'); else fprintf('Schmidt Method - Deactivated\n\n'); end guidata(hObject, handles); function schmidt_sensor_1_Callback(hObject, eventdata, handles) handles.sv_sensor_1 = str2double(get(hObject,'String')); fprintf('Schmidt Method - To sensor set to: %d\n\n', handles.sv_sensor_1); guidata(hObject, handles); function schmidt_sensor_1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
66
end function schmidt_sensor_2_Callback(hObject, eventdata, handles) handles.sv_sensor_2 = str2double(get(hObject,'String')); fprintf('Schmidt Method - Tz sensor set to: %d\n\n', handles.sv_sensor_2); guidata(hObject, handles); function schmidt_sensor_2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function schmidt_sensor_3_Callback(hObject, eventdata, handles) handles.sv_sensor_3 = str2double(get(hObject,'String')); fprintf('Schmidt Method - Tl sensor set to: %d\n\n', handles.sv_sensor_3); guidata(hObject, handles); function schmidt_sensor_3_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function use_ar_Callback(hObject, eventdata, handles) handles.hv_use_ar = get(hObject,'Value'); if handles.hv_use_ar fprintf('Hatch Method - Use Ar - Activated\n\n'); else fprintf('Hatch Method - Use Ar - Deactivated\n\n'); end guidata(hObject, handles); function use_dp_Callback(hObject, eventdata, handles) handles.hv_use_dp = get(hObject,'Value'); if handles.hv_use_dp fprintf('Hatch Method - Use Dp - Activated\n\n'); else fprintf('Hatch Method - Use Dp - Deactivated\n\n'); end guidata(hObject, handles); function hatch_view_models_Callback(hObject, eventdata, handles) handles.hv_view_models= get(hObject,'Value'); if handles.hv_view_models fprintf('Hatch Method - View Models - Activated\n\n'); else fprintf('Hatch Method - View Models - Deactivated\n\n'); end
67
guidata(hObject, handles); function hatch_sens_sep_Callback(hObject, eventdata, handles) handles.hv_sensor_sep = str2double(get(hObject,'String')); fprintf('Hatch Method - Sensor Seperation set to: %d\n\n', handles.hv_sensor_sep); guidata(hObject, handles); function hatch_sens_sep_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function use_hatch_Callback(hObject, eventdata, handles) handles.hv_use_method = get(hObject,'Value'); if handles.hv_use_method fprintf('Hatch Method - Activated\n\n'); else fprintf('Hatch Method - Deactivated\n\n'); end guidata(hObject, handles); function hatch_therm_disp_Callback(hObject, eventdata, handles) handles.hv_therm_disp = str2double(get(hObject,'String')); fprintf('Hatch Method - Thermal dispervisity set to: %d\n\n', handles.hv_therm_disp); guidata(hObject, handles); function hatch_therm_disp_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function hatch_sensor_1_Callback(hObject, eventdata, handles) handles.hv_sensor_1 = str2double(get(hObject,'String')); fprintf('Hatch Method - Sensor one set to: %d\n\n', handles.hv_sensor_1); guidata(hObject, handles); function hatch_sensor_1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function hatch_sensor_2_Callback(hObject, eventdata, handles) handles.hv_sensor_2 = str2double(get(hObject,'String')); fprintf('Hatch Method - Sensor two set to: %d\n\n', handles.hv_sensor_2);
68
guidata(hObject, handles); function hatch_sensor_2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function model_graph_results_Callback(hObject, eventdata, handles) handles.mv_graph_results = get(hObject,'Value'); if handles.mv_graph_results fprintf('Graph Results - Activated\n\n'); else fprintf('Graph Results - Deactivated\n\n'); end guidata(hObject, handles); function figure1_CreateFcn(hObject, eventdata, handles) function model_grain_density_Callback(hObject, eventdata, handles) handles.mv_grain_dens = str2double(get(hObject,'String')); fprintf('Common Model Parameter - Grain Density set to: %d', handles.mv_grain_dens); guidata(hObject, handles); function model_grain_density_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function Untitled_1_Callback(hObject, eventdata, handles) function Use_keery_amp_and_phase_Callback(hObject, eventdata, handles) handles.kv_use_ar = get(hObject,'Value'); if handles.kv_use_ar fprintf('Keery Method - Ar - Method selected\n\n'); else fprintf('Keery Method - Ar - Method unselected\n\n'); end guidata(hObject, handles); function use_keery_phase_only_Callback(hObject, eventdata, handles) handles.kv_use_dp = get(hObject,'Value'); if handles.kv_use_dp fprintf('Keery Method - Dp - Method selected\n\n'); else fprintf('Keery Method - Dp - Method unselected\n\n'); end guidata(hObject, handles);
69
function figure1_ResizeFcn(hObject, eventdata, handles) function use_home_brew_Callback(hObject, eventdata, handles) handles.mv_use_hb = get(hObject,'Value'); if handles.mv_use_hb fprintf('Homebrew curve fitting and Newton Scheme Selected\n\n'); else fprintf('Homebrew curve fitting and Newton Scheme Unselected\n\n'); end guidata(hObject, handles); function use_bredehoeft_Callback(hObject, eventdata, handles) handles.bv_use_method = get(hObject,'Value'); if handles.bv_use_method fprintf('Bredehoeft Method Selected\n\n'); else fprintf('Bredehoeft Method Unselected\n\n'); end guidata(hObject, handles); function bv_depth_to_tz_Callback(hObject, eventdata, handles) handles.bv_depth_to_tz= str2double(get(hObject,'String')); fprintf('Bredehoeft Parameter - Depth to T(z) set to: %d\n\n', handles.bv_depth_to_tz); guidata(hObject, handles); function bv_depth_to_tz_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function bv_stream_bed_sensor_Callback(hObject, eventdata, handles) handles.bv_stream_bed_sensor= str2double(get(hObject,'String')); fprintf('Bredehoeft Parameter - Streambed Sensor set to: %d\n\n', handles.bv_stream_bed_sensor); guidata(hObject, handles); function bv_stream_bed_sensor_CreateFcn(hObject, eventdata, handles)
70
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function bv_z_sensor_Callback(hObject, eventdata, handles) handles.bv_z_sensor= str2double(get(hObject,'String')); fprintf('Bredehoeft Parameter - (Tz) Sensor set to: %d\n\n', handles.bv_z_sensor); guidata(hObject, handles); function bv_z_sensor_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function bv_tl_sensor_Callback(hObject, eventdata, handles) handles.bv_tl_sensor= str2double(get(hObject,'String')); fprintf('Bredehoeft Parameter - T(L) Sensor set to: %d\n\n', handles.bv_tl_sensor); guidata(hObject, handles); function bv_tl_sensor_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %schmidt.m METHOD FILE function [v_schmidt] = schmidt(handles)
71
%Ex-Stream, 2009 %Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] %Note: Please read Schmidt, 2007 for details on the assumptions fprintf('Schmidt Method Chosen...\n\n') S_to = handles.sv_sensor_1; %Streambed temperature sensor S_tz = handles.sv_sensor_2; %Temperature sensor at depth Z S_tl = handles.sv_sensor_3; %Quasi-Steady temperature sensor [n,m]= size(handles.mv_all_temp); %determine the number of iterations max_time_loop = floor(n/handles.mv_osc_period); %make AR and DP array row_counter = 1; %For loop: provides iteration for flux analysis of each period fprintf('Analyticaly solving for fluxes\n\n'); for time_counter = 1:1:(max_time_loop) %generate one period of time data if time_counter == 1 start_time = 1; end_time = 1*handles.mv_osc_period; else start_time = (time_counter-1)*handles.mv_osc_period; end_time = time_counter*handles.mv_osc_period; end time_data = (start_time):1:(end_time); %nested for loop: allows flux calculation for each temperature profile fprintf('Computing fluxes from %d to %d oscilation period\n\n',start_time, end_time); for no_piezo_counter = 1:handles.mv_num_profiles fprintf('Computing flux magnitude for profile # %d \n\n',no_piezo_counter) To = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_to)))); Tz = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_tz)))); Tl = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_tl)))); %Error handling % The quantity (Tz-Tl)/(To-Tl) should not be too large if ((Tz-Tl)/(To-Tl)) > .99999 fprintf('#ERROR#\n') fprintf('Schmidt method may be invalid; ((Tz-Tl)/(To-Tl)) > .99999!\n') fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); fprintf('#ERROR#\n')
72
v_schmidt_ph = NaN; %check to see if we are deviding by zero, and handle the error elseif isnan((Tz-Tl)/(To-Tl)) fprintf('#ERROR#\n') fprintf('Schmidt method may be invalid; ((Tz-Tl)/(To-Tl)) = NaN \n') fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); fprintf('#ERROR#\n') v_schmidt_ph = NaN; end %Uncommon matlab statement below, but it works. Trust me. if (1-isnan((Tz-Tl)/(To-Tl))) fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); v_schmidt_ph = -(handles.mv_ke/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat*handles.sv_depth_z))*log((Tz-Tl)/(To-Tl)); fprintf('The flux magnitude is: %d [m/day]\n\n ', v_schmidt_ph*60*60*24); end v_schmidt(time_counter,no_piezo_counter) = v_schmidt_ph*60*60*24; end row_counter = row_counter + 1; end %Notify that we are finished fprintf('Schmidt Method Complete...\n\n') %keery.m METHOD FILE function [v_keery_dp, v_keery_ar] = keery(handles) %Ex-Stream, 2009
73
%Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] fprintf('Keery Method Chosen...\n\n') v_keery_dp = 0; v_keery_ar = 0; S_to = handles.kv_sensor_1; S_tz = handles.kv_sensor_2; wet_bulk_density = (handles.mv_porosity*handles.mv_fluid_dens+(1-handles.mv_porosity)*handles.mv_grain_dens); %convert period to seconds t = handles.mv_osc_period*60; [n,m]= size(handles.mv_all_temp); %determine the number of iterations max_time_loop = floor(n/handles.mv_osc_period); %make AR and DP array row_counter = 1; %For loop: provides iteration for flux analysis of each period fprintf('Analyticaly solving for fluxes\n\n'); for time_counter = 1:1:(max_time_loop) %generate one period of time data if time_counter == 1 start_time = 1; end_time = 1*handles.mv_osc_period; else start_time = (time_counter-1)*handles.mv_osc_period; end_time = time_counter*handles.mv_osc_period; end time_data = (start_time):1:(end_time); %nested for loop: allows flux calculation for each temperature profile fprintf('Computing fluxes from %d to %d oscilation period\n\n',start_time, end_time); for no_piezo_counter = 1:handles.mv_num_profiles fprintf('Computing the flux for profile # %d from time %d to %d\n\n',no_piezo_counter,start_time,end_time) T1 = handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_to))); T2 = handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_tz))); if handles.mv_use_hb %call homebrew %function [amp_rat,phas_lag] = fitcurve(x,y,y2) [k_ar,k_dp] = fitcurve(time_data',T1,T2,handles.mv_osc_period,handles.hv_view_models); else
74
[k_ar,k_dp] = calcardp(time_data',T2,T1,handles.mv_osc_period,handles.kv_view_models,no_piezo_counter,S_to,S_tz); end fprintf('The difference in phase used is: %d\n\n',k_dp) fprintf('The amplitude ratio used is: %d\n\n',k_ar) %change Dp to seconds dt = k_dp*60; if handles.kv_use_dp == 1 %solution as given in Keery 2007 fprintf('The difference in phase used is: %d\n\n',k_dp) v_keery_ph_dp = -sqrt(((handles.mv_sys_spec_heat^2)*(wet_bulk_density^2)*(handles.kv_sensor_sep^2))/((dt^2)*(handles.mv_fluid_spec_heat^2)*(handles.mv_fluid_dens^2)) - (16*(pi^2)*(dt^2)*(handles.mv_ke^2))/((t^2)*(handles.kv_sensor_sep^2)*(handles.mv_fluid_spec_heat^2)*(handles.mv_fluid_dens^2))); end if handles.kv_use_ar == 1 %generalized solution as given in Keery 2007 % Z = 0 at SWI % Z is positive downwards fprintf('The amplitude ratio used is: %d\n\n',k_ar) H = (handles.mv_fluid_spec_heat*handles.mv_fluid_dens)/handles.mv_ke; D = log(k_ar); %Note: this equation is not displayed correctly in JoH 2007 % the correct solution was obtained from: %http://www.hyporheic.net/Keery_Temp_Oscillations.pdf coeff_matrix = [(((H^3)*D)/(4*handles.kv_sensor_sep)), (-5*(H^2)*(D^2))/(4*(handles.kv_sensor_sep^2)), (2*H*(D^3))/(handles.kv_sensor_sep^3), (((pi*handles.mv_sys_spec_heat*wet_bulk_density)/(handles.mv_ke*t))^2 - ((D^4)/(handles.kv_sensor_sep^4)))]; soln_roots = -1*roots(coeff_matrix); [m,n] = size(soln_roots); test_counter = 1; for i = 1:m test_case = isreal(soln_roots(i)); if test_case v_keery_ph_ar(test_counter) = soln_roots(i); test_counter = test_counter +1; end end [m2,n2] = size(v_keery_ph_ar); if n2 > 1 fprintf('There is more than one real root to the Keery Method solution\n'); fprintf('The method did not fail. Although there can only be one real \n'); fprintf('root with physical meaning\n'); fprintf('If you use 1440 minutes as your oscillation period, you will\n');
75
fprintf('not have this problem.\n'); fprintf('The possible fluxes has been appended to a special file within\n'); fprintf('the directory path keery_v_multiples\n'); fprintf('The entry within the main keery flux file has been given NaN\n\n'); filename = ['output/keery_v_multiples/flux_p' num2str(no_piezo_counter) '_t_' num2str(start_time) '_-_' num2str(end_time) '.txt']; csvwrite(filename, v_keery_ph_ar); v_keery_ph_ar = NaN; elseif n2 == 0 fprintf('There were no real roots to the Keery Method solution\n'); fprintf('The method failed, NaN was assinged for this iteration\n\n'); v_keery_ph_ar = NaN; end end if handles.kv_use_dp == 1 v_keery_dp(time_counter,no_piezo_counter) = v_keery_ph_dp*60*60*24; fprintf('The flux based on the Keery method (Dp) is (+/-): %d [m/day]\n\n',v_keery_ph_dp*60*60*24) end if handles.kv_use_ar == 1 v_keery_ar(time_counter,no_piezo_counter) = v_keery_ph_ar*60*60*24; fprintf('The flux based on the Keery method (Ar) is : %d [m/day]\n\n',v_keery_ph_ar*60*60*24) end end row_counter = row_counter + 1; end fprintf('Keery Method Finished....\n\n')
%hatch.m METHOD FILE (1/5) %Ex-Stream, 2009 %Department of Geological Sciences, UT Austin %Travis Swanson %
76
%Contact: [email protected] % % % function [final_var, final_vdp] = hatch(handles) % let the user know what method is being run fprintf('Hatch Method Selected... \n\n'); %calculate the wet bulk density wet_bulk_density = (handles.mv_porosity*handles.mv_fluid_dens+(1-handles.mv_porosity)*handles.mv_grain_dens); %change varible names for the temperature array alltemp = handles.mv_all_temp; % find the size of the matrix [n,m]= size(alltemp); %determine the number of iterations max_time_loop = floor(n/handles.mv_osc_period); %make AR and DP array row_counter = 1; %For loop: provides iteration for flux analysis of each period fprintf('Iteratively solving for fluxes...\n\n'); for time_counter = 1:1:(max_time_loop) %generate one period of time data if time_counter == 1 start_time = 1; end_time = 1*handles.mv_osc_period; else start_time = (time_counter-1)*handles.mv_osc_period; end_time = time_counter*handles.mv_osc_period; end time_data = (start_time):1:(end_time); %nested for loop: allows flux calculation for each temperature profile fprintf('Computing fluxes from %d to %d oscilation period\n\n',start_time, end_time); for no_piezo_counter = 1:handles.mv_num_profiles fprintf(' -Computing flux for profile %d during %d to %d time\n\n', no_piezo_counter, start_time, end_time) %extract profiles of temperature for one oscilation period upper_temp = alltemp(time_data,(no_piezo_counter*handles.mv_num_sensors-(handles.mv_num_sensors - handles.hv_sensor_1))); lower_temp = alltemp(time_data,(no_piezo_counter*handles.mv_num_sensors-(handles.mv_num_sensors - handles.hv_sensor_2))); %calls calcardp.m, provides amplitude ratio (Ar) and phase %difference (Dp) if handles.mv_use_hb %call homebrew %function [amp_rat,phas_lag] = fitcurve(x,y,y2)
77
[Ar_ph,Dp_ph] = fitcurve(time_data',upper_temp,lower_temp,handles.mv_osc_period,handles.hv_view_models); else [Ar_ph, Dp_ph] = calcardp(time_data',lower_temp,upper_temp,handles.mv_osc_period,handles.hv_view_models,no_piezo_counter,handles.hv_sensor_1,handles.hv_sensor_2); end fprintf(' =The computed amplitude ratio is: %d [-]\n\n', Ar_ph) fprintf(' =The computed phase difference is: %d minutes\n\n', Dp_ph) %store Ar all_ardp(row_counter,(no_piezo_counter*handles.mv_num_sensors-(handles.mv_num_sensors - handles.hv_sensor_1))) = Ar_ph; %store Dp all_ardp(row_counter,(no_piezo_counter*handles.mv_num_sensors-(handles.mv_num_sensors - handles.hv_sensor_2))) = Dp_ph; %calculate Ar based flux if the user has selected to do so! if handles.hv_use_ar == 1 Ar_v_ph = hatchar(handles,Ar_ph,handles.mv_osc_period,handles.hv_sensor_sep,handles.mv_ke,handles.hv_therm_disp,wet_bulk_density,handles.mv_sys_spec_heat); fprintf(' =-=The computed amplitude ratio thermal velocity is: %d [m/day]\n\n', (Ar_v_ph*60*60*24)) else Ar_v_ph = NaN; end %calculate Dp based flux, if the user has selected to do so! if handles.hv_use_dp == 1 Dp_v_ph1 = hatchdp(handles,Dp_ph,handles.mv_osc_period,handles.hv_sensor_sep,handles.mv_ke,handles.hv_therm_disp,wet_bulk_density,handles.mv_sys_spec_heat); %remeber, calculating the thermal front velocity from the %difference in phase cannot give you a direction, only a %magnitude. Dp_v_ph = abs(Dp_v_ph1(1)); %find magnitude. fprintf(' =-=The computed phase difference thermal velocity is: %d [m/day]\n\n', Dp_v_ph*60*60*24) else Dp_v_ph = NaN; end %store flux measurements ar_v(row_counter,no_piezo_counter) = Ar_v_ph; dp_v(row_counter,no_piezo_counter:(no_piezo_counter+1)) = Dp_v_ph; end row_counter = row_counter + 1;
78
end %Now we have two important data sets: amplitude ratio and phase difference %thermal front velocities. From these we now need to find the fluid %velocity. To do this we simply multiply the thermal front velocity by the %ratio of the volumetric heat capacity of the stream water system to that %of water alone. See C. Hatch 2006 gamma = (handles.mv_sys_spec_heat*wet_bulk_density)/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat); final_var = ar_v.*gamma*60*60*24; %Convert to m/day final_vdp = dp_v.*gamma*60*60*24; fprintf('Hatch Method Completed... \n\n');
%hatchar.m METHOD FILE (2/5)
79
%Ex-Stream, 2009 %Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] function var1 = hatchar(handles,Ar,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DEFINE INITAL GUESS ig = 10^-5; %for use in calculating the effective thermal dispersivity gamma = (handles.mv_sys_spec_heat*wet_bulk_density)/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat); %Check to see if Ar is large, if so the iterative solver will not converge. %As Ar aproaches 1, the slope of the solution aproaches 0. Thus, iterative %solution methods fail. %convert to seconds P = P*60; if Ar >= .99999999 fprintf('#Error#\n') fprintf('The amplitude ratio is large, and the solver will not converge (check Ar convention!)\n'); fprintf('#Error#\n\n') vamp_real = NaN; return end %Correct for a sign convention error within the publication. (C. Hatch, %personal comm., 2009) var1 = -1*fzero(@(v) f_ar(handles,Ar,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat,v),ig); %f_ar.m METHOD FILE (3/5)
80
function Var1 = f_ar(handles,Ar,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat,Var1) gamma = (handles.mv_sys_spec_heat*wet_bulk_density)/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat); Ke1 = Ke/(wet_bulk_density*h_fluid_rock_system_specific_heat) + abs(Var1*gamma)*B; %m^2/sec % Equation from C. Hatch 2006, eqn. 6a Var1 = (exp((Dz/(2*Ke1))*(Var1-((((Var1^4 + ((8*3.14159*Ke1)/P)^2)^(1/2))+Var1^2)/2)^(1/2))) - Ar); %hatchdp.m METHOD FILE (4/5) %Ex-Stream, 2009
81
%Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] % % Note: usage of Dp is not as sensitive as Ar for most cases. Dp will only % return the magnitude of the flux, not direction. % %please email [email protected] for assistance % function vdp11 = hatchdp(handles,Dp,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %for use in calculating the effective thermal dispersivity Dp = Dp*60; % convert from minutes to seconds P = P*60; % "" ig = 10^-5; %inital guess vdp11 = fzero(@(v) f_dp(handles,Dp,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat,v),ig); %f_dp.m METHOD FILE (5/5)
82
function vdp11 = f_dp(handles,Dp,P,Dz,Ke,B,wet_bulk_density,h_fluid_rock_system_specific_heat,v) Vdp11 = v; gamma = (handles.mv_sys_spec_heat*wet_bulk_density)/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat); Ke2= Ke/(wet_bulk_density*h_fluid_rock_system_specific_heat) + abs(Vdp11*gamma)*B; vdp11 = (((P*Dz)/(4*3.14159*Ke2))*(((Vdp11^4 + (8*3.14159*Ke2/P)^2)^(1/2)-Vdp11^2)/2)^(1/2) - Dp);
%calcardp.m DATA PROCESSING FILE
83
%Function to calculate the amplitude ratio and phase difference between two %temperature point-probe measurements. % %This function requires the curve fitting toolbox. % %If mkfig is 1, detailed plots of the original data and the fitted model %will be displayed. If 0, the plot output will be suppressed. It is %recommended that you manually inspect fitted data to assure accurate %estimates. % %This function also writes time, temperature data in /fit_data %so you can plot fitted data within a spread sheet environment % the format of the file is: % column 1 - time % column 2 - actual temperature % column 3 - fitted temperature % %If your fitted data poorly matches your actual temperature data %please adjust 'StartPoint' within the fitoptions for both %time series accordingly function [ar,dp] = calcardp(x,y,y2,perid,mkfig,piezo,therm1,therm2) %If you choose not to use a start point % be sure to un-comment this next line!!! warning off curvefit:fit:noStartPoint % x = time vector % y = temperature deep %y2 = temp shallow %calculate start points perida = perid/(2*pi()); %translate to the mean of the values offsett = mean(y); % use sprintf() with %d for decimal format numbers ... forms a string fitequation = sprintf('a*sin(x/%d + b) + %d',perida,offsett); %form fit type: custom equation with two fit coeffs g = fittype(fitequation, 'coefficients',{'a','b'}); % ff = fitoptions('Method','NonlinearLeastSquares','MaxIter',300000,'Maxfunevals',300000);%,'StartPoint',[1,.2]); ff = fitoptions('Method','NonlinearLeastSquares');%,'StartPoint',[1,.2]); % make cfit object % fit one depth's sinusoid curve = fit(x,y,g,ff);
84
%extract 1x2 matrix containing fitted param's cval = coeffvalues(curve); %fit second depth's sinusoid, etc offsett2 = mean(y2); fitequation2 = sprintf('a*sin(x/%d + b) + %d',perida,offsett2); g2 = fittype(fitequation2, 'coefficients',{'a','b'}); % ff2 = fitoptions('Method','NonlinearLeastSquares','MaxIter',300000,'Maxfunevals',300000);%'StartPoint',[1,.2]); ff2 = fitoptions('Method','NonlinearLeastSquares');%'StartPoint',[1,.2]); curve2 = fit(x,y2,g2,ff2); cval2 = coeffvalues(curve2); soln1 = cval(1,1)*sin(x/perida + cval(1,2)) + offsett; soln2 = cval2(1,1)*sin(x/perida + cval2(1,2)) + offsett2; %write data! filename1 = ['fit_data\fitted_data_' num2str(min(x)) '_to_' num2str(max(x)) '_p_' num2str(piezo) '_s_' num2str(therm1) '.txt']; filename2 = ['fit_data\fitted_data_' num2str(min(x)) '_to_' num2str(max(x)) '_p_' num2str(piezo) '_s_' num2str(therm2) '.txt']; csvwrite(filename1, [x,y,soln1]); csvwrite(filename2, [x,y2,soln2]); %####### find amp ratio and difference in phase %reasonable values for ar: ~.1-.9 %reasonable values for dp: 10^3 - 10^5 %amp ratio ar = abs(cval(1,1)/cval2(1,1)); %difference in phase dp1 = cval(1,2); dp2 = cval2(1,2); %something crafty with the symbolic toolkit / curve fitting toolbox here... if dp1 < 0 while dp1 < 0 dp1 = dp1 + 2*pi(); dp2 = dp2 + 2*pi(); end elseif dp2 < 0 while dp2 < 0 dp1 = dp1 + 2*pi(); dp2 = dp2 + 2*pi(); end end [xmax, ymax] = max(soln1); [xmax2, ymax2] = max(soln2);
85
dp1_old = x(ymax); dp2_old = x(ymax2); dp_old = abs(dp1_old - dp2_old); dp = dp_old; plot_dp_x = [x(ymax), (x(ymax) - dp)]; plot_dp_y = [soln1(ymax),soln2(ymax2)]; %plot fitted model as well, for QA/QC, if so desired... if mkfig ==1 figure plot(x,y) hold on plot(x,y2,'g') plot(x,soln1,'b:') plot(x,soln2,'g:') plot(plot_dp_x,plot_dp_y,'r*') line([(x(ymax) - dp) (x(ymax) - dp)],[soln2(ymax2) (soln1(ymax) -cval2(1,1)/2)]) line([x(ymax) x(ymax)],[soln1(ymax) (soln1(ymax) -cval2(1,1)/2)]) line([(x(ymax) - dp) x(ymax)],[(soln1(ymax) -cval2(1,1)/2) (soln1(ymax) -cval2(1,1)/2)]) text((x(ymax) - dp),(soln1(ymax)-(cval2(1,1)/2)*1.1),[' ' num2str(dp)]) title(['Profile(#): ' num2str(piezo) '; Times : ' num2str(min(x)) ' to ' num2str(max(x)) '; using probes ' num2str(therm1) ' and ' num2str(therm2)]) xlabel('Time, minutes') ylabel('Temperature, º C') legend('Deep Temp', 'Shallow Temp', 'Deep Model', 'Shallow Model'); end if dp1 < 0 || dp2 < 0 fprintf('ERROR!\n'); fprintf('The curve fitting toolbox threw you a "curve"-ball!!! \n'); fprintf('It looks like your phase difference in the fitted \n'); fprintf('model(s) is still negative after line 58 in calcardp.m\n'); fprintf('Therefore, DP will be NaN for this iteration.\n'); fprintf('ERROR!\n\n'); dp = NaN; return else dp = abs(dp1 - dp2)*perida; end dp = dp_old;
86
%bredehoeft.m METHOD FILE function [v_bredhoeft] = bredehoeft(handles) %Ex-Stream, 2009 %Department of Geological Sciences, UT Austin %Travis Swanson % %Contact: [email protected] %Note: Please read bredehoeft,wrr, 1965 for details on the assumptions fprintf('bredehoeft Method Chosen...\n\n') S_to = handles.bv_stream_bed_sensor; %Streambed temperature sensor S_tz = handles.bv_z_sensor; %Temperature sensor at depth Z S_tl = handles.bv_tl_sensor; %Quasi-Steady temperature sensor [n,m]= size(handles.mv_all_temp); %determine the number of iterations max_time_loop = floor(n/handles.mv_osc_period); row_counter = 1; %For loop: provides iteration for flux analysis of each period fprintf('Analytically solving for fluxes\n\n'); for time_counter = 1:1:(max_time_loop) %generate one period of time data if time_counter == 1 start_time = 1; end_time = 1*handles.mv_osc_period; else start_time = (time_counter-1)*handles.mv_osc_period; end_time = time_counter*handles.mv_osc_period; end time_data = (start_time):1:(end_time); %nested for loop: allows flux calculation for each temperature profile fprintf('Computing fluxes from %d to %d oscillation period\n\n',start_time, end_time); for no_piezo_counter = 1:handles.mv_num_profiles fprintf('Computing flux magnitude for profile # %d \n\n',no_piezo_counter) To = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_to)))); Tz = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_tz)))); Tl = mean(handles.mv_all_temp(time_data,((no_piezo_counter*handles.mv_num_sensors)-(handles.mv_num_sensors - S_tl)))); %Error handling % The quantity (Tz-Tl)/(To-Tl) should not be too large if ((Tz-Tl)/(To-Tl)) > .99999 fprintf('#ERROR#\n') fprintf('bredehoeft method may be invalid; ((Tz-Tl)/(To-Tl)) > .99999!\n')
87
fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); fprintf('#ERROR#\n') v_bredhoeft_ph = NaN; %check to see if we are deviding by zero, and handle the error elseif isnan((Tz-Tl)/(To-Tl)) fprintf('#ERROR#\n') fprintf('bredhoeft method may be invalid; ((Tz-Tl)/(To-Tl)) = NaN \n') fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); fprintf('#ERROR#\n') v_bredhoeft_ph = NaN; end %Uncommon matlab statement below, but it works. Trust me. if (1-isnan((Tz-Tl)/(To-Tl))) fprintf('Tz = %d Tl = %d To = %d\n',Tz, Tl, To); v_bredhoeft_ph = (handles.mv_ke/(handles.mv_fluid_dens*handles.mv_fluid_spec_heat*handles.bv_depth_to_tz))*log((Tz-Tl)/(To-Tl)); fprintf('The flux magnitude is: %d [m/day]\n\n ', v_bredhoeft_ph*60*60*24); end v_bredhoeft(time_counter,no_piezo_counter) = v_bredhoeft_ph*60*60*24; end row_counter = row_counter + 1; end %Notify that we are finished fprintf('Bredehoeft Method Complete...\n\n')
88
%fitcurve.m DATA PROCESSING %function to perform curve fitting for amplitude and phase analysis... % function [amp_rat,phas_lag] = fitcurve(x,y,y2,op,mkfig) %function [a,b] = fitcurve(x,y) %========================= %input: %------ %time and temperature must be column vectors %x is time in minutes %y, y2 are temperature %op is the oscillation period (minutes, use 1440) %output: %------ %a is amplitude %b is phase lag in minutes %========================= %%%%%%%first observation point%%%%%%%%%%% m = (2*pi)/op; %generate guesses for parameters [miny, minyi] = min(y); [maxy, maxyi] = max(y); % min - max a = maxy - miny; %min - max time b = x(maxyi); %approx mean c = mean(y); %calculate initial "distance" vector db = y - (a*sin(m*x + b) + c); %while tolerance is not exceeded for i = 1:15 %solve for change in parameters % A' B' AA = [sin(m*x+b), a*cos(m*x+b), ones(size(x,1),1)]; g = AA'*AA; h = AA'*db; % %solve for change in parameters dl = g\h; % %apply change a = a + dl(1); b = b + dl(2); c = c + dl(3); % %calculate new "distance" vector db = y - (a*sin(m*x + b) + c); end % %%%%%%Second observation point%%%%%%%%% %generate guesses for parameters
89
[miny, minyi] = min(y2); [maxy, maxyi] = max(y2); % min - max a2 = maxy - miny; %min - max time b2 = x(maxyi); %approx mean c2 = mean(y2); %calculate initial "distance" vector db2 = y2 - (a2*sin(m*x + b2) + c2); %while tolerance is not exceeded for i = 1:15 %solve for change in parameters % A' B' AA = [sin(m*x+b2), a2*cos(m*x+b2), ones(size(x,1),1)]; g = AA'*AA; h = AA'*db2; % %solve for change in parameters dl = g\h; % %apply change a2 = a2 + dl(1); b2 = b2 + dl(2); c2 = c2 + dl(3); % %calculate new "distance" vector db2 = y2 - (a2*sin(m*x + b2) + c2); end amp_rat = abs(a2/a); soln1 = (a*sin(m*x + b) + c); soln2 = (a2*sin(m*x + b2) + c2); %phas_lag = abs(b2-b); [xmax, ymax] = max(soln1); [xmax2, ymax2] = max(soln2); dp1_old = x(ymax); dp2_old = x(ymax2); dp_old = abs(dp1_old - dp2_old); dp = dp_old; phas_lag=dp; plot_dp_x = [x(ymax), (x(ymax) + dp)]; plot_dp_y = [soln1(ymax),soln2(ymax2)]; %plot fitted model as well, for QA/QC, if so desired... if mkfig ==1 figure plot(x,y) hold on plot(x,y2,'g') plot(x,soln1,'b:') plot(x,soln2,'g:')
90
plot(plot_dp_x,plot_dp_y,'r*') line([(x(ymax) + dp) (x(ymax) + dp)],[soln2(ymax2) (soln2(ymax) -abs(a)/2)]) line([x(ymax) x(ymax)],[soln1(ymax) (soln2(ymax) -abs(a)/2)]) line([(x(ymax) + dp) x(ymax)],[(soln2(ymax2) -abs(a2)/2) (soln2(ymax2) -abs(a2)/2)]) text((x(ymax) - (dp/2)),(soln2(ymax2)-(abs(a2)/2)*1.1),[' ' num2str(dp)]) xlabel('Time, minutes') ylabel('Temperature, º C') legend('Deep Temp', 'Shallow Temp', 'Deep Model', 'Shallow Model'); end
91
References:
Battin, T. J. and others 2008. Biophysical controls on organic carbon fluxes in fluvial
networks. Nature Geoscience 1: 95-100. Bencala, K. E. 2000. Hyporheic zone hydrological processes. Hydrological Processes 14:
2797-2798. Berner, E. K., and Berner, R. A. 1996. Global Environment: Water, Air and
Geochemical Cycles, 376 pp., Prentice-Hall, Upper Saddle River, N. J.
Bredehoeft, J. D., and I. S. Papadopoulos. 1965. Rates of vertical groundwater movement estimated from the Earth's thermal profile. Water Resources Research 1: 325-328.
Cardenas, M. B., and J. L. Wilson. 2007a. Dunes, turbulent eddies, and interfacial
exchange with permeable sediments. Water Resources Research 43: W08412, doi:10.1029/2006WR005787
Cardenas, M. B., and J. L. Wilson. 2007b. Effects of current-bed form induced fluid flow
on the thermal regime of sediments. Water Resources Research 43: W08431, doi:10.1029/2006WR005343
Cardenas, M. B., and J. L. Wilson. 2007c. Exchange across a sediment-water interface
with ambient groundwater discharge. Journal of Hydrology 346: 69-80. Cardenas, M. B., and J. L. Wilson. 2007d. Thermal regime of dune-covered sediments
under gaining and losing water bodies. Journal of Geophysical Research 112: G04013, doi:10.1029/2007JG000485
Cardenas, M. B., J. L. Wilson, and V. A. Zlotnik. 2004. Impact of heterogeneity, bed
forms, and stream curvature on subchannel hyporheic exchange. Water Resources Research 40: W08307, doi: 10.1029/2004WR003008
Cardenas, M. B., and V. A. Zlotnik. 2003a. A simple constant-head injection test for
streambed hydraulic conductivity estimation. Ground Water 41: 867-871. Cardenas, M. B., and V. A. Zlotnik. 2003b. Three-dimensional model of modern channel
bend deposits. Water Resources Research 39: 1141, doi: 10.1029/2002WR001383 Carslaw, H., Jaeger, J. 1959. Conduction of heat in solids. Oxford Clarendon Press. 510
p. Chronic H. 1987. Roadside Geology of New Mexico. Mountain Press Publishing. 260 p.
92
Conant, B. 2004. Delineating and quantifying ground water discharge zones using
streambed temperatures. Ground Water 42: 243-257. Constantz, J. 2008. Heat as a tracer to determine streambed water exchanges. Water
Resources Research 44: W00D10, doi:10.1029/2008WR006996 Elliott, A. H., and N. H. Brooks. 1997. Transfer of nonsorbing solutes to a streambed
with bed forms: Laboratory experiments. Water Resources Research 33: 137-151. Evans, E. C., G. R. Mcgregor, and G. E. Petts. 1998. River energy budgets with special
reference to river bed processes. Hydrological Processes 12: 575-595. Fanelli, R. M., and L. K. Lautz. 2008. Patterns of water, heat, and solute flux through
streambeds around small dams. Ground Water 46: 671-687. Fenchel, T., King, G. M., and Blackburn, T. H. 1998. Bacterial Biogeochemistry:
The Ecophysiology of Mineral Cycling, 307 pp., Elsevier, New York. Goff, F., 2002, Geothermal potential of Valles Caldera, New Mexico. Geo-Heat Center, Quarterly Bulletin, v. 23(4), p. 7-12. Goff, F., 2010, DOSECC (Drilling, Observation and Sampling of the Earths Continental Crust), http://www.dosecc.org/html/valles_caldera.html
Findlay, S. 1995. Importance of surface-subsurface exchange in stream ecosystems- the
hyporheic zone. Limnology and Oceanography 40: 159-164. Gooseff, M. N., D. M. Mcknight, R. L. Runkel, and J. H. Duff. 2004. Denitrification and
hydrologic transient storage in a glacial meltwater stream, McMurdo Dry Valleys, Antarctica. Limnology and Oceanography 49: 1884-1895.
Harvey, J. W., and K. E. Bencala. 1993. The effect of streambed topography on surface-
subsurface water exchange in mountain catchments. Water Resources Research 29: 89-98.
Harvey, J. W., and C. C. Fuller. 1998. Effect of enhanced manganese oxidation in the
hyporheic zone on basin-scale geochemical mass balance. Water Resources Research 34: 623-636.
Hatch, C. E., A. T. Fisher, J. S. Revenaugh, J. Constantz, and C. Ruehl. 2006.
Quantifying surface water-groundwater interactions using time series analysis of streambed thermal records: Method development. Water Resources Research 42: W10410, doi:10.1029/2005WR004787
93
Hazen, A. 1911 Discussion: Dams on sand foundations. Transactions, American Society
of Civil Engineers 73:199. Heiken G., Goff F., Gardner J.N., and Baldridge W.S. 1990. The Valles/Toledo Caldera Complex, Jemez Volcanic Field, New Mexico. Annual Review of Earth and Planetary Sciences 18, 27-53. Hester, E. T., M. W. Doyle, and G. C. Poole. 2009. The influence of in-stream structures
on summer water temperatures via induced hyporheic exchange. Limnology and Oceanography 54: 355-367.
Keery, J., A. Binley, N. Crook, and J. W. N. Smith. 2007. Temporal and spatial
variability of groundwater-surface water fluxes: Development and application of an analytical method using temperature time series. Journal of Hydrology 336: 1-16.
Kennedy, C. D., D. P. Genereux, D. R. Corbett, and H. Mitasova. 2007. Design of a light-
oil piezomanometer for measurement of hydraulic head differences and collection of groundwater samples. Water Resources Research 43: W09501, doi: 10.1029/2007WR005904
Mcclain, M. E., Boyer, E.W., Dent, C.L., Gergel, S.E., Gimm, N.B., Groffman, P.M.,
Hart, S.C., Harvey, J.W., Johnston, C.A., Mayoga, E., McDowell, W.H., Pinay, G. 2003. Biogeochemical hot spots and hot moments at the interface of terrestrial and aquatic ecosystems. Ecosystems 6: 301-312.
Mulholland, P. J., Helton, A.M., Poole, G.C., Hall, R.O., Hamilton, S.K., Peterson, B.J.,
Tank, J.L., Askenas, L.R., Cooper, L.W., Dahm, C.N., Dodds, W.K., Findlay, S.E.G., Gregory, S.V., Grimm, N.B., Johnson, S.L., McDowell, W.H., Meyer, J.L., Valett, H.M., Webster, J.R., Arango, C.P., Beaulieu, J.J., Bernot, M.J., Burgin, A.J., Crenshaw, C.L., Johnson, L.T., Niederlehner, B.R., O'Brien J.M., Potter, J.D., Sheidley, R.W., Sobota, D.J., Thomas, S.M. 2008. Stream denitrification across biomes and its response to anthropogenic nitrate loading. Nature 452: 202-U246.
Nimick, D. A., C. H. Gammons, T. E. Cleasby, J. P. Madison, D. Skaar, and C. M. Brick.
2003. Diel cycles in dissolved metal concentrations in streams: Occurrence and possible causes. Water Resources Research 39: 1247, doi: 10.1029/2002WR001571
Rosenberry, D. O. 2008. A seepage meter designed for use in flowing water. Journal of
Hydrology 359: 118-130.
94
Sawyer, A. H., and M. B. Cardenas. 2009. Hyporheic flow and residence time distributions in heterogeneous cross-bedded sediment. Water Resources Research 45: W084606, doi: 10.1029/2008WR007632
Schmidt, C., B. Conant, M. Bayer-Raich, and M. Schirmer. 2007. Evaluation and field-
scale application of an analytical method to quantify groundwater discharge using mapped streambed temperatures. Journal of Hydrology 347: 292-307.
Self S., Heiken G., Sykes M.L., Wohletz K., Fisher R.V. and Dethier D.P. 1996. Field
excursions to the Jemez Mountains, New Mexico. New Mexico Bureau of Geology and Mineral Resources, Bulletin B-134, 72 p.
Stallman, R. W. 1965. Steady one-dimensional fluid flow in a semi-infinite porous
medium with sinusoidal surface temperature. Journal of Geophysical Research 70: 2821-2827.
Treiman, A., 2003., Valles Caldera,
http://www.lpi.usra.edu/science/treiman/greatdesert/workshop/valles1/index.html Valett, H. M., J. A. Morrice, C. N. Dahm, and M. E. Campana. 1996. Parent lithology,
surface-groundwater exchange, and nitrate retention in headwater streams. Limnology and Oceanography 41: 333-345.
Westrich J.T., Berner, R.A. 1988. The effect of temperature on rates of sulfate reduction
in marine sediments. Geomicrobiology Journal 6: 99-117. White, D. S. 1993. Perspectives in defining and delineating hyporheic zones. Journal of
the North American Benthological Society 12: 61-69. White, D. S., C. H. Elzinga, and S. P. Hendricks. 1987. Temperature patterns within the
hyporheic zone of a northern Michigan river. Journal of the North American Benthological Society 6: 85-91.
Woodside, W., Messmer, J. 1961, Thermal conductivity of porous media. I:
Unconsolidated Sands & II: Consolidated Sands, Journal of Applied Physics, No. 32: 1688-1699 & 1699-1768, 1961
Worman, A., A. I. Packman, L. Marklund, J. W. Harvey, and S. H. Stone. 2007. Fractal
topography and subsurface water flows from fluvial bedforms to the continental shield. Geophysical Research Letters 34: L07402, doi: 10.1029/2007GL029426
95
Vita
Travis Eric Swanson was born and raised in central Texas. After graduating from
high school he attended UT Austin and earned a bachelor of science in geology in August
of 2007. His interest in hydrogeology was sparked and he returned for a master of science
in geology. This thesis is his collective work for the past two and one half years.
Permanent email: [email protected]
This thesis was typed by Travis Eric Swanson.