|
by FISHPACK90 is a modernization of the original
FISHPACK. FISHPACK90 is incompatible with FISHPACK. |
(figure provided by Jacque Marshall) |
This document consists of three parts:
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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