Research at the Interface of Solvers and Discretizations
I have, for the past decade, focused on developing the interface between advanced discretizations and the PETSc solver library. The DMPlex API for parallel, unstructured mesh query and manipulation works in any dimension, and for hybrid meshes with cells of any type, including lower dimensional cells used in cohesive element formulations. Using this interface, he demonstrated optimal complexity unstructured multigrid in two and three dimensions. This mesh support is currently used by the PyLith package for both dynamic and quasi-static tectonics simulation.
As a participant in the FEniCS project, I have developed technology for optimization of finite element integration, compilation of weak form expressions into PETSc-compatible C code as well as CUDA code. The FEniCS tools, with some support in PETSc, have been used to automatically discretize and solve PDE systems, principally fluid dynamics problems.
Knepley has also worked to support discretizations other than finite elements using PETSc. The PyClaw package, a state-of-the-art simulator for hyperbolic systems, uses PETSc for parallel data management, and has shown excellent speedup on the entire IBM BG/P at KAUST for sophisticated multi-material elastic wave propagation problems. I have also developed an efficient PETSc solver for the radial basis function interpolation problem, which can be used in conjunction with a parallel fast multipole method developed using PETSc infrastructure, which has been used to solve large gravity field determination problems in geophysics.
Perspectives on Computational Science
- Here is an article I wrote for the Encyclopedia of Applied and Computational Mathematics. It is an overview of organizational strategies employed in scientific code, and how particular programming language constructs are used to implement them. I give examples from C, C++, Fortran, and Python, and libraries that use all of them.
- Jed wrote an article (and Barry and I helped), about the need for runtime customization and extensibility in libraries. It also marks the debut of Firetran.