mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 13:58:15 -05:00
gnu: Add superlu-dist package.
* gnu/packages/maths.scm (superlu-dist): New variable. * gnu/packages/patches/superlu-dist-scotchmetis.patch: New patch. * gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
parent
6acb4adb34
commit
a54aefead6
3 changed files with 123 additions and 0 deletions
|
@ -346,6 +346,7 @@ dist_patch_DATA = \
|
||||||
gnu/packages/patches/soprano-find-clucene.patch \
|
gnu/packages/patches/soprano-find-clucene.patch \
|
||||||
gnu/packages/patches/source-highlight-regexrange-test.patch \
|
gnu/packages/patches/source-highlight-regexrange-test.patch \
|
||||||
gnu/packages/patches/sqlite-large-page-size-fix.patch \
|
gnu/packages/patches/sqlite-large-page-size-fix.patch \
|
||||||
|
gnu/packages/patches/superlu-dist-scotchmetis.patch \
|
||||||
gnu/packages/patches/tcsh-fix-autotest.patch \
|
gnu/packages/patches/tcsh-fix-autotest.patch \
|
||||||
gnu/packages/patches/teckit-cstdio.patch \
|
gnu/packages/patches/teckit-cstdio.patch \
|
||||||
gnu/packages/patches/valgrind-glibc.patch \
|
gnu/packages/patches/valgrind-glibc.patch \
|
||||||
|
|
|
@ -590,6 +590,107 @@ (define-public superlu
|
||||||
also provides threshold-based ILU factorization preconditioners.")
|
also provides threshold-based ILU factorization preconditioners.")
|
||||||
(license license:bsd-3)))
|
(license license:bsd-3)))
|
||||||
|
|
||||||
|
(define-public superlu-dist
|
||||||
|
(package
|
||||||
|
(name "superlu-dist")
|
||||||
|
(version "3.3")
|
||||||
|
(source
|
||||||
|
(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
|
||||||
|
"superlu_dist_" version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32 "1hnak09yxxp026blq8zhrl7685yip16svwngh1wysqxf8z48vzfj"))
|
||||||
|
(patches (list (search-patch "superlu-dist-scotchmetis.patch")))))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(native-inputs
|
||||||
|
`(("tcsh" ,tcsh)))
|
||||||
|
(inputs
|
||||||
|
`(("gfortran" ,gfortran-4.8)))
|
||||||
|
(propagated-inputs
|
||||||
|
`(("openmpi" ,openmpi) ;headers include MPI heades
|
||||||
|
("lapack" ,lapack) ;required to link with output library
|
||||||
|
("pt-scotch" ,pt-scotch))) ;same
|
||||||
|
(arguments
|
||||||
|
`(#:parallel-build? #f ;race conditions using ar
|
||||||
|
#:phases
|
||||||
|
(alist-replace
|
||||||
|
'configure
|
||||||
|
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||||
|
(call-with-output-file "make.inc"
|
||||||
|
(lambda (port)
|
||||||
|
(format port "
|
||||||
|
PLAT =
|
||||||
|
DSuperLUroot = ~a
|
||||||
|
DSUPERLULIB = ~a/lib/libsuperlu_dist.a
|
||||||
|
BLASDEF = -DUSE_VENDOR_BLAS
|
||||||
|
BLASLIB = -L~a/lib -lblas
|
||||||
|
PARMETISLIB = -L~a/lib \
|
||||||
|
-lptscotchparmetis -lptscotch -lptscotcherr -lptscotcherrexit \
|
||||||
|
-lscotch -lscotcherr -lscotcherrexit
|
||||||
|
METISLIB = -L~:*~a/lib \
|
||||||
|
-lscotchmetis -lscotch -lscotcherr -lscotcherrexit
|
||||||
|
LIBS = $(DSUPERLULIB) $(PARMETISLIB) $(METISLIB) $(BLASLIB)
|
||||||
|
ARCH = ar
|
||||||
|
ARCHFLAGS = cr
|
||||||
|
RANLIB = ranlib
|
||||||
|
CC = mpicc
|
||||||
|
PIC = -fPIC
|
||||||
|
CFLAGS = -O3 -g -DPRNTlevel=0 $(PIC)
|
||||||
|
NOOPTS = -O0 -g $(PIC)
|
||||||
|
FORTRAN = mpifort
|
||||||
|
FFLAGS = -O2 -g $(PIC)
|
||||||
|
LOADER = $(CC)
|
||||||
|
CDEFS = -DAdd_"
|
||||||
|
(getcwd)
|
||||||
|
(assoc-ref outputs "out")
|
||||||
|
(assoc-ref inputs "lapack")
|
||||||
|
(assoc-ref inputs "pt-scotch")))))
|
||||||
|
(alist-cons-after
|
||||||
|
'unpack 'remove-broken-symlinks
|
||||||
|
(lambda _
|
||||||
|
(for-each delete-file
|
||||||
|
(find-files "MAKE_INC" "\\.#make\\..*")))
|
||||||
|
(alist-cons-before
|
||||||
|
'build 'create-install-directories
|
||||||
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
|
(for-each
|
||||||
|
(lambda (dir)
|
||||||
|
(mkdir-p (string-append (assoc-ref outputs "out")
|
||||||
|
"/" dir)))
|
||||||
|
'("lib" "include")))
|
||||||
|
(alist-replace
|
||||||
|
'check
|
||||||
|
(lambda _
|
||||||
|
(with-directory-excursion "EXAMPLE"
|
||||||
|
(and
|
||||||
|
(zero? (system* "mpirun" "-n" "2"
|
||||||
|
"./pddrive" "-r" "1" "-c" "2" "g20.rua"))
|
||||||
|
(zero? (system* "mpirun" "-n" "2"
|
||||||
|
"./pzdrive" "-r" "1" "-c" "2" "cg20.cua")))))
|
||||||
|
(alist-replace
|
||||||
|
'install
|
||||||
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
|
;; Library is placed in lib during the build phase. Copy over
|
||||||
|
;; headers to include.
|
||||||
|
(let* ((out (assoc-ref outputs "out"))
|
||||||
|
(incdir (string-append out "/include")))
|
||||||
|
(for-each (lambda (file)
|
||||||
|
(let ((base (basename file)))
|
||||||
|
(format #t "installing `~a' to `~a'~%"
|
||||||
|
base incdir)
|
||||||
|
(copy-file file
|
||||||
|
(string-append incdir "/" base))))
|
||||||
|
(find-files "SRC" ".*\\.h$"))))
|
||||||
|
%standard-phases)))))))
|
||||||
|
(home-page (package-home-page superlu))
|
||||||
|
(synopsis "Parallel supernodal direct solver")
|
||||||
|
(description
|
||||||
|
"SuperLU_DIST is a parallel extension to the serial SuperLU library.
|
||||||
|
It is targeted for distributed memory parallel machines. SuperLU_DIST is
|
||||||
|
implemented in ANSI C, and MPI for communications.")
|
||||||
|
(license license:bsd-3)))
|
||||||
|
|
||||||
(define-public scotch
|
(define-public scotch
|
||||||
(package
|
(package
|
||||||
(name "scotch")
|
(name "scotch")
|
||||||
|
|
21
gnu/packages/patches/superlu-dist-scotchmetis.patch
Normal file
21
gnu/packages/patches/superlu-dist-scotchmetis.patch
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
The METIS interface from Scotch may segfault if passed NULL to indicate a
|
||||||
|
default parameter, so use the older calling style.
|
||||||
|
|
||||||
|
--- a/SRC/get_perm_c.c 2014-05-16 23:38:30.070835316 -0500
|
||||||
|
+++ b/SRC/get_perm_c.c 2014-05-16 23:39:04.582836211 -0500
|
||||||
|
@@ -70,11 +70,13 @@
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Earlier version 3.x.x */
|
||||||
|
- /* METIS_NodeND(&nm, b_colptr, b_rowind, &numflag, metis_options,
|
||||||
|
- perm, iperm);*/
|
||||||
|
+ METIS_NodeND(&nm, b_colptr, b_rowind, &numflag, metis_options,
|
||||||
|
+ perm, iperm);
|
||||||
|
|
||||||
|
/* Latest version 4.x.x */
|
||||||
|
+#if 0
|
||||||
|
METIS_NodeND(&nm, b_colptr, b_rowind, NULL, NULL, perm, iperm);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/*check_perm_dist("metis perm", n, perm);*/
|
||||||
|
#endif
|
Loading…
Reference in a new issue