F90 Model : Interfacing with F77

LeftRight
The main reason Fortran 90 includes the Fortran 77 language as a subset is because of the large body of existing Fortran 77 code. For example: NCAR, LAPACK, SLATEC, netCDF, etc. to name a few available packages, and any personal legacy code. However, Fortran 77 has made certain assumptions about the memory lay-out of arrays, primarily, that arrays are column oriented and contiguous. In many of the matrix oriented packages you need to pass the maximum leading dimension. As far as the routines were concerned, all arrays were one-dimensional. If given the maximum leading dimension and current matrix dimension the routine could determine where the array data was stored. This is called an assumed-size specification.

Fortran 90 frees the program of much of these burdens by packaging the array dimensions into the passed array reference. All the routine needs to know is the array shape (i.e. 1,2,3, or more dimensions). This is the assumed-shape specification.

These are mutually exclusive and often lead to either compiling or run-time problems. The solution is to provide an INTERFACE block, which gives the Fortran 90 compiler more information regarding the Fortran 77 routine.

Code examples

LeftRight
Slide 14