# 15. Use of program libraries

The two main numerical libraries in Fortran 90 are

Both of these offer both a modified version of the Fortran 77 library, recompiled
for Fortran 90, and a completely new library, using all the new facilities of Fortran 90.
## USING OLD LIBRARIES.

A problem with Fortran 90 is that so far not so many programs or
program libraries are available in the language. We can therefore be
forced to use "old" program libraries usually from Fortran 77. This
can be done in two ways.

- Recompile the library with a Fortran 90 compiler
- Use the Fortran 77 library directly

A simple method is to recompile the
Fortran 77 routines
with the Fortran 90 compiler using fixed form. This should work since
Fortran 77 is a pure subset of Fortran 90. The problem is that the
library does not always exactly follow the standard. NAG recognizes
specifically that although the data type `DOUBLE PRECISION COMPLEX ` or
`COMPLEX*16 ` is not in the standard, it is in many implementations of
Fortran 77. A subprogram which uses this extension therefore has to be
modified. Also possible assignments of binary, octal or hexadecimal
constants is difficult since they are standardized only in Fortran
90. Also note that the very common notation `REAL*8 ` for
`DOUBLE
PRECISION ` is not permitted in Fortran 90.

The second method is to link the
Fortran 77 library
directly with the Fortran 90 programs. The practical problem was
previously that the NAG's Fortran 90 system f90 under version 1.1 did
not include support for linkage of libraries, therefore you first had
to compile with the Fortran compiler using `f90 -c ` and then link with
the C compiler using `cc`. NAG recommended the following commands
f90 -c test.f
cc test.o -lnag -o a.out /usr/local/lib/f90/f90rt0.o\
/usr/local/lib/f90/libf90.a -lI77 -lF77 - lm

which worked on Sun after that we had removed `-lI77 ` since we did not
find this library on the system here in Linköping.
From version 1.2 it is much simpler because linkage support is now
included and on the Sun you only give the following command

f90 test.f -lnag - lF77

while on DEC ULTRIX (MIPS) you give the command
f90 test.f lnag -lfor -lutil -li -lots

Thus a few more libraries have to be included on the DEC.
In addition to the problems mentioned above we can also note that
Fortran allows routine names as arguments, which may be treated
differently in the NAG's Fortran 90 compiler based on translation to C
and in the existing Fortran 77 compiler. There is therefore a danger
for linkage errors.

On the Sun using Sun OS 4.2.1 we also got
completely wrong results when using library functions in single
precision, since the C system on Sun converted all function calls into
double precision. NAG has *solved* this problem in release 2.1.

The method can thus be used when neither complex variables in
double precision nor routine names are used as arguments, and provided
that you are not using single precision library functions on a system
which incorrectly converts the calls to double precision.

It is very essential to get all the required libraries at the linkage
process, those are for example the mathematical libraries in Fortran
77, Fortran 90 and C. Sometimes the libraries have to be given in the correct order.

Last modified: 31 August 2000

`boein@nsc.liu.se`