These are some of my recent and active coding projects, research-related or otherwise. Check my public github or MIT github for more.

Simulated activation of a mixed sea-salt and sulfate population


One of the most fundamental tools in the arsenal of an atmospheric physicist studying cloud phenomena is the parcel model, a 0-dimensional representation of an ascending plume of air. Parcel models model the thermodynamic evolution of such a plume, and can be used to studying many physical phenomena. To aid my research in developing novel aerosol-cloud interaction schemes for atmospheric models, I've developed an extensible warm-cloud parcel model with a simple physico-chemical representation of droplets. With this tool, one can simulate droplet activation dynamics in detail, and compare against parameterizations or observations from the field and laboratory.


  • Written in Python, with either a numba or Cython core for solving model equations
  • Library, command-line, and file I/O interfaces for running simulations
  • Multiple output formats and options
  • Includes library of activation schemes, thermodynamic functions, and aerosol/droplet size distribution tools

Intercomparison of AeroCom model predicted cloud ice burdens


This library contains many helpful utilities for analyzing CESM-MARC experiment output, including an experiment-manager, vertical interpolation routines, cartographic plotting, and much more. Many of the functions are wrapped in command-line scripts. Note - this is an actively-evolving project serving my research needs and will need a thorough re-write/re-organization before others can take advantage of it!


  • Built on top of Python/xarray/Cartopy
  • Command-line utilities for multi-experiment NetCDF file manipulation and comparison plotting
  • Wraps additional dask routines for out-of-core computing on very large climate model output datasets

Simulation of secondary droplet mode forming from initial cloudwater population


Capturing the physics of how droplets interact within a cloud and how their size distribution changes over time is a challenging problem for atmospheric modelers. Droplet collision and coalescence is often very crudely parameterized in global models, but even detailed spectral bin models have issues with faithfully capturing their effects. This model implements the Superdroplet method using an object-oriented framework to solve the stochastic collision/coalescence equation and evolve a droplet size distribution over time for some simple (non-turbulent) collision kernels.


  • Multiple versions - Python+Cython, C++, Fortran 2008, Julia, and Chapel (coming soon)
  • Straightforward configuration with ASCII output (consistent between implementations)
  • Go-to "hello, world" application for OOP/scientific computing

Comparison between Python PHA implementation and reference Fortran for two stations


In 2011, I participated in the Google Summer of Code under the mentorship of the Climate Code Foundation. My goal was to open-source and de-obfuscate a complex piece of Fortran code that quality-controlled the United States' historical surface temperature record by applying statistical analyses to detect breakpoints and anomalous trends in the network of station observations. We had broader goals of developing alternative homogenization algorithms (building a library) and of building a platform for meta-analysis of the homogenization technique for assessing statistical uncertainty, but the initial goal proved very daunting and time-consuming.

Critically, this project was a wake-up call in how important software engineering is when developing scientific codes - especially those in operational or production contexts. This project identified several major bugs in the original PHA algorithm, which ultimately contributed to a small increase in our best estimate of how much the US warmed over the past century!