summary refs log tree commit diff
path: root/gnu/packages/maths.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/maths.scm')
-rw-r--r--gnu/packages/maths.scm84
1 files changed, 83 insertions, 1 deletions
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 3a74eb8e4d..7eb2f5aeae 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -37,6 +37,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -72,7 +73,8 @@
   #:use-module (gnu packages texlive)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xml)
-  #:use-module (gnu packages zip))
+  #:use-module (gnu packages zip)
+  #:use-module (srfi srfi-1))
 
 (define-public units
   (package
@@ -1847,3 +1849,83 @@ specifications.")
      "lp_solve is a mixed integer linear programming solver based on the
 revised simplex and the branch-and-bound methods.")
     (license license:lgpl2.1+)))
+
+(define-public dealii
+  (package
+    (name "dealii")
+    (version "8.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/dealii/dealii/releases/"
+                           "download/v" version "/dealii-" version ".tar.gz"))
+       (sha256
+        (base32
+         "185jych0gdnpkjwxni7pd0dda149492zwq2457xdjg76bzj78mnp"))
+       (patches (list (search-patch "dealii-p4est-interface.patch")))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove bundled sources: UMFPACK, TBB, muParser, and boost
+        '(delete-file-recursively "bundled"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("tbb" ,tbb)
+       ("zlib" ,zlib)
+       ("boost" ,boost)
+       ("p4est" ,p4est)
+       ("blas" ,openblas)
+       ("lapack" ,lapack)
+       ("arpack" ,arpack-ng)
+       ("muparser" ,muparser)
+       ("gfortran" ,gfortran)
+       ("suitesparse" ,suitesparse)))   ;for UMFPACK
+    (arguments
+     `(#:build-type "DebugRelease" ;only supports Release, Debug, or DebugRelease
+       #:configure-flags '("-DCOMPAT_FILES=OFF") ;Follow new directory structure
+       #:phases (modify-phases %standard-phases
+                  (add-after
+                   'install 'hint-example-prefix
+                   ;; Set Cmake hints in examples so that they can find this
+                   ;; deal.II when configuring.
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref %outputs "out"))
+                            (exmpl (string-append out "/share/doc"
+                                                  "/dealii/examples")))
+                       (substitute* (find-files exmpl "CMakeLists.txt")
+                         (("([[:space:]]*HINTS.*)\n" _ line)
+                          (string-append line " $ENV{HOME}/.guix-profile "
+                                         out "\n")))
+                       #t))))))
+    (home-page "https://www.dealii.org")
+    (synopsis "Finite element library")
+    (description
+     "Deal.II is a C++ program library targeted at the computational solution
+of partial differential equations using adaptive finite elements.  The main
+aim of deal.II is to enable rapid development of modern finite element codes,
+using among other aspects adaptive meshes and a wide array of tools often used
+in finite element programs.")
+    (license license:lgpl2.1+)))
+
+(define-public dealii-openmpi
+  (package (inherit dealii)
+    (name "dealii-openmpi")
+    (inputs
+     `(("mpi" ,openmpi)
+       ;;Supported only with MPI:
+       ("p4est" ,p4est-openmpi)
+       ("petsc" ,petsc-openmpi)
+       ("slepc" ,slepc-openmpi)
+       ("metis" ,metis)               ;for MUMPS
+       ("scalapack" ,scalapack)       ;for MUMPS
+       ("mumps" ,mumps-metis-openmpi) ;configure supports only metis orderings
+       ("arpack" ,arpack-ng-openmpi)
+       ,@(fold alist-delete (package-inputs dealii)
+               '("p4est" "arpack"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments dealii)
+       ((#:configure-flags cf)
+        ``("-DMPI_C_COMPILER=mpicc"
+           "-DMPI_CXX_COMPILER=mpicxx"
+           "-DMPI_Fortran_COMPILER=mpifort"
+           ,@,cf))))
+    (synopsis "Finite element library (with MPI support)")))