Details of changes between FISHPACK and FISHPACK90

SCD released version 1.1 of FISHPACK90 on December 19, 2005. It is an improvement over Version 1.0 in that it uses Fortran90 intrinsic function ASSOCIATED to check on pointer association. Also, version 1.1 offers an integated Makefile for use with gmake.

Here is some history for version 1.0:

SCD released FISHPACK90 1.0 on September 30 2004. It is an improvement of the original Fortran77 FISHPACK insofar as it has removed workspace arguments in the solvers, replacing them with FORTRAN90 derived data types that are pointers to real and complex allocatable arrays and are opaque to user level interface. And also this version replaced many internal interfaces in conformance with strict prototype matching of Fortran90.

Neither version FISHPACK90 1.0 nor 1.1 are full-blown Fortran90 implementation of FISHPACK. User calls to the old FISHPACK solvers are not compatible with calls to FISHPACK90 solvers.

IMPORTANT NOTE: FISHPACK90 has dependencies in the FFTPACK library; the present version of  FFTPACK has not been updated in the same manner as FISHPACK90. That is, FFTPACK may not strictly conform to the Fortran90 interface specification.

The workspace changes in FISHPACK90 eliminate a mixed-mode conflict that occurred in the original FISHPACK. These changes simplify the user interface required to call the solvers. Details of these changes are described below.

All of the files in the original FISHPACK retain the same names in FISHPACK90. However, all of the FISHPACK90 solvers require loading the new FORTRAN 90 module file "fish.f." The 14 solvers

cmgnbn.f,genbun.f,hstcrt.f,hstcyl.f,hstplr.f,hstssp.f,hw3crt.f,
hwscrt.f,hwscyl.f,hwsplr.f,hwsssp.f,pois3d.f,poistg.f,sepx4.f

have the same arguments in both packages, except that the workspace argument has been deleted in FISHPACK90. For example, in the original FISHPACK:

     CALL HSTCRT (A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,
+ ELMBDA,F,IDIMF,PERTRB,IERROR,W)

is replaced by

     CALL HSTCRT (A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,
+ ELMBDA,F,IDIMF,PERTRB,IERROR)

in FISHPACK90. All other arguments are identical. Workspace requirements in these solvers are transparent to the user. They are handled internally using pointers and dynamic array allocation.

The remaining five solvers

blktri.f,cblktri.f,hstcsp.f,hwscsp.f,sepeli.f

have initial and non-initial calls utilizing saved workspace to reduce computational cost. These solvers require that the first declarative statement in the user program calling them is

     USE fish

The user program should also include the declarative statement

     TYPE (fishworkspace) :: w

The test programs for these solvers illustrate this. For example, look at the declarative statements in the test program file "tsepeli.f." Although the meaning of the USE and TYPE statements is transparent to the user, they do two things: they make the module "fish" available, and they declare a derived data type defined in "fish" that is used to allocate and pass real and complex workspace to lower-level subroutines. With any of these five solvers, users should also include the statement

     CALL FISHFIN(W)

upon completion. This will de-allocate the saved workspace when it is no longer required. Failure to include this statement could result in serious memory leakage. This is also illustrated in the test programs for any of these five solvers.

Finally, all of the test programs for the 19 solvers have been rewritten using format-free I/O with results presented in 32-bit and 64-bit floating-point arithmetic. Documentation has been updated in all FISHPACK90 files to reflect the changes described.