(define-module (glicid packages maths) #:use-module (guix packages) #:use-module (guix utils) #:use-module ((gnu packages maths) #:prefix gnu:) #:use-module (gnu packages commencement) #:use-module (gnu packages mpi) #:use-module (guix download) #:use-module (guix git-download) #:use-module (gnu packages) #:use-module (gnu packages compression) #:use-module (guix build-system cmake) #:use-module ((guix licenses) #:prefix license:) #:use-module (glicid utils) #:use-module (ice-9 regex) #:use-module (ice-9 match) #:use-module (guix gexp) #:use-module ((guix build utils) #:select (alist-replace)) #:use-module (guix build-system ant) #:use-module (guix build-system copy) #:use-module (guix build-system dune) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system meson) #:use-module (guix build-system ocaml) #:use-module (guix build-system perl) #:use-module (guix build-system pyproject) #:use-module (guix build-system python) #:use-module (guix build-system ruby) #:use-module (gnu packages algebra) #:use-module (gnu packages audio) #:use-module (gnu packages autotools) #:use-module (gnu packages backup) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages calendar) #:use-module (gnu packages check) #:use-module (gnu packages cmake) #:use-module (gnu packages coq) #:use-module (gnu packages curl) #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages cpp) #:use-module (gnu packages datamash) #:use-module (gnu packages dbm) #:use-module (gnu packages documentation) #:use-module (gnu packages elf) #:use-module (gnu packages emacs) #:use-module (gnu packages file) #:use-module (gnu packages flex) #:use-module (gnu packages fltk) #:use-module (gnu packages fontutils) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gettext) #:use-module (gnu packages gcc) #:use-module (gnu packages gd) #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gperf) #:use-module (gnu packages graphviz) #:use-module (gnu packages groff) #:use-module (gnu packages gtk) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages image-processing) #:use-module (gnu packages java) #:use-module (gnu packages less) #:use-module (gnu packages lisp) #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages logging) #:use-module (gnu packages lua) #:use-module (gnu packages gnome) #:use-module (gnu packages guile) #:use-module (gnu packages xorg) #:use-module (gnu packages gl) #:use-module (gnu packages imagemagick) #:use-module (gnu packages m4) #:use-module (gnu packages mpi) #:use-module (gnu packages multiprecision) #:use-module (gnu packages ncurses) #:use-module (gnu packages netpbm) #:use-module (gnu packages ocaml) #:use-module (gnu packages onc-rpc) #:use-module (gnu packages parallel) #:use-module (gnu packages pcre) #:use-module (gnu packages popt) #:use-module (gnu packages perl) #:use-module (gnu packages prolog) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages python-build) #:use-module (gnu packages python-science) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) #:use-module (gnu packages readline) #:use-module (gnu packages ruby) #:use-module (gnu packages tbb) #:use-module (gnu packages scheme) #:use-module (gnu packages serialization) #:use-module (gnu packages shells) #:use-module (gnu packages simulation) #:use-module (gnu packages sphinx) #:use-module (gnu packages sqlite) #:use-module (gnu packages swig) #:use-module (gnu packages tcl) #:use-module (gnu packages texinfo) #:use-module (gnu packages tex) #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages version-control) #:use-module (gnu packages wxwidgets) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xml) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26)) (define-public scalapack-upstream (package (inherit gnu:scalapack) (name "scalapack-upstream") (version "2.1.0-new-upstream") (source (origin (method git-fetch) (uri (git-reference (url "https://oauth2:glpat-RsX2GjsD2WrzXubiJeou@gitlab.univ-nantes.fr/CCIPL/legacy_code_mirror/scalapack.git") (commit "myv2.0.2"))) (file-name "scalapack-univ-myv2") ;; (patches (search-patches "scalapack-blacs-mpi-deprecations.patch")) (sha256 (base32 "1ccic46psf2hl9wsyflvkn5rxg8k17q578m9mzimvm9brbggf0na")))) (arguments `(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES") #:phases (modify-phases %standard-phases (add-before 'check 'mpi-setup ,%openmpi-setup)))))) (define local:scalapack scalapack-upstream) (define-public scalapack-latest (latest-version local:scalapack gnu:scalapack)) (define-public openblas-upstream-0.3.15 (package (inherit gnu:openblas) (name "openblas-upstream") (version "0.3.15") (source (origin (method url-fetch) (uri (string-append "https://github.com/xianyi/OpenBLAS/releases/download/v" version "/OpenBLAS-" version ".tar.gz")) (sha256 (base32 "1gjbkrsh6n28hdp2ciyjigc8vg764d2r0jbzl63v753mjzn9va9h")))))) (define-public hdf5-glicid (package (inherit gnu:hdf5-parallel-openmpi) (name "hdf5-glicid") (inputs (modify-inputs (package-inputs gnu:hdf5-parallel-openmpi) (prepend gfortran-toolchain))))) (define local:openblas openblas-upstream-0.3.15) (define-public scalapack-latest (latest-version local:openblas gnu:openblas)) (use-modules (guix packages)) (use-modules (guix download)) (use-modules (gnu packages linux)) (use-modules (gnu packages gcc)) (use-modules (gnu packages compression)) ;(use-modules (gnu packages glicid)) (use-modules (guix git-download)) (use-modules (guix build-system cmake)) (use-modules ((guix licenses) #:prefix license:)) (define-public libsolv-upstream (package (name "libsolv") (version "0.7.23") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/openSUSE/libsolv.git") (commit version))) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "12z63kcna9swh3vzxk3sac0l4by5z8q22wip9cyq5b7wp9m3hn4b")))) (build-system cmake-build-system) (inputs (list zlib)) (home-page "https://github.com/openSUSE/libsolv") (synopsis "libsolv, a free package dependency solver using a satisfiability algorithm.") (description "libsolv, a free package dependency solver using a satisfiability algorithm.") (license license:bsd-3)) ) (define-public glicid-dealii (package (inherit dealii) (version "9.6.0") (name "glicid-dealii") (arguments (list #:build-type "Release" ; Only Debug, Release or DebugRelease. ;; The tests take too long and must be explicitly enabled with ;; "make setup_tests". ;; See https://www.dealii.org/developer/developers/testsuite.html. ;; (They can also be run for an already installed deal.II.) #:tests? #f #:configure-flags #~(let ((doc (string-append #$output:doc "/share/doc/" #$name "-" #$version))) (list "-DDEAL_II_COMPONENT_DOCUMENTATION=OFF" (string-append "-DCMAKE_CXX_FLAGS='-march=znver3'") (string-append "-DDEAL_II_DOCREADME_RELDIR=" doc) (string-append "-DDEAL_II_DOCHTML_RELDIR=" doc "/html") ;; Don't compile the examples because the source and ;; CMakeLists.txt are installed anyway, allowing users to ;; do so for themselves. "-DDEAL_II_COMPILE_EXAMPLES=OFF" (string-append "-DDEAL_II_EXAMPLES_RELDIR=" doc "/examples"))) #:phases #~(modify-phases %standard-phases ;; Without unsetting CPATH, the build fails with the following ;; error (similar to ): ;; ;; /gnu/store/…-gcc-11.3.0/include/c++/math.h:30:16: fatal error: math.h: No such file or directory ;; 30 | # include_next ;; | ^~~~~~~~ ;; ;; Why does unsetting CPATH magically fix the error? ;; TODO: Properly fix this issue. (add-after 'set-paths 'unset-cpath (lambda _ (unsetenv "CPATH"))) (add-after 'install 'remove-build-logs ;; These build logs leak the name of the build directory by ;; storing the values of CMAKE_SOURCE_DIR and ;; CMAKE_BINARY_DIR. (lambda _ (let ((doc (string-append #$output:doc "/share/doc/" #$name "-" #$version))) (for-each delete-file (map (lambda (f) (string-append doc "/" f)) '("detailed.log" "summary.log"))))))))) )) (define trilinos-for-dealii-openmpi (@@ (gnu packages maths) trilinos-for-dealii-openmpi)) (define-public glicid-dealii-openmpi (package (inherit glicid-dealii) (name "glicid-dealii-openmpi") (inputs (modify-inputs (package-inputs glicid-dealii) (delete "arpack") (prepend arpack-ng-openmpi metis scalapack))) (propagated-inputs (modify-inputs (package-propagated-inputs glicid-dealii) (delete "hdf5" "kokkos" "sundials") (prepend hdf5-parallel-openmpi openmpi p4est-openmpi petsc-openmpi slepc-openmpi sundials-openmpi trilinos-for-dealii-openmpi))) (arguments (substitute-keyword-arguments (package-arguments glicid-dealii) ((#:configure-flags flags) #~(cons "-DDEAL_II_WITH_MPI=ON" #$flags)) ((#:phases phases #~%standard-phases) #~(modify-phases #$phases ;; The build failure fixed by this phase does not manifest when ;; Kokkos is included via Trilinos. (delete 'unset-cpath))))) (synopsis "Finite element library (with MPI support)")))