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):
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:
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.