Software

Open-source tools built for performance

I develop methods with real-world applications in mind, combining mathematical foundations with thoughtful interfaces, rigorous testing, and careful attention to performance. The goal is to create scientific software that scales from benchmark problems to real models, data, and applications. I personally measure success by how well the software is adopted and used by the community, potentially well beyond the original scope of the project.

GridapROMs.jl screenshot

Author

GridapROMs.jl

A Julia package for reduced-order modelling of parameterised PDEs. It covers a wide range of equations, ranging from electromagnetics to nonlinear fluid dynamics, steady or transient, from problems defined on moving geometries to ones partitioned across multiple processors in HPC-friendly environments. Its reduced-order algorithms have achieved speedups several thousand times over full-order simulations.

  • POD, Tucker, tensor-train, interpolation, and localised subspace strategies, all behind the same high-level, readable interface.
  • Distributed-memory (MPI) snapshot generation for the offline stage; newer than the rest of the library and still maturing.
  • Lazy evaluation keeps the cost of generating training data under control, which matters most for large-scale problems, whether they're solved serially or in parallel.
Opal.jl icon

Author

Opal.jl

A Julia package for data assimilation and inverse modelling, bringing sequential filters and variational estimators together behind a unified interface.

  • Kalman -- including extended/unscented/ensemble versions -- and particle filters, plus 3D-/4D-Var, all sharing the same execution and diagnostics.
  • Things like covariance localisation/inflation, adaptive noise estimation, and bias-aware correction are wrappers around a common filter interface, so you compose what you need instead of picking a monolithic implementation off a shelf.
  • A reservoir-computing (echo state network) module I wrote from scratch for the bias correction, which turned out more accurate and cheaper to train than ReservoirComputing.jl on the benchmarks I ran.
  • Natively integrated with SciML for ODEs and with Gridap/GridapROMs for full- and reduced-order PDE models, so a reduced-order surrogate can drop in for a full-order solver without touching the assimilation code.
NonlinearROMs.jl (work in progress)

Author · Work in progress

NonlinearROMs.jl

A Julia package for nonlinear, deep-learning-based reduced-order models, currently under active development. The focus is neural operators: Fourier neural operators (FNOs) and NOMADs are already implemented, DeepONets are in too, and graph neural operators (GNOs) are next.

How I design software

  • Interfaces built around the underlying mathematical structure of the method.
  • Unit testing, CI/CD, profiling, and benchmarking as part of normal development.
  • Reproducible environments and documented workflows.
  • Designed to work both for someone prototyping a new method and for someone integrating it into a larger pipeline.