next up previous contents index
Next: 8.3 Bug Reporting Up: 8 Additional Information Previous: 8.1 Building the Library

8.2 Calling from Fortran

 

Although HYPRE is written in C, a Fortran interface is provided. The Fortran interface is very similar to the C interface, and can be determined from the C interface by a few simple conversion rules. These conversion rules are described below.

Let us start out with a simple example. Consider the following HYPRE prototype:

int HYPRE_IJMatrixSetValues(HYPRE_IJMatrix  matrix,
                            int  nrows, int  *ncols,
                            const int *rows, const int  *cols,
                            const double  *values);
The corresponding Fortran code for calling this routine is as follows:
      integer*8         matrix, 
      integer           nrows, ncols(MAX_NCOLS)
      integer           rows(MAX_ROWS), cols(MAX_COLS)
      double precision  values(MAX_COLS)
      integer           ierr

      call HYPRE_IJMatrixSetValues(matrix, nrows, ncols, rows, cols,
     &                             values, ierr)
The Fortran subroutine name is the same, unless the name is longer than 31 characters. In these situations, the name is condensed to 31 characters, usually by simple truncation. For now, users should look at the Fortran drivers in the test directory for the correct condensed names. In the future, this aspect of the interface conversion will be made consistent and straightforward.

The Fortran subroutine argument list is always the same as the corresponding C routine, except that the error return code ierr is always last. Conversion from C parameter types to Fortran argument type is summarized in Table 8.1.

  
Table 8.1: Conversion from C parameters to Fortran arguments

Arrays arguments in HYPRE are always of type (int *) or (double *), and the corresponding Fortran types are simply integer or double precision arrays. Note that the Fortran arrays may be indexed in any manner. For example, an integer array of length N may be declared in fortran as either of the following:

      integer  array(N)
      integer  array(0:N-1)

HYPRE objects can usually be declared as in the table because integer*8 usually corresponds to the length of a pointer. However, there may be some machines where this is not the case (although we are not aware of any at this time). On such machines, the Fortran type for a HYPRE object should be an integer of the appropriate length.


next up previous contents index
Next: 8.3 Bug Reporting Up: 8 Additional Information Previous: 8.1 Building the Library

Thomas Treadway
Fri Jul 27 10:01:25 PDT 2001