I’m an Assistant Professor of Earth Sciences at Dartmouth College.

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 research applies a wide range of integrated computational, field, and 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.

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.

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:

  • Standalone eruption/deposition age modelling Binder

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.

  • Coupled eruption-age and age-depth modelling Binder

  • Age-depth modelling with simple Gaussian age constraints Binder

  • Age-depth modelling with radiocarbon age constraints Binder

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

  • Weighted bootstrap resampling Binder

  • Julia-alphaMELTS interface demo Binder

  • Julia-Perple_X interface demo Binder

  • Constant-silica reference crustal model (see Keller & Harrison, 2020) Binder