Fortran Compilers¶
This section is relevant to users who want to compile the fortran code in the classic, amrclaw, or geoclaw branches.
FC environment variable¶
Users should set the environment variable FC to point to the correct compiler, e.g. in bash via:
$ export FC=gfortran
Note that some versions of make will set FC=f77 by default if no value is specified, and adding a line to the Makefile such as:
FC ?= gfortran
will not override this. The common Makefile in $CLAW/clawutil/src/Makefile.common now tests to see if FC is set to f77 and if so resets it to gfortran since much of Clawpack is not f77 compliant. However, it is best to set the FC environment variable yourself, e.g. in your .bashrc file.
FFLAGS environment variable¶
Compiler flags can be specified using the FFLAGS variable that can be set in an application Makefile. By default sample Makefiles now specify:
FFLAGS ?=
so that no flags are used unless the environment variable FFLAGS is set already. This line can be changed in the Makefile, but it is often easiest to set an environment variable for the flags you generally want to use.
Note: If you change the flags you generally have to recompile all the code, and this dependency is not handled automatically. So always do:
$ make new
before rerunning an example with make .output or make .plots.
LFLAGS environment variable¶
The LFLAGS environment variable is used to provide flags that are needed when linking the final binary. The most likely use for this flag would be to link a particular library with the binary (such as a NetCDF library) or provide a path to a compiled module. If this variable is not set in the environment then LFLAGS defaults to the relevant flags in FFLAGS.
Pre-Processor and the PPFLAGS environment variable¶
Compilers often provide a pre-processor that can scan source code before compilation providing some ability to define variables at compile time or transform the code. Currently the pre-processor is always called before Clawpack compilation to support optional dependencies, such as NetCDF support, and some testing abilities. The PPFLAGS environment variable is meant to provide further control of the pre-processor.
gfortran compiler¶
Some useful flags:
For debugging:
FFLAGS = -g -Wall -pedantic -fbounds-check -ffpe-trap=invalid,overflow,zero
For optimizing:
FFLAGS = -O2
For using OpenMP:
FFLAGS = -O2 -fopenmp
In this case you should also set some environment variables. See Using OpenMP for details.
Note: Versions of gfortran before 4.6 are known to have OpenMP bugs.
For using NetCDF:
FFLAGS = -DNETCDF -lnetcdf -I$(NETCDF4_DIR)/include LFLAGS = -lnetcdf
The FFLAGS can also be put into PPFLAGS. Note that the variable NETCDF4_DIR should be defined in the environment.
Intel fortran compiler¶
Set the FC environment variable to ifort.
Some useful flags:
For debugging:
FFLAGS = -g -C -CB -CU -fpe0 -ftrapuv -fp-model precise
For optimizing:
FFLAGS = -O2
For using OpenMP:
FFLAGS = -O2 -qopenmp
In this case you should also set the environment variable OMP_NUM_THREADS to indicate how many threads to use.
For older versions of the ifort compiler, you may instead need:
FFLAGS = -O2 -openmp
For using NetCDF:
FFLAGS = -DNETCDF -lnetcdf -I$(NETCDF4_DIR)/include LFLAGS = -lnetcdf
Same as for gfortran above.