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