The Harwell Subroutine Library (HSL) is a collection of Fortran77 files that implement various methods to solve linear systems of equations, but also cover various other aspects of mathematical algorithms. deal.II is presently able to use two of the sparse direct solvers implemented in that library:
MA27: A modified Gauss elimination method for sparse symmetric indefinite systems.
MA47: A frontal elimination method for sparse symmetric indefinite systems.
SparseDirectMA27
and SparseDirectMA47
(see the online reference in the LAC sublibrary for more
information).
With respect to the integration of these functions into deal.II, there are two problems: Firstly, for license reasons, we can not, however, include these solvers in the standard distribution of the library, so you have to download them yourself, if you want to use them. Secondly, these functions are usually downloaded as single files, rather than as a complete library, so one does not usually build up a whole library against which a deal.II program could be linked, but is left with the individual files.
Our solution to this problem is as follows:
If you want to use any of these subroutines, then you have to download them from the HSL server. Note that the license is rather restrictive.
For MA27, you have to have the main file, while for MA47 there are two files, one for the main algorithm and one with support functions.
Drop these files into the directory
deal.II/contrib/hsl/source
, with names
ma27.f
(for MA27), and ma47.f
and
ma47dep.f
(for MA47). There should already be a
file called ma27sup.f
. Note that the exact names
(including letter case) of the files matter.
Run (or re-run) the ./configure
script in the
top level directory of deal.II. It should,
at one point, print a message which functions from HSL it has
found. This sets some flags for subsequent compilations
(preprocessor defines HAVE_HSL_MA27,
HAVE_HSL_MA47
and Makefile variable
USE_CONTRIB_HSL=yes
) that
these functions have been found and can be used, rather than
dummy functions that only display an error and abort the
program if called.
Compile the library (a description of how to do so is found
in the ReadMe
file). If you had already made it, first clean the directory
by calling make clean
in the top level directory.
Note that if the respective functions have not been found at configure time, then the classes using them are still available to programs, but when called will issue an error message and abort the program with an exception.
If HSL functions have been found, then we also have some Fortran77
code in the system. Of course, the requires that some F77 compiler
has been found at configure time, but note that this also changes
the libraries that need to be linked to the program. For example,
on Sun, these are the libraries -lF77 -lsunmath
-lM77
. Usually, the right set of additional libraries
should be detected automatically at configure time, and the
respective flags should also be set correctly without user
interaction.