gnu: Add petsc

* gnu/packages/maths.scm (petsc): New variable.
  (petsc-complex): New variable.
* gnu/packages/patches/petsc-fix-threadcomm.patch: New patch.
* gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
Eric Bavier 2014-04-30 14:01:43 -05:00
parent 3da5dca34c
commit b9100e2f11
3 changed files with 105 additions and 0 deletions

View File

@ -323,6 +323,7 @@ dist_patch_DATA = \
gnu/packages/patches/patchelf-page-size.patch \ gnu/packages/patches/patchelf-page-size.patch \
gnu/packages/patches/patchutils-xfail-gendiff-tests.patch \ gnu/packages/patches/patchutils-xfail-gendiff-tests.patch \
gnu/packages/patches/perl-no-sys-dirs.patch \ gnu/packages/patches/perl-no-sys-dirs.patch \
gnu/packages/patches/petsc-fix-threadcomm.patch \
gnu/packages/patches/plotutils-libpng-jmpbuf.patch \ gnu/packages/patches/plotutils-libpng-jmpbuf.patch \
gnu/packages/patches/procps-make-3.82.patch \ gnu/packages/patches/procps-make-3.82.patch \
gnu/packages/patches/python-fix-tests.patch \ gnu/packages/patches/python-fix-tests.patch \

View File

@ -366,3 +366,92 @@ mesh, solver and post-processing. The specification of any input to these
modules is done either interactively using the graphical user interface or in modules is done either interactively using the graphical user interface or in
ASCII text files using Gmsh's own scripting language.") ASCII text files using Gmsh's own scripting language.")
(license license:gpl2+))) (license license:gpl2+)))
(define-public petsc
(package
(name "petsc")
(version "3.4.4")
(source
(origin
(method url-fetch)
;; The *-lite-* tarball does not contain the *large* documentation
(uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
"petsc-lite-" version ".tar.gz"))
(sha256
(base32 "0v5dg6dhdjpi5ianvd4mm6hsvxzv1bsxwnh9f9myag0a0d9xk9iv"))
(patches
(list (search-patch "petsc-fix-threadcomm.patch")))))
(build-system gnu-build-system)
(native-inputs
`(("python" ,python-2)
("perl" ,perl)))
(inputs
`(("gfortran" ,gfortran-4.8)
("lapack" ,lapack)
;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
;; leaving out opengl, as configuration seems to only be for mac
))
(arguments
`(#:test-target "test"
#:parallel-build? #f
#:configure-flags
`("--with-mpi=0"
"--with-openmp=1")
#:phases
(alist-replace
'configure
;; PETSc's configure script is actually a python script, so we can't
;; run it with bash.
(lambda* (#:key outputs (configure-flags '())
#:allow-other-keys)
(let* ((prefix (assoc-ref outputs "out"))
(flags `(,(string-append "--prefix=" prefix)
,@configure-flags)))
(format #t "build directory: ~s~%" (getcwd))
(format #t "configure flags: ~s~%" flags)
(zero? (apply system* "./configure" flags))))
(alist-cons-after
'install 'clean-local-references
;; Try to keep installed files from leaking build directory names.
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(fortran (assoc-ref inputs "gfortran")))
(substitute* (map (lambda (file)
(string-append out "/" file))
'("conf/petscvariables"
"conf/PETScConfig.cmake"
"include/petscconf.h"
"include/petscmachineinfo.h"))
(((getcwd)) out))
;; Make compiler references point to the store
(substitute* (string-append out "/conf/petscvariables")
(("= g(cc|\\+\\+|fortran)" _ suffix)
(string-append "= " fortran "/bin/g" suffix)))
;; PETSc installs some build logs, which aren't necessary.
(for-each (lambda (file)
(delete-file (string-append out "/" file)))
'("conf/configure.log"
"conf/make.log"
"conf/test.log"
"conf/RDict.db"
;; Once installed, should uninstall with Guix
"conf/uninstall.py"))))
%standard-phases))))
(home-page "http://www.mcs.anl.gov/petsc")
(synopsis "Library to solve ODEs and algebraic equations")
(description "PETSc, pronounced PET-see (the S is silent), is a suite of
data structures and routines for the scalable (parallel) solution of
scientific applications modeled by partial differential equations.")
(license (license:bsd-style
"http://www.mcs.anl.gov/petsc/documentation/copyright.html"))))
(define-public petsc-complex
(package (inherit petsc)
(name "petsc-complex")
(arguments
(substitute-keyword-arguments (package-arguments petsc)
((#:configure-flags cf)
`(cons "--with-scalar-type=complex" ,cf))))
(description
(string-append (package-description petsc)
" Complex scalar type version."))))

View File

@ -0,0 +1,15 @@
Fix "error: unknown type name 'cpu_set_t'". Patch submitted upstream
http://lists.mcs.anl.gov/pipermail/petsc-dev/2014-May/015345.html
--- a/src/sys/threadcomm/impls/openmp/tcopenmp.c 2014-03-13 21:47:22.000000000 -0500
+++ b/src/sys/threadcomm/impls/openmp/tcopenmp.c 2014-04-02 14:44:57.185170151 -0500
@@ -1,6 +1,9 @@
#define PETSC_DESIRE_FEATURE_TEST_MACROS
#include <../src/sys/threadcomm/impls/openmp/tcopenmpimpl.h>
#include <omp.h>
+#if defined(PETSC_HAVE_SCHED_CPU_SET_T)
+#include <sched.h>
+#endif
PetscErrorCode PetscThreadCommGetRank_OpenMP(PetscInt *trank)
{