Mpich provides support for both Fortran 77 and Fortran 90. Because mpich is implemented in C, using mpich from Fortran can sometimes require special options. This section discusses some of the issues. Note that configure tries to determine the options needed to support Fortran. You need the information in this section only if you have problems. Section Configuring for Multiple Fortran Compilers discusses how to support multiple Fortran compilers (e.g., g77 and pgf77) with a single mpich installation.
The configure program should discover that there is no Fortran compiler. You can force configure to not build the Fortran parts of the code with the option --disable-f77. In this case, only the C programs will be built and tested.
During configuration, a number of Fortran 90-specific arguments can be specified. See the output of configure -help. In particular, when using the NAG Fortran 90 compiler, you should specify -f90nag.
Selecting Fortran 90 with Fortran 77 should be done only when the two
compilers are compatible, supporting the same datatypes and calling
conventions. In particular, if the Fortran 90 compiler supports an 8-byte
integer type, the Fortran 77 compiler must support integer*8 (this is
needed by the MPI-IO routines for the value of MPI_OFFSET_KIND). In
addition, both compilers must support the same functions for accessing the
command line, and the code for those commands must reside in the same library.
If the
two Fortran compilers are not compatible, you should either select the Fortran
90 compiler as both the Fortran 77 and Fortran 90 compiler (relying on the
upward compatibility of Fortran), or build two separate configurations of
mpich. For example,
setenv FC f90 setenv F90 f90 configurewill use f90 for both Fortran 77 and Fortran 90 programs. In many systems, this will work well. If there are reasons to have separate Fortran 90 and Fortran 77 builds, then execute the following commands (where mpich is to be installed into the directory /usr/local):
setenv FC f77 configure --disable-f90 -prefix=/usr/local/mpich-1.2.6/f77-nof90 make make install setenv FC f90 setenv F90 f90 configure -prefix=/usr/local/mpich-1.2.6/f90 make make installThis sequence of commands will build and install two versions of mpich. An alternative approach that installs only a single version of mpich is decribed in Section Configuring for Multiple Fortran Compilers .
If configure finds a Fortran 90 compiler, by default mpich will try to create a Fortran 90 module for MPI. In fact, it will create two versions of an mpi module: one that includes only the MPI routines that do not take ``choice'' arguments and one that does include choice argument. A choice argument is an argument that can take any datatype; typically, these are the buffers in MPI communication routines such as MPI_Send and MPI_Recv.
The two different modules can be accessed with the -nochoice and -choice option to mpif90. The choice version of the module supports a limited set of datatypes (numeric scalars and numeric one- and two-dimensional arrays). This is an experimental feature; please send mail to [email protected] if you have any trouble. Neither of these modules offer full ``extended Fortran support'' as defined in the MPI-2 standard.
The reason for having two versions of the MPI module is that it is very difficult to provide a completely correct module that includes all of the functions with choice arguments. As it is, on many systems, the size of the Fortran 90 module to handle the routines with choice arguments will be larger than the entire C version of the MPI library. If you are uninterested in the Fortran 90 MPI module, or you wish to keep the installed version of mpich small, you can turn off the creation of the Fortran 90 MPI module with the configure option --disable-f90modules.
The Absoft compiler can be told to generate external symbols that are uppercase, lowercase, and lowercase with a trailing underscore (the most common case for other Unix Fortran compilers), or use mixed case (an extension of Fortran, which is only monocase). Each of these choices requires a separate mpich configure and build step. Mpich has been tested in the mode where monocase names are generated; this case is supported because only this case supports common (and necessary for mpich) extensions such as getarg and iargc. By default, mpich forces the Absoft compiler to use lowercase; this matches most Unix Fortran compilers. Mpich will find the appropriate versions of getarg and iargc for this case. Because the examples and the test suite assume that the Fortran compiler is case-insensitive; the Fortran library produced by mpich will only work with source code that uses monocase (either upper or lower) for all MPI calls.
In addition, you may need to use -N90 if you use character data, because the mpich Fortran interface expects the calling convention used by virtually all Unix Fortran systems (Cray UNICOS is handled separately). If you are building shared libraries, you will also need to set the environment variable FC_SHARED_OPT to none.
Early versions of the Absoft compiler could not handle multiple -I options. If you have trouble with this, you should get an update from Absoft.
In some environments, there are several different Fortran compilers, all of which define Fortran datatypes of the same size, and which can be used with the same C libraries. These compilers may make different choices for Fortran name mappings (e.g., the external format of the names given to the linker) and use different approaches to access the command line. This section describes how to configure mpich to support multiple Fortran compilers. However, if any of these steps fails, the best approach is to build a separate mpich installation for each Fortran compiler.
The first step is to configure mpich with the --with-flibname
option. For example, if one of the compilers is g77, use
setenv FC g77 ./configure --with-flibname=mpich-g77 ... other options ...After you build, test, and install this version of mpich, you can configure support for additional Fortran compilers as follows:
setenv FC pgf77 ./configure --with-mpichconfig --with-flibname=mpich-pgf77 make make install-alt