Software
Below are open-source libraries I have contributed to or maintain. Additional code and experiments are on GitHub.
torch-harmonics
torch-harmonics is a differentiable implementation of the spherical harmonic transform in PyTorch. It was originally developed for Spherical Fourier Neural Operators and is now used more broadly for global weather models, differentiable PDE solvers, and operator learning on the sphere. The library combines quadrature rules with FFT-based projections onto the harmonic basis and supports distributed computation across GPU ranks.
Examples below include SFNO weather rollouts, a zonal-jet simulation, and an Allen–Cahn solve on the sphere:
pip install torch-harmonics
makani
Makani is a training framework for large machine-learning weather and climate models in PyTorch. It scales from a single GPU to thousands on ERA5-scale and similar reanalysis datasets, with data pipelines, model configurations, and distributed training utilities built in. Makani was used to train FourCastNet, SFNO, and AFNO.

neuraloperator

NeuralOperator is a PyTorch library for learning mappings between function spaces—neural operators that generalize across resolutions and domains. It ships the reference implementations of Fourier Neural Operators and related architectures (FNO, tensorized TFNO, Galerkin-style layers), together with training utilities and PDE benchmark examples. Operators are resolution invariant: a model trained on one grid can be applied on another without retraining. The project is part of the PyTorch ecosystem; see the documentation and the practical guide for tutorials. I contribute to the core library and use it across several operator-learning projects.
pip install neuraloperator
HssMatrices.jl
HssMatrices.jl implements hierarchically semi-separable (HSS) matrices in Julia for PDE-related linear algebra. HSS compression represents dense blocks arising in sparse factorizations by low-rank structure, enabling fast matrix–vector products and approximate arithmetic. The package includes construction, multiplication, factorization hooks, and tools to visualize rank structure—useful when developing hierarchical preconditioners for wave problems.
HierarchicalSolvers.jl
HierarchicalSolvers.jl is an approximate sparse direct solver in Julia that exploits hierarchical low-rank structure during factorization. Combined with nested-dissection orderings, it achieves quasi-linear complexity on many wave and Helmholtz problems and can be used as a robust preconditioner inside Krylov iterations. This code grew out of my PhD work on scalable solvers for time-harmonic wave equations.
nodal-dg-extensions
nodal-dg-extensions extends the nodal-dg Matlab library with continuous Galerkin (CG) discretizations on triangular meshes, alongside the existing discontinuous Galerkin (DG) machinery. The design reuses the same nodal data structures so CG and DG variants can be compared in a unified framework—mainly for research prototypes and teaching.