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

by
John Adams
Paul Swarztrauber
Roland Sweet

FISHPACK90 is a modernization of the original FISHPACK.
Details of the changes

FISHPACK90 is incompatible with FISHPACK.

FISHPACK mascot

(figure provided by Jacque Marshall)

This document consists of three parts:

  1. FISHPACK90 Introduction

  2. FISHPACK90 Solver Description

  3. Obtaining FISHPACK90 Software

1. FISHPACK90 Introduction

FISHPACK90 is a collection of FORTRAN subprograms that use cyclic reduction to directly solve second- and fourth-order finite difference approximations to separable elliptic Partial Differential Equations (PDEs) in a variety of forms. (See MUDPACK for software that uses multigrid iterative techniques to approximate separable and nonseparable elliptic PDEs).

FISHPACK90 includes solvers for the Helmholtz equation in Cartesian, Polar, Cylindrical, and Spherical coordinates as well as solvers for more general separable elliptic equations. Provisions are made to handle coordinate-system-induced singularities (e.g., at the origin r=0 in cylindrical coordinates and at the poles in spherical coordinates). Solutions obtained in the least-squares sense are computed for singular problems.

2. FISHPACK90 Solver Description

The following table summarizes the contents of FISHPACK90. Descriptions can be obtained by clicking on the solver name. De cri PDEs solved are included after the table.

An Overview of FISHPACK90 Solvers
computation subprogram test program
2D Helmholtz in Cartesian coordinates (centered grid) hwscrt thwscrt
2D Helmholtz in polar coordinates (centered grid) hwsplr thwsplr
2D Helmholtz in cylindrical coordinates (centered grid) hwscyl thwscyl
2D Helmholtz in spherical coordinates (centered grid) hwsssp thwsssp
2D Helmholtz in spherical coordinates (centered grid, axisymmetric) hwscsp thwscsp
2D Helmholtz in Cartesian coordinates (staggered grid) hstcrt thstcrt
2D Helmholtz in polar coordinates (staggered grid) hstplr thstplr
2D Helmholtz in cylindrical coordinates (staggered grid) hstcyl thstcyl
2D Helmholtz in spherical coordinates (staggered grid) hstssp thstssp
2D Helmholtz in spherical coordinates (staggered grid, axisymmetric) hstcsp thstcsp
3D Helmholtz in Cartesian coordinates (centered grid) hw3crt thw3crt
2D General Separable PDE (second or fourth order, centered grid) sepeli tsepeli
2D Separable PDE (second or fourth order, centered grid) sepx4 tsepx4
real linear systems solver (centered grid, sepx4 ) genbun tgenbun
complex linear systems solver (centered grid) cgenbun  
real block tridiagonal linear systems solver (centered grid, sepeli) blktri tblktri
real linear systems solver (staggered grid) poistg tpoistg
real linear systems solver (3D, centered grid) pois3d tpois3d
complex linear systems solver (centered grid) cmbnbn tcmgnbn
complex block tridiagonal linear systems solver (centered grid) cblktri tcblktri
real and complex fft package fftpack use with 3D solvers

DESCRIPTION

The form of the elliptic equations approximated are outlined below. The solvers allow periodic, specified, or derivative boundary conditions.

hwscrt

Subroutine for solving the standard five-point finite difference approximation to the Helmholtz equation in cartesian coordinates using a centered finite difference grid.

(d/dx)(du/dx) + (d/dy)(du/dy) + lambda*u = f(x,y)

Additional files required: genbun, gnbnaux, comf
Sample program file: thwscrt

hwsplrp

Subroutine for solving a five-point finite difference approximation to the Helmholtz equation in polar coordinates using a centered finite difference grid.

(1/r)(d/dr)(r(du/dr)) + (1/r**2)(d/dtheta)(du/dtheta) + lambda*u = f(r,theta)

Additional files required: genbun, gnbnaux, comf
Sample program file: thwsplrp

hwscyl

Subroutine for solving a five-point finite difference approximation to the modified Helmholtz equation in cylindrical coordinates using a centered finite difference grid.

(1/r)(d/dr)(r(du/dr)) + (d/dz)(du/dz) + (lambda/r**2)*u = f(r,z)

Additional files required: genbun, gnbnaux, comf
Sample program file: thwscyl

hwsssp

Subroutine for solving a five-point finite difference approximation to the Helmholtz equation in spherical coordinates and on the surface of the unit sphere using a centered finite difference grid

(1/sin(theta))(d/dtheta)(sin(theta)(du/dtheta)) +
(1/sin(theta)**2)(d/dphi)(du/dphi) + lambda*u = f(theta,phi)

Additional files required: genbun, gnbnaux, comf
Sample program file: thwsssp

hwscsp

Subroutine for solving a five-point finite difference approximation to the modified Helmholtz equation in spherical coordinates assuming axisymmetry (no dependence on longitude) using a centered finite difference grid.

(1/r**2)(d/dr)(r**2(du/dr)) +
1/(r**2*sin(theta))(d/dtheta)(sin(theta)(du/dtheta)) +
(lambda/(r*sin(theta)**2))*u = f(theta,r)

Additional files required: blktri, comf
Sample program file: thwscsp

hstcrt

Subroutine for solving the standard five-point finite difference approximation to the Helmholtz equation in cartesian coordinates using a staggered finite difference grid

(d/dx)(du/dx) + (d/dy)(du/dy) + lambda*u = f(x,y)

