Hydrology PhD Candidate at Colorado School of Mines: large-domain river temperature modeling, remote sensing, and hydraulic modeling
I research the prediction of river temperature in streams without local observations as a PhD Candidate in Hydrology at Colorado School of Mines working with Dr. Terri Hogue. To do that, I mainly build new river temperature models, as well as researching efficient quantification of stream thermal regimes. I have also worked with hydraulic modeling and maintain several HEC-RAS automation tools.
My main area of research is stream temperature modeling. All of my related software is documented on the TempEst website. Broadly, I investigate large-scale patterns in stream temperature and how to efficiently predict them.
I focus on statistical modeling for ungaged/unmonitored streams at the contiguous United States (CONUS) scale. These all have more extensive descriptions on the TempEst website.
Modeling stream temperature through application of a stream thermal regime requires studying the stream thermal regime. In particular, TempEst 2’s SCHEMA approach depends on having a high-accuracy quantification of the seasonal thermal regime through an annual temperature cycle function. That is the subject of “Improved annual temperature cycle function for stream seasonal thermal regimes”, which introduces the “three-sine function” for accurately quantifying stream seasonal thermal regimes across diverse environments such as mountain and desert streams. Three-sine seasonal thermal regimes can be automatically fitted to temperature data using the rtseason Python package. There is also an R implementation.
All of the software I have developed, below, is free and open-source under the terms of the GNU General Public License (GPL) v3. Briefly, you are free to reuse, modify, and redistribute the software and source code, as long as any derivatives are also released under the GPL.
The SCHEMA framework I developed for TempEst 2 seems to have the potential for more general application, so I built a Python package, LibSCHEMA, enabling automatic implementation of SCHEMA models: you provide the seasonality and anomaly functions, LibSCHEMA does the rest.
The idea is that, where it comes to software development, a researcher probably spends more time implementing (and debugging) general software logistics - data management, model execution, general program logic, etc - than implementing the core model functions. Since SCHEMA is a very general framework, we can provide all of that general logistics code ahead of time for a huge range of models, and programming time can be spent just on the model functionality. How general? Pretty much any lumped model can be wrangled into a SCHEMA framework. For example, a curve number-based hydrologic model could include baseflow as the seasonal component and the full hydrograph logic as the anomaly component.
Having all that written out in a general way allows LibSCHEMA to provide some extra functionality, too. There are two major areas where it does so. First is the concept of “modification engines”: model coefficients shouldn’t necessarily be static over the entire model run, and LibSCHEMA is capable of automatically updating them as the model runs. These can implement arbitrary modifications to the seasonality and anomaly components based on any input data. One example would be data assimilation: the modification engine can request “yesterday’s observation” as an additional input and use it to adjust coefficients over time.
The other major capability provided for free is a Basic Model Interface implementation. That’s a general framework for model interoperability, and particularly relevant for working with NOAA’s NextGen National Water Model Framework, which is based on the BMI. LibSCHEMA provides a full-fledged BMI implementation for any LibSCHEMA model, and that’s a lot of boilerplate and testing that you don’t have to worry about.
These highlight a more general point: any model implemented with LibSCHEMA benefits from general advances in model implementation with no extra work. For example, LibSCHEMA can intelligently decide whether to run the model as a single pass (for historical prediction), which is very fast because of vectorized calculations but doesn’t allow modification engines, or step-by-step, which is slower but works with modification engines. That’s already one thing the researcher doesn’t have to worry about. But I have plans for smarter approaches, like running single-pass in between modification engine steps or working out how to apply a modification engine ahead of time and then run the whole thing in a single pass, and when those are implemented, all LibSCHEMA models get the upgrade with no extra programming.
All stream temperature models below provide a straightforward implementation (e.g., one function called with an input data frame) and come with a pre-trained model in some form and an automated data retrieval process.
pip
) and as Python and R source code, though the R version is not actively maintained and lacks some functionality improvements.To support more efficient research on river hydraulics and restorations, I have developed several HEC-RAS automation tools. They are available as Python packages on the Python Package Index. In general, these are not under active development, but I will address Issues opened on their GitHub repositories (linked from the PyPI pages) as I have the time.