aboutsummaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/maths.scm84
-rw-r--r--gnu/packages/patches/dealii-p4est-interface.patch62
2 files changed, 145 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)")))
diff --git a/gnu/packages/patches/dealii-p4est-interface.patch b/gnu/packages/patches/dealii-p4est-interface.patch
new file mode 100644
index 0000000000..4c4125d16c
--- /dev/null
+++ b/gnu/packages/patches/dealii-p4est-interface.patch
@@ -0,0 +1,62 @@
+From upstream commit f764598c.
+
+The p4est_connectivity_load function used to take an unsigned long as argument,
+but this has been changed to size_t in p4est 1.0. This makes no difference on
+64 bit systems, but leads to compiler errors on 32 bit systems. Fix this.
+
+--- a/source/distributed/tria.cc
++++ b/source/distributed/tria.cc
+@@ -204,7 +204,11 @@ namespace internal
+ static
+ int (&connectivity_is_valid) (types<2>::connectivity *connectivity);
+
+-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
++#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
++ static
++ types<2>::connectivity *(&connectivity_load) (const char *filename,
++ size_t *length);
++#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+ static
+ types<2>::connectivity *(&connectivity_load) (const char *filename,
+ long unsigned *length);
+@@ -384,7 +388,12 @@ namespace internal
+ *connectivity)
+ = p4est_connectivity_is_valid;
+
+-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
++#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
++ types<2>::connectivity *
++ (&functions<2>::connectivity_load) (const char *filename,
++ size_t *length)
++ = p4est_connectivity_load;
++#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+ types<2>::connectivity *
+ (&functions<2>::connectivity_load) (const char *filename,
+ long unsigned *length)
+@@ -564,7 +573,11 @@ namespace internal
+ static
+ int (&connectivity_is_valid) (types<3>::connectivity *connectivity);
+
+-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
++#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
++ static
++ types<3>::connectivity *(&connectivity_load) (const char *filename,
++ size_t *length);
++#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+ static
+ types<3>::connectivity *(&connectivity_load) (const char *filename,
+ long unsigned *length);
+@@ -747,7 +760,12 @@ namespace internal
+ *connectivity)
+ = p8est_connectivity_is_valid;
+
+-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
++#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
++ types<3>::connectivity *
++ (&functions<3>::connectivity_load) (const char *filename,
++ size_t *length)
++ = p8est_connectivity_load;
++#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+ types<3>::connectivity *
+ (&functions<3>::connectivity_load) (const char *filename,
+ long unsigned *length)