Additional files required: genbun, poistg, gnbnaux, comf
Sample program file: thstcrt

hstplr

Subroutine for solving a five-point finite difference approximation to the Helmholtz equation in polar coordinates using a staggered finite difference grid

(1/r)(d/dr)(r(du/dr)) + (1/r**2)(d/dtheta)(du/dtheta) + lambda*u = f(r,theta)

Additional files required: genbun, poistg, gnbnaux, comf
Sample program file: thstplr

hstcyl

Subroutine for solving a five-point finite difference approximation to the modified Helmholtz equation in cylindrical coordinates using a staggered finite difference grid.

(1/r)(d/dr)(r(du/dr)) + (d/dz)(du/dz) + (lambda/r**2)*u = f(r,z)

Additional files required: genbun, poistg, gnbnaux, comf
Sample program file: thstcyl

hwsssp

Subroutine for solving a five-point finite difference approximation to the Helmholtz equation in spherical coordinates and on the surface of the unit sphere using a staggered finite difference grid

(1/sin(theta))(d/dtheta)(sin(theta)(du/dtheta)) +
(1/sin(theta)**2)(d/dphi)(du/dphi) + lambda*u = f(theta,phi)

Additional files required: genbun, poistg, gnbnaux, comf
Sample program file: thstssp

hstcsp

Subroutine for solving a five-point finite difference approximation to the modified Helmholtz equation in spherical coordinates assuming axisymmetry (no dependence on longitude) using a staggered finite difference grid.

(1/r**2)(d/dr)(r**2(du/dr)) +
1/(r**2*sin(theta))(d/dtheta)(sin(theta)(du/dtheta)) +
(lambda/(r*sin(theta)**2))*u = f(theta,r)

Additional files required: blktri, comf
Sample program file: thwscsp

hw3crt

Subroutine for solving the standard seven-point finite difference approximation to the Helmholtz equation in cartesian coordinates using a centered finite difference grid.

(d/dx)(du/dx) + (d/dy)(du/dy) + (d/dz)(du/dz) + lambda*u = f(x,y,z)

Additional files required: pois3d, comf , fftpack
Sample program file: thw3crt

sepx4

Subroutine for automatically discretizing and solving second and (optionally) fourth order finite difference approximations on a uniform grid to certain separable elliptic partial differential equations with constant coefficients in one direction on a rectangle.

a(x)(d/dx)(du/dx) + b(x)du/dx + c(x)u + (d/dy)(du/dy) = g(x,y)

Additional files required: genbun, gnbnaux, comf
Sample program file: tsepx4

sepeli

Subroutine for automatically discretizing and solving second and (optionally) fourth order finite difference approximations on a uniform grid to the general separable elliptic partial differential equation on a rectangle.

a(x)(d/dx)(du/dx) + b(x)du/dx + c(x)u + d(y)(d/dy)(du/dy) + e(y)du/dy + f(y)u = g(x,y)

Additional files required: blktri, comf
Sample program file: tsepeli

genbun

Subroutine for solving the real linear system of equations that results from a finite difference approximation on a centered grid to certain two-dimensional elliptic partial differential equations (e.g., see sepx4) with constant coefficients in one direction.

Additional files required: gnbnaux, comf
Sample program file: tgenbun

blktri

Subroutine for solving block tridiagonal linear systems that arise from finite difference approximations to separable two- dimensional elliptic partial differential equations (see sepeli).

Additional files required: comf
Sample program file: tblktri

poistg

Subroutine for solving a block tridiagonal linear system of equations that arises from finite difference approximations on a staggered grid to two-dimensional elliptic partial differential equations with constant coefficients in one direction.

Additional files required: gnbnaux, comf
Sample program file: tpoistg

pois3d

Subroutine for solving a block tridiagonal linear system of equations that arises from finite difference approximations to three-dimensional elliptic partial differential equations in a box.

Additional files required: comf, fftpack
Sample program file: tpois3d

cmgnbn

Subroutine for solving a complex block tridiagonal linear system arising from finite difference approximations to separable complex two-dimensional elliptic partial differential equations. box.

Additional files required: comf
Sample program file: tcmgnbn

cblktri

Subroutine for solving a complex block tridiagonal linear system of equations arising from finite difference approximation to separable complex two-dimensional elliptic partial differential equations.

Additional files required: comf
Sample program file: tcblktri

3. Obtaining FISHPACK90 Software

The Fortran for FISHPACK90 solvers and support files can now be downloaded after signing a UCAR licensing agreement which includes, among other provisions, that the software is not to be used for commercial purposes, modified, or distributed further.

DOWNLOAD FISHPACK90 SOFTWARE

When you order FISHPACK90 from NCAR:

You are assured of receiving original source code from its creator, so you avoid security concerns associated with pirated or "shared" software.

To order FISHPACK90, complete the FISHPACK90 order form

Efficient FORTRAN Subprograms for the Solution of Elliptic Partial Differential Equations, by Paul Swarztrauber and Roland Sweet, NCAR Technical Note-TN/IA-109, July 1975, contains identities, formulas, and computational methods that are used by the FISHPACK software.

Since the original 1975 Technical Note, several additional subroutines have been added to FISHPACK90. These newer subroutines are not documented in the updated Technical Note. However, documentation for all the FISHPACK90 subroutines is available from the web page you are now reading.


The web address of this document is
/css/software/fishpack90/

Return to beginning of this document