Hypre
From charlesreid1
Hypre is a massively parallelizable linear solver library written and designed for use in C++. It provides many nice features and objects beyond simple "matrix" or "vector" objects - these include grids, meshes, and stencils. It was developed at Lawrence Livermore National Lab.
Contents
Installation
Installing Hypre can be very easy, or it can be tricky - all depending on what machine you're on. The documentation will give much more in-depth details than this page. Links to the documentation are available at https://computation.llnl.gov/casc/hypre/software.html .
Dependencies
Hypre will require an installation of MPI on your machine. I have installed it with both LAM MPI and OpenMPI; I recommend using OpenMPI.
Configuration
Download the hypre tarball and decompress it. Put your configure wrapper into the src/
directory of the decompressed Hypre tarball.
Mac Leopard (OS X 10.5) - Hypre 2.0.0
NOTE: version 2.0.0 is obsolete!!! The Hypre developers recommend the latest (beta) version over 2.0.0
This configure line has been used to build hypre 2.0.0 with LAM MPI on Mac Leopard.
#!/bin/sh # # run configure # make # make install # make test ./configure \ --with-MPI-include=/path/to/mpi/include \ --with-MPI-lib-dirs=/path/to/mpi/lib \ --with-MPI-libs="mpi lam pmpi util" \ --prefix=/path/to/hypre/2.0.0 \ \ F77=/usr/local/bin/gfortran \ \ CFLAGS=-DMPIPP_H \ CXXFLAGS=-DMPIPP_H
The -DMPIPP_H
compiler flags are only required for LAM MPI and OpenMPI; they are not needed if you use any other MPI install (e.g. MPICH).
Also see Gfortran.
Red Hat Linux
I was able to successfully install Hypre on a Red Hat Linux workstation with OpenMPI with the following configure line:
#!/bin/sh # # run configure # make # make install # make test ./configure \ --with-MPI \ --with-MPI-include=/path/to/openmpi/1.4.3/include \ --with-MPI-libs=mpi \ --with-MPI-lib-dirs=/path/to/openmpi/1.4.3/lib \ --prefix=/path/to/hypre/2.0.0 \ --with-blas-lib-dirs=/usr/lib \ --with-lapack-lib-dirs=/usr/lib \ --enable-shared \ \ CC="/usr/bin/gcc" \ CXX="/usr/bin/g++" \ \ CFLAGS="-DMPIPP_H" \ CXXFLAGS="-DMPIPP_H"
Mac Snow Leopard Server - Hypre 2.7.0b
To get Hypre built on a Snow Leopard server, I needed to do some kind of fishy things with configure (see #Duplicate symbol start in #Installation Errors section below):
#!/bin/sh # # run configure # make # make install # make test ./configure \ --with-MPI \ --with-MPI-include=${HOME}/pkg/openmpi/1.4.3_bigmac/include \ --with-MPI-libs=mpi \ --with-MPI-lib-dirs=${HOME}/pkg/openmpi/1.4.3_bigmac/lib \ --prefix=${HOME}/pkg/hypre/2.7.0_bigmac \ \ CC="/usr/bin/gcc" \ CXX="/usr/bin/g++" \ F77="/usr/local/bin/gfortran" \ \ FLIBS="-L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/../../.. -lgfortran -lgcc_ext.10.5 -lSystem" \ \ CXXFLAGS="-DMPIPP_H -arch x86_64" \ CFLAGS="-DMPIPP_H -arch x86_64"
Note that the --enable-shared
option will cause problems on Mac, since Mac uses a non-standard gcc.
Installation Errors
Error with dlamch.o
If you see an error like this:
/usr/bin/ld: /path/to/hypre/src/utilities/dlamch.o: relocation R_X86_64_32S against 'a local symbol' can not be used when making a shared object; recompile with -fPIC /path/to/hypre/src/utilities/dlamch.o: could not read symbols: Bad value collect2: ld returned 1 exit status
Then you need to edit /path/to/hypre/src/lapack/Makefile
, and add an -fPIC
flag, as shown below:
dlamch.o : dlamch.c ${LAPACK_HEADERS} ${CC} -c -fPIC dlamch.c
Duplicate symbol start
When I tried to build Hypre on a 64-bit Mac server, I saw the following error while running configure:
checking whether we are using the GNU Fortran 77 compiler... yes checking whether /usr/local/bin/gfortran accepts -g... yes checking how to get verbose linking output from /usr/local/bin/gfortran... -v checking for Fortran libraries of /usr/local/bin/gfortran... -lcrt1.10.5.o -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/../../.. -lgfortran -lgcc_ext.10.5 -lSystem checking for dummy main to link with Fortran libraries... unknown configure: error: linking to Fortran libraries from C fails See `config.log' for more details.
The underlying error, appearing in config.log
, is this:
configure:6444: /usr/bin/gcc -o conftest -mmacosx-version-min=10.7.0 -DMPIPP_H -arch x86_64 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/../../.. -lgfortran -lgcc_ext.10.5 -lSystem conftest.c -lcrt1.10.5.o -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/../../.. -lgfortran -lgcc_ext.10.5 -lSystem >&5 ld: duplicate symbol start in /usr/lib/crt1.10.5.o and /usr/lib/crt1.10.6.o collect2: ld returned 1 exit status
And the underlying problem with that is the -lcrt1.10.5.o
flag (you can test this by creating a simple hello world C program, and running the given gcc command to compile the hello world program; you can then whittle down the flags until you find the problematic one). This somehow gets parsed from the system and put into the FLIBS
variable. So, the FLIBS
needs to be re-defined in the configure script to be the same thing except without -lcrt1.10.5.o
(same problem with same solution here: [1]):
FLIBS="-L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0 -L/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/../../.. -lgfortran -lgcc_ext.10.5 -lSystem"
After changing that, everything worked fine.
Resources
Hypre home page - http://acts.nersc.gov/hypre/
Scientific Computing Topics in scientific computing.
Numerical Software: Lapack · Sundials · Matlab · Octave · FFTW Petsc · Example Petsc Makefile · Trilinos · Hypre · Ginac · Gnuplot
Python: Numpy · Scipy · Pandas · Matplotlib · Python Sundials · Py4Sci Scikit-learn: Sklearn · Skimage
|