Prometheus Construction Details
Prometheus is a class library that must be built with C++ (the O_c++ and g_c++ PETSc flags), and programming in C++ is the most natural way to use Prometheus (see Prometheus-1.x/Test/ex1.C for an example ).  A FORTRAN interface is also provided (defined in Prometheus-1.x/include/epimetheus.h) which provides wrappers for the primary methods for Prometheus; this interface also serves as the C interface (see Prometheus/Test/ex2.c for an example program with this interface). See here for a description of the Prometheus methods of interest to application users.

The high level interface to our code is through the class Prometheus .  This interface is very simple and serves as a starting point for using Prometheus, and may be adequate for some applications.  Other application may, however, require lower level interaction with PETSc or different solver constructions - this can be pursued in one of two ways.  One can either "hack" the Prometheus solver interface code (located in Prometheus-1.x/src/struc_solv.C), or derive ones own class from Prometheus.  The hack method may be appropriate for prototyping a solver construction and evaluating the effectiveness of Prometheus on your problems, but has the long term disadvantage that as new version of Prometheus become available, reintegrating your changes in library may be tedious and error prone.  Long term users will most likely want to encapsulate their particular solver construction in the methods of a class, derived from Prometheus or its precursors.

PETSc and Prometheus have many multigrid solver parameters, we use the PETSc facility to process command line arguments (see Prometheus-1.x/Test/run.$(PETSC_ARCH) for examples); Prometheus will call PETSc methods to process command line options for the solver.  We have added additional command line options (described here), to provide an interface to many of the options within Prometheus.  Some algorithmic options have not been given a command line interface, thus the advanced user may need a lower level interface, as described below.  See the PETSc documentation for use of the PETSc command line options and here for our added command line options.

Note, we use the first (i.e.  PLOG_USER_EVENT_LOW_STATIC,..., LOG_TOT)  several user "channels" for performance measurements, see Prometheus-1.x/include/object.hh for these definitions.