Hypre: Difference between revisions
From charlesreid1
No edit summary |
|||
| (14 intermediate revisions by the same user not shown) | |||
| Line 3: | Line 3: | ||
= Installation = | = Installation = | ||
Installing Hypre can be tricky. 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 . | 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 == | == Dependencies == | ||
Hypre will require an installation of MPI on your machine. I | 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 == | == Configuration == | ||
| Line 13: | Line 13: | ||
Download the hypre tarball and decompress it. Put your configure wrapper into the <code>src/</code> directory of the decompressed Hypre tarball. | Download the hypre tarball and decompress it. Put your configure wrapper into the <code>src/</code> 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. | |||
<pre> | |||
#!/bin/sh | #!/bin/sh | ||
# | # | ||
| Line 21: | Line 25: | ||
# make | # make | ||
# make install | # make install | ||
# make test | |||
./configure \ | ./configure \ | ||
| Line 26: | Line 31: | ||
--with-MPI-lib-dirs=/path/to/mpi/lib \ | --with-MPI-lib-dirs=/path/to/mpi/lib \ | ||
--with-MPI-libs="mpi lam pmpi util" \ | --with-MPI-libs="mpi lam pmpi util" \ | ||
--prefix=/path/to/hypre \ | --prefix=/path/to/hypre/2.0.0 \ | ||
\ | \ | ||
F77=/usr/local/bin/gfortran \ | F77=/usr/local/bin/gfortran \ | ||
| Line 32: | Line 37: | ||
CFLAGS=-DMPIPP_H \ | CFLAGS=-DMPIPP_H \ | ||
CXXFLAGS=-DMPIPP_H | CXXFLAGS=-DMPIPP_H | ||
</ | </pre> | ||
The <code>-DMPIPP_H</code> compiler flags are only required for [[LAM MPI]] and [[OpenMPI]]; they are not needed if you use any other MPI install (e.g. MPICH). | The <code>-DMPIPP_H</code> 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: | |||
<pre> | |||
#!/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" | |||
</pre> | |||
=== 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): | |||
<pre> | |||
#!/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" | |||
</pre> | |||
Note that the <code>--enable-shared</code> option will cause problems on Mac, since Mac uses a non-standard gcc. | |||
== Installation Errors == | == Installation Errors == | ||
===Error with dlamch.o=== | |||
If you see an error like this: | If you see an error like this: | ||
| Line 52: | Line 122: | ||
Then you need to edit <code>/path/to/hypre/src/lapack/Makefile</code>, and add an <code>-fPIC</code> flag, as shown below: | Then you need to edit <code>/path/to/hypre/src/lapack/Makefile</code>, and add an <code>-fPIC</code> flag, as shown below: | ||
< | <pre> | ||
dlamch.o : dlamch.c ${LAPACK_HEADERS} | dlamch.o : dlamch.c ${LAPACK_HEADERS} | ||
${CC} -c -fPIC dlamch.c | ${CC} -c -fPIC dlamch.c | ||
</ | </pre> | ||
= | ===Duplicate symbol start=== | ||
When I tried to build Hypre on a 64-bit Mac server, I saw the following error while running configure: | |||
<pre> | |||
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. | |||
</pre> | |||
The underlying error, appearing in <code>config.log</code>, is this: | |||
<pre> | |||
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 | |||
</pre> | |||
And the underlying problem with ''that'' is the <code>-lcrt1.10.5.o</code> 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 <code>FLIBS</code> variable. So, the <code>FLIBS</code> needs to be re-defined in the configure script to be the same thing except without <code>-lcrt1.10.5.o</code> (same problem with same solution here: [http://list.coin-or.org/pipermail/ipopt/2008-August/001232.html]): | |||
<pre> | |||
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" | |||
</pre> | |||
After changing that, everything worked fine. | |||
= Resources = | = Resources = | ||
| Line 69: | Line 171: | ||
{{Programs}} | |||
{{Math Programs}} | |||
Latest revision as of 01:07, 10 October 2017
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.
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
|