guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/03: gnu: Add ELPA.


From: guix-commits
Subject: 03/03: gnu: Add ELPA.
Date: Wed, 13 Feb 2019 15:08:45 -0500 (EST)

bavier pushed a commit to branch master
in repository guix.

commit 6d433d6ef7c33b8599199481e1c1faff6584d1ac
Author: Eric Bavier <address@hidden>
Date:   Fri Sep 14 11:53:50 2018 -0500

    gnu: Add ELPA.
    
    * gnu/packages/maths.scm (elpa, elpa-openmpi): New variables.
---
 gnu/packages/maths.scm | 92 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 91 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 0a91664..1807370 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <address@hidden>
 ;;; Copyright © 2013 Nikita Karetnikov <address@hidden>
 ;;; Copyright © 2014, 2016, 2017 John Darrington <address@hidden>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018 Eric Bavier <address@hidden>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Eric Bavier <address@hidden>
 ;;; Copyright © 2014 Federico Beffa <address@hidden>
 ;;; Copyright © 2014 Mathieu Lirzin <address@hidden>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <address@hidden>
@@ -3974,6 +3974,96 @@ as equations, scalars, vectors, and matrices.")
 theories} (SMT) solver.  It provides a C/C++ API, as well as Python bindings.")
     (license license:expat)))
 
+(define-public elpa
+  (package
+    (name "elpa")
+    (version "2018.11.001")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://elpa.mpcdf.mpg.de/html/Releases/";
+                                  version "/elpa-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05hv3v5i6xmziaizw350ff72y1c3k662r85fm3xfdrkclj5zw9yc"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("fortran" ,gfortran)
+       ("perl" ,perl)))                 ;for configure and deps
+    (inputs
+     `(("blas" ,openblas)))
+    (arguments
+     `(#:configure-flags
+       `("--enable-openmp"
+         "--with-mpi=no"
+         ;; ELPA unfortunately does not support runtime dispatch, so we can
+         ;; only enable the "generic" kernels.  See the "Cross compilation"
+         ;; section of INSTALL.md.
+         "--enable-generic"
+         "--disable-sse" "--disable-sse-assembly" ;Require SSE3
+         "--disable-avx" "--disable-avx2" "--disable-avx512"
+         ,(string-append "CFLAGS=-O3 "
+                         "-funsafe-loop-optimizations 
-funsafe-math-optimizations "
+                         "-ftree-vect-loop-version -ftree-vectorize "
+                         ,(let ((system (or (%current-target-system)
+                                            (%current-system))))
+                            (cond
+                             ((or (string-prefix? "x86_64" system)
+                                  (string-prefix? "i686" system))
+                              "-msse2")
+                             (else "")))))
+       #:parallel-tests? #f             ;tests are multi-threaded, via BLAS
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-header-generation
+           (lambda _
+             (substitute* "configure"
+               (("^  *make.*top_srcdir=\"\\$srcdir\"" &)
+                (string-append & " CPP=\"$CPP\"")))
+             #t))
+         (add-before 'check 'setup-tests
+           (lambda _
+             ;; Decrease test time and RAM use by computing fewer eigenvalues.
+             ;; The flags are (MATRIX-SIZE, EIGENVALUES, BLOCK-SIZE), where
+             ;; the default is (500, 250, 16) for C tests and (5000, 150, 16)
+             ;; for Fortran.  This also causes several tests to pass that
+             ;; otherwise would otherwise fail with matrix size 5000; possibly
+             ;; due to floating point tolerances that are too tight.
+             (setenv "TEST_FLAGS" "1500 50 16") ;from elpa.spec
+             (setenv "OMP_NUM_THREADS" (number->string (parallel-job-count)))
+             (substitute* "Makefile"
+               ;; Test scripts are generated, patch the shebang
+               (("#!/bin/bash") (string-append "#!" (which "sh"))))
+             #t)))))
+    (home-page "http://elpa.mpcdf.mpg.de";)
+    (synopsis "Eigenvalue solvers for symmetric matrices")
+    (description
+     "The ELPA library provides efficient and scalable direct eigensolvers for
+symmetric matrices.")
+    (license license:lgpl3)))
+
+(define-public elpa-openmpi
+  (package (inherit elpa)
+    (name "elpa-openmpi")
+    (inputs
+     `(("mpi" ,openmpi)
+       ("scalapack" ,scalapack)
+       ,@(package-inputs elpa)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments elpa)
+       ((#:configure-flags cf '())
+        `(cons "--with-mpi=yes" (delete "--with-mpi=no" ,cf)))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'mpi-setup
+             (lambda _
+               ;; Tests use 2 mpi tasks by default, use our remaining build
+               ;; cores as OpenMP threads.
+               (setenv "OMP_NUM_THREADS" (number->string
+                                          (max (quotient (parallel-job-count) 
2)
+                                               1)))
+               (,%openmpi-setup)))))))
+    (synopsis "Eigenvalue solvers for symmetric matrices (with MPI support)")))
+
 (define-public elemental
   (package
     (name "elemental")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]