FISHPACK90 - Efficient FORTRAN Subprograms for the Solution of Separable Elliptic Partial Differential Equations

By John C. Adams (retired)
Paul N. Swarztrauber (deceased, August 2011)
and Roland Sweet (retired)


Figure provided by Jacque Marshall


FISHPACK90 is a modernization of the original FISHPACK, employing Fortran90 to slightly simplify and standardize the interface to some of the routines. It is a collection of Fortran programs and subroutines that solve second- and fourth-order finite difference approximations to separable elliptic Partial Differential Equations (PDEs). These include Helmholtz equations in cartesian, polar, cylindrical, and spherical coordinates, as well as more general separable elliptic equations. The solvers use the cyclic reduction algorithm. When the problem is singular, a least-squares solution is computed. Singularities induced by the coordinate system are handled, including at the origin r=0 in cylindrical coordinates, and at the poles in spherical coordinates.

Test programs are provided for the 19 solvers. Each serves two purposes: as a template to guide you in writing your own codes utilizing the FISHPACK90 solvers, and as a demonstration on your computer that you can correctly produce FISHPACK90 executables.

The FISHPACK90 library and programs are intended to be installed on your computer using the Makefile provided when you download the files in this distribution. The Makefile builds the library and driver executables under the compiler you specify when you run "make".

If your application requires solution of nonseparable elliptic PDEs, or a mix of separable and nonseparable ones, consider using the MUDPACK library instead of FISHPACK90. MUDPACK uses multigrid iteration to approximate separable and nonseparable elliptic PDEs. The software is available on NCAR's web pages. If you are solving separable elliptic PDEs only, and prefer Fortran77 syntax, then you may want to use FISHPACK, also available on NCAR's web pages. Both FISHPACK and FISHPACK90 have the same functionality, though their calling sequences are slightly different and the packages must not be used interchangably without making the appropriate syntax changes.


FISHPACK90 source code is known to break the Fortran Standard in various ways. In particular, the subsidiary FFT routines sometimes pass arguments of one type and use them as another. We have not compiled a comprehensive list of FISHPACK90 infractions. Prospective users who require complete adherence to the standard for their applications are advised that this package is not compliant.

FISHPACK90, Copyright (C) 2004-2011, Computational Information Systems Laboratory, University Corporation for Atmospheric Research