gnu: Add fenics.

* gnu/packages/simulation.scm (fenics): New variable.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Paul Garlick 2018-11-12 16:00:41 +00:00 committed by Ludovic Courtès
parent 0ace6c0b84
commit ae0f1dd1a4
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 117 additions and 0 deletions

View File

@ -592,3 +592,120 @@ user interface to the FEniCS core components and external libraries.")
license:zlib license:zlib
license:expat license:expat
license:lgpl3+)))) license:lgpl3+))))
(define-public fenics
(package (inherit fenics-dolfin)
(name "fenics")
(build-system python-build-system)
(inputs
`(("pybind11" ,pybind11)
("python-matplotlib" ,python-matplotlib)
,@(alist-delete "python" (package-inputs fenics-dolfin))))
(native-inputs
`(("cmake" ,cmake)
("ply" ,python-ply)
("pytest" ,python-pytest)
("python-decorator" ,python-decorator)
("python-pkgconfig" ,python-pkgconfig)
,@(package-native-inputs fenics-dolfin)))
(propagated-inputs
`(("dolfin" ,fenics-dolfin)
("petsc4py" ,python-petsc4py)
("slepc4py" ,python-slepc4py)))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'patch-source-shebangs 'set-paths
(lambda _
;; Define paths to store locations.
(setenv "PYBIND11_DIR" (assoc-ref %build-inputs "pybind11"))
;; Move to python sub-directory.
(chdir "python")
#t))
(add-after 'build 'mpi-setup
,%openmpi-setup)
(add-before 'check 'pre-check
(lambda _
;; Exclude tests that require meshes supplied by git-lfs.
(substitute* "demo/test.py"
(("(.*stem !.*)" line)
(string-append
line "\n"
"excludeList = [\n"
"'multimesh-quadrature', \n"
"'multimesh-marking', \n"
"'mixed-poisson-sphere', \n"
"'mesh-quality', \n"
"'lift-drag', \n"
"'elastodynamics', \n"
"'dg-advection-diffusion', \n"
"'contact-vi-tao', \n"
"'contact-vi-snes', \n"
"'collision-detection', \n"
"'buckling-tao', \n"
"'auto-adaptive-navier-stokes', \n"
"'advection-diffusion', \n"
"'subdomains', \n"
"'stokes-taylor-hood', \n"
"'stokes-mini', \n"
"'navier-stokes', \n"
"'eigenvalue']\n"
"demos = ["
"d for d in demos if d[0].stem not in "
"excludeList]\n")))
(setenv "HOME" (getcwd))
(setenv "PYTHONPATH"
(string-append
(getcwd) "/build/lib.linux-x86_64-"
,(version-major+minor (package-version python)) ":"
(getenv "PYTHONPATH")))
;; Restrict OpenBLAS to MPI-only in preference to MPI+OpenMP.
(setenv "OPENBLAS_NUM_THREADS" "1")
#t))
(replace 'check
(lambda _
(with-directory-excursion "test"
;; Note: The test test_snes_set_from_options() in the file
;; unit/nls/test_PETScSNES_solver.py fails and is ignored.
(and (invoke "py.test" "unit" "--ignore"
"unit/nls/test_PETScSNES_solver.py")
(invoke "mpirun" "-np" "3" "python" "-B" "-m"
"pytest" "unit" "--ignore"
"unit/nls/test_PETScSNES_solver.py")))
(with-directory-excursion "demo"
;; Check demos.
(invoke "python" "generate-demo-files.py")
(and (invoke "python" "-m" "pytest" "-v" "test.py")
(invoke "python" "-m" "pytest" "-v" "test.py"
"--mpiexec=mpiexec" "--num-proc=3")))
#t))
(add-after 'install 'install-demo-files
(lambda* (#:key outputs #:allow-other-keys)
(let* ((demos (string-append
(assoc-ref outputs "out")
"/share/python-dolfin/demo")))
(mkdir-p demos)
(with-directory-excursion "demo"
(for-each (lambda (file)
(let* ((dir (dirname file))
(tgt-dir (string-append demos "/" dir)))
(unless (equal? "." dir)
(mkdir-p tgt-dir)
(install-file file tgt-dir))))
(find-files "." ".*\\.(py|gz|xdmf)$"))))
#t)))))
(home-page "https://fenicsproject.org/")
(synopsis "High-level environment for solving differential equations")
(description
"@code{fenics} is a computing platform for solving general classes of
problems that involve differential equations. @code{fenics} facilitates
access to efficient methods for dealing with ordinary differential
equations (ODEs) and partial differential equations (PDEs). Systems of
equations such as these are commonly encountered in areas of engineering,
mathematics and the physical sciences. It is particularly well-suited to
problems that can be solved using the Finite Element Method (FEM).
@code{fenics} is the top level of the set of packages that are developed
within the FEniCS project. It provides the python user interface to the
FEniCS core components and external libraries.")
(license license:lgpl3+)))