MCSR_logo.jpg (56K)
Home My MCSR Supercomputers Software Research Education
Login
Quick Links:

FAQs
Minicamp
Chemistry
insideHPC Blog
Current Jobs
Job History
Mathematica
Training
News
Contact Us

IMSL at UM/MCSR

Visual Numerics’ International Mathematical Statistical Library, or IMSL, contains a set of mathematical, statistical, and other routines. A routine or a subroutine is a program that performs certain function. For example a subroutine may be written to obtain a “sin” or “cos” of an angle. When many of these routines are written and put together sometimes they are call “library”. Many universities, companies, as well as state and federal government agencies, use IMSL every day to solve their very complex problems. Fortran or C developers and researchers at these institutions can call one or more routines from IMSL to solve a system of equations, rather than having to write those complex routines themselves

For example, if we have a set of three equations and three unknowns and wanted to solve these equations, we write a simple Fortran program that contains our data--the coefficient for the three equations together with what these equations are equal to (the right hand side of these equations). Our Fortran program then calls one or more routines from the IMSL library to solve our original equations. The alternative is for us to write the Fortran and or C routines ourselves to solve the equations, but this would take a lot of time and effort. So, IMSL for example has a routine that is called LSLRG. This routine is for solving a very, very simple set of linear equations. A programmer passes the coefficients of their simple equations to IMSL. IMSL then solves these equations and passes the answers to the user. This prevents “inventing the wheel” over and over again and saves a lot of time. Ordinary user-written routines can not be as efficient or fast-running as IMSL routines, unless we are inventing a new method to solve a linear or non-linear equations, and that happens only once every ten years. All an ordinary user has to do is to write a program that solves a set of equations or sorts a set of numbers. Once this program is written and tested for various data sets, then the same user or someone else may use this program with different coefficients or different numbers over and over again. So, the program is written only once and used for many years. This is basically what IMSL does. The IMSL programs are written for large or small data sets and are capable of accepting data in different formats and from a variety of sources.

One may say, “Well, I can use my $40 hand calculator to solve a simple 3 by 3 linear equation or obtain the square root of say number 3 in a very short time, so why would I need to write a program and call IMSL to do that?” The answer is yes, if we are talking about a very simple 3 by 3 equations. What if instead of a 3 by 3 set of equations we had a 3000 by 3000 complex (not real) set of equations. Our $40 calculator is not capable of solving such a set of complex equations, and besides we constantly need to change the input data and solve the problem again and again, and may need to keep a good record of each run.

Below are two simple Fortran examples. These two examples generate the input data and pass it on to a particular IMSL subroutine. The IMSL then looks and sends the data to the proper routine for analysis. After the problem is solved, the answers are sent back to the user. For example if the routine LSLGR is called, IMSL knows that it is receiving a set of linear equations and should call its equation solver to solve the set of linear equations and return the answers to the calling program.

FORTRAN EXAMPLE 1

Suppose that we have the following set of 3 by 3 linear equations:

33.0*X1 +16.0*X2 +72.0*X3 =129.0
-24.0*X1 -10.0*X2 -52.0*X3 = -96.0
18.0*X1 -11.0*X2 +7.0*X3 = 8.5

And want to solve the above system of equations obtaining the solutions for X1, X2, and X3. The following Fortran program is chosen from an IMSL book of examples. Please note that the Fortran program below contains the coefficients for the above set of equations and passes them to a routine called LSLRG.

Subroutine LSLRG then solves these equations and returns the answers back to our small test program that we named mcsr.f90. There are print commands in program mcsr.f90 that print the results out on the terminal. Our job as a user is to make sure to pass the correct numbers of coefficients to LSLRG through our test program mcsr.f90. If the input data (data which we pass to LSLRG) is not correct, we are not going to have correct answers for our system of equations.

