About
Despite the static appearance of Earth’s continental crust on human timescales, the composition and structure of the crust has changed markedly throughout Earth history. My group applies a wide range of integrated computational, field, and thermo/geochronological approaches to better understand the history of the solid Earth, particularly including the formation of the continental crust and its coevolution with the biosphere and the surface Earth system.
Research group
Jannitta Yao Graduate Student | Reina Harding Graduate Student | Alexander Cox Graduate Student |
Ke Gao Visiting Graduate Student | Kalin McDannell Postdoctoral Fellow | Graham Edwards Postdoctoral Fellow |
Alumni
Theodore Green Dartmouth Senior Fellow Class of 2021 | Gailin Pease Master of Science Class of 2021 | Akshay Mehra Postdoctoral Fellow 2019-2022 |
Resources
For mineral (especially zircon) eruption/deposition age estimation, there is a simple example in this BayeZirChron demo notebook based on Keller, Schoene, & Samperton (2018), or the Chron.jl version of the same notebook:
While originally developed for zircon eruption age estimation, an analagous approach is also applicable to plutonic settings (e.g., Ratschbacher et al., 2018), or to the problem of finding the distribution of the limits of a highly dispersed mineral crystallization (or closure) age spectrum more broadly.
Other Chron.jl example notebooks demonstrate the integration of this eruption/deposition approach with age-depth modelling, or standalone age-depth models.
If you’re interested in “statistical geochemistry”, especially weighted bootstrap resampling of whole-rock geochemical data, try StatGeochem.jl (Julia), or else StatisticalGeochemistry (Matlab, no longer actively developed). A number of example usage notebooks are available in the StatGeochem.jl repo, including
Constant-silica reference crustal model (see Keller & Harrison, 2020)
Over the past few years, I have transitioned most of my computational research from a C-and-Matlab two-language workflow (C for heavy lifting / parallel work, and Matlab everything else) to a pure Julia workflow, using MPI.jl for most parallel/HPC work, along with packages like LoopVectoriztion.jl and VectorizedRNG.jl for SIMD performance. I have written up a few notes of advice for anyone else who is interested in doing the same. The short version: efficient multiple dispatch really does provide a solution to the “two-language problem”, but the dispatch-centric programming paradigm can take quite a while to fully internalize; beware type instability.