gnu: Add MUMPS.
* gnu/packages/maths.scm (mumps, mumps-metis, mumps-openmpi) (mumps-metis-openmpi): New variables. * gnu/packages/patches/mumps-build-parallelism.patch: New patch. * gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
parent
aa75ad0097
commit
cec86422b7
@ -519,6 +519,7 @@ dist_patch_DATA = \
|
|||||||
gnu/packages/patches/mpc123-initialize-ao.patch \
|
gnu/packages/patches/mpc123-initialize-ao.patch \
|
||||||
gnu/packages/patches/mplayer2-theora-fix.patch \
|
gnu/packages/patches/mplayer2-theora-fix.patch \
|
||||||
gnu/packages/patches/module-init-tools-moduledir.patch \
|
gnu/packages/patches/module-init-tools-moduledir.patch \
|
||||||
|
gnu/packages/patches/mumps-build-parallelism.patch \
|
||||||
gnu/packages/patches/mupdf-buildsystem-fix.patch \
|
gnu/packages/patches/mupdf-buildsystem-fix.patch \
|
||||||
gnu/packages/patches/mutt-CVE-2014-9116.patch \
|
gnu/packages/patches/mutt-CVE-2014-9116.patch \
|
||||||
gnu/packages/patches/net-tools-bitrot.patch \
|
gnu/packages/patches/net-tools-bitrot.patch \
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#:use-module (guix download)
|
#:use-module (guix download)
|
||||||
#:use-module (guix svn-download)
|
#:use-module (guix svn-download)
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
|
#:use-module (guix build utils)
|
||||||
#:use-module (guix build-system cmake)
|
#:use-module (guix build-system cmake)
|
||||||
#:use-module (guix build-system gnu)
|
#:use-module (guix build-system gnu)
|
||||||
#:use-module (gnu packages algebra)
|
#:use-module (gnu packages algebra)
|
||||||
@ -628,6 +629,174 @@ scientific applications modeled by partial differential equations.")
|
|||||||
,@(delete "--with-mpi=0" ,cf)))))
|
,@(delete "--with-mpi=0" ,cf)))))
|
||||||
(synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
|
(synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
|
||||||
|
|
||||||
|
(define-public mumps
|
||||||
|
(package
|
||||||
|
(name "mumps")
|
||||||
|
(version "5.0.0")
|
||||||
|
(source
|
||||||
|
(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "http://mumps.enseeiht.fr/MUMPS_"
|
||||||
|
version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0690yp73sqk8zn2jnrzdr5swnjdyd7j0774s4xamjjwcxarw87hr"))
|
||||||
|
(patches (list (search-patch "mumps-build-parallelism.patch")))))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(inputs
|
||||||
|
`(("fortran" ,gfortran)
|
||||||
|
;; These are required for linking against mumps, but we let the user
|
||||||
|
;; declare the dependency.
|
||||||
|
("blas" ,openblas)
|
||||||
|
("metis" ,metis)
|
||||||
|
("scotch" ,scotch)))
|
||||||
|
(arguments
|
||||||
|
`(#:modules ((ice-9 match)
|
||||||
|
(ice-9 popen)
|
||||||
|
(srfi srfi-1)
|
||||||
|
,@%gnu-build-system-modules)
|
||||||
|
#:phases
|
||||||
|
(modify-phases %standard-phases
|
||||||
|
(replace
|
||||||
|
'configure
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
(call-with-output-file "Makefile.inc"
|
||||||
|
(lambda (port)
|
||||||
|
(format port "
|
||||||
|
PLAT =
|
||||||
|
LIBEXT = .a
|
||||||
|
OUTC = -o
|
||||||
|
OUTF = -o
|
||||||
|
RM = rm -f~:[
|
||||||
|
CC = gcc
|
||||||
|
FC = gfortran
|
||||||
|
FL = gfortran
|
||||||
|
INCSEQ = -I$(topdir)/libseq
|
||||||
|
LIBSEQ = -L$(topdir)/libseq -lmpiseq
|
||||||
|
LIBSEQNEEDED = libseqneeded~;
|
||||||
|
CC = mpicc
|
||||||
|
FC = mpifort
|
||||||
|
FL = mpifort~]
|
||||||
|
AR = ar vr # rules require trailing space, ugh...
|
||||||
|
RANLIB = ranlib
|
||||||
|
LIBBLAS = -L~a -lopenblas~@[
|
||||||
|
SCALAP = -L~a -lscalapack~]
|
||||||
|
LIBOTHERS = -pthread
|
||||||
|
CDEFS = -DAdd_
|
||||||
|
PIC = -fPIC
|
||||||
|
OPTF = -O2 -DALLOW_NON_INIT $(PIC)
|
||||||
|
OPTL = -O2 $(PIC)
|
||||||
|
OPTC = -O2 $(PIC)
|
||||||
|
INCS = $(INCSEQ)
|
||||||
|
LIBS = $(SCALAP) $(LIBSEQ)
|
||||||
|
LPORDDIR = $(topdir)/PORD/lib
|
||||||
|
IPORD = -I$(topdir)/PORD/include
|
||||||
|
LPORD = -L$(LPORDDIR) -lpord
|
||||||
|
ORDERINGSF = -Dpord~@[
|
||||||
|
METISDIR = ~a
|
||||||
|
IMETIS = -I$(METISDIR)/include
|
||||||
|
LMETIS = -L$(METISDIR)/lib -lmetis
|
||||||
|
ORDERINGSF += -Dmetis~]~@[~:{
|
||||||
|
SCOTCHDIR = ~a
|
||||||
|
ISCOTCH = -I$(SCOTCHDIR)/include
|
||||||
|
LSCOTCH = -L$(SCOTCHDIR)/lib ~a-lesmumps -lscotch -lscotcherr
|
||||||
|
ORDERINGSF += ~a~}~]
|
||||||
|
ORDERINGSC = $(ORDERINGSF)
|
||||||
|
LORDERINGS = $(LPORD) $(LMETIS) $(LSCOTCH)
|
||||||
|
IORDERINGSF = $(ISCOTCH)
|
||||||
|
IORDERINGSC = $(IPORD) $(IMETIS) $(ISCOTCH)"
|
||||||
|
(assoc-ref inputs "mpi")
|
||||||
|
(assoc-ref inputs "blas")
|
||||||
|
(assoc-ref inputs "scalapack")
|
||||||
|
(assoc-ref inputs "metis")
|
||||||
|
(match (list (assoc-ref inputs "pt-scotch")
|
||||||
|
(assoc-ref inputs "scotch"))
|
||||||
|
((#f #f)
|
||||||
|
#f)
|
||||||
|
((#f scotch)
|
||||||
|
`((,scotch "" "-Dscotch")))
|
||||||
|
((ptscotch _)
|
||||||
|
`((,ptscotch
|
||||||
|
"-lptesmumps -lptscotch -lptscotcherr "
|
||||||
|
"-Dptscotch")))))))))
|
||||||
|
(replace
|
||||||
|
'build
|
||||||
|
;; By default only the d-precision library is built. Make with "all"
|
||||||
|
;; target so that all precision libraries and examples are built.
|
||||||
|
(lambda _
|
||||||
|
(zero? (system* "make" "all"
|
||||||
|
(format #f "-j~a" (parallel-job-count))))))
|
||||||
|
(replace
|
||||||
|
'check
|
||||||
|
;; Run the simple test drivers, which read test input from stdin:
|
||||||
|
;; from the "real" input for the single- and double-precision
|
||||||
|
;; testers, and from the "cmplx" input for complex-precision
|
||||||
|
;; testers. The EXEC-PREFIX key is used by the mumps-openmpi
|
||||||
|
;; package to prefix execution with "mpirun".
|
||||||
|
(lambda* (#:key (exec-prefix '()) #:allow-other-keys)
|
||||||
|
(with-directory-excursion "examples"
|
||||||
|
(every
|
||||||
|
(lambda (prec type)
|
||||||
|
(let ((tester (apply open-pipe*
|
||||||
|
`(,OPEN_WRITE
|
||||||
|
,@exec-prefix
|
||||||
|
,(string-append "./" prec
|
||||||
|
"simpletest"))))
|
||||||
|
(input (open-input-file
|
||||||
|
(string-append "input_simpletest_" type))))
|
||||||
|
(begin
|
||||||
|
(dump-port input tester)
|
||||||
|
(close-port input)
|
||||||
|
(zero? (close-pipe tester)))))
|
||||||
|
'("s" "d" "c" "z")
|
||||||
|
'("real" "real" "cmplx" "cmplx")))))
|
||||||
|
(replace
|
||||||
|
'install
|
||||||
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
|
(let ((out (assoc-ref outputs "out")))
|
||||||
|
(copy-recursively "lib" (string-append out "/lib"))
|
||||||
|
(copy-recursively "include" (string-append out "/include"))
|
||||||
|
(when (file-exists? "libseq/libmpiseq.a")
|
||||||
|
(copy-file "libseq/libmpiseq.a"
|
||||||
|
(string-append out "/lib/libmpiseq.a")))))))))
|
||||||
|
(home-page "http://mumps.enseeiht.fr")
|
||||||
|
(synopsis "Multifrontal sparse direct solver")
|
||||||
|
(description
|
||||||
|
"MUMPS (MUltifrontal Massively Parallel sparse direct Solver) solves a
|
||||||
|
sparse system of linear equations A x = b using Guassian elimination.")
|
||||||
|
(license license:cecill-c)))
|
||||||
|
|
||||||
|
(define-public mumps-metis
|
||||||
|
(package (inherit mumps)
|
||||||
|
(name "mumps-metis")
|
||||||
|
(inputs
|
||||||
|
(alist-delete "scotch" (package-inputs mumps)))))
|
||||||
|
|
||||||
|
(define-public mumps-openmpi
|
||||||
|
(package (inherit mumps)
|
||||||
|
(name "mumps-openmpi")
|
||||||
|
(inputs
|
||||||
|
`(("mpi" ,openmpi)
|
||||||
|
("scalapack" ,scalapack)
|
||||||
|
("pt-scotch" ,pt-scotch)
|
||||||
|
,@(alist-delete "scotch" (package-inputs mumps))))
|
||||||
|
(arguments
|
||||||
|
(substitute-keyword-arguments (package-arguments mumps)
|
||||||
|
((#:phases phases)
|
||||||
|
`(modify-phases ,phases
|
||||||
|
(replace
|
||||||
|
'check
|
||||||
|
(lambda _
|
||||||
|
((assoc-ref ,phases 'check)
|
||||||
|
#:exec-prefix '("mpirun" "-n" "2"))))))))
|
||||||
|
(synopsis "Multifrontal sparse direct solver (with MPI)")))
|
||||||
|
|
||||||
|
(define-public mumps-metis-openmpi
|
||||||
|
(package (inherit mumps-openmpi)
|
||||||
|
(name "mumps-metis-openmpi")
|
||||||
|
(inputs
|
||||||
|
(alist-delete "pt-scotch" (package-inputs mumps-openmpi)))))
|
||||||
|
|
||||||
(define-public superlu
|
(define-public superlu
|
||||||
(package
|
(package
|
||||||
(name "superlu")
|
(name "superlu")
|
||||||
|
13
gnu/packages/patches/mumps-build-parallelism.patch
Normal file
13
gnu/packages/patches/mumps-build-parallelism.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Building sublibraries in parallel can lead to race conditions on the libseq
|
||||||
|
and lipord targets.
|
||||||
|
|
||||||
|
--- MUMPS_5.0.0/Makefile.orig 2015-06-15 10:08:54.523146562 -0500
|
||||||
|
+++ MUMPS_5.0.0/Makefile 2015-06-15 10:19:44.074367512 -0500
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
sexamples dexamples cexamples zexamples \
|
||||||
|
mumps_lib requiredobj libseqneeded clean
|
||||||
|
|
||||||
|
+.NOTPARALLEL:
|
||||||
|
alllib: c z s d
|
||||||
|
all: cexamples zexamples sexamples dexamples
|
||||||
|
|
Loading…
Reference in New Issue
Block a user