High-Performance Computing at the NIH
GitHub YouTube @nih_hpc RSS Feed
IMSL
IMSL logo

Description

The IMSL libraries are a comprehensive set of mathematical and statistical functions that programmers can embed into their software applications. IMSL provides high-performance computing software and expertise needed to develop and execute sophisticated numerical analysis applications. These libraries free you from developing your own internal code by providing pre-written mathematical and statistical algorithms that you can embed into your Fortran applications.

Version

7.1.0

How to Use

The IMSL libraries are installed on Helix using 64-bit Intel Compilers. Compiled programs can sometimes be run on the Biowulf cluster depending on the functions they use (some require a license we have only on helix); but this can never work unless they are statically linked against the IMSL libraries, as the libraries are not accessible to the cluster nodes.

Here is a very simple Fortran 90 program named test.f90 with a call to the IMSL function TDATE (remember to indent!):

INTEGER IDAY, IYEAR, MONTH EXTERNAL TDATE CALL TDATE(IDAY, MONTH, IYEAR) WRITE(*,*)'Day-Month-Year = ', IDAY, '-', MONTH, '-', IYEAR END

The IMSL Fortran libraries are built for use with the Intel Compilers, so environment variables must be set up for both Intel and IMSL.

bash and csh/tcsh shells:

module load imsl

This module loads the appropriate Intel compiler module as a preliminary.

Last, compile test.f90:

$F90 -o test $F90FLAGS test.f90 $LINK_F90

Because Helix systems are 64-bit and run Red Hat Linux, to create shared objects you must include -fpic:

$F90 -o test $F90FLAGS -fpic test.f90 $LINK_F90

Alternatively, including -mcmodel=medium or -mcmodel=large will accomplish the same goal, as well as allow medium or large arrays in memory.

In addition to the above, there are several sets of options for the compiler and library links:

VARIABLE SYNONYMS USE
$F90 $FC ifort
$MPIF90 mpiifort
$F90FLAGS $FFLAGS default set of options for compilation
$LINK_F90 $LINK_F90_SHARED
$LINK_FNL
$LINK_FNL_SHARED
default set of options for linking
$LINK_F90_HPC $LINK_F90_SHARED_HPC uses external high-performance BLAS and LAPACK libraries
$LINK_F90_STATIC statically links libraries, may allow executable to be run on the 64-bit Biowulf cluster nodes
$LINK_F90_STATIC_HPC combines $LINK_F90_STATIC and $LINK_F90_HPC
$LINK_MPI statically links libraries and uses parallel IMSL error handler, allows compilation in an MPI environment ($MPIF90 required instead of $F90)
$LINK_MPI_HPC combines $LINK_MPI and $LINK_F90_HPC
$LINK_MPIS see the gruesome README file below
$LINK_MPIS_HPC see the gruesome README file below

To compile using MPI, you must add the correct MPI path to your $PATH variable. See Here for more information about using MPI on Helix Systems.

There is a set of example programs in /local/IMSL_7.1_RHL/imsl/fnl710/lnxin140x64/examples on Helix. The environment variable $FNL_EXAMPLES also points to this directory.

Note

To run a previously compiled IMSL executable, you will find it necessary to have the imsl module, or more precisely, its intel prerequisite module, loaded first. The symptom, should you not do, so is a missing library:

helix% a.out a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory

ldd will identify serveral additional missing libraries.

Documentation

  • RogueWave Vendor Documentation
  • gruesome README file for the very desperate
  • Fortran Numerical Library Function Catalog (pdf)
  • Math Library User Guide (pdf)
  • Math Library Special Functions User Guide (pdf)
  • Stat Library User Guide (pdf)
  • example research paper using IMSL code (pdf)