POOMA (Parallel Object-Oriented Methods and Applications) is a collection of templated C++ classes for writing parallel PDE solvers using finite-difference and particle methods (see also Overture).

POOMA programs are written at a very high-level, using data-parallel array expression in the style of HPF or at a serial level using iterators on each CPU. They can achieve high performance (comparable to Fortran) thanks to a clever compilation technique called expression templates. Moreover, they achieve true portability across serial, parallel and distributed architectures.

POOMA offers two main parameterized types, Fields and Particles, and many other supporting types.

Fields. Fields are multidimensional arrays representing grids with definable centering. They may be fully contained within a processing node, or spread across nodes, according to user directives. POOMA predefines field types for the most common element types: scalars (double, int, etc.) vectors, tensors, and symmetric tensors. POOMA users may specify other arbitrary element types, although this is not completely straightforward (it requires familiarity with a technique called Traits, described by N. Meyers in A New and Useful Template Technique: "Traits", C++ Report 7, 32-35, June 1995).

Particles. An instance of the Particle class actually stands for a set of particles, with user-definable characteristics. Particle sets may also be distributed across nodes, and operations on them are expressed in a data-parallel style.

POOMA II includes functionality for unstructured and adaptively refined meshes. In summary, POOMA provides high-level data-parallel types that make it easy to write parallel PDE solvers without worrying about the low-level details of layout, data transfer, and synchronization.


POOMA can be used to write high-performance PDE solvers using finite-difference methods on structured, unstructured, or adaptive grids, particle methods, or hybrid methods which combine the above.

The following applications are known users of POOMA (all in close collaboration with the POOMA development team):

  • Multimaterial hydrodynamics (Conejo, ASCI Project). This simulates multiple materials on a sparse-storage Eulerian grid under supersonic conditions and Young's interface reconstruction to handle material interfaces.
  • Monte-Carlo Neutronics (MC++, ASCI Project). This Monte-Carlo particle code simulates the production, transport and interactions of neutrons with materials in a complex geometry.
  • Accelerator Physics. Two dimensional and three dimensional PIC codes for the study of beam dynamics, particularly beam halo effects, in advanced particle accelerators.
  • Volume Fraction and Programmed Burn (Calico, ASCI Project). Input geometry primitives and perform calculations of high explosive burn.
  • Numerical Tokamak. A full geometry gyrokinetic code in flux coordinates.

The images in the left panel come from applications that use POOMA. Click on the small icons to display the full image.


NERSC has not evaluated POOMA yet, but you can submit your own evaluation of POOMA if you would like to.


The latest release version of POOMA is 2.3.0. This version supports message-passing based parallelism for clusters and thread-based parallelism for shared memory multiprocessors.

POOMA has been ported to the following computer platforms and compilers:

  • UNIX
    • SGI IRIX 6.X with the KCC compiler from Kuck and Associates, Inc (v3.3d or later)
    • SGI IRIX 6.X with the MIPSpro 7.3 compiler from SGI
    • SGI IRIX 6.X with the EGCS/GCC compiler (v2.95.2 or above)
    • Linux, with the KCC compiler from Kuck and Associates, Inc. (v3.3d or later)
    • Linux with the EGCS/GCC compiler (v2.95.2 or above)
    • The Intel C++ compiler under MS Visual C++ 6.0 (Inter C++ is part of VTune 4.0)
    • Metrowerks CodeWarrior Professional 5.x
  • Macintosh
    • MacOS 8.X (PowerPC only) using Metrowerks CodeWarrior Professional 5.x
For further information, please visit


The POOMA User Guide lists two possible uses of POOMA: multimaterial hydrodynamics and particle-in-cell plasma simulation. The examples are small and to the point.


POOMA was developed at the Advanced Computing Laboratory at Los Alamos National Laboratory as a general purpose C++ framework for parallel scientific computation; its principal developers were Steve Karmesin, Scott Haney, Bill Humphrey, Julian Cummings, Tim Williams,Jim Crotinger, Stephen Smith and Eugene Gavrilov.

Tools News Project Home