! Declare variables
PARAMETER (IPATH=1, LDA=3, N=3)
REAL A(LDA,LDA), B(N), X(N)
!
! Set values for A and B, values below are not passed to the computer
! and are only a reminder to the programmer.
!
! A = ( 33.0 16.0 72.0)
! (-24.0 -10.0 -57.0)
! ( 18.0 -11.0 7.0)
!
! B = (129.0 -96.0 8.5)
! In the DATA statement below, values are numerical values are passed on to the
! to the computer.
DATA A/33.0, -24.0, 18.0, 16.0, -10.0, -11.0, 72.0, -57.0, 7.0/
DATA B/129.0, -96.0, 8.5/
!
CALL LSLRG (N, A, LDA, B, IPATH, X)
! Print results
CALL WRRRN ('X', 1, N, X, 1, 0)
END

BEFORE COMPILATION

Before compiling your Fortran or C/C++ program with calls to IMSL routines, you must make sure certain environment variables are setup: $F90FLAGS and $LINK_F90. You will use these variables to supply options to the compiler to ensure that it can find and link in the IMLS library. These environment variables can be set as follows:

On Willow:

For sh, ksh, or bash users, execute the following command before trying to compile your program. You can type it at the command line, or to have it executed automatically each time you log in, add it as the last line in your .login script in your home directory, then re-login.
. /usr/local/vni/CTT3.0/ctt/bin/cttsetup.sh

Or, for csh or tcsh users, execute the following command before trying to compile your program. You can type it at the command line, or to have it executed automatically each time you login, add it as the last line in your .profile script in hour home directory, then re-login.
source /usr/local/vni/CTT3.0/ctt/bin/cttsetup.csh

On Sweetgum:

For sh, ksh, or bash users, execute the following command before trying to compile your program. You can type it at the command line, or to have it executed automatically each time you log in, add it as the last line in your .profile script in your home directory, then re-login.
. /users/local/appl/imsl/imsl.sh
For csh or tcsh users, your environment should already be set up as needed by default.

COMPILING YOUR IMSL FORTRAN PROGRAM

The example programs in this article (mcsr.f90 and mcsr2.f90) may be copied to your working directory from either /users/local/appl/examples/imsl (on willow) or /usr/local/appl/imsl on sweetgum. To compile the above Fortran program on willow or sweetgum, first ensure that you have the steps under the PRE-COMPILATION SETUP section above. Then, compile your program as follows:
f90 $F90FLAGS mcsr.f90 $LINK_F90
Where “mcsr.f90” is the name of the above Fortran Program. If there are no compiling or linking errors, an executable file named a.out will be created in your working directory. To run the program, type:
./a.out
The solution obtained from solving the above 3 by 3 linear equations is:
X
1 2 3
1.000 1.500 1.000

FORTRAN EXAMPLE 2

The second example sorts the following data:
-1.0 2.0 -3.0 4.0 -5.0 6.0 -7.0 -9.0 10.0
The Fortran program is:
!declare Variable
PARAMETER (N=10)
REAL RA(N), RB(N)
!SET VALUES FOR RA
!RA=(-1.0 2.0 -3.0 4.0 -5.0 6.0 -7.0 -9.0 10.0)
!
DATA RA/-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0/
!
CALL SVRGN (N, RA, RB)
! print results
CALL UMACH(2,NOUT)
WRITE(NOUT,99999) (RB(J),J=1,N)
!
99999 FORMAT(' the output vector is, input after sort is: ',/, 10(1x,f5.1))
END

The output, the input after sorting by the above program is:
-9.0 -7.0 -5.0 -3.0 -1.0 2.0 4.0 6.0 8.0 10.0

The instruction to execute the above program is the same as the first one. Users may note that lines starting with “!” in the above Fortran programs are comments and don’t go through the Fortran compiler. For example the sort program has 8 lines not counting the comment lines. Users having IMSL or other technical questions should contact: assist@mcsr.olemiss.edu.


Last Modified:June 08, 2007 10:31:49.   Copyright © 1997-2012 The Mississippi Center for Supercomputing Research. All Rights Reserved.   The University of Mississippi
Valid RSS