diff --git a/gnu/local.mk b/gnu/local.mk index d243a1c635..76d596de53 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -535,6 +535,8 @@ dist_patch_DATA = \ gnu/packages/patches/hop-linker-flags.patch \ gnu/packages/patches/hydra-automake-1.15.patch \ gnu/packages/patches/hydra-disable-darcs-test.patch \ + gnu/packages/patches/hypre-doc-tables.patch \ + gnu/packages/patches/hypre-ldflags.patch \ gnu/packages/patches/icecat-avoid-bundled-includes.patch \ gnu/packages/patches/icecat-re-enable-DHE-cipher-suites.patch \ gnu/packages/patches/icecat-update-bundled-graphite2.patch \ diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 9ba7138f88..dc01b59d68 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -46,6 +46,7 @@ #:use-module (gnu packages cmake) #:use-module (gnu packages compression) #:use-module (gnu packages curl) + #:use-module (gnu packages documentation) #:use-module (gnu packages elf) #:use-module (gnu packages flex) #:use-module (gnu packages fltk) @@ -65,6 +66,7 @@ #:use-module (gnu packages m4) #:use-module (gnu packages mpi) #:use-module (gnu packages multiprecision) + #:use-module (gnu packages netpbm) #:use-module (gnu packages pcre) #:use-module (gnu packages popt) #:use-module (gnu packages perl) @@ -2158,3 +2160,116 @@ are built. It can generate many different fractal types such as the Mandelbrot set.") (home-page "http://www.gnu.org/software/xaos/") (license license:gpl2+))) + +(define-public hypre + (package + (name "hypre") + (version "2.11.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/LLNL/hypre/archive/" + "v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0q69ia0jivzcr8p049dn3mg8yjpn6nwq4sw9iqac8vr63vi54l6m")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Remove use of __DATE__ and __TIME__ for reproducibility; + ;; substitute the tarball creation time. + (substitute* "src/utilities/HYPRE_utilities.h" + (("Date Compiled: .*$") + "Date Compiled: Mar 28 2016 20:19:59 +0000\"\n")) + #t)))) + (build-system gnu-build-system) + (outputs '("out" ;6.1 MiB of headers and libraries + "doc")) ;4.8 MiB of documentation + (native-inputs + `(("doc++" ,doc++) + ("netpbm" ,netpbm) + ("texlive" ,texlive) ;full package required for fonts + ("ghostscript" ,ghostscript))) + (inputs + `(("blas" ,openblas) + ("lapack" ,lapack))) + (arguments + `(#:modules ((srfi srfi-1) + ,@%gnu-build-system-modules) + #:configure-flags '("--enable-shared" + "--disable-fortran" + "--without-MPI" + "--with-openmp" + "--with-fei" + "--with-lapack" + "--with-blas") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir-src + (lambda _ (chdir "src"))) + (replace 'configure + (lambda* (#:key build target configure-flags + #:allow-other-keys #:rest args) + (let* ((configure (assoc-ref %standard-phases 'configure))) + (apply configure + (append args + (list #:configure-flags + (cons (string-append + "--host=" (or target build)) + configure-flags))))))) + (add-after 'build 'build-docs + (lambda _ + (zero? (system* "make" "-Cdocs" "pdf" "html")))) + (replace 'check + (lambda _ + (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib")) + (setenv "PATH" (string-append "." ":" (getenv "PATH"))) + (and (system* "make" "check" "CHECKRUN=") + (fold (lambda (filename result) + (and result + (let ((size (stat:size (stat filename)))) + (when (not (zero? size)) + (format #t "~a size ~d; error indication~%" + filename size)) + (zero? size)))) + #t + (find-files "test" ".*\\.err$"))))) + (add-after 'install 'install-docs + (lambda* (#:key outputs #:allow-other-keys) + ;; Custom install because docs/Makefile doesn't honor ${docdir}. + (let* ((doc (assoc-ref outputs "doc")) + (docdir (string-append doc "/share/doc/hypre-" ,version))) + (mkdir-p docdir) + (with-directory-excursion "docs" + (for-each (lambda (base) + (install-file (string-append base ".pdf") docdir) + (copy-recursively base docdir)) ;html docs + '("HYPRE_usr_manual" + "HYPRE_ref_manual"))) + #t)))))) + (home-page "http://www.llnl.gov/casc/hypre/") + (synopsis "Library of solvers and preconditioners for linear equations") + (description + "HYPRE is a software library of high performance preconditioners and +solvers for the solution of large, sparse linear systems of equations. It +features multigrid solvers for both structured and unstructured grid +problems.") + (license license:lgpl2.1))) + +(define-public hypre-openmpi + (package (inherit hypre) + (name "hypre-openmpi") + (inputs + `(("mpi" ,openmpi) + ,@(package-inputs hypre))) + (arguments + (substitute-keyword-arguments (package-arguments hypre) + ((#:configure-flags flags) + ``("--with-MPI" + ,@(delete "--without-MPI" ,flags))))) + (synopsis "Parallel solvers and preconditioners for linear equations") + (description + "HYPRE is a software library of high performance preconditioners and +solvers for the solution of large, sparse linear systems of equations on +parallel computers. It features parallel multigrid solvers for both +structured and unstructured grid problems."))) diff --git a/gnu/packages/patches/hypre-doc-tables.patch b/gnu/packages/patches/hypre-doc-tables.patch new file mode 100644 index 0000000000..6a852ee78e --- /dev/null +++ b/gnu/packages/patches/hypre-doc-tables.patch @@ -0,0 +1,25 @@ +Fixes doc++'s treatment of tabular within a parameter block. + +From commit 883925f8a at http://github.com/LLNL/hypre + +--- hypre-2.10.1/src/parcsr_ls/HYPRE_parcsr_ls.h 2015-12-04 22:12:19.000000000 -0600 ++++ hypre-2.10.1/src/parcsr_ls/HYPRE_parcsr_ls.h 2016-03-16 09:02:58.547501336 -0500 +@@ -1154,8 +1154,6 @@ + * Set the symmetry parameter for the + * ParaSails preconditioner. + * +- * @param solver [IN] Preconditioner object for which to set symmetry parameter. +- * @param sym [IN] Value of the symmetry parameter: + * \begin{tabular}{|c|l|} \hline + * value & meaning \\ \hline + * 0 & nonsymmetric and/or indefinite problem, and nonsymmetric preconditioner\\ +@@ -1163,6 +1161,9 @@ + * 2 & nonsymmetric, definite problem, and SPD (factored) preconditioner \\ + * \hline + * \end{tabular} ++ * ++ * @param solver [IN] Preconditioner object for which to set symmetry parameter. ++ * @param sym [IN] Value of the symmetry parameter: + **/ + HYPRE_Int HYPRE_ParaSailsSetSym(HYPRE_Solver solver, + HYPRE_Int sym); diff --git a/gnu/packages/patches/hypre-ldflags.patch b/gnu/packages/patches/hypre-ldflags.patch new file mode 100644 index 0000000000..a94fafa463 --- /dev/null +++ b/gnu/packages/patches/hypre-ldflags.patch @@ -0,0 +1,9 @@ +--- hypre-2.10.1/src/lib/Makefile.orig 2016-03-11 16:04:03.740259228 -0600 ++++ hypre-2.10.1/src/lib/Makefile 2016-03-11 16:04:57.296260190 -0600 +@@ -107,5 +107,5 @@ + + libHYPRE.so: ${FILES_HYPRE} + @echo "Building $@ ... " +- ${BUILD_CC_SHARED} -o ${SONAME} ${FILES_HYPRE} ${SOLIBS} ${SHARED_SET_SONAME}${SONAME} ${SHARED_OPTIONS} ++ ${BUILD_CC_SHARED} ${LDFLAGS} -o ${SONAME} ${FILES_HYPRE} ${SOLIBS} ${SHARED_SET_SONAME}${SONAME} ${SHARED_OPTIONS} + ln -s ${SONAME} $@