NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Ed Hartnett wrote:
Magnus Hagdorn <Magnus.Hagdorn@xxxxxxxx> writes:F90 source code is portable (as long as it is standard conforming and you have a decent compiler...)Howdy Magnus! As noted, fortran compilers do not produce compatible .mod files. This can be a pain. In practice it means you must build netCDF for every fortran compiler you want to use on the machine. That is, if you want to use ifort and gfortran on the same machine, you need to build the library twice, and install them in different places. Then you have to use the correct one when compiling fortran.
FWIW, once I've compiled the netCDF f90 code with various compilers, I use the shell script below to link in stuff to a default netCDF install location (typically $HOME/local/netcdf but I can also use an envar, $NETCDF_ROOT) for all the compilers I use on my linux box.
All of my makefiles then simply point to $HOME/local/netcdf/include and $HOME/local/netcdf/lib for the generic files no matter what compiler du jour I'm using. Anyway.... cheers, paulv <-----begin Link_netCDF-----> #!/bin/sh # -------------- # Usage function # -------------- usage() { echo echo "Usage: Link_netCDF CompilerId" echo echo " CompilerId: The identifier for the Fortran90 compiler used" echo " to build the netCDF library, and used to identify" echo " which library and .mod files to link." echo " Valid identifiers are:" echo " Intel : The Intel f95 compiler" echo " PGI : The Portland Group f95 compiler" echo " Lahey : The Lahey f95 compiler" echo " gfortran: The GNU Fortran compiler" echo " g95 : The g95 compiler" echo " Clear : Specifying this clears all links" echo } # ---------------- # Linking function # ---------------- link_files() { # Set up # ...Error codes SUCCESS=0 FAILURE=1 # ...Assign arguments PACKAGE=$1 shift 1 FILE_LIST=$* # Check package if [ "${PACKAGE}" = "Clear" ]; then rm ${FILE_LIST} else for FILE in ${FILE_LIST}; do if [ -f ${FILE}.${PACKAGE} ]; then ln -sf ${FILE}.${PACKAGE} ${FILE} else echo " File ${FILE}.${PACKAGE} not found!" return ${FAILURE} fi done fi return ${SUCCESS} } # ----------- # Main script # ----------- # Set up # ...Error codes SUCCESS=0 FAILURE=1 # ...Test for package argument and assign if [ $# -ne 1 ]; then usage; exit ${FAILURE} fi PACKAGE=$1 # ...Location of netCDF installs if [ -z "${NETCDF_ROOT}" ]; then NETCDF_ROOT="${HOME}/local/netcdf" fi # ...Generic link filenames INCLUDE_FILE="netcdf.mod typesizes.mod" LIB_FILE="libnetcdf.a" # ...Save current location CURRENT_DIR=${PWD} # Link in the include files cd ${NETCDF_ROOT}/include link_files ${PACKAGE} ${INCLUDE_FILE} if [ $? -ne ${SUCCESS} ]; then exit ${FAILURE} fi # Link in the library files cd ${NETCDF_ROOT}/lib link_files ${PACKAGE} ${LIB_FILE} if [ $? -ne ${SUCCESS} ]; then exit ${FAILURE} fi # Back where you came from cd ${CURRENT_DIR} <-----end Link_netCDF-----> So if I do: $ : Link_netCDF Lahey I get the following: $ : dir ~/local/netcdf/include/ ~/local/netcdf/lib/ ~/local/netcdf/include/: total 1.5M -rw-r--r-- 1 wd20pd wd4 9.6K Nov 7 2008 ncvalues.h -rw-r--r-- 1 wd20pd wd4 31K Nov 7 2008 netcdf.h -rw-r--r-- 1 wd20pd wd4 23 Nov 7 2008 netcdf.hh -rw-r--r-- 1 wd20pd wd4 49K Nov 7 2008 netcdf.inc lrwxrwxrwx 1 wd20pd wd4 16 Jul 14 17:15 netcdf.mod -> netcdf.mod.Lahey -rw-r--r-- 1 wd20pd wd4 51K Oct 27 2006 netcdf.mod.Lahey -rw-r--r-- 1 wd20pd wd4 790K Apr 13 2006 netcdf.mod.PGI -rw-r--r-- 1 wd20pd wd4 160K Sep 11 2007 netcdf.mod.g95 -rw-r--r-- 1 wd20pd wd4 233K Nov 7 2008 netcdf.mod.gfortran -rw-r--r-- 1 wd20pd wd4 19K Nov 7 2008 netcdfcpp.h lrwxrwxrwx 1 wd20pd wd4 19 Jul 14 17:15 typesizes.mod -> typesizes.mod.Lahey -rw-r--r-- 1 wd20pd wd4 456 Oct 27 2006 typesizes.mod.Lahey -rw-r--r-- 1 wd20pd wd4 1.4K Apr 13 2006 typesizes.mod.PGI -rw-r--r-- 1 wd20pd wd4 1.7K Sep 11 2007 typesizes.mod.g95 -rw-r--r-- 1 wd20pd wd4 2.4K Nov 7 2008 typesizes.mod.gfortran ~/local/netcdf/lib/: total 3.2M lrwxrwxrwx 1 wd20pd wd4 17 Jul 14 17:15 libnetcdf.a -> libnetcdf.a.Lahey -rw-r--r-- 1 wd20pd wd4 902K Oct 27 2006 libnetcdf.a.Lahey -rw-r--r-- 1 wd20pd wd4 523K Apr 13 2006 libnetcdf.a.PGI -rw-r--r-- 1 wd20pd wd4 625K Sep 11 2007 libnetcdf.a.g95 -rw-r--r-- 1 wd20pd wd4 609K Nov 7 2008 libnetcdf.a.gfortran -rw-r--r-- 1 wd20pd wd4 470K Nov 7 2008 libnetcdf_c++.a Similarly, $ : Link_netCDF PGI produces: $ : dir ~/local/netcdf/include/ ~/local/netcdf/lib/ ~/local/netcdf/include/: total 1.5M -rw-r--r-- 1 wd20pd wd4 9.6K Nov 7 2008 ncvalues.h -rw-r--r-- 1 wd20pd wd4 31K Nov 7 2008 netcdf.h -rw-r--r-- 1 wd20pd wd4 23 Nov 7 2008 netcdf.hh -rw-r--r-- 1 wd20pd wd4 49K Nov 7 2008 netcdf.inc lrwxrwxrwx 1 wd20pd wd4 14 Jul 14 17:16 netcdf.mod -> netcdf.mod.PGI -rw-r--r-- 1 wd20pd wd4 51K Oct 27 2006 netcdf.mod.Lahey -rw-r--r-- 1 wd20pd wd4 790K Apr 13 2006 netcdf.mod.PGI -rw-r--r-- 1 wd20pd wd4 160K Sep 11 2007 netcdf.mod.g95 -rw-r--r-- 1 wd20pd wd4 233K Nov 7 2008 netcdf.mod.gfortran -rw-r--r-- 1 wd20pd wd4 19K Nov 7 2008 netcdfcpp.h lrwxrwxrwx 1 wd20pd wd4 17 Jul 14 17:16 typesizes.mod -> typesizes.mod.PGI -rw-r--r-- 1 wd20pd wd4 456 Oct 27 2006 typesizes.mod.Lahey -rw-r--r-- 1 wd20pd wd4 1.4K Apr 13 2006 typesizes.mod.PGI -rw-r--r-- 1 wd20pd wd4 1.7K Sep 11 2007 typesizes.mod.g95 -rw-r--r-- 1 wd20pd wd4 2.4K Nov 7 2008 typesizes.mod.gfortran ~/local/netcdf/lib/: total 3.2M lrwxrwxrwx 1 wd20pd wd4 15 Jul 14 17:16 libnetcdf.a -> libnetcdf.a.PGI -rw-r--r-- 1 wd20pd wd4 902K Oct 27 2006 libnetcdf.a.Lahey -rw-r--r-- 1 wd20pd wd4 523K Apr 13 2006 libnetcdf.a.PGI -rw-r--r-- 1 wd20pd wd4 625K Sep 11 2007 libnetcdf.a.g95 -rw-r--r-- 1 wd20pd wd4 609K Nov 7 2008 libnetcdf.a.gfortran -rw-r--r-- 1 wd20pd wd4 470K Nov 7 2008 libnetcdf_c++.a
netcdfgroup
archives: