This website will provide links to open-source released software packages (well-documented and extensively tested), and provide prototyping software packages (not yet documented, in the process of being released, more testing needed).

These software packages were supported by NSF 0327896 (2003-2008), 0411920 (2004-2008), 0811130 (2008-2012), 0854961 (2009-2013), 0905473 (2009-2013), 0941235 (2009 – 2015), 1217080 (2012-2016), and 1821093 (2018-2021).

I. FMM Algorithms

  1. (outdated) New Version of FMM (Fortran version, sequential): This was the first open-source released new version of FMM package, written in Fortran.  The FMM-Yukawa package is available at These Fortran packages are no longer maintained or supported. You can email or for FMM-Laplace, FMM-Yukawa, or FMM-Helmholtz (low frequency).
  2. (outdated) New Version of FMM (C and Fortran, parallel): The Fortran version was later rewritten using both C (for parallelization and the hierarchical tree structure parts) and Fortran (for the basic translations), the code was parallelized using a “dynamic prioritization technique”, see These packages are no longer maintained or supported. You can email or for these updated versions of FMM-Laplace, FMM-Yukawa, and FMM-Helmholtz (low frequency).
  3. (Active, code officially released) RecFMM: recursive parallelization of the Adaptive Fast Multipole Method (C, C++, and Cilk++, designed for shared memory architecture). This is the most recent version of the FMM code. The FMM algorithms are rewritten in their recursive forms, and are parallelized using the Cilk Runtime System. You can find the open-source released codes from You may also download the code from here. We recommend that you contact or for the up-to-date version, or report any bugs.

Currently, one of the developers of RecFMM is working on DASHMM: Dynamic Adaptive System for Hierarchical Multipole Methods, designed for distributed memory systems. Check the website, or you can also download from

II. Simulating Biomolecular Systems

  1. (Outdated) AFMPB (Fortran version, sequential): An adaptive fast multipole Poisson–Boltzmann solver for calculating electrostatics in biomolecular systems. This solver is based on Fortran version of FMM-Laplace and FMM-Yukawa. You can download the code from Or email or to get the code.
  2. (Active, code officially released) pAFMPB (uses RecFMM for shared memory computing platforms): this is the parallel version of the AFMPB, with a lot of changes to improve the efficiency, accuracy, and to provide more functions. You can download the code from, or email or
  3. (Active, working on documentation and testing) RecRPY (uses RecFMM for shared memory computing platforms): this code computes the Rotne–Prager–Yamakawa tensor applied to a given vector. The RPY tensor describes the hydrodynamic interactions of the biomolecular systems. This is an ongoing project. The prototyping code can be downloaded here. The developers are working on the documentation and more testings and will officially release the code soon.
  4. (Active, prototyping Matlab code) RecOMV: Fast orthogonal matrix generator and fast orthogonal matrix vector muliplications. These algorithms are designed for the Brownian dynamics simulations of the biomolecular systems, where (part of) molecules are modeled as rigid bodies. The code was implemented in Matlab, and will be rewritten in C, C++, and Cilk++. The Matlab code can be found here.
  5. (Active, code not yet available) A new Brownian dynamics simulation package. This is an ongoing project, code will be release soon.

III. Numerical time stepping algorithms

  1. (Active, prototyping Matlab code) KDC-DAE: The Krylov deferred correction methods for differential algebraic equation systems. This is the prototyping KDC solver for general differential algebraic equation systems. It is not yet documented. We have tested the code for several examples. We also called several open-source packages from our research community. We found these external general purpose codes are not optimal for our specific problem settings. We are currently working on refining these external routines. You can find the preliminary version of the Matlab code here, or please contact
  2. (Active, prototyping Matlab code) Numerical methods for the “Good” Boussinesq Equation. We developed a 2nd order operator splitting method (download Matlab code here), the spectral and Krylov deferred correction methods for the original system (download Matlab code here), and an integral equation preconditioned spectral deferred correction method (download Matlab code here). These codes are still under development. Reference papers are submitted and are in the review process. Or contact This is joint work with Prof. Cheng Wang at UMass Dartmouth and Prof. Xingye Yue at Soochow University of China.
  3. (Active, prototyping Matlab and C codes) Nonlinear Schrodinger Equation. We implemented several integral equation preconditioned iterative methods for the nonlinear cubic Schrodinger equation. A paper is in preparation, and you can contact for the prototyping undocumented codes. This is joint work with Prof. Jianfeng Lu at Duke University.
  4. (Active, prototyping Matlab code) Simulation of a geochemical system. We are developing codes for simulating general geochemical systems. A matlab package is developed and tested for several “manufactured” cases. The package outperforms existing solvers. Contact to get a copy of the code. We are currently testing the code on real systems and are still trying to resolve some encountered problems which we believe is due to the stiffness caused by the high-order differential operators and the small size meshes close to the boundary of the simulation domain.

IV. Tools

  1. Mathematica file to generate different quadrature nodes and the corresponding spectral integration matrix. Find the code here. Users need to change the generating polynomial for different nodes.