gnu: mumps: Build and install shared libraries.
[jackhill/guix/guix.git] / gnu / packages / maths.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
3 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
4 ;;; Copyright © 2014, 2016, 2017 John Darrington <jmd@gnu.org>
5 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
6 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
7 ;;; Copyright © 2014 Mathieu Lirzin <mathieu.lirzin@openmailbox.org>
8 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
9 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
10 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
11 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
12 ;;; Copyright © 2015 Fabian Harfert <fhmgufs@web.de>
13 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
14 ;;; Copyright © 2016, 2018 Kei Kebreau <kkebreau@posteo.net>
15 ;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
16 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
17 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
18 ;;; Copyright © 2017, 2018, 2019 Paul Garlick <pgarlick@tourbillion-technology.com>
19 ;;; Copyright © 2017 ng0 <ng0@n0.is>
20 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
21 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
22 ;;; Copyright © 2017, 2019 Arun Isaac <arunisaac@systemreboot.net>
23 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
24 ;;; Copyright © 2017 Dave Love <me@fx@gnu.org>
25 ;;; Copyright © 2018, 2019 Jan Nieuwenhuizen <janneke@gnu.org>
26 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
27 ;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
28 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
29 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2018 Eric Brown <brown@fastmail.com>
31 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
32 ;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
33 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
34 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
35 ;;;
36 ;;; This file is part of GNU Guix.
37 ;;;
38 ;;; GNU Guix is free software; you can redistribute it and/or modify it
39 ;;; under the terms of the GNU General Public License as published by
40 ;;; the Free Software Foundation; either version 3 of the License, or (at
41 ;;; your option) any later version.
42 ;;;
43 ;;; GNU Guix is distributed in the hope that it will be useful, but
44 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
45 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46 ;;; GNU General Public License for more details.
47 ;;;
48 ;;; You should have received a copy of the GNU General Public License
49 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
50
51 (define-module (gnu packages maths)
52 #:use-module (ice-9 regex)
53 #:use-module (ice-9 match)
54 #:use-module (gnu packages)
55 #:use-module ((guix licenses) #:prefix license:)
56 #:use-module (guix packages)
57 #:use-module (guix download)
58 #:use-module (guix git-download)
59 #:use-module (guix utils)
60 #:use-module ((guix build utils) #:select (alist-replace))
61 #:use-module (guix build-system cmake)
62 #:use-module (guix build-system gnu)
63 #:use-module (guix build-system python)
64 #:use-module (guix build-system r)
65 #:use-module (guix build-system ruby)
66 #:use-module (gnu packages algebra)
67 #:use-module (gnu packages audio)
68 #:use-module (gnu packages autotools)
69 #:use-module (gnu packages base)
70 #:use-module (gnu packages bison)
71 #:use-module (gnu packages boost)
72 #:use-module (gnu packages check)
73 #:use-module (gnu packages cmake)
74 #:use-module (gnu packages compression)
75 #:use-module (gnu packages curl)
76 #:use-module (gnu packages cyrus-sasl)
77 #:use-module (gnu packages documentation)
78 #:use-module (gnu packages elf)
79 #:use-module (gnu packages flex)
80 #:use-module (gnu packages fltk)
81 #:use-module (gnu packages fontutils)
82 #:use-module (gnu packages gettext)
83 #:use-module (gnu packages gcc)
84 #:use-module (gnu packages gd)
85 #:use-module (gnu packages ghostscript)
86 #:use-module (gnu packages graphviz)
87 #:use-module (gnu packages gtk)
88 #:use-module (gnu packages image)
89 #:use-module (gnu packages java)
90 #:use-module (gnu packages less)
91 #:use-module (gnu packages lisp)
92 #:use-module (gnu packages linux)
93 #:use-module (gnu packages logging)
94 #:use-module (gnu packages lua)
95 #:use-module (gnu packages gnome)
96 #:use-module (gnu packages guile)
97 #:use-module (gnu packages xorg)
98 #:use-module (gnu packages gl)
99 #:use-module (gnu packages imagemagick)
100 #:use-module (gnu packages m4)
101 #:use-module (gnu packages mpi)
102 #:use-module (gnu packages multiprecision)
103 #:use-module (gnu packages netpbm)
104 #:use-module (gnu packages onc-rpc)
105 #:use-module (gnu packages pcre)
106 #:use-module (gnu packages popt)
107 #:use-module (gnu packages perl)
108 #:use-module (gnu packages pkg-config)
109 #:use-module (gnu packages pulseaudio)
110 #:use-module (gnu packages python)
111 #:use-module (gnu packages python-web)
112 #:use-module (gnu packages python-xyz)
113 #:use-module (gnu packages qt)
114 #:use-module (gnu packages readline)
115 #:use-module (gnu packages ruby)
116 #:use-module (gnu packages tbb)
117 #:use-module (gnu packages scheme)
118 #:use-module (gnu packages shells)
119 #:use-module (gnu packages tcl)
120 #:use-module (gnu packages texinfo)
121 #:use-module (gnu packages tex)
122 #:use-module (gnu packages tls)
123 #:use-module (gnu packages version-control)
124 #:use-module (gnu packages wxwidgets)
125 #:use-module (gnu packages xml)
126 #:use-module (srfi srfi-1))
127
128 (define-public aris
129 (package
130 (name "aris")
131 (version "2.2")
132 (source (origin
133 (method url-fetch)
134 (uri (string-append "mirror://gnu/" name "/" name "-" version ".tar.gz"))
135 (sha256 (base32
136 "1q1887ryqdr9sn0522hc7p16kqwlxxyz5dkmma8ar2nxplhgll7q"))))
137 (build-system gnu-build-system)
138 (inputs `(("gtk+" ,gtk+)
139 ("libxml2" ,libxml2)))
140 (native-inputs `(("pkg-config" ,pkg-config)))
141 (synopsis "Natural deduction first-order logic interface")
142 (description "Aris is a program for performing logical proofs. It supports
143 propositional and predicate logic, as well as Boolean algebra and
144 arithmetical logic. In addition to its predefined inference and equivalence
145 rules, Aris also supports references to older proofs. Its use of standard
146 logical symbols and its natural deduction interface make it easy to use for
147 beginners.")
148 (license license:gpl3+)
149 (home-page "https://www.gnu.org/software/aris/")))
150
151 (define-public c-graph
152 (package
153 (name "c-graph")
154 (version "2.0.1")
155 (source (origin
156 (method url-fetch)
157 (uri (string-append "mirror://gnu/c-graph/c-graph-" version
158 ".tar.gz"))
159 (sha256 (base32
160 "092412jzxy6wdvpk96pfj499hpmaww8xllavbvlqspfpr7ips9id"))))
161 (build-system gnu-build-system)
162 (inputs
163 `(("fortran" ,gfortran)))
164 (synopsis "Visualizing and demonstrating convolution")
165 (description
166 "GNU C-Graph is a tool for demonstrating the theory of convolution.
167 Thus, it can serve as an excellent aid to students of signal and systems
168 theory in visualizing the convolution process. Rather than forcing the
169 student to write code, the program offers an intuitive interface with
170 interactive dialogs to guide them.")
171 (license license:gpl3+)
172 (home-page "https://www.gnu.org/software/c-graph/")))
173
174 (define-public coda
175 (package
176 (name "coda")
177 (version "2.19")
178 (source
179 (origin
180 (method url-fetch)
181 (uri (string-append "https://github.com/stcorp/coda/releases/download/"
182 version "/coda-" version ".tar.gz"))
183 (sha256
184 (base32 "1fbxd2afm7dshd92p10yy8dwbr9gc1h1fmnnnmr7d0c5lnw80245"))
185 (patches (search-patches "coda-use-system-libs.patch"))
186 (modules '((guix build utils)))
187 (snippet
188 ;; Make sure we don't use the bundled software.
189 '(begin
190 (for-each (lambda (d)
191 (delete-file-recursively (string-append "libcoda/" d)))
192 '("zlib" "pcre" "expat"))
193 #t))))
194 (native-inputs
195 `(("fortran" ,gfortran)
196 ("python" ,python)
197 ("python-numpy" ,python-numpy)))
198 (inputs
199 `(("zlib" ,zlib)
200 ("pcre" ,pcre)
201 ("expat" ,expat)
202 ("hdf4" ,hdf4-alt)
203 ("hdf5" ,hdf5)))
204 (build-system gnu-build-system)
205 (arguments
206 '(#:configure-flags '("--with-hdf4" "--with-hdf5" "--enable-python"
207 "LIBS= -lz -lpcre -lexpat")))
208 (synopsis "A common interface to various earth observation data formats")
209 (description
210 "The Common Data Access toolbox (CODA) provides a set of interfaces for
211 reading remote sensing data from earth observation data files. It consists of
212 command line applications and interfaces to the C, Fortran, Python, and Java
213 programming languages.")
214 (home-page "https://stcorp.nl/coda")
215 (license license:gpl2+)))
216
217 (define-public qhull
218 (package
219 (name "qhull")
220 (version "2015.2")
221 (source (origin
222 (method url-fetch)
223 (uri (string-append "http://www.qhull.org/download/qhull-"
224 (car (string-split version #\.))
225 "-src-7.2.0.tgz"))
226 (sha256
227 (base32
228 "0dm4b2xr3asy6w74khq2zg4gf26zsy3qf9sq7pf7lmrvbj911c3q"))))
229 (build-system cmake-build-system)
230 (synopsis "Calculate convex hulls and related structures")
231 (description
232 "@code{Qhull} computes the convex hull, Delaunay triangulation, Voronoi
233 diagram, halfspace intersection about a point, furthest-site Delaunay
234 triangulation, and furthest-site Voronoi diagram. The source code runs in 2-d,
235 3-d, 4-d, and higher dimensions. @code{Qhull} implements the Quickhull
236 algorithm for computing the convex hull. It handles roundoff errors from
237 floating point arithmetic. It computes volumes, surface areas, and
238 approximations to the convex hull.
239
240 @code{Qhull} does not support triangulation of non-convex surfaces, mesh
241 generation of non-convex objects, medium-sized inputs in 9-D and higher, alpha
242 shapes, weighted Voronoi diagrams, Voronoi volumes, or constrained Delaunay
243 triangulations.")
244 (home-page "http://qhull.org")
245 (license (license:non-copyleft "file://COPYING.txt"
246 "See COPYING in the distribution."))))
247
248 (define-public python-cvxopt
249 (package
250 (name "python-cvxopt")
251 (version "1.2.3")
252 (source (origin
253 (method git-fetch)
254 (uri (git-reference
255 (url "https://github.com/cvxopt/cvxopt.git")
256 (commit version)))
257 (file-name (git-file-name name version))
258 (sha256
259 (base32
260 "1kiy2m62xgs2d5id6dnnwy4vap85cd70p7pgkb9nh23qf9xnak7b"))))
261 (build-system python-build-system)
262 (arguments
263 `(#:phases
264 (modify-phases %standard-phases
265 (add-after 'unpack 'find-libraries
266 (lambda* (#:key inputs #:allow-other-keys)
267 (setenv "CVXOPT_BLAS_LIB" "openblas")
268 (setenv "CVXOPT_BUILD_FFTW" "1")
269 (setenv "CVXOPT_BUILD_GLPK" "1")
270 (setenv "CVXOPT_BUILD_GSL" "1")
271 #t)))))
272 (inputs
273 `(("fftw" ,fftw)
274 ("glpk" ,glpk)
275 ("gsl" ,gsl)
276 ("lapack" ,lapack)
277 ("openblas" ,openblas)
278 ("suitesparse" ,suitesparse)))
279 (home-page "https://www.cvxopt.org")
280 (synopsis "Python library for convex optimization")
281 (description
282 "CVXOPT is a package for convex optimization based on the Python
283 programming language. Its main purpose is to make the development of software
284 for convex optimization applications straightforward by building on Python’s
285 extensive standard library and on the strengths of Python as a high-level
286 programming language.")
287 (license license:gpl3+)))
288
289 (define-public python2-cvxopt
290 (package-with-python2 python-cvxopt))
291
292 (define-public units
293 (package
294 (name "units")
295 (version "2.19")
296 (source (origin
297 (method url-fetch)
298 (uri (string-append "mirror://gnu/units/units-" version
299 ".tar.gz"))
300 (sha256 (base32
301 "0mk562g7dnidjgfgvkxxpvlba66fh1ykmfd9ylzvcln1vxmi6qj2"))))
302 (build-system gnu-build-system)
303 (inputs
304 `(("readline" ,readline)
305 ("python" ,python-wrapper) ;for 'units_cur' script
306 ("python-requests" ,python-requests)))
307 (arguments
308 `(#:phases (modify-phases %standard-phases
309 (add-after 'install 'wrap-units_cur
310 (lambda* (#:key outputs #:allow-other-keys)
311 (let* ((out (assoc-ref outputs "out"))
312 (bin (string-append out "/bin")))
313 (wrap-program (string-append bin "/units_cur")
314 `("PYTHONPATH" ":" prefix
315 ,(search-path-as-string->list (getenv "PYTHONPATH"))))
316 #t))))))
317 (synopsis "Conversion between thousands of scales")
318 (description
319 "GNU Units converts numeric quantities between units of measure. It
320 can handle scale changes through adaptive usage of standard scale
321 prefixes (micro-, kilo-, etc.). It can also handle nonlinear
322 conversions such as Fahrenheit to Celsius. Its interpreter is powerful
323 enough to be used effectively as a scientific calculator.")
324 (license license:gpl3+)
325 (home-page "https://www.gnu.org/software/units/")))
326
327 (define-public double-conversion
328 (package
329 (name "double-conversion")
330 (version "3.1.5")
331 (home-page "https://github.com/google/double-conversion")
332 (source (origin
333 (method git-fetch)
334 (uri (git-reference (url home-page)
335 (commit (string-append "v" version))))
336 (file-name (git-file-name name version))
337 (sha256
338 (base32
339 "0csy4pjw1p8rp6g5qxi2h0ychhhp1fldv7gb761627fs2mclw9gv"))))
340 (build-system cmake-build-system)
341 (arguments
342 '(#:test-target "test"
343 #:configure-flags '("-DBUILD_SHARED_LIBS=ON"
344 "-DBUILD_TESTING=ON")))
345 (synopsis "Conversion routines for IEEE doubles")
346 (description
347 "The double-conversion library provides binary-decimal and decimal-binary
348 routines for IEEE doubles. The library consists of efficient conversion
349 routines that have been extracted from the V8 JavaScript engine.")
350 (license license:bsd-3)))
351
352 (define-public dionysus
353 (package
354 (name "dionysus")
355 (version "1.4.0")
356 (source (origin
357 (method url-fetch)
358 (uri (string-append "mirror://gnu/dionysus/dionysus-" version
359 ".tar.xz"))
360 (sha256
361 (base32
362 "194pzs1mlsj4ww6v37qq3961h5hckm5h805cv0r14xj3g9wfx2sk"))))
363 (build-system gnu-build-system)
364 (inputs `(("tcl" ,tcl))) ;for 'tclsh'
365 (synopsis "Local search for universal constants and scientific values")
366 (description
367 "GNU Dionysus is a convenient system for quickly retrieving the values of
368 mathematical constants used in science and engineering. Values can be
369 searched using a simple command-line tool, choosing from three databases:
370 universal constants, atomic numbers, and constants related to
371 semiconductors.")
372 (license license:gpl3+)
373 (home-page "https://www.gnu.org/software/dionysus/")))
374
375 (define-public gsl
376 (package
377 (name "gsl")
378 (version "2.5")
379 (source (origin
380 (method url-fetch)
381 (uri (string-append "mirror://gnu/gsl/gsl-"
382 version ".tar.gz"))
383 (sha256
384 (base32
385 "1395y9hlhqadn5g9j8q22224fds5sd92jxi9czfavjj24myasq04"))
386 (patches (search-patches "gsl-test-i686.patch"))))
387 (build-system gnu-build-system)
388 (arguments
389 `(;; Currently there are numerous tests that fail on "exotic"
390 ;; architectures such as aarch64 and ppc64le.
391 ,@(if (string-prefix? "aarch64-linux"
392 (or (%current-target-system) (%current-system)))
393 '(#:tests? #f)
394 '())))
395 (home-page "https://www.gnu.org/software/gsl/")
396 (synopsis "Numerical library for C and C++")
397 (description
398 "The GNU Scientific Library is a library for numerical analysis in C
399 and C++. It includes a wide range of mathematical routines, with over 1000
400 functions in total. Subject areas covered by the library include:
401 differential equations, linear algebra, Fast Fourier Transforms and random
402 numbers.")
403 (license license:gpl3+)))
404
405 (define-public glpk
406 (package
407 (name "glpk")
408 (version "4.65")
409 (source
410 (origin
411 (method url-fetch)
412 (uri (string-append "mirror://gnu/glpk/glpk-"
413 version ".tar.gz"))
414 (sha256
415 (base32
416 "040sfaa9jclg2nqdh83w71sv9rc1sznpnfiripjdyr48cady50a2"))))
417 (build-system gnu-build-system)
418 (inputs
419 `(("gmp" ,gmp)))
420 (arguments
421 `(#:configure-flags '("--with-gmp")))
422 (home-page "https://www.gnu.org/software/glpk/")
423 (synopsis "GNU Linear Programming Kit, supporting the MathProg language")
424 (description
425 "GLPK is a C library for solving large-scale linear programming (LP),
426 mixed integer programming (MIP), and other related problems. It supports the
427 GNU MathProg modeling language, a subset of the AMPL language, and features a
428 translator for the language. In addition to the C library, a stand-alone
429 LP/MIP solver is included in the package.")
430 (license license:gpl3+)))
431
432 (define-public 4ti2
433 (package
434 (name "4ti2")
435 (version "1.6.9")
436 (source
437 (origin
438 (method url-fetch)
439 (uri (string-append "https://github.com/4ti2/4ti2/releases/download/"
440 "Release_"
441 (string-map (lambda (c) (if (char=? c #\.) #\_ c))
442 version)
443 "/4ti2-" version ".tar.gz"))
444 (sha256
445 (base32 "0rj92x6p9m3la5gasjbj7sa569im527ffmka5y2sv1amgd3fflrh"))))
446 (build-system gnu-build-system)
447 (native-inputs
448 `(("which" ,(@ (gnu packages base) which)))) ; for the tests
449 (inputs
450 `(("glpk" ,glpk)
451 ("gmp" ,gmp)))
452 (home-page "http://www.4ti2.de/")
453 (synopsis "Mathematical tool suite for problems on linear spaces")
454 (description
455 "4ti2 implements algorithms for solving algebraic, geometric and
456 combinatorial problems on linear spaces. Among others, it solves systems
457 of linear equations, computes extreme rays of polyhedral cones, solves
458 integer programming problems and computes Markov bases for statistics.")
459 (license license:gpl2+)))
460
461 (define-public cddlib
462 (package
463 (name "cddlib")
464 (version "0.94i")
465 (source
466 (origin
467 (method url-fetch)
468 (uri (string-append "ftp://ftp.math.ethz.ch/users/fukudak/cdd/cddlib-"
469 (string-delete #\. version) ".tar.gz"))
470 (sha256
471 (base32
472 "00zdgiqb91vx6gd2103h3ijij0llspsxc6zz3iw2bll39fvkl4xq"))))
473 (build-system gnu-build-system)
474 (inputs
475 `(("gmp" ,gmp)))
476 (home-page "https://www.inf.ethz.ch/personal/fukudak/cdd_home/index.html")
477 (synopsis "Library for convex hulls and extreme rays of polyhedra")
478 (description
479 "The C-library cddlib implements the Double Description Method of
480 Motzkin et al. for generating all vertices (i.e. extreme points) and extreme
481 rays of a general convex polyhedron given by a system of linear inequalities
482 in arbitrary dimension. It can also be used for the converse operation of
483 computing convex hulls.")
484 (license license:gpl2+)))
485
486 (define-public arpack-ng
487 (package
488 (name "arpack-ng")
489 (version "3.6.3")
490 (home-page "https://github.com/opencollab/arpack-ng")
491 (source (origin
492 (method git-fetch)
493 (uri (git-reference (url home-page) (commit version)))
494 (file-name (git-file-name name version))
495 (sha256
496 (base32
497 "1wljl96yqxc9v8r49c37lscwkdp58kaacfb9p6s6nvpm31haax4y"))))
498 (build-system gnu-build-system)
499 (native-inputs
500 `(("autoconf" ,autoconf)
501 ("automake" ,automake)
502 ("libtool" ,libtool)))
503 (inputs
504 `(("lapack" ,lapack)
505 ("fortran" ,gfortran)))
506 (synopsis "Fortran subroutines for solving eigenvalue problems")
507 (description
508 "ARPACK-NG is a collection of Fortran77 subroutines designed to solve
509 large scale eigenvalue problems.")
510 (license (license:non-copyleft "file://COPYING"
511 "See COPYING in the distribution."))))
512
513 (define-public arpack-ng-3.3.0
514 (package
515 (inherit arpack-ng)
516 (version "3.3.0")
517 (name (package-name arpack-ng))
518 (home-page (package-home-page arpack-ng))
519 (source
520 (origin
521 (method url-fetch)
522 (uri (string-append home-page "/archive/" version ".tar.gz"))
523 (file-name (string-append name "-" version ".tar.gz"))
524 (sha256
525 (base32
526 "1cz53wqzcf6czmcpfb3vb61xi0rn5bwhinczl65hpmbrglg82ndd"))))))
527
528 (define-public arpack-ng-openmpi
529 (package (inherit arpack-ng)
530 (name "arpack-ng-openmpi")
531 (inputs
532 `(("mpi" ,openmpi)
533 ,@(package-inputs arpack-ng)))
534 (arguments
535 (substitute-keyword-arguments (package-arguments arpack-ng)
536 ((#:configure-flags _ '())
537 ''("--enable-mpi"))
538 ((#:phases phases '%standard-phases)
539 `(modify-phases ,phases
540 (add-before 'check 'mpi-setup
541 ,%openmpi-setup)))))
542 (synopsis "Fortran subroutines for solving eigenvalue problems with MPI")))
543
544 (define-public lapack
545 (package
546 (name "lapack")
547 (version "3.7.1")
548 (source
549 (origin
550 (method url-fetch)
551 (uri (string-append "http://www.netlib.org/lapack/lapack-"
552 version ".tgz"))
553 (sha256
554 (base32
555 "1j51r7n5w4k7r3lrvy7710xrpkg40wf4rqnmngfz6ck9ypckzign"))))
556 (build-system cmake-build-system)
557 (home-page "http://www.netlib.org/lapack/")
558 (inputs `(("fortran" ,gfortran)
559 ("python" ,python-2)))
560 (arguments
561 `(#:configure-flags (list
562 "-DBUILD_SHARED_LIBS:BOOL=YES"
563 "-DLAPACKE=ON"
564
565 ;; Build the 'LAPACKE_clatms' functions.
566 "-DLAPACKE_WITH_TMG=ON")
567 #:phases
568 (modify-phases %standard-phases
569 (add-before 'check 'patch-python
570 (lambda* (#:key inputs #:allow-other-keys)
571 (let ((python (assoc-ref inputs "python")))
572 (substitute* "lapack_testing.py"
573 (("/usr/bin/env python") python)))
574 #t)))))
575 (synopsis "Library for numerical linear algebra")
576 (description
577 "LAPACK is a Fortran 90 library for solving the most commonly occurring
578 problems in numerical linear algebra.")
579 (license (license:non-copyleft "file://LICENSE"
580 "See LICENSE in the distribution."))))
581
582 (define-public scalapack
583 (package
584 (name "scalapack")
585 (version "2.0.2")
586 (source
587 (origin
588 (method url-fetch)
589 (uri (string-append "http://www.netlib.org/scalapack/scalapack-"
590 version ".tgz"))
591 (sha256
592 (base32
593 "0p1r61ss1fq0bs8ynnx7xq4wwsdvs32ljvwjnx6yxr8gd6pawx0c"))
594 (patches (search-patches "scalapack-blacs-mpi-deprecations.patch"))))
595 (build-system cmake-build-system)
596 (inputs
597 `(("mpi" ,openmpi)
598 ("fortran" ,gfortran)
599 ("lapack" ,lapack))) ;for testing only
600 (arguments
601 `(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES")
602 #:phases (modify-phases %standard-phases
603 (add-before 'check 'mpi-setup
604 ,%openmpi-setup))))
605 (home-page "http://www.netlib.org/scalapack/")
606 (synopsis "Library for scalable numerical linear algebra")
607 (description
608 "ScaLAPACK is a Fortran 90 library of high-performance linear algebra
609 routines on parallel distributed memory machines. ScaLAPACK solves dense and
610 banded linear systems, least squares problems, eigenvalue problems, and
611 singular value problems.")
612 (license (license:non-copyleft "file://LICENSE"
613 "See LICENSE in the distribution."))))
614
615 (define-public gnuplot
616 (package
617 (name "gnuplot")
618 (version "5.2.7")
619 (source (origin
620 (method url-fetch)
621 (uri (string-append "mirror://sourceforge/gnuplot/gnuplot/"
622 version "/gnuplot-"
623 version ".tar.gz"))
624 (sha256
625 (base32 "1vglp4la40f5dpj0zdj63zprrkyjgzy068p35bz5dqxjyczm1zlp"))))
626 (build-system gnu-build-system)
627 (inputs `(("readline" ,readline)
628 ("cairo" ,cairo)
629 ("pango" ,pango)
630 ("gd" ,gd)
631 ("lua" ,lua)))
632 (native-inputs
633 `(("pkg-config" ,pkg-config)
634 ("texlive" ,texlive-tiny)))
635 (arguments `(#:configure-flags (list (string-append
636 "--with-texdir=" %output
637 "/texmf-local/tex/latex/gnuplot"))))
638 (home-page "http://www.gnuplot.info")
639 (synopsis "Command-line driven graphing utility")
640 (description "Gnuplot is a portable command-line driven graphing
641 utility. It was originally created to allow scientists and students to
642 visualize mathematical functions and data interactively, but has grown to
643 support many non-interactive uses such as web scripting. It is also used as a
644 plotting engine by third-party applications like Octave.")
645 ;; X11 Style with the additional restriction that derived works may only be
646 ;; distributed as patches to the original.
647 (license (license:fsf-free
648 "http://gnuplot.cvs.sourceforge.net/gnuplot/gnuplot/Copyright"))))
649
650 (define-public gctp
651 (package
652 (name "gctp")
653 (version "2.0.0")
654 (source
655 (origin
656 (method git-fetch)
657 (uri (git-reference
658 (url "https://github.com/OkoSanto/GCTP.git")
659 (commit (string-append "v" version))))
660 (file-name (git-file-name name version))
661 (sha256
662 (base32 "11wqmd443b4nksdbzp1msdws3av948nmwq1xz80w6hka3ss2aigd"))))
663 (native-inputs
664 `(("fortran" ,gfortran)))
665 (build-system gnu-build-system)
666 (synopsis "General Cartographic Transformation Package (GCTP)")
667 (description
668 "The General Cartographic Transformation Package (GCTP) is a system of
669 software routines designed to permit the transformation of coordinate pairs
670 from one map projection to another. The GCTP is the standard computer
671 software used by the National Mapping Division for map projection
672 computations.")
673 (home-page "https://github.com/OkoSanto/GCTP")
674 (license license:public-domain))) ;https://www2.usgs.gov/laws/info_policies.html
675
676 (define-public hdf4
677 (package
678 (name "hdf4")
679 (version "4.2.14")
680 (source
681 (origin
682 (method url-fetch)
683 (uri (string-append "https://support.hdfgroup.org/ftp/HDF/releases/HDF"
684 version "/src/hdf-" version ".tar.bz2"))
685 (sha256
686 (base32 "0n29klrrbwan9307np0d9hr128dlpc4nnlf57a140080ll3jmp8l"))
687 (patches (search-patches "hdf4-architectures.patch"
688 "hdf4-reproducibility.patch"
689 "hdf4-shared-fortran.patch"
690 "hdf4-tirpc.patch"))))
691 (build-system gnu-build-system)
692 (native-inputs
693 `(("gfortran" ,gfortran)
694 ("bison" ,bison)
695 ("flex" ,flex)))
696 (inputs
697 `(("zlib" ,zlib)
698 ("libjpeg" ,libjpeg)
699 ("libtirpc" ,libtirpc)))
700 (arguments
701 `(#:parallel-tests? #f
702 #:configure-flags (list "--enable-shared"
703 (string-append "CPPFLAGS=-I"
704 (assoc-ref %build-inputs "libtirpc")
705 "/include/tirpc"))
706 #:phases
707 (modify-phases %standard-phases
708 ;; This is inspired by two of Debian's patches.
709 (add-before 'configure 'add-more-aarch64-support
710 (lambda _
711 (substitute* '("mfhdf/ncgen/ncgen.l"
712 "mfhdf/ncgen/ncgenyy.c"
713 "mfhdf/libsrc/netcdf.h.in")
714 (("AIX5L64") "__aarch64__"))
715 #t))
716 (add-before 'configure 'patchbuild
717 (lambda _
718 (substitute*
719 '("mfhdf/hdfimport/testutil.sh.in" "hdf/util/testutil.sh.in")
720 (("/bin/rm") "rm")
721 (("/bin/mkdir") "mkdir"))
722 (substitute* (find-files "." "^Makefile\\.in$")
723 (("@HDF_BUILD_XDR_TRUE@XDR_ADD = \
724 -R\\$\\(abs_top_builddir\\)/mfhdf/xdr/\\.libs") "")
725 (("@HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = \
726 -R\\$\\(abs_top_builddir\\)/mfhdf/libsrc/\\.libs \
727 -R\\$\\(abs_top_builddir\\)/hdf/src/\\.libs \\$\\(XDR_ADD\\)") ""))
728 #t))
729 (add-after 'configure 'patch-settings
730 (lambda _
731 ;; libhdf4.settings contains the full path of the
732 ;; compilers used, and its contents are included in
733 ;; .so-files. We truncate the hashes to avoid
734 ;; unnecessary store references to those compilers:
735 (substitute* "libhdf4.settings"
736 (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
737 (string-append prefix (string-take hash 10) "...")))
738 #t))
739 )))
740 (home-page "https://www.hdfgroup.org/products/hdf4/")
741 (synopsis
742 "Library and multi-object file format for storing and managing data")
743 (description "HDF4 is a library and multi-object file format for storing
744 and managing data between machines. HDF4 is an older hierarchical data format,
745 incompatible with HDF5.")
746 (license
747 (license:non-copyleft
748 "https://www.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/COPYING"))))
749
750 (define-public hdf4-alt
751 (package
752 (inherit hdf4)
753 (name "hdf4-alt")
754 (arguments
755 (substitute-keyword-arguments (package-arguments hdf4)
756 ((#:configure-flags flags) `(cons* "--disable-netcdf" ,flags))))
757 (synopsis
758 "HDF4 without netCDF API, can be combined with the regular netCDF library")))
759
760 (define-public hdf5
761 (package
762 (name "hdf5")
763 (version "1.8.21")
764 (source
765 (origin
766 (method url-fetch)
767 (uri (list (string-append "https://support.hdfgroup.org/ftp/HDF5/releases/"
768 "hdf5-" (version-major+minor version)
769 "/hdf5-" version "/src/hdf5-"
770 version ".tar.bz2")
771 (string-append "https://support.hdfgroup.org/ftp/HDF5/"
772 "current"
773 (match (string-split version #\.)
774 ((major minor _ ...)
775 (string-append major minor)))
776 "/src/hdf5-" version ".tar.bz2")))
777 (sha256
778 (base32 "03glk4w4wyb1jyb443g53y3y1ncnf6mj2cqwm6avfr2awkgb3cg5"))
779 (patches (search-patches "hdf5-config-date.patch"
780 "hdf5-1.8-mpi-deprecations.patch"))))
781 (build-system gnu-build-system)
782 (inputs
783 `(("zlib" ,zlib)))
784 (native-inputs
785 `(("gfortran" ,gfortran)
786 ("perl" ,perl))) ;part of the test machinery needs Perl
787 (outputs '("out" ; core library
788 "fortran")) ; fortran interface
789 (arguments
790 `(;; Some of the users, notably Flann, need the C++ interface.
791 #:configure-flags '("--enable-cxx"
792 "--enable-fortran"
793 "--enable-fortran2003"
794
795 ;; Build a thread-safe library. Unfortunately,
796 ;; 'configure' invites you to either turn off C++,
797 ;; Fortran, and the high-level interface (HL), or
798 ;; to pass '--enable-unsupported'. Debian
799 ;; packagers chose to pass '--enable-unsupported'
800 ;; and we follow their lead here.
801 "--enable-threadsafe"
802 "--with-pthread"
803 "--enable-unsupported")
804 ;; Use -fPIC to allow the R bindings to link with the static libraries
805 #:make-flags (list "CFLAGS=-fPIC"
806 "CXXFLAGS=-fPIC")
807 #:phases
808 (modify-phases %standard-phases
809 (add-before 'configure 'patch-configure
810 (lambda* (#:key outputs #:allow-other-keys)
811 (substitute* "configure"
812 (("/bin/mv") "mv"))
813 (substitute* "fortran/src/Makefile.in"
814 (("libhdf5_fortran_la_LDFLAGS =")
815 (string-append "libhdf5_fortran_la_LDFLAGS = -Wl-rpath="
816 (assoc-ref outputs "fortran") "/lib")))
817 (substitute* "hl/fortran/src/Makefile.in"
818 (("libhdf5hl_fortran_la_LDFLAGS =")
819 (string-append "libhdf5hl_fortran_la_LDFLAGS = -Wl,-rpath="
820 (assoc-ref outputs "fortran") "/lib")))
821 #t))
822 (add-after 'configure 'patch-settings
823 (lambda _
824 ;; libhdf5.settings contains the full path of the
825 ;; compilers used, and its contents are included in
826 ;; libhdf5.so. We truncate the hashes to avoid
827 ;; unnecessary store references to those compilers:
828 (substitute* "src/libhdf5.settings"
829 (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
830 (string-append prefix (string-take hash 10) "..."))
831 ;; Don't record the build-time kernel version to make the
832 ;; settings file reproducible.
833 (("Uname information:.*")
834 "Uname information: Linux\n"))
835 #t))
836 (add-after 'install 'patch-references
837 (lambda* (#:key inputs outputs #:allow-other-keys)
838 (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
839 (zlib (assoc-ref inputs "zlib")))
840 (substitute* (find-files bin "h5p?cc")
841 (("-lz" lib)
842 (string-append "-L" zlib "/lib " lib)))
843 #t)))
844 (add-after 'install 'split
845 (lambda* (#:key inputs outputs #:allow-other-keys)
846 ;; Move all fortran-related files
847 (let* ((out (assoc-ref outputs "out"))
848 (bin (string-append out "/bin"))
849 (lib (string-append out "/lib"))
850 (inc (string-append out "/include"))
851 (ex (string-append out "/share/hdf5_examples/fortran"))
852 (fort (assoc-ref outputs "fortran"))
853 (fbin (string-append fort "/bin"))
854 (flib (string-append fort "/lib"))
855 (finc (string-append fort "/include"))
856 (fex (string-append fort "/share/hdf5_examples/fortran")))
857 (mkdir-p fbin)
858 (mkdir-p flib)
859 (mkdir-p finc)
860 (mkdir-p fex)
861 ;; Note: When built with --enable-parallel, the 'h5fc' file
862 ;; doesn't exist, hence this condition.
863 (when (file-exists? (string-append bin "/h5fc"))
864 (rename-file (string-append bin "/h5fc")
865 (string-append fbin "/h5fc")))
866 (for-each (lambda (file)
867 (rename-file file
868 (string-append flib "/" (basename file))))
869 (find-files lib ".*fortran.*"))
870 (for-each (lambda (file)
871 (rename-file file
872 (string-append finc "/" (basename file))))
873 (find-files inc ".*mod"))
874 (for-each (lambda (file)
875 (rename-file file
876 (string-append fex "/" (basename file))))
877 (find-files ex ".*"))
878 (delete-file-recursively ex))
879 #t)))))
880 (home-page "http://www.hdfgroup.org")
881 (synopsis "Management suite for extremely large and complex data")
882 (description "HDF5 is a suite that makes possible the management of
883 extremely large and complex data collections.")
884 (license (license:x11-style
885 "http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/COPYING"))))
886
887 (define-public hdf5-1.10
888 (package (inherit hdf5)
889 (version "1.10.4")
890 (source
891 (origin
892 (method url-fetch)
893 (uri (list (string-append "https://support.hdfgroup.org/ftp/HDF5/releases/"
894 "hdf5-" (version-major+minor version)
895 "/hdf5-" version "/src/hdf5-"
896 version ".tar.bz2")
897 (string-append "https://support.hdfgroup.org/ftp/HDF5/"
898 "current"
899 (apply string-append
900 (take (string-split version #\.) 2))
901 "/src/hdf5-" version ".tar.bz2")))
902 (sha256
903 (base32 "1pr85fa1sh2ky6ai2hs3f21lp252grl2cq3wbyi4rh7dm83gyrqj"))
904 (patches (search-patches "hdf5-config-date.patch"
905 "hdf5-mpi-deprecations.patch"))))))
906
907 (define-public hdf-java
908 (package
909 (name "hdf-java")
910 (version "3.3.2")
911 (source
912 (origin
913 (method url-fetch)
914 (uri (string-append
915 "http://www.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfjni-"
916 version "/src/CMake-hdfjava-" version ".tar.gz"))
917 (sha256
918 (base32 "0m1gp2aspcblqzmpqbdpfp6giskws85ds6p5gz8sx7asyp7wznpr"))
919 (modules '((guix build utils)))
920 (snippet ; Make sure we don't use the bundled sources and binaries.
921 `(begin
922 (for-each delete-file
923 (list "SZip.tar.gz" "ZLib.tar.gz" "JPEG8d.tar.gz"
924 "HDF4.tar.gz" "HDF5.tar.gz"))
925 (delete-file-recursively ,(string-append "hdfjava-" version "/lib"))
926 #t))))
927 (build-system gnu-build-system)
928 (native-inputs
929 `(("jdk" ,icedtea "jdk")
930 ("automake" ,automake) ; For up to date 'config.guess' and 'config.sub'.
931 ;; For tests:
932 ("hamcrest-core" ,java-hamcrest-core)
933 ("junit" ,java-junit)
934 ("slf4j-simple" ,java-slf4j-simple)))
935 (inputs
936 `(("hdf4" ,hdf4)
937 ("hdf5" ,hdf5)
938 ("zlib" ,zlib)
939 ("libjpeg" ,libjpeg)
940 ("slf4j-api" ,java-slf4j-api)))
941 (arguments
942 `(#:configure-flags
943 (list (string-append "--target=" ,(or (%current-target-system) (%current-system)))
944 (string-append "--with-jdk=" (assoc-ref %build-inputs "jdk") "/include,"
945 (assoc-ref %build-inputs "jdk") "/lib" )
946 (string-append "--with-hdf4=" (assoc-ref %build-inputs "hdf4") "/lib")
947 (string-append "--with-hdf5=" (assoc-ref %build-inputs "hdf5") "/lib"))
948
949 #:make-flags
950 (list (string-append "HDFLIB=" (assoc-ref %build-inputs "hdf4") "/lib")
951 (string-append "HDF5LIB=" (assoc-ref %build-inputs "hdf5") "/lib")
952 (string-append "ZLIB=" (assoc-ref %build-inputs "zlib") "/lib/libz.so")
953 (string-append "JPEGLIB="
954 (assoc-ref %build-inputs "libjpeg") "/lib/libjpeg.so")
955 "LLEXT=so")
956
957 #:phases
958 (modify-phases %standard-phases
959 (add-before 'configure 'chdir-to-source
960 (lambda _ (chdir ,(string-append "hdfjava-" version)) #t))
961 (add-before 'configure 'patch-build
962 (lambda* (#:key inputs outputs #:allow-other-keys)
963 (substitute* "configure"
964 (("COPT=\"") "COPT=\"-O2 ") ; CFLAGS is ignored in Makefiles
965 (("/bin/cat") (which "cat")))
966 ;; Set classpath for compilation
967 (substitute* '("hdf/hdf5lib/Makefile.in"
968 "hdf/hdf5lib/exceptions/Makefile.in"
969 "hdf/hdflib/Makefile.in")
970 (("\\$\\(TOP\\)/lib/slf4j-api-1\\.7\\.5\\.jar")
971 (string-append (assoc-ref inputs "slf4j-api")
972 "/share/java/slf4j-api.jar")))
973 ;; Replace outdated config.sub and config.guess:
974 (with-directory-excursion "config"
975 (for-each (lambda (file)
976 (install-file
977 (string-append (assoc-ref inputs "automake")
978 "/share/automake-"
979 ,(version-major+minor (package-version automake))
980 "/" file) "."))
981 '("config.sub" "config.guess")))
982
983 ;; Fix embedded version number
984 (let ((hdf5version (list ,@(string-split (package-version hdf5) #\.))))
985 (substitute* "hdf/hdf5lib/H5.java"
986 (("1, 8, 19")
987 (string-join hdf5version ", "))))
988
989 (mkdir-p (string-append (assoc-ref outputs "out")))
990 ;; Set classpath for tests
991 (let* ((build-dir (getcwd))
992 (lib (string-append build-dir "/lib"))
993 (jhdf (string-append lib "/jhdf.jar"))
994 (jhdf5 (string-append lib "/jhdf5.jar"))
995 (testjars
996 (map (lambda (i)
997 (string-append (assoc-ref inputs i)
998 "/share/java/" i ".jar"))
999 '("junit" "hamcrest-core" "slf4j-api" "slf4j-simple")))
1000 (class-path
1001 (string-join `("." ,build-dir ,jhdf ,jhdf5 ,@testjars) ":")))
1002
1003 (substitute* '("test/hdf5lib/Makefile.in"
1004 "test/hdf5lib/junit.sh.in"
1005 "examples/runExample.sh.in")
1006 (("/usr/bin/test")
1007 (string-append (assoc-ref inputs "coreutils")
1008 "/bin/test"))
1009 (("/usr/bin/uname")
1010 (string-append (assoc-ref inputs "coreutils")
1011 "/bin/uname"))
1012 (("CLASSPATH=[^\n]*")
1013 (string-append "CLASSPATH=" class-path)))
1014 (setenv "CLASSPATH" class-path))
1015 #t))
1016 (add-before 'check 'build-examples
1017 (lambda _
1018 (apply invoke `("javac"
1019 ,@(find-files "examples" ".*\\.java"))))))
1020
1021 #:parallel-build? #f
1022
1023 #:parallel-tests? #f ))
1024 (home-page "https://support.hdfgroup.org/products/java")
1025 (synopsis "Java interface for the HDF4 and HDF5 libraries")
1026 (description "Java HDF Interface (JHI) and Java HDF5 Interface (JHI5) use
1027 the Java Native Interface to wrap the HDF4 and HDF5 libraries, which are
1028 implemented in C.")
1029
1030 ;; BSD-style license:
1031 (license (license:x11-style
1032 "https://support.hdfgroup.org/ftp/HDF5/hdf-java\
1033 /current/src/unpacked/COPYING"))))
1034
1035 (define-public hdf-eos2
1036 (package
1037 (name "hdf-eos2")
1038 (version "19.1.0")
1039 (source
1040 (origin
1041 (method url-fetch)
1042 (uri "ftp://edhs1.gsfc.nasa.gov\
1043 /edhs/hdfeos/latest_release/HDF-EOS2.19v1.00.tar.Z")
1044 (sha256
1045 (base32 "0c9fcz25s292ldap12wxmlrvnyz99z24p63d8fwx51bf8s0s1zrz"))
1046 (patches (search-patches "hdf-eos2-remove-gctp.patch"
1047 "hdf-eos2-build-shared.patch"
1048 "hdf-eos2-fortrantests.patch"))))
1049 (build-system gnu-build-system)
1050 (native-inputs
1051 `(("gfortran" ,gfortran)))
1052 (inputs
1053 `(("hdf4" ,hdf4-alt) ; assume most HDF-EOS2 users won't use the HDF4 netCDF API
1054 ;; XXX: These inputs are really dependencies of hdf4.
1055 ("zlib" ,zlib)
1056 ("libjpeg" ,libjpeg)
1057 ("libtirpc" ,libtirpc)
1058
1059 ("gctp" ,gctp)))
1060 (arguments
1061 `( #:configure-flags '("--enable-install-include" "--enable-shared"
1062 "CC=h4cc -Df2cFortran" "LIBS=-lgctp")
1063 #:parallel-tests? #f))
1064 (home-page "http://hdfeos.org/software/library.php#HDF-EOS2")
1065 (synopsis "HDF4-based data format for NASA's Earth Observing System")
1066 (description "HDF-EOS2 is a software library built on HDF4 which supports
1067 the construction of data structures used in NASA's Earth Observing
1068 System (Grid, Point and Swath).")
1069
1070 ;; Source files carry a permissive license header.
1071 (license (license:non-copyleft home-page))))
1072
1073 (define-public hdf-eos5
1074 (package
1075 (name "hdf-eos5")
1076 (version "1.15")
1077 (source (origin
1078 (method url-fetch)
1079 (uri (string-append "ftp://edhs1.gsfc.nasa.gov\
1080 /edhs/hdfeos5/latest_release/HDF-EOS5." version ".tar.Z"))
1081 (sha256
1082 (base32
1083 "1p83333nzzy8rn5chxlm0hrkjjnhh2w1ji8ac0f9q4xzg838i58i"))
1084 (patches (search-patches "hdf-eos5-build-shared.patch"
1085 "hdf-eos5-remove-gctp.patch"
1086 "hdf-eos5-fix-szip.patch"
1087 "hdf-eos5-fortrantests.patch"))))
1088 (native-inputs
1089 `(("gfortran" ,gfortran)))
1090 (build-system gnu-build-system)
1091 (inputs
1092 `(("hdf5" ,hdf5)
1093 ("zlib" ,zlib)
1094 ("gctp" ,gctp)))
1095 (arguments
1096 `(#:configure-flags '("--enable-install-include" "--enable-shared"
1097 "CC=h5cc -Df2cFortran" "LIBS=-lgctp")
1098 #:parallel-tests? #f))
1099 (synopsis "HDF5-based data format for NASA's Earth Observing System")
1100 (description
1101 "HDF-EOS5 is a software library built on HDF5 to support the construction
1102 of data structures used in NASA's Earth Observing System (Grid, Point and
1103 Swath).")
1104 (home-page "http://www.hdfeos.org/software/library.php#HDF-EOS5")
1105
1106 ;; Source files carry a permissive license header.
1107 (license (license:non-copyleft home-page))))
1108
1109 (define-public hdf5-parallel-openmpi
1110 (package (inherit hdf5)
1111 (name "hdf5-parallel-openmpi")
1112 (inputs
1113 `(("mpi" ,openmpi)
1114 ,@(package-inputs hdf5)))
1115 (arguments
1116 (substitute-keyword-arguments (package-arguments hdf5)
1117 ((#:configure-flags flags)
1118 ``("--enable-parallel"
1119 ,@(delete "--enable-cxx"
1120 (delete "--enable-threadsafe" ,flags))))
1121 ((#:phases phases)
1122 `(modify-phases ,phases
1123 (add-after 'build 'mpi-setup
1124 ,%openmpi-setup)
1125 (add-before 'check 'patch-tests
1126 (lambda _
1127 ;; OpenMPI's mpirun will exit with non-zero status if it
1128 ;; detects an "abnormal termination", i.e. any process not
1129 ;; calling MPI_Finalize(). Since the test is explicitly
1130 ;; avoiding MPI_Finalize so as not to have at_exit and thus
1131 ;; H5C_flush_cache from being called, mpirun will always
1132 ;; complain, so turn this test off.
1133 (substitute* "testpar/Makefile"
1134 (("(^TEST_PROG_PARA.*)t_pflush1(.*)" front back)
1135 (string-append front back "\n")))
1136 (substitute* "tools/h5diff/testph5diff.sh"
1137 (("/bin/sh") (which "sh")))
1138 #t))))))
1139 (synopsis "Management suite for data with parallel IO support")))
1140
1141 (define-public h5check
1142 (package
1143 (name "h5check")
1144 (version "2.0.1")
1145 (source
1146 (origin
1147 (method url-fetch)
1148 (uri (string-append "http://www.hdfgroup.org/ftp/HDF5/tools/"
1149 "h5check/src/h5check-" version ".tar.gz"))
1150 (sha256
1151 (base32
1152 "1gm76jbwhz9adbxgn14zx8cj33dmjdr2g5xcy0m9c2gakp8w59kj"))))
1153 (build-system gnu-build-system)
1154 (inputs `(("hdf5" ,hdf5))) ;h5cc for tests
1155 (home-page "https://www.hdfgroup.org/products/hdf5_tools/h5check.html")
1156 (synopsis "HDF5 format checker")
1157 (description "@code{h5check} is a validation tool for verifying that an
1158 HDF5 file is encoded according to the HDF File Format Specification.")
1159 (license (license:x11-style "file://COPYING"))))
1160
1161 (define-public itpp
1162 (package
1163 (name "itpp")
1164 (version "4.3.1")
1165 (source (origin
1166 (method url-fetch)
1167 (uri (string-append "mirror://sourceforge/itpp/itpp/"
1168 version "/itpp-"
1169 version ".tar.gz"))
1170 (sha256
1171 (base32
1172 "14ddy2xnb6sgp4hiax9v5sv4pr4l4dd4ps76nfha3nrpr1ikhcqm"))))
1173 (build-system cmake-build-system)
1174 (arguments `(#:tests? #f)) ; Tests require googletest *sources*
1175 (inputs `(("lapack" ,lapack)
1176 ("fftw" ,fftw)))
1177 ;; FIXME: Even though the fonts are available dvips complains:
1178 ;; "Font cmmi10 not found; characters will be left blank."
1179 (native-inputs
1180 `(("texlive" ,texlive-tiny)
1181 ("ghostscript" ,ghostscript)
1182 ("doxygen" ,doxygen)))
1183 (home-page "http://itpp.sourceforge.net")
1184 (synopsis "C++ library of maths, signal processing and communication classes")
1185 (description "IT++ is a C++ library of mathematical, signal processing and
1186 communication classes and functions. Its main use is in simulation of
1187 communication systems and for performing research in the area of
1188 communications. The kernel of the library consists of generic vector and
1189 matrix classes, and a set of accompanying routines. Such a kernel makes IT++
1190 similar to MATLAB, GNU Octave or SciPy.")
1191 (license license:gpl3+)))
1192
1193 (define-public netcdf
1194 (package
1195 (name "netcdf")
1196 (version "4.4.1.1")
1197 (source
1198 (origin
1199 (method url-fetch)
1200 (uri (string-append "ftp://ftp.unidata.ucar.edu/pub/netcdf/"
1201 "netcdf-" version ".tar.gz"))
1202 (sha256
1203 (base32
1204 "1blc7ik5yin7i0ls2kag0a9xjk12m0dzx6v1x88az3ras3scci2d"))
1205 (patches (search-patches "netcdf-date-time.patch"
1206 "netcdf-tst_h_par.patch"))))
1207 (build-system gnu-build-system)
1208 (native-inputs
1209 `(("m4" ,m4)
1210 ("doxygen" ,doxygen)
1211 ("graphviz" ,graphviz)))
1212 (inputs
1213 `(("hdf4" ,hdf4-alt)
1214 ("hdf5" ,hdf5)
1215 ("zlib" ,zlib)
1216 ("libjpeg" ,libjpeg)))
1217 (arguments
1218 `(#:configure-flags '("--enable-doxygen" "--enable-dot" "--enable-hdf4")
1219
1220 #:phases (modify-phases %standard-phases
1221 (add-before 'configure 'fix-source-date
1222 (lambda _
1223 ;; As we ${SOURCE_DATE_EPOCH} evaluates to "1" in the build
1224 ;; environment, `date -u -d ${SOURCE_DATE_EPOCH}` will evaluate
1225 ;; to '1st hour of the current day', and therefore makes the
1226 ;; package not reproducible.
1227 (substitute* "./configure"
1228 (("date -u -d \"\\$\\{SOURCE_DATE_EPOCH\\}\"")
1229 "date --date='@0'"))
1230 #t))
1231 (add-after 'configure 'patch-settings
1232 (lambda _
1233 ;; libnetcdf.settings contains the full filename of the compilers
1234 ;; used to build the library. We truncate the hashes of those
1235 ;; filenames to avoid unnecessary references to the corresponding
1236 ;; store items.
1237 (substitute* "libnetcdf.settings"
1238 (("(/gnu/store/)([a-Z0-9]*)" all prefix hash)
1239 (string-append prefix (string-take hash 10) "...")))
1240 #t)))
1241
1242 #:parallel-tests? #f)) ;various race conditions
1243 (home-page "http://www.unidata.ucar.edu/software/netcdf/")
1244 (synopsis "Library for scientific data")
1245 (description "NetCDF is an interface for scientific data access and a
1246 software library that provides an implementation of the interface. The netCDF
1247 library defines a machine-independent format for representing scientific data.
1248 Together, the interface, library, and format support the creation, access, and
1249 sharing of scientific data.")
1250 (license (license:x11-style "file://COPYRIGHT"))))
1251
1252 (define-public netcdf-parallel-openmpi
1253 (package (inherit netcdf)
1254 (name "netcdf-parallel-openmpi")
1255 (inputs
1256 `(("mpi" ,openmpi)
1257 ,@(alist-replace "hdf5" (list hdf5-parallel-openmpi)
1258 (package-inputs netcdf))))
1259 ;; TODO: Replace pkg-config references in nc-config with absolute references
1260 (arguments
1261 (substitute-keyword-arguments (package-arguments netcdf)
1262 ((#:configure-flags flags)
1263 `(cons* "CC=mpicc" "CXX=mpicxx"
1264 "--enable-parallel-tests"
1265 ;; Shared libraries not supported with parallel IO.
1266 "--disable-shared" "--with-pic"
1267 ,flags))))))
1268
1269 (define-public netcdf-fortran
1270 (package
1271 (name "netcdf-fortran")
1272 (version "4.4.4")
1273 (source (origin
1274 (method url-fetch)
1275 (uri (string-append
1276 "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-"
1277 version ".tar.gz"))
1278 (sha256
1279 (base32
1280 "0xaxdcg1p83zmypwml3swsnr3ccn38inwldyr1l3wa4dbwbrblxj"))))
1281 (build-system gnu-build-system)
1282 (arguments
1283 `(#:parallel-tests? #f))
1284 (inputs
1285 `(("netcdf" ,netcdf)))
1286 (native-inputs
1287 `(("gfortran" ,gfortran)))
1288 (synopsis "Fortran interface for the netCDF library")
1289 (description (package-description netcdf))
1290 (home-page (package-home-page netcdf))
1291 (license (package-license netcdf))))
1292
1293 (define-public nlopt
1294 (package
1295 (name "nlopt")
1296 (version "2.4.2")
1297 (source (origin
1298 (method url-fetch)
1299 (uri (string-append "http://ab-initio.mit.edu/nlopt/nlopt-"
1300 version ".tar.gz"))
1301 (sha256
1302 (base32 "12cfkkhcdf4zmb6h7y6qvvdvqjs2xf9sjpa3rl3bq76px4yn76c0"))))
1303 (build-system gnu-build-system)
1304 (arguments
1305 `(;; Shared libraries are not built by default. They are required to
1306 ;; build the Guile, Octave, and Python bindings.
1307 #:configure-flags '("--enable-shared")
1308
1309 #:phases
1310 (modify-phases %standard-phases
1311 (add-before 'configure 'set-libnlopt-file-name
1312 (lambda* (#:key outputs #:allow-other-keys)
1313 ;; Make sure the Scheme module refers to the library by its
1314 ;; absolute file name (we cannot do that from a snippet
1315 ;; because the expansion of @libdir@ contains
1316 ;; ${exec_prefix}.)
1317 (let ((out (assoc-ref outputs "out")))
1318 (substitute* "swig/nlopt.scm.in"
1319 (("libnlopt")
1320 (string-append out "/lib/libnlopt")))
1321 #t))))))
1322 (inputs `(("guile" ,guile-2.0)))
1323 (native-inputs `(("pkg-config" ,pkg-config)))
1324 (home-page "http://ab-initio.mit.edu/wiki/")
1325 (synopsis "Library for nonlinear optimization")
1326 (description "NLopt is a library for nonlinear optimization, providing a
1327 common interface for a number of different free optimization routines available
1328 online as well as original implementations of various other algorithms.")
1329 (license license:lgpl2.1+)))
1330
1331 (define-public ipopt
1332 (package
1333 (name "ipopt")
1334 (version "3.12.12")
1335 (source (origin
1336 (method url-fetch)
1337 (uri (string-append
1338 "http://www.coin-or.org/download/source/Ipopt/Ipopt-"
1339 version".tgz"))
1340 (sha256
1341 (base32
1342 "07yn9rzdswjk8n246qq6ci9ssf2bcplkifcpsfz9j6cdxw9vgbkv"))
1343 (modules '((guix build utils)))
1344 (snippet
1345 ;; Make sure we don't use the bundled software.
1346 '(begin
1347 (delete-file-recursively "ThirdParty")
1348 #t))))
1349 (build-system gnu-build-system)
1350 (arguments
1351 '(#:phases (modify-phases %standard-phases
1352 (add-after 'install 'add--L-flags-in-ipopt.pc
1353 (lambda* (#:key inputs outputs #:allow-other-keys)
1354 ;; The '.pc' file lists '-llapack -lblas' in "Libs";
1355 ;; move it to "Libs.private" where it belongs, and add a
1356 ;; '-L' flag for LAPACK.
1357 (let ((out (assoc-ref outputs "out"))
1358 (lapack (assoc-ref inputs "lapack")))
1359 (substitute* (string-append out "/lib/pkgconfig/"
1360 "ipopt.pc")
1361 (("Libs: (.*)-llapack -lblas(.*)$" _ before after)
1362 (string-append "Libs: " before " " after "\n"
1363 "Libs.private: " before
1364 "-L" lapack "/lib -llapack -lblas "
1365 after "\n")))
1366 #t))))))
1367 (native-inputs
1368 `(("gfortran" ,gfortran)))
1369 (inputs
1370 ;; TODO: Maybe add dependency on COIN-MUMPS, ASL, and HSL.
1371 `(("lapack" ,lapack))) ;for both libblas and liblapack
1372 (home-page "http://www.coin-or.org")
1373 (synopsis "Large-scale nonlinear optimizer")
1374 (description
1375 "The Interior Point Optimizer (IPOPT) is a software package for
1376 large-scale nonlinear optimization. It provides C++, C, and Fortran
1377 interfaces.")
1378 (license license:epl1.0)))
1379
1380 (define-public clp
1381 (package
1382 (name "clp")
1383 (version "1.17.1")
1384 (source (origin
1385 (method url-fetch)
1386 (uri (string-append "https://www.coin-or.org/download/source/"
1387 "Clp/Clp-" version ".tgz"))
1388 (sha256
1389 (base32
1390 "1wdg820g3iikf9344ijwsc8sy6c0m6im42bzzizm6rlmkvnmxhk9"))
1391 (modules '((guix build utils)))
1392 (snippet
1393 ;; Make sure we don't use the bundled software.
1394 '(begin
1395 (delete-file-recursively "ThirdParty")
1396 #t))))
1397 (build-system gnu-build-system)
1398 (native-inputs
1399 `(("gfortran" ,gfortran)
1400 ("pkg-config" ,pkg-config)))
1401 (inputs
1402 `(("openblas" ,openblas)))
1403 (home-page "https://www.coin-or.org")
1404 (synopsis "Linear programming solver")
1405 (description
1406 "CLP is a high quality linear programming solver. Its main strengths are
1407 its dual and primal Simplex algorithms. It also has a barrier algorithm for
1408 linear and quadratic objectives. There are limited facilities for nonlinear
1409 and quadratic objectives using the Simplex algorithm.")
1410 (license license:epl1.0)))
1411
1412 (define-public ceres
1413 (package
1414 (name "ceres-solver")
1415 (version "1.14.0")
1416 (home-page "http://ceres-solver.org/")
1417 (source (origin
1418 (method url-fetch)
1419 (uri (string-append home-page "ceres-solver-"
1420 version ".tar.gz"))
1421 (sha256
1422 (base32
1423 "13lfxy8x58w8vprr0nkbzziaijlh0vvqshgahvcgw0mrqdgh0i27"))))
1424 (build-system cmake-build-system)
1425 (arguments
1426 ;; TODO: Build HTML user documentation and install separately.
1427 '(#:configure-flags '("-DBUILD_EXAMPLES=OFF"
1428 "-DBUILD_SHARED_LIBS=ON")
1429
1430 #:phases (modify-phases %standard-phases
1431 (add-before 'configure 'set-library-directory
1432 (lambda _
1433 ;; Install libraries to lib/, not lib64/.
1434 (substitute* "internal/ceres/CMakeLists.txt"
1435 (("set\\(LIB_SUFFIX \"64\"\\)")
1436 "set(LIB_SUFFIX \"\")"))
1437 #t)))))
1438 (native-inputs
1439 `(("pkg-config" ,pkg-config)))
1440 (propagated-inputs
1441 `(("glog" ,glog))) ;for #include <glog/glog.h>
1442 (inputs
1443 `(("eigen" ,eigen)
1444 ("blas" ,openblas)
1445 ("lapack" ,lapack)
1446 ("suitesparse" ,suitesparse)
1447 ("gflags" ,gflags)))
1448 (synopsis "C++ library for solving large optimization problems")
1449 (description
1450 "Ceres Solver is a C++ library for modeling and solving large,
1451 complicated optimization problems. It is a feature rich, mature and
1452 performant library which has been used in production since 2010. Ceres Solver
1453 can solve two kinds of problems:
1454 @enumerate
1455 @item non-linear least squares problems with bounds constraints;
1456 @item general unconstrained optimization problems.
1457 @end enumerate\n")
1458 (license license:bsd-3)))
1459
1460 ;; For a fully featured Octave, users are strongly recommended also to install
1461 ;; the following packages: less, ghostscript, gnuplot.
1462 (define-public octave-cli
1463 (package
1464 (name "octave-cli")
1465 (version "5.1.0")
1466 (source
1467 (origin
1468 (method url-fetch)
1469 (uri (string-append "mirror://gnu/octave/octave-"
1470 version ".tar.lz"))
1471 (sha256
1472 (base32
1473 "11wwxpy2q1bhxs2v41bqn05i2sb0905cj1xil6mg8l4k2kka4cq6"))))
1474 (build-system gnu-build-system)
1475 (inputs
1476 `(("alsa-lib" ,alsa-lib)
1477 ("arpack" ,arpack-ng)
1478 ("curl" ,curl)
1479 ("fftw" ,fftw)
1480 ("fftwf" ,fftwf)
1481 ("fltk" ,fltk)
1482 ("fontconfig" ,fontconfig)
1483 ("freetype" ,freetype)
1484 ("gl2ps" ,gl2ps)
1485 ("glpk" ,glpk)
1486 ("glu" ,glu)
1487 ("graphicsmagick" ,graphicsmagick)
1488 ("hdf5" ,hdf5)
1489 ("lapack" ,lapack)
1490 ("libsndfile" ,libsndfile)
1491 ("libxft" ,libxft)
1492 ("mesa" ,mesa)
1493 ("pcre" ,pcre)
1494 ("portaudio" ,portaudio)
1495 ("qhull" ,qhull)
1496 ("readline" ,readline)
1497 ("suitesparse" ,suitesparse)
1498 ("texinfo" ,texinfo)
1499 ("zlib" ,zlib)))
1500 (native-inputs
1501 `(("lzip" ,lzip)
1502 ("gfortran" ,gfortran)
1503 ("pkg-config" ,pkg-config)
1504 ("perl" ,perl)
1505 ;; The following inputs are not actually used in the build process.
1506 ;; However, the ./configure gratuitously tests for their existence and
1507 ;; assumes that programs not present at build time are also not, and
1508 ;; can never be, available at run time! If these inputs are therefore
1509 ;; not present, support for them will be built out. However, Octave
1510 ;; will still run without them, albeit without the features they
1511 ;; provide.
1512 ("less" ,less)
1513 ("ghostscript" ,ghostscript)
1514 ("gnuplot" ,gnuplot)))
1515 ;; Octave code uses this variable to detect directories holding multiple CA
1516 ;; certificates to verify peers with. This is required for the networking
1517 ;; functions that require encryption to work properly.
1518 (native-search-paths
1519 (list (search-path-specification
1520 (variable "CURLOPT_CAPATH")
1521 (files '("etc/ssl/certs")))))
1522 (arguments
1523 `(#:configure-flags
1524 (list (string-append "--with-shell="
1525 (assoc-ref %build-inputs "bash")
1526 "/bin/sh"))
1527 #:phases
1528 (modify-phases %standard-phases
1529 (add-after 'configure 'configure-makeinfo
1530 (lambda* (#:key inputs #:allow-other-keys)
1531 (substitute* "libinterp/corefcn/help.h"
1532 (("\"makeinfo\"")
1533 (string-append
1534 "\"" (assoc-ref inputs "texinfo") "/bin/makeinfo\"")))
1535 #t)))))
1536 (home-page "https://www.gnu.org/software/octave/")
1537 (synopsis "High-level language for numerical computation")
1538 (description "GNU Octave is a high-level interpreted language that is
1539 specialized for numerical computations. It can be used for both linear and
1540 non-linear applications and it provides great support for visualizing results.
1541 Work may be performed both at the interactive command-line as well as via
1542 script files.")
1543 (license license:gpl3+)))
1544
1545 (define-public octave
1546 (package (inherit octave-cli)
1547 (name "octave")
1548 (source (origin
1549 (inherit (package-source octave-cli))))
1550 (inputs
1551 `(("qscintilla" ,qscintilla)
1552 ("qt" ,qtbase)
1553 ,@(package-inputs octave-cli)))
1554 (native-inputs
1555 `(("qttools" , qttools) ;for lrelease
1556 ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi
1557 ,@(package-native-inputs octave-cli)))
1558 (arguments
1559 (substitute-keyword-arguments (package-arguments octave-cli)
1560 ((#:phases phases)
1561 `(modify-phases ,phases
1562 (add-before 'configure 'patch-qscintilla-library-name
1563 (lambda* (#:key inputs #:allow-other-keys)
1564 ;; The QScintilla library that the Octave configure script tries
1565 ;; to link with should be named libqscintilla-qt5.so, but the
1566 ;; QScintilla input provides the shared library as
1567 ;; libqscintilla2_qt5.so.
1568 (substitute* "configure"
1569 (("qscintilla2-qt5")
1570 "qscintilla2_qt5"))
1571 #t))))))))
1572
1573 (define-public qtoctave
1574 (deprecated-package "qtoctave" octave))
1575
1576 (define-public opencascade-oce
1577 (package
1578 (name "opencascade-oce")
1579 (version "0.17.2")
1580 (source
1581 (origin
1582 (method git-fetch)
1583 (uri (git-reference
1584 (url "https://github.com/tpaviot/oce.git")
1585 (commit (string-append "OCE-" version))))
1586 (file-name (git-file-name name version))
1587 (patches (search-patches "opencascade-oce-glibc-2.26.patch"))
1588 (sha256
1589 (base32 "0rg5wzkvfmzfl6v2amyryb8dnjad0nn9kyr607wy2gch6rciah69"))))
1590 (build-system cmake-build-system)
1591 (arguments
1592 '(#:configure-flags
1593 (list "-DOCE_TESTING:BOOL=ON"
1594 "-DOCE_USE_TCL_TEST_FRAMEWORK:BOOL=ON"
1595 "-DOCE_DRAW:BOOL=ON"
1596 (string-append "-DOCE_INSTALL_PREFIX:PATH="
1597 (assoc-ref %outputs "out"))
1598 "-UCMAKE_INSTALL_RPATH")))
1599 (inputs
1600 `(("freetype" ,freetype)
1601 ("glu" ,glu)
1602 ("libxmu" ,libxmu)
1603 ("mesa" ,mesa)
1604 ("tcl" ,tcl)
1605 ("tk" ,tk)))
1606 (native-inputs
1607 `(("python" ,python-wrapper)))
1608 (home-page "https://github.com/tpaviot/oce")
1609 (synopsis "Libraries for 3D modeling and numerical simulation")
1610 (description
1611 "Open CASCADE is a set of libraries for the development of applications
1612 dealing with 3D CAD data or requiring industrial 3D capabilities. It includes
1613 C++ class libraries providing services for 3D surface and solid modeling, CAD
1614 data exchange, and visualization. It is used for development of specialized
1615 software dealing with 3D models in design (CAD), manufacturing (CAM),
1616 numerical simulation (CAE), measurement equipment (CMM), and quality
1617 control (CAQ) domains.
1618
1619 This is the ``Community Edition'' (OCE) of Open CASCADE, which gathers
1620 patches, improvements, and experiments contributed by users over the official
1621 Open CASCADE library.")
1622 (license (list license:lgpl2.1; OCE libraries, with an exception for the
1623 ; use of header files; see
1624 ; OCCT_LGPL_EXCEPTION.txt
1625 license:public-domain; files
1626 ; src/Standard/Standard_StdAllocator.hxx and
1627 ; src/NCollection/NCollection_StdAllocator.hxx
1628 license:expat; file src/OpenGl/OpenGl_glext.h
1629 license:bsd-3)))); test framework gtest
1630
1631 (define-public opencascade-occt
1632 (package
1633 (name "opencascade-occt")
1634 (version "7.3.0p3")
1635 (source
1636 (origin
1637 (method git-fetch)
1638 (uri (git-reference
1639 (url "https://git.dev.opencascade.org/repos/occt.git")
1640 (commit
1641 (string-append "V"
1642 (string-map (lambda (x) (if (eq? x #\.) #\_ x))
1643 version)))))
1644 (file-name (git-file-name name version))
1645 (sha256
1646 (base32 "0bdywwxb6mk0ykbiajlvsb37295akqjp0a60y672qjfa67k0ljv4"))
1647 (modules '((guix build utils)))
1648 (snippet
1649 '(begin
1650 ;; Remove files specific to non-free operating systems.
1651 (delete-file-recursively "samples/ios")
1652 (delete-file-recursively "samples/mfc")
1653 (delete-file-recursively "samples/qt/FuncDemo")
1654 (delete-file "genconf.bat")
1655 (delete-file "gendoc.bat")
1656 (delete-file "genproj.bat")
1657 (delete-file "upgrade.bat")
1658 ;; Remove references to deleted files.
1659 (substitute* "dox/FILES_HTML.txt"
1660 ((".*standard.*") "" )
1661 ((".*UIKitSample.*") ""))
1662 #t))))
1663 (build-system cmake-build-system)
1664 (arguments
1665 '(;; There is no test target for make. OCCT provides an
1666 ;; 'Automated Testing System', which may be accessed after
1667 ;; installation via the draw.sh script. draw.sh is located in
1668 ;; the bin directory. For details see:
1669 ;; https://www.opencascade.com/doc/occt-7.3.0/overview/html/\
1670 ;; occt_dev_guides__tests.html
1671 #:tests? #f
1672 ;; Configure without freeimage: attempting to link against the
1673 ;; freeimage version 3.17 library leads to 'undefined
1674 ;; reference' errors.
1675 #:configure-flags
1676 (list "-DUSE_FREEIMAGE:BOOL=OFF"
1677 "-DUSE_TBB:BOOL=ON"
1678 "-DUSE_VTK:BOOL=OFF"
1679 "-DBUILD_DOC_Overview:BOOL=OFF"
1680 "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON"
1681 "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
1682 "-UCMAKE_INSTALL_LIBDIR")))
1683 (inputs
1684 `(("doxygen" ,doxygen)
1685 ;("freeimage" ,freeimage)
1686 ("freetype" ,freetype)
1687 ("glu" ,glu)
1688 ("libxext" ,libxext)
1689 ("libxi" ,libxi)
1690 ("libxmu" ,libxmu)
1691 ("mesa" ,mesa)
1692 ("tbb" ,tbb)
1693 ("tcl" ,tcl)
1694 ("tk" ,tk)))
1695 ;; TODO: build Overview documentation and add 'doc' output.
1696 (home-page "https://www.opencascade.com")
1697 (synopsis "Libraries for 3D modeling and numerical simulation")
1698 (description
1699 "Open CASCADE is a set of libraries for the development of applications
1700 dealing with 3D CAD data or requiring industrial 3D capabilities. It includes
1701 C++ class libraries providing services for 3D surface and solid modeling, CAD
1702 data exchange, and visualization. It is used for development of specialized
1703 software dealing with 3D models in design (CAD), manufacturing (CAM),
1704 numerical simulation (CAE), measurement equipment (CMM), and quality
1705 control (CAQ) domains.
1706
1707 This is the certified version of the Open Cascade Technology (OCCT) library.")
1708 (license (list ;; OCCT library:
1709 license:lgpl2.1; with an exception for the use of header
1710 ; files, see OCCT_LGPL_EXCEPTION.txt.
1711 ;; Files src/OpenGl/glext.h, adm/cmake/cotire.cmake and
1712 ;; src/OpenGl/OpenGl_HaltonSampler.hxx:
1713 license:expat
1714 ;; Files src/ExprIntrp/ExprIntrp.tab.* and
1715 ;; src/StepFile/step.tab.*:
1716 license:gpl3+ ; with Bison 2.2 exception.
1717 ;; File src/NCollection/NCollection_UtfIterator.lxx:
1718 (license:non-copyleft
1719 "https://www.unicode.org/license.html")
1720 ;; File src/NCollection/NCollection_StdAllocator.hxx:
1721 license:public-domain))))
1722
1723 (define-public gmsh
1724 (package
1725 (name "gmsh")
1726 (version "2.16.0")
1727 (source
1728 (origin
1729 (method git-fetch)
1730 (uri (git-reference
1731 (url "https://gitlab.onelab.info/gmsh/gmsh.git")
1732 (commit
1733 (string-append "gmsh_"
1734 (string-map (lambda (x) (if (eq? x #\.) #\_ x))
1735 version)))))
1736 (file-name (git-file-name name version))
1737 (sha256
1738 (base32 "08rq4jajwmlpivnm9yifz2jhaivnz065lnk0h2zv773nwl9wf162"))
1739 (modules '((guix build utils)))
1740 (snippet
1741 ;; Remove non-free METIS code
1742 '(begin
1743 (delete-file-recursively "contrib/Metis")
1744 #t))))
1745 (build-system cmake-build-system)
1746 (propagated-inputs
1747 `(("fltk" ,fltk)
1748 ("gfortran" ,gfortran)
1749 ("gmp" ,gmp)
1750 ("hdf5" ,hdf5)
1751 ("lapack" ,lapack)
1752 ("mesa" ,mesa)
1753 ("glu" ,glu)
1754 ("opencascade-oce" ,opencascade-oce)
1755 ("libx11" ,libx11)
1756 ("libxext" ,libxext)))
1757 (inputs
1758 `(("fontconfig" ,fontconfig)
1759 ("libxft" ,libxft)))
1760 (arguments
1761 `(#:configure-flags `("-DENABLE_METIS:BOOL=OFF"
1762 "-DENABLE_BUILD_SHARED:BOOL=ON"
1763 "-DENABLE_BUILD_DYNAMIC:BOOL=ON")))
1764 (home-page "http://gmsh.info/")
1765 (synopsis "3D finite element grid generator")
1766 (description "Gmsh is a 3D finite element grid generator with a built-in
1767 CAD engine and post-processor. Its design goal is to provide a fast, light
1768 and user-friendly meshing tool with parametric input and advanced
1769 visualization capabilities. Gmsh is built around four modules: geometry,
1770 mesh, solver and post-processing. The specification of any input to these
1771 modules is done either interactively using the graphical user interface or in
1772 ASCII text files using Gmsh's own scripting language.")
1773 (license license:gpl2+)))
1774
1775 (define-public maxflow
1776 (package
1777 (name "maxflow")
1778 ;; Versioning is ambiguous: the git tag matching this commit is ‘3.0.5’,
1779 ;; which matches CMakeLists.txt, but README.md and CHANGES say ‘3.04’.
1780 (version "3.0.5")
1781 (source (origin
1782 (method git-fetch)
1783 (uri (git-reference
1784 (url "https://github.com/gerddie/maxflow.git")
1785 (commit version)))
1786 (file-name (git-file-name name version))
1787 (sha256
1788 (base32
1789 "0rll38whw55h0vcjrrwdnh9ascvxby0ph7n1l0d12z17cg215kkb"))))
1790 (build-system cmake-build-system)
1791 (home-page "https://pub.ist.ac.at/~vnk/software.html")
1792 (synopsis "Library implementing Maxflow algorithm")
1793 (description "An implementation of the maxflow algorithm described in
1794 @cite{An Experimental Comparison of Min-Cut/Max-Flow Algorithms for
1795 Energy Minimization in Computer Vision.\n
1796 Yuri Boykov and Vladimir Kolmogorov.\n
1797 In IEEE Transactions on Pattern Analysis and Machine Intelligence,\n
1798 September 2004}")
1799 (license license:gpl3+)))
1800
1801 (define-public petsc
1802 (package
1803 (name "petsc")
1804 (version "3.11.2")
1805 (source
1806 (origin
1807 (method url-fetch)
1808 ;; The *-lite-* tarball does not contain the *large* documentation
1809 (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
1810 "petsc-lite-" version ".tar.gz"))
1811 (sha256
1812 (base32 "1645nwwcp9bcnfnxikk480mhbbacdvhsay2c401818hk97dqj5nx"))))
1813 (outputs '("out" ; libraries and headers
1814 "examples")) ; ~30MiB of examples
1815 (build-system gnu-build-system)
1816 (native-inputs
1817 `(("python" ,python-2)))
1818 (inputs
1819 `(("gfortran" ,gfortran)
1820 ("lapack" ,lapack)
1821 ("superlu" ,superlu)
1822 ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi
1823 ;; leaving out opengl, as configuration seems to only be for mac
1824 ))
1825 (arguments
1826 `(#:test-target "test"
1827 #:parallel-build? #f ; build is parallel by default
1828 #:configure-flags
1829 `("--with-mpi=0"
1830 "--with-openmp=1"
1831 "--with-superlu=1")
1832 #:make-flags
1833 ;; Honor (parallel-job-count) for build. Do not use --with-make-np,
1834 ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
1835 (list (format #f "MAKE_NP=~a" (parallel-job-count)))
1836 #:phases
1837 (modify-phases %standard-phases
1838 (replace 'configure
1839 ;; PETSc's configure script is actually a python script, so we can't
1840 ;; run it with bash.
1841 (lambda* (#:key outputs (configure-flags '())
1842 #:allow-other-keys)
1843 (let* ((prefix (assoc-ref outputs "out"))
1844 (flags `(,(string-append "--prefix=" prefix)
1845 ,@configure-flags)))
1846 (format #t "build directory: ~s~%" (getcwd))
1847 (format #t "configure flags: ~s~%" flags)
1848 (apply invoke "./configure" flags))))
1849 (add-after 'configure 'clean-local-references
1850 (lambda* (#:key outputs #:allow-other-keys)
1851 (let ((out (assoc-ref outputs "out")))
1852 (substitute* (find-files "." "^petsc(conf|machineinfo).h$")
1853 ;; Prevent build directory from leaking into compiled code
1854 (((getcwd)) out)
1855 ;; Scrub timestamp for reproducibility
1856 ((".*Libraries compiled on.*") ""))
1857 (substitute* (find-files "." "petscvariables")
1858 ;; Do not expose build machine characteristics, set to defaults.
1859 (("MAKE_NP = [:digit:]+") "MAKE_NP = 2")
1860 (("NPMAX = [:digit:]+") "NPMAX = 2"))
1861 #t)))
1862 (add-after 'install 'clean-install
1863 ;; Try to keep installed files from leaking build directory names.
1864 (lambda* (#:key inputs outputs #:allow-other-keys)
1865 (let ((out (assoc-ref outputs "out")))
1866 (substitute* (map (lambda (file)
1867 (string-append out "/lib/petsc/conf/" file))
1868 '("petscvariables"))
1869 (((getcwd)) out))
1870 ;; Make compiler references point to the store
1871 (substitute* (string-append out "/lib/petsc/conf/petscvariables")
1872 (("= (gcc|g\\+\\+|gfortran)" _ compiler)
1873 (string-append "= " (which compiler))))
1874 ;; PETSc installs some build logs, which aren't necessary.
1875 (for-each (lambda (file)
1876 (let ((f (string-append out "/lib/petsc/conf/" file)))
1877 (when (file-exists? f)
1878 (delete-file f))))
1879 '("configure.log" "make.log" "gmake.log"
1880 "test.log" "error.log" "RDict.db"
1881 "PETScBuildInternal.cmake"
1882 ;; Once installed, should uninstall with Guix
1883 "uninstall.py"))
1884 #t)))
1885 (add-after 'install 'move-examples
1886 (lambda* (#:key outputs #:allow-other-keys)
1887 (let* ((out (assoc-ref outputs "out"))
1888 (examples (assoc-ref outputs "examples"))
1889 (exdir (string-append out "/share/petsc/examples"))
1890 (exdir' (string-append examples "/share/petsc/examples")))
1891 (copy-recursively exdir exdir')
1892 (delete-file-recursively exdir)
1893 #t))))))
1894 (home-page "http://www.mcs.anl.gov/petsc")
1895 (synopsis "Library to solve PDEs")
1896 (description "PETSc, pronounced PET-see (the S is silent), is a suite of
1897 data structures and routines for the scalable (parallel) solution of
1898 scientific applications modeled by partial differential equations.")
1899 (license (license:non-copyleft
1900 "http://www.mcs.anl.gov/petsc/documentation/copyright.html"))))
1901
1902 (define-public petsc-complex
1903 (package (inherit petsc)
1904 (name "petsc-complex")
1905 (arguments
1906 (substitute-keyword-arguments (package-arguments petsc)
1907 ((#:configure-flags cf)
1908 `(cons "--with-scalar-type=complex" ,cf))))
1909 (synopsis "Library to solve PDEs (with complex scalars)")))
1910
1911 (define-public petsc-openmpi
1912 (package (inherit petsc)
1913 (name "petsc-openmpi")
1914 (inputs
1915 `(("hdf5" ,hdf5-parallel-openmpi)
1916 ("hypre" ,hypre-openmpi)
1917 ("metis" ,metis)
1918 ("mumps" ,mumps-openmpi)
1919 ("openmpi" ,openmpi)
1920 ("scalapack" ,scalapack)
1921 ("scotch" ,pt-scotch32)
1922 ,@(package-inputs petsc)))
1923 (arguments
1924 (substitute-keyword-arguments (package-arguments petsc)
1925 ((#:configure-flags cf)
1926 ``("--with-hypre=1"
1927 "--with-mpiexec=mpirun"
1928 "--with-metis=1"
1929 "--with-mumps=1"
1930 "--with-scalapack=1"
1931 "--with-ptscotch=1"
1932 ,(string-append "--with-mpi-dir="
1933 (assoc-ref %build-inputs "openmpi"))
1934 ,(string-append "--with-hdf5-include="
1935 (assoc-ref %build-inputs "hdf5") "/include")
1936 ,(string-append "--with-hdf5-lib="
1937 (assoc-ref %build-inputs "hdf5") "/lib/libhdf5.a")
1938 ,@(delete "--with-mpi=0" ,cf)))
1939 ((#:phases phases)
1940 `(modify-phases ,phases
1941 (add-before 'configure 'mpi-setup
1942 ,%openmpi-setup)))))
1943 (synopsis "Library to solve PDEs (with MUMPS and MPI support)")))
1944
1945 (define-public petsc-complex-openmpi
1946 (package (inherit petsc-complex)
1947 (name "petsc-complex-openmpi")
1948 (inputs
1949 `(("openmpi" ,openmpi)
1950 ,@(package-inputs petsc-complex)))
1951 (arguments
1952 (substitute-keyword-arguments (package-arguments petsc-complex)
1953 ((#:configure-flags cf)
1954 ``("--with-mpiexec=mpirun"
1955 ,(string-append "--with-mpi-dir="
1956 (assoc-ref %build-inputs "openmpi"))
1957 ,@(delete "--with-mpi=0" ,cf)))
1958 ((#:phases phases)
1959 `(modify-phases ,phases
1960 (add-before 'configure 'mpi-setup
1961 ,%openmpi-setup)))))
1962 (synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
1963
1964 (define-public python-petsc4py
1965 (package
1966 (name "python-petsc4py")
1967 (version "3.10.1")
1968 (source
1969 (origin
1970 (method url-fetch)
1971 (uri (pypi-uri "petsc4py" version))
1972 (sha256
1973 (base32
1974 "094hcnran0r2z1wlvmjswsz3ski1m9kqrl5l0ax8jjhnk55x0flh"))))
1975 (build-system python-build-system)
1976 (arguments
1977 `(#:phases
1978 (modify-phases %standard-phases
1979 (add-before 'build 'pre-build
1980 (lambda _
1981 ;; Define path to PETSc installation.
1982 (setenv "PETSC_DIR" (assoc-ref %build-inputs "petsc"))
1983 #t))
1984 (add-before 'check 'mpi-setup
1985 ,%openmpi-setup))))
1986 (inputs
1987 `(("petsc" ,petsc-openmpi)
1988 ("python-numpy" ,python-numpy)))
1989 (home-page "https://bitbucket.org/petsc/petsc4py/")
1990 (synopsis "Python bindings for PETSc")
1991 (description "PETSc, the Portable, Extensible Toolkit for
1992 Scientific Computation, is a suite of data structures and routines for
1993 the scalable (parallel) solution of scientific applications modeled by
1994 partial differential equations. It employs the MPI standard for all
1995 message-passing communication. @code{petsc4py} provides Python
1996 bindings to almost all functions of PETSc.")
1997 (license license:bsd-3)))
1998
1999 (define-public python-kiwisolver
2000 (package
2001 (name "python-kiwisolver")
2002 (version "1.0.1")
2003 (source (origin
2004 (method url-fetch)
2005 (uri (pypi-uri "kiwisolver" version))
2006 (sha256
2007 (base32
2008 "0y22ci86znwwwfhbmvbgdfnbi6lv5gv2xkdlxvjw7lml43ayafyf"))))
2009 (build-system python-build-system)
2010 (home-page "https://github.com/nucleic/kiwi")
2011 (synopsis "Fast implementation of the Cassowary constraint solver")
2012 (description
2013 "Kiwi is an efficient C++ implementation of the Cassowary constraint
2014 solving algorithm. Kiwi has been designed from the ground up to be
2015 lightweight and fast. Kiwi ranges from 10x to 500x faster than the original
2016 Cassowary solver with typical use cases gaining a 40x improvement. Memory
2017 savings are consistently > 5x.")
2018 (license license:bsd-3)))
2019
2020 (define-public python2-kiwisolver
2021 (package-with-python2 python-kiwisolver))
2022
2023 (define-public slepc
2024 (package
2025 (name "slepc")
2026 (version "3.11.1")
2027 (source
2028 (origin
2029 (method url-fetch)
2030 (uri (string-append "http://slepc.upv.es/download/distrib/slepc-"
2031 version ".tar.gz"))
2032 (sha256
2033 (base32
2034 "1yq84q9wannc8xwapxpay4ypdd675picwi395hhsdvng9q6hf5j8"))))
2035 (build-system gnu-build-system)
2036 (native-inputs
2037 `(("python" ,python-2)
2038 ("petsc:examples" ,petsc "examples"))) ;for gmakegen.py script
2039 (inputs
2040 `(("arpack" ,arpack-ng)
2041 ("gfortran" ,gfortran)))
2042 (propagated-inputs
2043 `(("petsc" ,petsc)))
2044 (arguments
2045 `(#:parallel-build? #f ;build is parallel by default
2046 #:configure-flags
2047 `(,(string-append "--with-arpack-dir="
2048 (assoc-ref %build-inputs "arpack") "/lib"))
2049 #:make-flags ;honor (parallel-job-count)
2050 `(,(format #f "MAKE_NP=~a" (parallel-job-count))
2051 ,(string-append "PETSCCONFIGDIR="
2052 (assoc-ref %build-inputs "petsc:examples")
2053 "/share/petsc/examples/config"))
2054 #:phases
2055 (modify-phases %standard-phases
2056 (replace 'configure
2057 ;; configure is a python script, so we can't run it with bash.
2058 (lambda* (#:key inputs outputs (configure-flags '())
2059 #:allow-other-keys)
2060 (let* ((prefix (assoc-ref outputs "out"))
2061 (flags `(,(string-append "--prefix=" prefix)
2062 ,@configure-flags)))
2063 (format #t "build directory: ~s~%" (getcwd))
2064 (format #t "configure flags: ~s~%" flags)
2065 (setenv "SLEPC_DIR" (getcwd))
2066 (setenv "PETSC_DIR" (assoc-ref inputs "petsc"))
2067 (apply invoke "./configure" flags))))
2068 (add-after 'install 'delete-doc
2069 ;; TODO: SLEPc installs HTML documentation alongside headers in
2070 ;; $out/include. We'd like to move them to share/doc, but delete
2071 ;; them for now, as they are incomplete and installing the complete
2072 ;; documentation is difficult.
2073 (lambda* (#:key outputs #:allow-other-keys)
2074 (let* ((out (assoc-ref outputs "out")))
2075 (for-each delete-file (find-files out "\\.html$"))
2076 #t)))
2077 (add-after 'install 'clean-install
2078 ;; Clean up unnecessary build logs from installation.
2079 (lambda* (#:key outputs #:allow-other-keys)
2080 (let ((out (assoc-ref outputs "out")))
2081 (for-each (lambda (file)
2082 (let ((f (string-append out "/lib/slepc/conf/" file)))
2083 (when (file-exists? f)
2084 (delete-file f))))
2085 '("configure.log" "make.log" "gmake.log"
2086 "test.log" "error.log" "RDict.db"
2087 "uninstall.py"))
2088 #t))))))
2089 (home-page "http://slepc.upv.es")
2090 (synopsis "Scalable library for eigenproblems")
2091 (description "SLEPc is a software library for the solution of large sparse
2092 eigenproblems on parallel computers. It can be used for the solution of
2093 linear eigenvalue problems formulated in either standard or generalized form,
2094 as well as other related problems such as the singular value decomposition.
2095 The emphasis of the software is on methods and techniques appropriate for
2096 problems in which the associated matrices are sparse, for example, those
2097 arising after the discretization of partial differential equations.")
2098 (license license:bsd-2)))
2099
2100 (define-public slepc-complex
2101 (package (inherit slepc)
2102 (name "slepc-complex")
2103 (propagated-inputs
2104 `(("petsc" ,petsc-complex)
2105 ,@(alist-delete "petsc" (package-propagated-inputs slepc))))
2106 (synopsis "Scalable library for eigenproblems (with complex scalars)")))
2107
2108 (define-public slepc-openmpi
2109 (package (inherit slepc)
2110 (name "slepc-openmpi")
2111 (arguments
2112 (substitute-keyword-arguments (package-arguments slepc)
2113 ((#:phases phases '%standard-phases)
2114 `(modify-phases ,phases
2115 (add-before 'check 'mpi-setup
2116 ,%openmpi-setup)))))
2117 (inputs
2118 `(("mpi" ,openmpi)
2119 ("arpack" ,arpack-ng-openmpi)
2120 ,@(alist-delete "arpack" (package-inputs slepc))))
2121 (propagated-inputs
2122 `(("petsc" ,petsc-openmpi)
2123 ,@(alist-delete "petsc" (package-propagated-inputs slepc))))
2124 (synopsis "Scalable library for eigenproblems (with MPI support)")))
2125
2126 (define-public slepc-complex-openmpi
2127 (package (inherit slepc-openmpi)
2128 (name "slepc-complex-openmpi")
2129 (propagated-inputs
2130 `(("petsc" ,petsc-complex-openmpi)
2131 ,@(alist-delete "petsc" (package-propagated-inputs slepc-openmpi))))
2132 (synopsis "Scalable library for eigenproblems (with complex scalars and MPI support)")))
2133
2134 (define-public python-slepc4py
2135 (package
2136 (name "python-slepc4py")
2137 (version "3.10.0")
2138 (source
2139 (origin
2140 (method url-fetch)
2141 (uri (pypi-uri "slepc4py" version))
2142 (sha256
2143 (base32
2144 "0x049dyc8frgh79fvvavf4vlbqp4mgm61nsaivzdav4316vvlv1j"))))
2145 (build-system python-build-system)
2146 (arguments
2147 `(#:phases
2148 (modify-phases %standard-phases
2149 (add-before 'build 'pre-build
2150 (lambda _
2151 ;; Define path to PETSc installation.
2152 (setenv "PETSC_DIR" (assoc-ref %build-inputs "petsc"))
2153 ;; Define path to SLEPc installation.
2154 (setenv "SLEPC_DIR" (assoc-ref %build-inputs "slepc"))
2155 #t))
2156 (add-before 'check 'mpi-setup
2157 ,%openmpi-setup))))
2158 (inputs
2159 `(("python-numpy" ,python-numpy)
2160 ("python-petsc4py" ,python-petsc4py)
2161 ("slepc" ,slepc-openmpi)))
2162 (home-page "https://bitbucket.org/slepc/slepc4py/")
2163 (synopsis "Python bindings for SLEPc")
2164 (description "SLEPc, the Scalable Library for Eigenvalue Problem
2165 Computations, is based on PETSc, the Portable, Extensible Toolkit for
2166 Scientific Computation. It employs the MPI standard for all
2167 message-passing communication. @code{slepc4py} provides Python
2168 bindings to almost all functions of SLEPc.")
2169 (license license:bsd-3)))
2170
2171 (define-public mumps
2172 (package
2173 (name "mumps")
2174 (version "5.2.1")
2175 (source
2176 (origin
2177 (method url-fetch)
2178 (uri (string-append "http://mumps.enseeiht.fr/MUMPS_"
2179 version ".tar.gz"))
2180 (sha256
2181 (base32
2182 "0jklh54x4y3ik1zkw6db7766kakjm5910diyaghfxxf8vwsgr26r"))
2183 (patches (search-patches "mumps-build-parallelism.patch"
2184 "mumps-shared-libseq.patch"
2185 "mumps-shared-mumps.patch"
2186 "mumps-shared-pord.patch"))))
2187 (build-system gnu-build-system)
2188 (inputs
2189 `(("fortran" ,gfortran)
2190 ;; These are required for linking against mumps, but we let the user
2191 ;; declare the dependency.
2192 ("blas" ,openblas)
2193 ("metis" ,metis)
2194 ("scotch" ,scotch)))
2195 (arguments
2196 `(#:modules ((ice-9 match)
2197 (ice-9 popen)
2198 (srfi srfi-1)
2199 ,@%gnu-build-system-modules)
2200 #:phases
2201 (modify-phases %standard-phases
2202 (replace 'configure
2203 (lambda* (#:key inputs #:allow-other-keys)
2204 (call-with-output-file "Makefile.inc"
2205 (lambda (port)
2206 (format port "
2207 PLAT =
2208 LIBEXT = .a
2209 OUTC = -o
2210 OUTF = -o
2211 RM = rm -f~:[
2212 CC = gcc
2213 FC = gfortran
2214 FL = gfortran
2215 INCSEQ = -I$(topdir)/libseq
2216 LIBSEQ = $(topdir)/libseq/libmpiseq.a
2217 LIBSEQNEEDED = libseqneeded~;
2218 CC = mpicc
2219 FC = mpifort
2220 FL = mpifort~]
2221 AR = ar vr # rules require trailing space, ugh...
2222 RANLIB = ranlib
2223 BLASDIR = ~a
2224 LIBBLAS = -Wl,-rpath=$(BLASDIR) -Wl,-rpath='$$ORIGIN' -L$(BLASDIR) -lopenblas~@[
2225 SCALAPDIR = ~a
2226 SCALAP = -Wl,-rpath=$(SCALAPDIR) -Wl,-rpath='$$ORIGIN' -L$(SCALAPDIR) -lscalapack~]
2227 LIBOTHERS = -pthread
2228 CDEFS = -DAdd_
2229 PIC = -fPIC
2230 OPTF = -O2 -DALLOW_NON_INIT $(PIC)
2231 OPTL = -O2 $(PIC)
2232 OPTC = -O2 $(PIC)
2233 INCS = $(INCSEQ)
2234 LIBS = $(SCALAP) $(LIBSEQ)
2235 LPORDDIR = $(topdir)/PORD/lib
2236 IPORD = -I$(topdir)/PORD/include
2237 LPORD = $(LPORDDIR)/libpord.a
2238 ORDERINGSF = -Dpord~@[
2239 METISDIR = ~a
2240 IMETIS = -I$(METISDIR)/include
2241 LMETIS = -Wl,-rpath $(METISDIR)/lib -L$(METISDIR)/lib -lmetis
2242 ORDERINGSF += -Dmetis~]~@[~:{
2243 SCOTCHDIR = ~a
2244 ISCOTCH = -I$(SCOTCHDIR)/include
2245 LSCOTCH = -Wl,-rpath $(SCOTCHDIR)/lib -L$(SCOTCHDIR)/lib ~a-lesmumps -lscotch -lscotcherr
2246 ORDERINGSF += ~a~}~]
2247 ORDERINGSC = $(ORDERINGSF)
2248 LORDERINGS = $(LPORD) $(LMETIS) $(LSCOTCH) $(LIBSEQ)
2249 IORDERINGSF = $(ISCOTCH)
2250 IORDERINGSC = $(IPORD) $(IMETIS) $(ISCOTCH)"
2251 (assoc-ref inputs "mpi")
2252 (assoc-ref inputs "blas")
2253 (assoc-ref inputs "scalapack")
2254 (assoc-ref inputs "metis")
2255 (match (list (assoc-ref inputs "pt-scotch")
2256 (assoc-ref inputs "scotch"))
2257 ((#f #f)
2258 #f)
2259 ((#f scotch)
2260 `((,scotch "" "-Dscotch")))
2261 ((ptscotch _)
2262 `((,ptscotch
2263 "-lptesmumps -lptscotch -lptscotcherr "
2264 "-Dptscotch")))))))))
2265 (replace 'build
2266 ;; By default only the d-precision library is built. Make with "all"
2267 ;; target so that all precision libraries and examples are built.
2268 (lambda _
2269 (invoke "make" "all"
2270 (format #f "-j~a" (parallel-job-count)))))
2271 (replace 'check
2272 ;; Run the simple test drivers, which read test input from stdin:
2273 ;; from the "real" input for the single- and double-precision
2274 ;; testers, and from the "cmplx" input for complex-precision
2275 ;; testers. The EXEC-PREFIX key is used by the mumps-openmpi
2276 ;; package to prefix execution with "mpirun".
2277 (lambda* (#:key (exec-prefix '()) #:allow-other-keys)
2278 (with-directory-excursion "examples"
2279 (every
2280 (lambda (prec type)
2281 (let ((tester (apply open-pipe*
2282 `(,OPEN_WRITE
2283 ,@exec-prefix
2284 ,(string-append "./" prec
2285 "simpletest"))))
2286 (input (open-input-file
2287 (string-append "input_simpletest_" type))))
2288 (begin
2289 (dump-port input tester)
2290 (close-port input)
2291 (zero? (close-pipe tester)))))
2292 '("s" "d" "c" "z")
2293 '("real" "real" "cmplx" "cmplx")))))
2294 (replace 'install
2295 (lambda* (#:key outputs #:allow-other-keys)
2296 (let* ((out (assoc-ref outputs "out"))
2297 (libdir (string-append out "/lib")))
2298 (copy-recursively "lib" libdir)
2299 (copy-recursively "include" (string-append out "/include"))
2300 (when (file-exists? "libseq/libmpiseq.a")
2301 (install-file "libseq/libmpiseq.a" libdir))
2302 (when (file-exists? "libseq/libmpiseq.so")
2303 (install-file "libseq/libmpiseq.so" libdir))
2304 #t))))))
2305 (home-page "http://mumps.enseeiht.fr")
2306 (synopsis "Multifrontal sparse direct solver")
2307 (description
2308 "MUMPS (MUltifrontal Massively Parallel sparse direct Solver) solves a
2309 sparse system of linear equations A x = b using Gaussian elimination.")
2310 (license license:cecill-c)))
2311
2312 (define-public mumps-metis
2313 (package (inherit mumps)
2314 (name "mumps-metis")
2315 (inputs
2316 (alist-delete "scotch" (package-inputs mumps)))))
2317
2318 (define-public mumps-openmpi
2319 (package (inherit mumps)
2320 (name "mumps-openmpi")
2321 (inputs
2322 `(("mpi" ,openmpi)
2323 ("scalapack" ,scalapack)
2324 ("pt-scotch" ,pt-scotch)
2325 ,@(alist-delete "scotch" (package-inputs mumps))))
2326 (arguments
2327 (substitute-keyword-arguments (package-arguments mumps)
2328 ((#:phases phases)
2329 `(modify-phases ,phases
2330 (add-before 'check 'mpi-setup
2331 ,%openmpi-setup)
2332 (replace 'check
2333 (lambda _
2334 ((assoc-ref ,phases 'check)
2335 #:exec-prefix '("mpirun" "-n" "2"))))))))
2336 (synopsis "Multifrontal sparse direct solver (with MPI)")))
2337
2338 (define-public mumps-metis-openmpi
2339 (package (inherit mumps-openmpi)
2340 (name "mumps-metis-openmpi")
2341 (inputs
2342 (alist-delete "pt-scotch" (package-inputs mumps-openmpi)))))
2343
2344 (define-public r-quadprog
2345 (package
2346 (name "r-quadprog")
2347 (version "1.5-7")
2348 (source
2349 (origin
2350 (method url-fetch)
2351 (uri (cran-uri "quadprog" version))
2352 (sha256
2353 (base32
2354 "0vg7i9p241bwvfdspjbydjrsvgipl6nsb8bjigp0hbbgvxbixx0s"))))
2355 (build-system r-build-system)
2356 (native-inputs
2357 `(("gfortran" ,gfortran)))
2358 (home-page "https://cran.r-project.org/web/packages/quadprog")
2359 (synopsis "Functions to solve quadratic programming problems")
2360 (description
2361 "This package contains routines and documentation for solving quadratic
2362 programming problems.")
2363 (license license:gpl3+)))
2364
2365 (define-public r-pracma
2366 (package
2367 (name "r-pracma")
2368 (version "2.2.5")
2369 (source (origin
2370 (method url-fetch)
2371 (uri (cran-uri "pracma" version))
2372 (sha256
2373 (base32 "0isd3s0i4mzmva8lkh0j76hwjy1w50q7d1n9lhxsnnkgalx3xs1g"))))
2374 (build-system r-build-system)
2375 (home-page "https://cran.r-project.org/web/packages/pracma/")
2376 (synopsis "Practical numerical math functions")
2377 (description "This package provides functions for numerical analysis and
2378 linear algebra, numerical optimization, differential equations, plus some
2379 special functions. It uses Matlab function names where appropriate to simplify
2380 porting.")
2381 (license license:gpl3+)))
2382
2383 (define-public ruby-asciimath
2384 (package
2385 (name "ruby-asciimath")
2386 (version "1.0.4")
2387 (source
2388 (origin
2389 (method url-fetch)
2390 (uri (rubygems-uri "asciimath" version))
2391 (sha256
2392 (base32
2393 "1d80kiph5mc78zps7si1hv48kv4k12mzaq8jk5kb3pqpjdr72qmc"))))
2394 (build-system ruby-build-system)
2395 (arguments
2396 '(#:phases
2397 (modify-phases %standard-phases
2398 ;; Apply this patch
2399 ;; https://github.com/asciidoctor/asciimath/commit/1c06fdc8086077f4785479f78b0823a4a72d7948
2400 (add-after 'unpack 'patch-remove-spurious-backslashes
2401 (lambda _
2402 (substitute* "spec/parser_spec.rb"
2403 (("\\\\\"")
2404 "\""))
2405 #t)))))
2406 (native-inputs
2407 `(("bundler" ,bundler)
2408 ("ruby-rspec" ,ruby-rspec)))
2409 (synopsis "AsciiMath parsing and conversion library")
2410 (description
2411 "A pure Ruby AsciiMath parsing and conversion library. AsciiMath is an
2412 easy-to-write markup language for mathematics.")
2413 (home-page "https://github.com/asciidoctor/asciimath")
2414 (license license:expat)))
2415
2416 (define-public superlu
2417 (package
2418 (name "superlu")
2419 (version "5.2.1")
2420 (source
2421 (origin
2422 (method url-fetch)
2423 (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
2424 "superlu_" version ".tar.gz"))
2425 (sha256
2426 (base32 "0qzlb7cd608q62kyppd0a8c65l03vrwqql6gsm465rky23b6dyr8"))
2427 (modules '((guix build utils)))
2428 (snippet
2429 ;; Replace the non-free implementation of MC64 with a stub adapted
2430 ;; from Debian
2431 '(begin
2432 (use-modules (ice-9 regex)
2433 (ice-9 rdelim))
2434 (call-with-output-file "SRC/mc64ad.c"
2435 (lambda (port)
2436 (display "
2437 #include <stdio.h>
2438 #include <stdlib.h>
2439 void mc64id_(int *a) {
2440 fprintf (stderr, \"SuperLU: non-free MC64 not available. Aborting.\\n\");
2441 abort ();
2442 }
2443 void mc64ad_ (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
2444 int *h, int *i, int *j, int *k, double *l, int *m, int *n) {
2445 fprintf (stderr, \"SuperLU: non-free MC64 not available. Aborting.\\n\");
2446 abort ();
2447 }\n" port)))
2448 ;; Remove the corresponding license verbiage. MC64 license follows
2449 ;; a "------" line separator.
2450 (with-atomic-file-replacement "License.txt"
2451 (let ((rx (make-regexp "-{8}")))
2452 (lambda (in out)
2453 (let loop ()
2454 (let ((line (read-line in 'concat)))
2455 (unless (regexp-exec rx line)
2456 (display line out)
2457 (loop))))
2458 #t)))))))
2459 (build-system cmake-build-system)
2460 (native-inputs
2461 `(("tcsh" ,tcsh)))
2462 (inputs
2463 `(("blas" ,openblas)
2464 ("gfortran" ,gfortran)))
2465 (arguments
2466 `(#:configure-flags '("-Denable_blaslib:BOOL=NO" ;do not use internal cblas
2467 "-DTPL_BLAS_LIBRARIES=openblas"
2468 "-DBUILD_SHARED_LIBS:BOOL=YES")))
2469 (home-page "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/")
2470 (synopsis "Supernodal direct solver for sparse linear systems")
2471 (description
2472 "SuperLU is a general purpose library for the direct solution of large,
2473 sparse, nonsymmetric systems of linear equations on high performance machines.
2474 The library is written in C and is callable from either C or Fortran. The
2475 library routines perform an LU decomposition with partial pivoting and
2476 triangular system solves through forward and back substitution. The library
2477 also provides threshold-based ILU factorization preconditioners.")
2478 (license (list license:bsd-3
2479 license:gpl2+ ;EXAMPLE/*fgmr.c
2480 (license:fsf-free "file://SRC/colamd.h")))))
2481
2482 (define-public superlu-dist
2483 (package
2484 (name "superlu-dist")
2485 (version "6.1.0")
2486 (source
2487 (origin
2488 (method url-fetch)
2489 (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
2490 "superlu_dist_" version ".tar.gz"))
2491 (sha256
2492 (base32 "0pqgcgh1yxhfzs99fas3mggajzd5wca3nbyp878rziy74gfk03dl"))
2493 (modules '((guix build utils)))
2494 (snippet
2495 ;; Replace the non-free implementation of MC64 with a stub
2496 '(begin
2497 (call-with-output-file "SRC/mc64ad_dist.c"
2498 (lambda (port)
2499 (display "
2500 #include <stdio.h>
2501 #include <stdlib.h>
2502 void mc64id_dist(int *a) {
2503 fprintf (stderr, \"SuperLU_DIST: non-free MC64 not available. Aborting.\\n\");
2504 abort ();
2505 }
2506 void mc64ad_dist (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
2507 int *h, int *i, int *j, int *k, double *l, int *m, int *n) {
2508 fprintf (stderr, \"SuperLU_DIST: non-free MC64 not available. Aborting.\\n\");
2509 abort ();
2510 }\n" port)))
2511 (substitute* "SRC/util.c" ;adjust default algorithm
2512 (("RowPerm[[:blank:]]*=[[:blank:]]*LargeDiag_MC64;")
2513 ;; TODO: set to "LargeDiag_AWPM" once combinatorial-blas has
2514 ;; general (i.e. non-square) processor-grid support.
2515 "RowPerm = NOROWPERM;"))
2516 #t))
2517 (patches (search-patches "superlu-dist-scotchmetis.patch"
2518 "superlu-dist-awpm-grid.patch"
2519 "superlu-dist-fix-mpi-deprecations.patch"))))
2520 (build-system cmake-build-system)
2521 (native-inputs
2522 `(("tcsh" ,tcsh)))
2523 (inputs
2524 `(("gfortran" ,gfortran)
2525 ("blas" ,openblas)
2526 ("lapack" ,lapack)
2527 ("combblas" ,combinatorial-blas)))
2528 (propagated-inputs
2529 `(("mpi" ,openmpi) ;headers include MPI heades
2530 ("parmetis" ,pt-scotch32 "metis")
2531 ("pt-scotch" ,pt-scotch32)))
2532 (arguments
2533 `(#:parallel-tests? #f ;tests use MPI and OpenMP
2534 #:configure-flags (list "-DBUILD_SHARED_LIBS:BOOL=YES"
2535 "-DTPL_ENABLE_COMBBLASLIB=YES"
2536 "-DTPL_BLAS_LIBRARIES=-lopenblas"
2537 "-DTPL_LAPACK_LIBRARIES=-llapack"
2538 (string-append "-DTPL_PARMETIS_LIBRARIES="
2539 (string-join
2540 '("ptscotchparmetis" "ptscotch" "ptscotcherr"
2541 "scotchmetis" "scotch" "scotcherr")
2542 ";"))
2543 (string-append "-DTPL_PARMETIS_INCLUDE_DIRS="
2544 (assoc-ref %build-inputs "parmetis")
2545 "/include")
2546 "-DTPL_ENABLE_COMBBLASLIB=ON"
2547 (string-append "-DTPL_COMBBLAS_INCLUDE_DIRS="
2548 (assoc-ref %build-inputs "combblas")
2549 "/include/CombBLAS;"
2550 (assoc-ref %build-inputs "combblas")
2551 "/include/BipartiteMatchings")
2552 "-DTPL_COMBBLAS_LIBRARIES=CombBLAS")
2553 #:phases
2554 (modify-phases %standard-phases
2555 (add-before 'configure 'set-c++-standard
2556 (lambda _
2557 (substitute* "CMakeLists.txt"
2558 ;; AWPM headers require C++14
2559 (("CMAKE_CXX_STANDARD 11") "CMAKE_CXX_STANDARD 14"))))
2560 (add-before 'check 'mpi-setup
2561 ,%openmpi-setup)
2562 (add-before 'check 'omp-setup
2563 (lambda _ (setenv "OMP_NUM_THREADS" "1") #t)))))
2564 (home-page (package-home-page superlu))
2565 (synopsis "Parallel supernodal direct solver")
2566 (description
2567 "SuperLU_DIST is a parallel extension to the serial SuperLU library.
2568 It is targeted for distributed memory parallel machines. SuperLU_DIST is
2569 implemented in ANSI C, and MPI for communications.")
2570 (license license:bsd-3)))
2571
2572 (define-public scotch
2573 (package
2574 (name "scotch")
2575 (version "6.0.6")
2576 (source
2577 (origin
2578 (method url-fetch)
2579 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
2580 "latestfile/298/scotch_" version ".tar.gz"))
2581 (sha256
2582 (base32 "1ky4k9r6jvajhqaqnnx6h8fkmds2yxgp70dpr1qzwcyhi2nhqvv8"))
2583 (patches (search-patches "scotch-build-parallelism.patch"
2584 "scotch-integer-declarations.patch"))))
2585 (build-system gnu-build-system)
2586 (inputs
2587 `(("zlib" ,zlib)
2588 ("flex" ,flex)
2589 ("bison" ,bison)))
2590 (outputs '("out" "metis"))
2591 (arguments
2592 `(#:make-flags (list (string-append "prefix=" %output))
2593 #:phases
2594 (modify-phases %standard-phases
2595 (add-after
2596 'unpack 'chdir-to-src
2597 (lambda _ (chdir "src") #t))
2598 (replace
2599 'configure
2600 (lambda _
2601 (call-with-output-file "Makefile.inc"
2602 (lambda (port)
2603 (format port "
2604 EXE =
2605 LIB = .a
2606 OBJ = .o
2607 MAKE = make
2608 AR = ar
2609 ARFLAGS = -ruv
2610 CAT = cat
2611 CCS = gcc
2612 CCP = mpicc
2613 CCD = gcc
2614 CPPFLAGS =~{ -D~a~}
2615 CFLAGS = -O2 -g -fPIC $(CPPFLAGS)
2616 LDFLAGS = -lz -lm -lrt -lpthread
2617 CP = cp
2618 LEX = flex -Pscotchyy -olex.yy.c
2619 LN = ln
2620 MKDIR = mkdir
2621 MV = mv
2622 RANLIB = ranlib
2623 YACC = bison -pscotchyy -y -b y
2624 "
2625 '("COMMON_FILE_COMPRESS_GZ"
2626 "COMMON_PTHREAD"
2627 "COMMON_RANDOM_FIXED_SEED"
2628 "INTSIZE64" ;use 'int64_t'
2629 ;; Prevents symbolc clashes with libesmumps
2630 "SCOTCH_RENAME"
2631 ;; XXX: Causes invalid frees in superlu-dist tests
2632 ;; "SCOTCH_PTHREAD"
2633 ;; "SCOTCH_PTHREAD_NUMBER=2"
2634 "restrict=__restrict"))))
2635 #t))
2636 (add-after 'build 'build-esmumps
2637 (lambda _
2638 (invoke "make"
2639 (format #f "-j~a" (parallel-job-count))
2640 "esmumps")))
2641 (add-before 'install 'make-install-dirs
2642 (lambda* (#:key outputs #:allow-other-keys)
2643 (mkdir (assoc-ref outputs "out"))))
2644 (add-after 'install 'install-metis
2645 (lambda* (#:key outputs #:allow-other-keys)
2646 (let ((out (assoc-ref outputs "metis")))
2647 (mkdir out)
2648 ;; metis files are not installed with 'make install'
2649 (for-each (lambda (f)
2650 (install-file f (string-append out "/include")))
2651 (find-files "../include/" ".*metis\\.h"))
2652 (for-each (lambda (f)
2653 (install-file f (string-append out "/lib")))
2654 (find-files "../lib/" ".*metis\\..*"))
2655 #t))))))
2656 (home-page "http://www.labri.fr/perso/pelegrin/scotch/")
2657 (synopsis "Programs and libraries for graph algorithms")
2658 (description "SCOTCH is a set of programs and libraries which implement
2659 the static mapping and sparse matrix reordering algorithms developed within
2660 the SCOTCH project. Its purpose is to apply graph theory, with a divide and
2661 conquer approach, to scientific computing problems such as graph and mesh
2662 partitioning, static mapping, and sparse matrix ordering, in application
2663 domains ranging from structural mechanics to operating systems or
2664 bio-chemistry.")
2665 ;; See LICENSE_en.txt
2666 (license license:cecill-c)))
2667
2668 (define-public scotch32
2669 ;; This is the 'INTSIZE32' variant, which uses 32-bit integers, as needed by
2670 ;; some applications.
2671 (package (inherit scotch)
2672 (name "scotch32")
2673 (arguments
2674 (substitute-keyword-arguments (package-arguments scotch)
2675 ((#:phases scotch-phases)
2676 `(modify-phases ,scotch-phases
2677 (replace
2678 'configure
2679 (lambda _
2680 (call-with-output-file "Makefile.inc"
2681 (lambda (port)
2682 (format port "
2683 EXE =
2684 LIB = .a
2685 OBJ = .o
2686 MAKE = make
2687 AR = ar
2688 ARFLAGS = -ruv
2689 CAT = cat
2690 CCS = gcc
2691 CCP = mpicc
2692 CCD = gcc
2693 CPPFLAGS =~{ -D~a~}
2694 CFLAGS = -O2 -g -fPIC $(CPPFLAGS)
2695 LDFLAGS = -lz -lm -lrt -lpthread
2696 CP = cp
2697 LEX = flex -Pscotchyy -olex.yy.c
2698 LN = ln
2699 MKDIR = mkdir
2700 MV = mv
2701 RANLIB = ranlib
2702 YACC = bison -pscotchyy -y -b y
2703 "
2704 '("COMMON_FILE_COMPRESS_GZ"
2705 "COMMON_PTHREAD"
2706 "COMMON_RANDOM_FIXED_SEED"
2707 "INTSIZE32" ;use 32-bit integers. See INSTALL.txt
2708 ;; Prevents symbolc clashes with libesmumps
2709 "SCOTCH_RENAME"
2710 ;; XXX: Causes invalid frees in superlu-dist tests
2711 ;; "SCOTCH_PTHREAD"
2712 ;; "SCOTCH_PTHREAD_NUMBER=2"
2713 "restrict=__restrict"))))))))))
2714 (synopsis
2715 "Programs and libraries for graph algorithms (32-bit integers)")))
2716
2717 (define-public pt-scotch
2718 (package (inherit scotch)
2719 (name "pt-scotch")
2720 (propagated-inputs
2721 `(("openmpi" ,openmpi))) ;Headers include MPI headers
2722 (arguments
2723 (substitute-keyword-arguments (package-arguments scotch)
2724 ((#:phases scotch-phases)
2725 `(modify-phases ,scotch-phases
2726 (replace
2727 'build
2728 (lambda _
2729 (invoke "make" (format #f "-j~a" (parallel-job-count))
2730 "ptscotch" "ptesmumps")
2731
2732 ;; Install the serial metis compatibility library
2733 (invoke "make" "-C" "libscotchmetis" "install")))
2734 (add-before 'check 'mpi-setup
2735 ,%openmpi-setup)
2736 (replace 'check
2737 (lambda _
2738 (invoke "make" "ptcheck")))))))
2739 (synopsis "Programs and libraries for graph algorithms (with MPI)")))
2740
2741 (define-public pt-scotch32
2742 (package (inherit scotch32)
2743 (name "pt-scotch32")
2744 (propagated-inputs
2745 `(("openmpi" ,openmpi))) ;headers include MPI headers
2746 (arguments
2747 (substitute-keyword-arguments (package-arguments scotch32)
2748 ((#:phases scotch32-phases)
2749 `(modify-phases ,scotch32-phases
2750 (replace 'build
2751 (lambda _
2752 (invoke "make" (format #f "-j~a" (parallel-job-count))
2753 "ptscotch" "ptesmumps")
2754 ;; Install the serial metis compatibility library
2755 (invoke "make" "-C" "libscotchmetis" "install")))
2756 (add-before 'check 'mpi-setup
2757 ,%openmpi-setup)
2758 (replace 'check
2759 (lambda _
2760 (invoke "make" "ptcheck")))))))
2761 (synopsis
2762 "Programs and libraries for graph algorithms (with MPI and 32-bit integers)")))
2763
2764 (define-public metis
2765 (package
2766 (name "metis")
2767 (version "5.1.0")
2768 (source
2769 (origin
2770 (method url-fetch)
2771 (uri (string-append "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/"
2772 "metis-" version ".tar.gz"))
2773 (sha256
2774 (base32
2775 "1cjxgh41r8k6j029yxs8msp3z6lcnpm16g5pvckk35kc7zhfpykn"))))
2776 (build-system cmake-build-system)
2777 (inputs
2778 `(("blas" ,openblas)))
2779 (arguments
2780 `(#:tests? #f ;no tests
2781 #:configure-flags `("-DSHARED=ON"
2782 ,(string-append "-DGKLIB_PATH=" (getcwd)
2783 "/metis-" ,version "/GKlib"))))
2784 (home-page "http://glaros.dtc.umn.edu/gkhome/metis/metis/overview")
2785 (synopsis "Graph partitioning and fill-reducing matrix ordering library")
2786 (description
2787 "METIS is a set of serial programs for partitioning graphs, partitioning
2788 finite element meshes, and producing fill-reducing orderings for sparse
2789 matrices. The algorithms implemented in METIS are based on the multilevel
2790 recursive-bisection, multilevel k-way, and multi-constraint partitioning
2791 schemes.")
2792 (license license:asl2.0))) ;As of version 5.0.3
2793
2794 (define-public p4est
2795 (package
2796 (name "p4est")
2797 (version "2.0")
2798 (source
2799 (origin
2800 (method url-fetch)
2801 (uri (string-append "http://p4est.github.io/release/p4est-"
2802 version ".tar.gz"))
2803 (sha256
2804 (base32
2805 "16h267z256kxcxfjs390qqzv19hr58vrj4x8lndb7alnk2vca8n5"))))
2806 (build-system gnu-build-system)
2807 (inputs
2808 `(("fortran" ,gfortran)
2809 ("blas" ,openblas)
2810 ("lapack" ,lapack)
2811 ("zlib" ,zlib)))
2812 (arguments
2813 `(#:configure-flags `(,(string-append "BLAS_LIBS=-L"
2814 (assoc-ref %build-inputs "blas")
2815 " -lopenblas")
2816 ,(string-append "LAPACK_LIBS=-L"
2817 (assoc-ref %build-inputs "lapack")
2818 " -llapack"))
2819 #:phases (modify-phases %standard-phases
2820 (add-before 'check 'mpi-setup
2821 ,%openmpi-setup))))
2822 (home-page "http://www.p4est.org")
2823 (synopsis "Adaptive mesh refinement on forests of octrees")
2824 (description
2825 "The p4est software library enables the dynamic management of a
2826 collection of adaptive octrees, conveniently called a forest of octrees.
2827 p4est is designed to work in parallel and scales to hundreds of thousands of
2828 processor cores.")
2829 (license license:gpl2+)))
2830
2831 (define-public p4est-openmpi
2832 (package (inherit p4est)
2833 (name "p4est-openmpi")
2834 (inputs
2835 `(("mpi" ,openmpi)
2836 ,@(package-inputs p4est)))
2837 (arguments
2838 (substitute-keyword-arguments (package-arguments p4est)
2839 ((#:configure-flags cf)
2840 ``("--enable-mpi" ,@,cf))))
2841 (synopsis "Parallel adaptive mesh refinement on forests of octrees")))
2842
2843 (define-public gsegrafix
2844 (package
2845 (name "gsegrafix")
2846 (version "1.0.6")
2847 (source
2848 (origin
2849 (method url-fetch)
2850 (uri (string-append "mirror://gnu/" name "/" name "-"
2851 version ".tar.gz"))
2852 (sha256
2853 (base32
2854 "1b13hvx063zv970y750bx41wpx6hwd5ngjhbdrna8w8yy5kmxcda"))))
2855 (build-system gnu-build-system)
2856 (arguments
2857 `(#:configure-flags '("LDFLAGS=-lm")))
2858 (inputs
2859 `(("libgnomecanvas" ,libgnomecanvas)
2860 ("libbonoboui" ,libbonoboui)
2861 ("libgnomeui" ,libgnomeui)
2862 ("libgnomeprintui" ,libgnomeprintui)
2863 ("popt" ,popt)))
2864 (native-inputs
2865 `(("pkg-config" ,pkg-config)))
2866 (home-page "https://www.gnu.org/software/gsegrafix/")
2867 (synopsis "GNOME application to create scientific and engineering plots")
2868 (description "GSEGrafix is an application which produces high-quality graphical
2869 plots for science and engineering. Plots are specified via simple ASCII
2870 parameter files and data files and are presented in an anti-aliased GNOME
2871 canvas. The program supports rectangular two-dimensional plots, histograms,
2872 polar-axis plots and three-dimensional plots. Plots can be printed or saved
2873 to BMP, JPEG or PNG image formats.")
2874 (license license:gpl3+)))
2875
2876 (define-public maxima
2877 (package
2878 (name "maxima")
2879 (version "5.43.0")
2880 (source
2881 (origin
2882 (method url-fetch)
2883 (uri (string-append "mirror://sourceforge/maxima/Maxima-source/"
2884 version "-source/" name "-" version ".tar.gz"))
2885 (sha256
2886 (base32
2887 "0xyahp4c6509haxh4n1swiqm3421gplkdisa0zypclh3252sbzfw"))
2888 (patches (search-patches "maxima-defsystem-mkdir.patch"))))
2889 (build-system gnu-build-system)
2890 (inputs
2891 `(("gcl" ,gcl)
2892 ("gnuplot" ,gnuplot) ;for plots
2893 ("sed" ,sed)
2894 ("tk" ,tk))) ;Tcl/Tk is used by 'xmaxima'
2895 (native-inputs
2896 `(("texinfo" ,texinfo)
2897 ("perl" ,perl)
2898 ("python" ,python)))
2899 (arguments
2900 `(#:configure-flags
2901 (list "--enable-gcl"
2902 (string-append "--with-posix-shell="
2903 (assoc-ref %build-inputs "bash")
2904 "/bin/sh")
2905 (string-append "--with-wish="
2906 (assoc-ref %build-inputs "tk")
2907 "/bin/wish"
2908 (let ((v ,(package-version tk)))
2909 (string-take v (string-index-right v #\.)))))
2910 ;; By default Maxima attempts to write temporary files to
2911 ;; '/tmp/nix-build-maxima-*', which won't exist at run time.
2912 ;; Work around that.
2913 #:make-flags (list "TMPDIR=/tmp")
2914 #:phases
2915 (modify-phases %standard-phases
2916 (add-after 'unpack 'patch-paths
2917 (lambda* (#:key inputs #:allow-other-keys)
2918 (let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
2919 (coreutils (assoc-ref inputs "coreutils"))
2920 (dirname (string-append coreutils "/bin/dirname"))
2921 (head (string-append coreutils "/bin/head"))
2922 (perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
2923 (python (string-append (assoc-ref inputs "python")
2924 "/bin/python3")))
2925 (substitute* "src/maxima.in"
2926 (("sed ") (string-append sed " "))
2927 (("dirname") dirname)
2928 (("head") head))
2929 (substitute* "doc/info/Makefile.in"
2930 (("/usr/bin/env perl") perl))
2931 (substitute* "doc/info/build_html.sh.in"
2932 (("python") python))
2933 #t)))
2934 (add-before 'check 'pre-check
2935 (lambda _
2936 (chmod "src/maxima" #o555)
2937 #t))
2938 (replace 'check
2939 (lambda _
2940 ;; This is derived from the testing code in the "debian/rules" file
2941 ;; of Debian's Maxima package.
2942 ;; If Maxima can successfully run this, the binary to be installed
2943 ;; should be fine.
2944 (invoke "sh" "-c"
2945 (string-append
2946 "./maxima-local "
2947 "--lisp=gcl "
2948 "--batch-string=\"run_testsuite();\" "
2949 "| grep -q \"No unexpected errors found\""))))
2950 ;; Make sure the doc and emacs files are found in the
2951 ;; standard location. Also configure maxima to find gnuplot
2952 ;; without having it on the PATH.
2953 (add-after 'install 'post-install
2954 (lambda* (#:key outputs inputs #:allow-other-keys)
2955 (let* ((gnuplot (assoc-ref inputs "gnuplot"))
2956 (out (assoc-ref outputs "out"))
2957 (datadir (string-append out "/share/maxima/" ,version))
2958 (binutils (string-append (assoc-ref inputs "binutils")
2959 "/bin")))
2960 (with-directory-excursion out
2961 (mkdir-p "share/emacs")
2962 (mkdir-p "share/doc")
2963 (symlink
2964 (string-append datadir "/doc/")
2965 (string-append out "/share/doc/maxima"))
2966 (with-atomic-file-replacement
2967 (string-append datadir "/share/maxima-init.lisp")
2968 (lambda (in out)
2969 (format out "~a ~s~a~%"
2970 "(setf $gnuplot_command "
2971 (string-append gnuplot "/bin/gnuplot") ")")
2972 (dump-port in out))))
2973 ;; Ensure that Maxima will have access to the GNU binutils
2974 ;; components at runtime.
2975 (wrap-program (string-append out "/bin/maxima")
2976 `("PATH" prefix (,binutils))))
2977 #t)))))
2978 (home-page "http://maxima.sourceforge.net")
2979 (synopsis "Numeric and symbolic expression manipulation")
2980 (description "Maxima is a system for the manipulation of symbolic and
2981 numerical expressions. It yields high precision numeric results by using
2982 exact fractions, arbitrary precision integers, and variable precision floating
2983 point numbers.")
2984 ;; Some files are lgpl2.1+. Some are gpl2+. Some explicitly state gpl1+.
2985 ;; Others simply say "GNU General Public License" without stating a
2986 ;; version (which implicitly means gpl1+).
2987 ;; At least one file (src/maxima.asd) says "version 2."
2988 ;; GPLv2 only is therefore the smallest subset.
2989 (license license:gpl2)))
2990
2991 (define-public wxmaxima
2992 (package
2993 (name "wxmaxima")
2994 (version "19.09.0")
2995 (source
2996 (origin
2997 (method git-fetch)
2998 (uri (git-reference
2999 (url "https://github.com/wxMaxima-developers/wxmaxima.git")
3000 (commit (string-append "Version-" version))))
3001 (file-name (git-file-name name version))
3002 (sha256
3003 (base32 "195j6j8z0jd6xg3a63ywbrbsc6dany795m3fb95nbx1vq0bqqvvn"))))
3004 (build-system cmake-build-system)
3005 (native-inputs
3006 `(("gettext" ,gettext-minimal)))
3007 (inputs
3008 `(("wxwidgets" ,wxwidgets)
3009 ("maxima" ,maxima)
3010 ;; Runtime support.
3011 ("adwaita-icon-theme" ,adwaita-icon-theme)
3012 ("gtk+" ,gtk+)
3013 ("shared-mime-info" ,shared-mime-info)))
3014 (arguments
3015 `(#:tests? #f ; no check target
3016 #:phases
3017 (modify-phases %standard-phases
3018 (add-after 'install 'wrap-program
3019 (lambda* (#:key inputs outputs #:allow-other-keys)
3020 (wrap-program (string-append (assoc-ref outputs "out")
3021 "/bin/wxmaxima")
3022 `("PATH" ":" prefix
3023 (,(string-append (assoc-ref inputs "maxima")
3024 "/bin")))
3025 ;; For GtkFileChooserDialog.
3026 `("GSETTINGS_SCHEMA_DIR" =
3027 (,(string-append (assoc-ref inputs "gtk+")
3028 "/share/glib-2.0/schemas")))
3029 `("XDG_DATA_DIRS" ":" prefix
3030 (;; Needed by gdk-pixbuf to know supported icon formats.
3031 ,(string-append
3032 (assoc-ref inputs "shared-mime-info") "/share")
3033 ;; The default icon theme of GTK+.
3034 ,(string-append
3035 (assoc-ref inputs "adwaita-icon-theme") "/share"))))
3036 #t)))))
3037 (home-page "https://andrejv.github.io/wxmaxima/")
3038 (synopsis "Graphical user interface for the Maxima computer algebra system")
3039 (description
3040 "wxMaxima is a graphical user interface for the Maxima computer algebra
3041 system. It eases the use of Maxima by making most of its commands available
3042 through a menu system and by providing input dialogs for commands that require
3043 more than one argument. It also implements its own display engine that
3044 outputs mathematical symbols directly instead of depicting them with ASCII
3045 characters.
3046
3047 wxMaxima also features 2D and 3D inline plots, simple animations, mixing of
3048 text and mathematical calculations to create documents, exporting of input and
3049 output to TeX, and a browser for Maxima's manual including command index and
3050 full text searching.")
3051 (license license:gpl2+)))
3052
3053 (define-public armadillo
3054 (package
3055 (name "armadillo")
3056 (version "9.100.5")
3057 (source (origin
3058 (method url-fetch)
3059 (uri (string-append "mirror://sourceforge/arma/armadillo-"
3060 version ".tar.xz"))
3061 (sha256
3062 (base32
3063 "1ka1vd9fcmvp12qkcm4888dkfqwnalvv00x04wy29f3nx3qwczby"))))
3064 (build-system cmake-build-system)
3065 (arguments `(#:tests? #f)) ; no test target
3066 (inputs
3067 `(("openblas" ,openblas)
3068 ("lapack" ,lapack)
3069 ("arpack" ,arpack-ng)))
3070 (home-page "http://arma.sourceforge.net/")
3071 (synopsis "C++ linear algebra library")
3072 (description
3073 "Armadillo is a C++ linear algebra library, aiming towards a good balance
3074 between speed and ease of use. It is useful for algorithm development
3075 directly in C++, or quick conversion of research code into production
3076 environments. It can be used for machine learning, pattern recognition,
3077 signal processing, bioinformatics, statistics, econometrics, etc. The library
3078 provides efficient classes for vectors, matrices and cubes, as well as 150+
3079 associated functions (eg. contiguous and non-contiguous submatrix views).")
3080 (license license:asl2.0)))
3081
3082 (define-public muparser
3083 ;; When switching download sites, muparser re-issued a 2.2.5 release with a
3084 ;; different hash. In order to make `guix package --upgrade` work correctly,
3085 ;; we set a Guix packaging revision.
3086 ;; When the next version of muparser is released, we can remove
3087 ;; UPSTREAM-VERSION and REVISION and use the plain VERSION.
3088 (let ((upstream-version "2.2.5")
3089 (revision "2"))
3090 (package
3091 (name "muparser")
3092 (version (string-append upstream-version "-" revision))
3093 (source
3094 (origin
3095 (method git-fetch)
3096 (uri (git-reference
3097 (url "https://github.com/beltoforion/muparser.git")
3098 (commit (string-append "v" upstream-version))))
3099 (file-name (git-file-name name version))
3100 (sha256
3101 (base32 "0f0g4995xngf1pp3zr4p6ai2f8v6f8bxwa0k8ayjjiv1l8h44m24"))))
3102 (build-system gnu-build-system)
3103 (arguments
3104 `(#:configure-flags '("--enable-samples=no")
3105 #:tests? #f)) ;no "check" target
3106 (home-page "http://muparser.beltoforion.de/")
3107 (synopsis "Fast parser library for mathematical expressions")
3108 (description
3109 "muParser is an extensible high performance math parser library. It is
3110 based on transforming an expression into a bytecode and precalculating constant
3111 parts of it.")
3112 (license license:expat))))
3113
3114 (define-public openblas
3115 (package
3116 ;; TODO: Incorporate 'openblas/fixed-num-threads' changes on the next
3117 ;; rebuild cycle.
3118 (replacement openblas/fixed-num-threads)
3119
3120 (name "openblas")
3121 (version "0.3.6")
3122 (source
3123 (origin
3124 (method url-fetch)
3125 (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20"
3126 version "%20version.tar.gz"))
3127 (file-name (string-append name "-" version ".tar.gz"))
3128 (sha256
3129 (base32
3130 "1r2g9zzwq5dm8vjd19pxwggfvfzy56cvkmpmp5d014qr3svgmsap"))))
3131 (build-system gnu-build-system)
3132 (arguments
3133 `(#:test-target "test"
3134 ;; DYNAMIC_ARCH is only supported on x86. When it is disabled and no
3135 ;; TARGET is specified, OpenBLAS will tune itself to the build host, so
3136 ;; we need to disable substitutions.
3137 #:substitutable?
3138 ,(let ((system (or (%current-target-system) (%current-system))))
3139 (or (string-prefix? "x86_64" system)
3140 (string-prefix? "i686" system)
3141 (string-prefix? "mips" system)
3142 (string-prefix? "aarch64" system)))
3143 #:make-flags
3144 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
3145 "SHELL=bash"
3146 "MAKE_NB_JOBS=0" ;use jobserver for submakes
3147 ;; Build the library for all supported CPUs. This allows
3148 ;; switching CPU targets at runtime with the environment variable
3149 ;; OPENBLAS_CORETYPE=<type>, where "type" is a supported CPU type.
3150 ;; Unfortunately, this is not supported on non-x86 architectures,
3151 ;; where it leads to failed builds.
3152 ,@(let ((system (or (%current-target-system) (%current-system))))
3153 (cond
3154 ((or (string-prefix? "x86_64" system)
3155 (string-prefix? "i686" system))
3156 '("DYNAMIC_ARCH=1"))
3157 ;; On MIPS we force the "SICORTEX" TARGET, as for the other
3158 ;; two available MIPS targets special extended instructions
3159 ;; for Loongson cores are used.
3160 ((string-prefix? "mips" system)
3161 '("TARGET=SICORTEX"))
3162 ;; On aarch64 force the generic 'armv8-a' target
3163 ((string-prefix? "aarch64" system)
3164 '("TARGET=ARMV8"))
3165 (else '()))))
3166 ;; no configure script
3167 #:phases
3168 (modify-phases %standard-phases
3169 (delete 'configure)
3170 (add-before 'build 'set-extralib
3171 (lambda* (#:key inputs #:allow-other-keys)
3172 ;; Get libgfortran found when building in utest.
3173 (setenv "FEXTRALIB"
3174 (string-append "-L" (assoc-ref inputs "fortran-lib")
3175 "/lib"))
3176 #t)))))
3177 (inputs
3178 `(("fortran-lib" ,gfortran "lib")))
3179 (native-inputs
3180 `(("cunit" ,cunit)
3181 ("fortran" ,gfortran)
3182 ("perl" ,perl)))
3183 (home-page "http://www.openblas.net/")
3184 (synopsis "Optimized BLAS library based on GotoBLAS")
3185 (description
3186 "OpenBLAS is a BLAS library forked from the GotoBLAS2-1.13 BSD version.")
3187 (license license:bsd-3)))
3188
3189 (define-public openblas-ilp64
3190 (package/inherit openblas
3191 (name "openblas-ilp64")
3192 (supported-systems '("x86_64-linux" "aarch64-linux" "mips64el-linux"))
3193 (arguments
3194 (substitute-keyword-arguments (package-arguments openblas)
3195 ((#:make-flags flags '())
3196 `(append (list "INTERFACE64=1" "LIBNAMESUFFIX=ilp64")
3197 ,flags))))
3198 (synopsis "Optimized BLAS library based on GotoBLAS (ILP64 version)")
3199 (license license:bsd-3)))
3200
3201 (define openblas/fixed-num-threads
3202 ;; TODO: Move that to 'openblas' proper on the next rebuild cycle.
3203 (package
3204 (inherit openblas)
3205 (version (match (string-split (package-version openblas) #\.)
3206 ((numbers ... (= string-length len))
3207 (string-join (append numbers
3208 (list (make-string len #\a)))
3209 "."))))
3210 (arguments
3211 (substitute-keyword-arguments (package-arguments openblas)
3212 ((#:make-flags flags ''())
3213 ;; This is the maximum number of threads OpenBLAS will ever use (that
3214 ;; is, if $OPENBLAS_NUM_THREADS is greater than that, then NUM_THREADS
3215 ;; is used.) If we don't set it, the makefile sets it to the number
3216 ;; of cores of the build machine, which is obviously wrong.
3217 `(cons "NUM_THREADS=128" ,flags))))))
3218
3219 (define* (make-blis implementation #:optional substitutable?)
3220 "Return a BLIS package with the given IMPLEMENTATION (see config/ in the
3221 source tree for a list of implementations.)
3222
3223 SUBSTITUTABLE? determines whether the package is made available as a
3224 substitute.
3225
3226 Currently the specialization must be selected at configure-time, but work is
3227 underway to allow BLIS to select the right optimized kernels at run time:
3228 <https://github.com/flame/blis/issues/129>."
3229 (package
3230 (name (if (string=? implementation "reference")
3231 "blis"
3232 (string-append "blis-" implementation)))
3233 (version "0.2.2")
3234 (home-page "https://github.com/flame/blis")
3235 (source (origin
3236 (method git-fetch)
3237 (uri (git-reference (url home-page) (commit version)))
3238 (sha256
3239 (base32
3240 "1wr79a50nm4abhw8w3sn96nmwp5mrzifcigk7khw9qcgyyyqayfh"))
3241 (file-name (git-file-name "blis" version))))
3242 (build-system gnu-build-system)
3243 (arguments
3244 `(#:test-target "test"
3245
3246 #:substitutable? ,substitutable?
3247
3248 #:phases (modify-phases %standard-phases
3249 (replace 'configure
3250 (lambda* (#:key outputs #:allow-other-keys)
3251 ;; This is a home-made 'configure' script.
3252 (let ((out (assoc-ref outputs "out")))
3253 (invoke "./configure" "-p" out
3254 "-d" "opt"
3255 "--disable-static"
3256 "--enable-shared"
3257 "--enable-threading=openmp"
3258
3259 ,implementation))))
3260 (add-before 'check 'show-test-output
3261 (lambda _
3262 ;; By default "make check" is silent. Make it verbose.
3263 (system "tail -F output.testsuite &")
3264 #t)))))
3265 (synopsis "High-performance basic linear algebra (BLAS) routines")
3266 (description
3267 "BLIS is a portable software framework for instantiating high-performance
3268 BLAS-like dense linear algebra libraries. The framework was designed to
3269 isolate essential kernels of computation that, when optimized, immediately
3270 enable optimized implementations of most of its commonly used and
3271 computationally intensive operations. While BLIS exports a new BLAS-like API,
3272 it also includes a BLAS compatibility layer which gives application developers
3273 access to BLIS implementations via traditional BLAS routine calls.")
3274 (license license:bsd-3)))
3275
3276 (define-public blis
3277 ;; This is the "reference" implementation, which is the non-optimized but
3278 ;; portable variant (no assembly).
3279 (make-blis "reference" #t))
3280
3281 (define ignorance blis)
3282
3283 (define-syntax-rule (blis/x86_64 processor)
3284 "Expand to a package specialized for PROCESSOR."
3285 (package
3286 (inherit (make-blis processor))
3287 (supported-systems '("x86_64-linux"))))
3288
3289 (define-public blis-sandybridge
3290 ;; BLIS specialized for Sandy Bridge processors (launched 2011):
3291 ;; <http://ark.intel.com/products/codename/29900/Sandy-Bridge>.
3292 (blis/x86_64 "sandybridge"))
3293
3294 (define-public blis-haswell
3295 ;; BLIS specialized for Haswell processors (launched 2013):
3296 ;; <http://ark.intel.com/products/codename/42174/Haswell>.
3297 (blis/x86_64 "haswell"))
3298
3299 (define-public blis-knl
3300 ;; BLIS specialized for Knights Landing processor (launched 2016):
3301 ;; <http://ark.intel.com/products/series/92650/Intel-Xeon-Phi-x200-Product-Family>.
3302 (blis/x86_64 "knl"))
3303
3304
3305 (define-public openlibm
3306 (package
3307 (name "openlibm")
3308 (version "0.6.0")
3309 (source
3310 (origin
3311 (method git-fetch)
3312 (uri (git-reference
3313 (url "https://github.com/JuliaLang/openlibm.git")
3314 (commit (string-append "v" version))))
3315 (file-name (git-file-name name version))
3316 (sha256
3317 (base32 "08wfchmmr5200fvmn1kwq9byc1fhsq46hn0y5k8scdl74771c7gh"))))
3318 (build-system gnu-build-system)
3319 (arguments
3320 `(#:make-flags
3321 (list (string-append "prefix=" (assoc-ref %outputs "out")))
3322 #:phases
3323 ;; no configure script
3324 (modify-phases %standard-phases (delete 'configure))
3325 #:tests? #f)) ;the tests are part of the default target
3326 (home-page "http://openlibm.org/")
3327 (synopsis "Portable C mathematical library (libm)")
3328 (description
3329 "OpenLibm is an effort to have a high quality, portable, standalone C
3330 mathematical library (libm). It can be used standalone in applications and
3331 programming language implementations. The project was born out of a need to
3332 have a good libm for the Julia programming language that worked consistently
3333 across compilers and operating systems, and in 32-bit and 64-bit
3334 environments.")
3335 ;; Each architecture has its own make target, and there is none for mips.
3336 (supported-systems (delete "mips64el-linux" %supported-systems))
3337 ;; See LICENSE.md for details.
3338 (license (list license:expat
3339 license:isc
3340 license:bsd-2
3341 license:public-domain
3342 license:lgpl2.1+))))
3343
3344 (define-public openspecfun
3345 (package
3346 (name "openspecfun")
3347 (version "0.5.3")
3348 (source
3349 (origin
3350 (method git-fetch)
3351 (uri (git-reference
3352 (url "https://github.com/JuliaLang/openspecfun.git")
3353 (commit (string-append "v" version))))
3354 (file-name (git-file-name name version))
3355 (sha256
3356 (base32 "0pfw6l3ch7isz403llx7inxlvavqh01jh1hb9dpidi86sjjx9kfh"))))
3357 (build-system gnu-build-system)
3358 (arguments
3359 '(#:tests? #f ; no "check" target
3360 #:make-flags
3361 (list (string-append "prefix=" (assoc-ref %outputs "out")))
3362 #:phases
3363 (modify-phases %standard-phases
3364 (delete 'configure)))) ; no configure script
3365 (inputs
3366 `(("fortran" ,gfortran)))
3367 (home-page "https://github.com/JuliaLang/openspecfun")
3368 (synopsis "Collection of special mathematical functions")
3369 (description
3370 "Openspecfun provides AMOS and Faddeeva. AMOS (from Netlib) is a
3371 portable package for Bessel Functions of a Complex Argument and Nonnegative
3372 Order; it contains subroutines for computing Bessel functions and Airy
3373 functions. Faddeeva allows computing the various error functions of arbitrary
3374 complex arguments (Faddeeva function, error function, complementary error
3375 function, scaled complementary error function, imaginary error function, and
3376 Dawson function); given these, one can also easily compute Voigt functions,
3377 Fresnel integrals, and similar related functions as well.")
3378 ;; Faddeeva is released under the Expat license; AMOS is included as
3379 ;; public domain software.
3380 (license (list license:expat license:public-domain))))
3381
3382 (define-public suitesparse
3383 (package
3384 (name "suitesparse")
3385 (version "4.5.5")
3386 (source
3387 (origin
3388 (method url-fetch)
3389 (uri (string-append
3390 "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-"
3391 version ".tar.gz"))
3392 (sha256
3393 (base32
3394 "1dnr6pmjzc2qmbkmb4shigx1l74ilf6abn7svyd6brxgvph8vadr"))
3395 (modules '((guix build utils)))
3396 (snippet
3397 ;; Remove bundled metis source
3398 '(begin
3399 (delete-file-recursively "metis-5.1.0")
3400 #t))))
3401 (build-system gnu-build-system)
3402 (arguments
3403 '(#:tests? #f ;no "check" target
3404 #:make-flags
3405 (list "CC=gcc"
3406 "BLAS=-lblas"
3407 "TBB=-ltbb"
3408 "MY_METIS_LIB=-lmetis"
3409 (string-append "INSTALL_LIB="
3410 (assoc-ref %outputs "out") "/lib")
3411 (string-append "INSTALL_INCLUDE="
3412 (assoc-ref %outputs "out") "/include")
3413 "library")
3414 #:phases
3415 (modify-phases %standard-phases
3416 (delete 'configure)))) ;no configure script
3417 (inputs
3418 `(("tbb" ,tbb)
3419 ("lapack" ,lapack)
3420 ("metis" ,metis)))
3421 (home-page "http://faculty.cse.tamu.edu/davis/suitesparse.html")
3422 (synopsis "Suite of sparse matrix software")
3423 (description
3424 "SuiteSparse is a suite of sparse matrix algorithms, including: UMFPACK,
3425 multifrontal LU factorization; CHOLMOD, supernodal Cholesky; SPQR,
3426 multifrontal QR; KLU and BTF, sparse LU factorization, well-suited for circuit
3427 simulation; ordering methods (AMD, CAMD, COLAMD, and CCOLAMD); CSparse and
3428 CXSparse, a concise sparse Cholesky factorization package; and many other
3429 packages.")
3430 ;; LGPLv2.1+:
3431 ;; AMD, CAMD, BTF, COLAMD, CCOLAMD, CSparse, CXSparse, KLU, LDL
3432 ;; GPLv2+:
3433 ;; GPUQREngine, RBio, SuiteSparse_GPURuntime, SuiteSparseQR, UMFPACK
3434 (license (list license:gpl2+ license:lgpl2.1+))))
3435
3436 (define-public atlas
3437 (package
3438 (name "atlas")
3439 (version "3.10.3")
3440 (source (origin
3441 (method url-fetch)
3442 (uri (string-append "mirror://sourceforge/math-atlas/Stable/"
3443 version "/atlas" version ".tar.bz2"))
3444 (sha256
3445 (base32
3446 "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
3447 (build-system gnu-build-system)
3448 (home-page "http://math-atlas.sourceforge.net/")
3449 (inputs `(("gfortran" ,gfortran)
3450 ("lapack-tar" ,(package-source lapack))))
3451 (outputs '("out" "doc"))
3452 ;; For the moment we drop support for MIPS at it fails to compile. See
3453 ;; https://lists.gnu.org/archive/html/guix-devel/2014-11/msg00516.html
3454 (supported-systems (delete "mips64el-linux" %supported-systems))
3455 (arguments
3456 `(#:parallel-build? #f
3457 #:parallel-tests? #f
3458
3459 ;; ATLAS tunes itself for the machine it is built on, as explained at
3460 ;; <http://lists.gnu.org/archive/html/guix-devel/2014-10/msg00305.html>.
3461 ;; For this reason, we want users to build it locally instead of using
3462 ;; substitutes.
3463 #:substitutable? #f
3464
3465 #:modules ((srfi srfi-26)
3466 (guix build gnu-build-system)
3467 (guix build utils))
3468 #:configure-flags
3469 `(;; Generate position independent code suitable for dynamic libraries
3470 ;; and use WALL timer to get more accurate timing.
3471 "-Fa" "alg" "-fPIC" "-D" "c" "-DWALL"
3472 ;; Set word width.
3473 "-b"
3474 ,,(if (string-match "64" (%current-system))
3475 "64"
3476 "32")
3477 ;; Disable parallel build as it gives errors: atlas_pthread.h is
3478 ;; needed to compile C files before it is generated.
3479 "-Ss" "pmake" "make -j 1"
3480 ;; Probe is failing for MIPS. We therefore define the system
3481 ;; architecture explicitly by setting (-A) MACHINETYPE = 49
3482 ;; 'MIPSR1xK' and (-V) ISA = 1 'none'.
3483 ,,@(if (string-prefix? "mips" (%current-system))
3484 (list "-A" "49" "-V" "1")
3485 (list))
3486 ;; Generate shared libraries.
3487 "--shared"
3488 ;; Build a full LAPACK library.
3489 ,(string-append "--with-netlib-lapack-tarfile="
3490 (assoc-ref %build-inputs "lapack-tar")))
3491 #:phases
3492 (modify-phases %standard-phases
3493 (add-after 'install 'install-doc
3494 (lambda* (#:key outputs inputs #:allow-other-keys)
3495 (let ((doc (string-append (assoc-ref outputs "doc")
3496 "/share/doc/atlas")))
3497 (mkdir-p doc)
3498 (for-each (cut install-file <> doc)
3499 (find-files "../ATLAS/doc" ".*"))
3500 #t)))
3501 (add-after 'check 'check-pt
3502 (lambda _ (invoke "make" "ptcheck")))
3503 ;; Fix files required to run configure.
3504 (add-before 'configure 'fix-/bin/sh
3505 (lambda _
3506 ;; Use `sh', not `/bin/sh'.
3507 (substitute* (find-files "." "Makefile|configure|SpewMakeInc\\.c")
3508 (("/bin/sh")
3509 "sh"))
3510 #t))
3511 ;; Fix /bin/sh in generated make files.
3512 (add-after 'configure 'fix-/bin/sh-in-generated-files
3513 (lambda _
3514 (substitute* (find-files "." "^[Mm]ake\\.inc.*")
3515 (("/bin/sh")
3516 "sh"))
3517 #t))
3518 ;; ATLAS configure program does not accepts the default flags
3519 ;; passed by the 'gnu-build-system'.
3520 (replace 'configure
3521 (lambda* (#:key native-inputs inputs outputs
3522 (configure-flags '())
3523 #:allow-other-keys #:rest args)
3524 (let* ((prefix (assoc-ref outputs "out"))
3525 (bash (or (and=> (assoc-ref
3526 (or native-inputs inputs) "bash")
3527 (cut string-append <> "/bin/bash"))
3528 "/bin/sh"))
3529 (flags `(,(string-append "--prefix=" prefix)
3530 ,@configure-flags))
3531 (abs-srcdir (getcwd))
3532 (srcdir (string-append "../" (basename abs-srcdir))))
3533 (format #t "source directory: ~s (relative from build: ~s)~%"
3534 abs-srcdir srcdir)
3535 (mkdir "../build")
3536 (chdir "../build")
3537 (format #t "build directory: ~s~%" (getcwd))
3538 (format #t "configure flags: ~s~%" flags)
3539 (apply invoke bash
3540 (string-append srcdir "/configure")
3541 flags)))))))
3542 (synopsis "Automatically Tuned Linear Algebra Software")
3543 (description
3544 "ATLAS is an automatically tuned linear algebra software library
3545 providing C and Fortran77 interfaces to a portably efficient BLAS
3546 implementation, as well as a few routines from LAPACK.
3547
3548 Optimization occurs at build time. For this reason, the library is built on
3549 the machine where it is installed, without resorting to pre-built substitutes.
3550
3551 Before building the library, CPU throttling should be disabled. This can be
3552 done in the BIOS, or, on GNU/Linux, with the following command:
3553
3554 @example
3555 # cpupower --governor performance
3556 @end example
3557
3558 Failure to do so will result in a library with poor performance.")
3559 (license license:bsd-3)))
3560
3561 (define-public glm
3562 (package
3563 (name "glm")
3564 (version "0.9.9.6")
3565 (source
3566 (origin
3567 (method url-fetch)
3568 (uri (string-append "https://github.com/g-truc/glm/releases/download/"
3569 version "/glm-" version ".zip"))
3570 (sha256
3571 (base32 "1l0pi1qi37mk6s0yrkrw07lspv4gcqnr9ryg3521hrl77ff37dwx"))
3572 (patches (search-patches "glm-restore-install-target.patch"))))
3573 (build-system cmake-build-system)
3574 (native-inputs
3575 `(("unzip" ,unzip)))
3576 (home-page "https://glm.g-truc.net/")
3577 (synopsis "OpenGL Mathematics library")
3578 (description "OpenGL Mathematics (GLM) is a header-only C++ mathematics
3579 library for graphics software based on the OpenGL Shading Language (GLSL)
3580 specifications.")
3581 (license license:expat)))
3582
3583 (define-public lpsolve
3584 (package
3585 (name "lpsolve")
3586 (version "5.5.2.5")
3587 (source
3588 (origin
3589 (method url-fetch)
3590 (uri (string-append "mirror://sourceforge/lpsolve/lpsolve/" version
3591 "/lp_solve_" version "_source.tar.gz"))
3592 (sha256
3593 (base32
3594 "12pj1idjz31r7c2mb5w03vy1cmvycvbkx9z29s40qdmkp1i7q6i0"))
3595 (modules '((guix build utils)))
3596 (snippet
3597 '(begin
3598 (substitute* (list "lp_solve/ccc" "lpsolve55/ccc")
3599 (("^c=cc") "c=gcc")
3600 ;; Pretend to be on a 64 bit platform to obtain a common directory
3601 ;; name for the build results on all architectures; nothing else
3602 ;; seems to depend on it.
3603 (("^PLATFORM=.*$") "PLATFORM=ux64\n")
3604
3605 ;; The check for 'isnan' as it is written fails with
3606 ;; "non-floating-point argument in call to function
3607 ;; ‘__builtin_isnan’", which leads to the 'NOISNAN' cpp macro
3608 ;; definition, which in turn leads to bad things. Fix the feature
3609 ;; test.
3610 (("isnan\\(0\\)") "isnan(0.)"))
3611 #t))))
3612 (build-system gnu-build-system)
3613 (arguments
3614 `(#:tests? #f ; no check target
3615 #:phases
3616 (modify-phases %standard-phases
3617 (delete 'configure) ; no configure script
3618 (replace 'build
3619 (lambda _
3620 (with-directory-excursion "lpsolve55"
3621 (invoke "bash" "ccc"))
3622 (with-directory-excursion "lp_solve"
3623 (invoke "bash" "ccc"))
3624 #t))
3625 (replace 'install
3626 (lambda* (#:key outputs #:allow-other-keys)
3627 (let* ((out (assoc-ref outputs "out"))
3628 (bin (string-append out "/bin"))
3629 (lib (string-append out "/lib"))
3630 ;; This is where LibreOffice expects to find the header
3631 ;; files, and where they are installed by Debian.
3632 (include (string-append out "/include/lpsolve")))
3633 (install-file "lpsolve55/bin/ux64/liblpsolve55.a" lib)
3634 (install-file "lpsolve55/bin/ux64/liblpsolve55.so" lib)
3635 (install-file "lp_solve/bin/ux64/lp_solve" bin)
3636
3637 ;; Install a subset of the header files as on Debian
3638 ;; (plus lp_bit.h, which matches the regular expression).
3639 (for-each (lambda (name)
3640 (install-file name include))
3641 (find-files "." "lp_[HMSa-z].*\\.h$"))
3642 (with-directory-excursion "shared"
3643 (for-each (lambda (name)
3644 (install-file name include))
3645 (find-files "." "\\.h$")))
3646 #t))))))
3647 (home-page "http://lpsolve.sourceforge.net/")
3648 (synopsis "Mixed integer linear programming (MILP) solver")
3649 (description
3650 "lp_solve is a mixed integer linear programming solver based on the
3651 revised simplex and the branch-and-bound methods.")
3652 (license license:lgpl2.1+)))
3653
3654 (define-public dealii
3655 (package
3656 (name "dealii")
3657 (version "9.1.1")
3658 (source
3659 (origin
3660 (method url-fetch)
3661 (uri (string-append "https://github.com/dealii/dealii/releases/"
3662 "download/v" version "/dealii-" version ".tar.gz"))
3663 (sha256
3664 (base32
3665 "0xhjv0gzswpjbc43xbrpwfc5848g508l01855nszx3g5gwzlhnzw"))
3666 (modules '((guix build utils)))
3667 (snippet
3668 ;; Remove bundled sources: UMFPACK, TBB, muParser, and boost
3669 '(begin
3670 (delete-file-recursively "bundled")
3671 #t))))
3672 (build-system cmake-build-system)
3673 (inputs
3674 `(("tbb" ,tbb)
3675 ("zlib" ,zlib)
3676 ("boost" ,boost)
3677 ("p4est" ,p4est)
3678 ("blas" ,openblas)
3679 ("lapack" ,lapack)
3680 ("arpack" ,arpack-ng)
3681 ("muparser" ,muparser)
3682 ("gfortran" ,gfortran)
3683 ("suitesparse" ,suitesparse))) ;for UMFPACK
3684 (arguments
3685 `(#:build-type "DebugRelease" ;only supports Release, Debug, or DebugRelease
3686 #:configure-flags
3687 ;; Work around a bug in libsuitesparseconfig linking
3688 ;; see https://github.com/dealii/dealii/issues/4745
3689 '("-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON")))
3690 (home-page "https://www.dealii.org")
3691 (synopsis "Finite element library")
3692 (description
3693 "Deal.II is a C++ program library targeted at the computational solution
3694 of partial differential equations using adaptive finite elements. The main
3695 aim of deal.II is to enable rapid development of modern finite element codes,
3696 using among other aspects adaptive meshes and a wide array of tools often used
3697 in finite element programs.")
3698 (license license:lgpl2.1+)))
3699
3700 (define-public dealii-openmpi
3701 (package (inherit dealii)
3702 (name "dealii-openmpi")
3703 (inputs
3704 `(("mpi" ,openmpi)
3705 ;;Supported only with MPI:
3706 ("hdf5" ,hdf5-parallel-openmpi) ;TODO: have petsc-openmpi propagate?
3707 ("p4est" ,p4est-openmpi)
3708 ("petsc" ,petsc-openmpi)
3709 ("slepc" ,slepc-openmpi)
3710 ("metis" ,metis) ;for MUMPS
3711 ("scalapack" ,scalapack) ;for MUMPS
3712 ("mumps" ,mumps-metis-openmpi) ;configure supports only metis orderings
3713 ("arpack" ,arpack-ng-openmpi)
3714 ,@(fold alist-delete (package-inputs dealii)
3715 '("p4est" "arpack"))))
3716 (arguments
3717 (substitute-keyword-arguments (package-arguments dealii)
3718 ((#:configure-flags cf)
3719 `(cons "-DDEAL_II_WITH_MPI:BOOL=ON"
3720 ,cf))
3721 ((#:phases phases '%standard-phases)
3722 `(modify-phases ,phases
3723 (add-before 'check 'mpi-setup
3724 ,%openmpi-setup)))))
3725 (synopsis "Finite element library (with MPI support)")))
3726
3727 (define-public flann
3728 (package
3729 (name "flann")
3730 (version "1.8.4")
3731 (source
3732 (origin
3733 (method url-fetch)
3734 (uri
3735 (string-append
3736 "http://www.cs.ubc.ca/research/flann/uploads/FLANN/flann-"
3737 version "-src.zip"))
3738 (sha256
3739 (base32
3740 "022w8hph7bli5zbpnk3z1qh1c2sl5hm8fw2ccim651ynn0hr7fyz"))
3741 (patches (search-patches "flann-cmake-3.11.patch"))))
3742 (build-system cmake-build-system)
3743 (outputs '("out"
3744 "octave")) ;46 MiB .mex file that pulls Octave
3745 (native-inputs
3746 `(("unzip" ,unzip)))
3747 (inputs
3748 `(("hdf5" ,hdf5)
3749 ("octave" ,octave-cli)
3750 ("python" ,python-2) ; print syntax
3751 ;; ("python2-numpy" ,python2-numpy) ; only required for the tests
3752 ("zlib" ,zlib)))
3753 (arguments
3754 `(;; The 'share/flann/octave' contains a .mex file, which is an ELF file
3755 ;; taken 46 MiB unstripped, and 6 MiB stripped.
3756 #:strip-directories '("lib" "lib64" "libexec"
3757 "bin" "sbin" "share/flann/octave")
3758
3759 ;; Save 12 MiB by not installing .a files. Passing
3760 ;; '-DBUILD_STATIC_LIBS=OFF' has no effect.
3761 #:phases (modify-phases %standard-phases
3762 (add-before 'configure 'set-octave-directory
3763 (lambda* (#:key outputs #:allow-other-keys)
3764 ;; Install the .mex file in the "octave" output.
3765 (let ((out (assoc-ref outputs "octave")))
3766 (substitute* "src/matlab/CMakeLists.txt"
3767 (("share/flann/octave")
3768 (string-append out "/share/flann/octave")))
3769 #t)))
3770 (add-after 'install 'remove-static-libraries
3771 (lambda* (#:key outputs #:allow-other-keys)
3772 (let* ((out (assoc-ref outputs "out"))
3773 (lib (string-append out "/lib")))
3774 (for-each delete-file
3775 (find-files lib "\\.a$"))
3776 #t))))
3777
3778 #:tests? #f)) ; The test data are downloaded from the Internet.
3779 (home-page "http://www.cs.ubc.ca/research/flann/")
3780 (synopsis "Library for approximate nearest neighbors computation")
3781 (description "FLANN is a library for performing fast approximate
3782 nearest neighbor searches in high dimensional spaces. It implements a
3783 collection of algorithms and a system for automatically choosing the best
3784 algorithm and optimum parameters depending on the dataset.
3785
3786 FLANN is written in C++ and contains bindings for C, Octave and Python.")
3787 (license (license:non-copyleft "file://COPYING"
3788 "See COPYING in the distribution."))))
3789
3790 (define-public wcalc
3791 (package
3792 (name "wcalc")
3793 (version "2.5")
3794 (source
3795 (origin
3796 (method url-fetch)
3797 (uri (string-append "mirror://sourceforge/w-calc/Wcalc/" version "/"
3798 "wcalc-" version ".tar.bz2"))
3799 (sha256
3800 (base32
3801 "1vi8dl6rccqiq1apmpwawyg2ywx6a1ic1d3cvkf2hlwk1z11fb0f"))))
3802 (build-system gnu-build-system)
3803 (inputs
3804 `(("mpfr" ,mpfr)
3805 ("readline" ,readline)))
3806 (home-page "http://w-calc.sourceforge.net/index.php")
3807 (synopsis "Flexible command-line scientific calculator")
3808 (description "Wcalc is a very capable calculator. It has standard functions
3809 (sin, asin, and sinh for example, in either radians or degrees), many
3810 pre-defined constants (pi, e, c, etc.), support for using variables, \"active\"
3811 variables, a command history, hex/octal/binary input and output, unit
3812 conversions, embedded comments, and an expandable expression entry field. It
3813 evaluates expressions using the standard order of operations.")
3814 (license license:gpl2+)))
3815
3816 (define-public xaos
3817 (package
3818 (name "xaos")
3819 (version "3.6")
3820 (source (origin
3821 (method url-fetch)
3822 (uri (string-append "mirror://sourceforge/xaos/XaoS/" version
3823 "/xaos-" version ".tar.gz"))
3824 (sha256
3825 (base32
3826 "15cd1cx1dyygw6g2nhjqq3bsfdj8sj8m4va9n75i0f3ryww3x7wq"))))
3827 (build-system gnu-build-system)
3828 (native-inputs `(("gettext" ,gettext-minimal)))
3829 (inputs `(("libx11" ,libx11)
3830 ("zlib" ,zlib)
3831 ("libpng" ,libpng)
3832 ("gsl" ,gsl)))
3833 (arguments
3834 `(#:tests? #f ;no "check" target
3835 #:make-flags '("LOCALEDIR=$DATAROOTDIR/locale")))
3836 (synopsis "Real-time fractal zoomer")
3837 (description "GNU XaoS is a graphical program that generates fractal
3838 patterns and allows you to zoom in and out of them infinitely in a fluid,
3839 continuous manner. It also includes tutorials that help to explain how fractals
3840 are built. It can generate many different fractal types such as the Mandelbrot
3841 set.")
3842 (home-page "https://www.gnu.org/software/xaos/")
3843 (license license:gpl2+)))
3844
3845 (define-public hypre
3846 (package
3847 (name "hypre")
3848 (version "2.15.1")
3849 (source
3850 (origin
3851 (method git-fetch)
3852 (uri (git-reference
3853 (url "https://github.com/LLNL/hypre.git")
3854 (commit (string-append "v" version))))
3855 (file-name (git-file-name name version))
3856 (sha256
3857 (base32 "1lvh4ybqkriyqfg2zmic6mrg1981qv1i9vry1fdgsabn81hb71g4"))
3858 (modules '((guix build utils)))
3859 (snippet
3860 '(begin
3861 ;; Remove use of __DATE__ and __TIME__ for reproducibility;
3862 ;; substitute the release date.
3863 (substitute* "src/utilities/HYPRE_utilities.h"
3864 (("Date Compiled: .*$")
3865 "Date Compiled: Oct 19 2018 15:23:00 +0000\"\n"))
3866 #t))))
3867 (build-system gnu-build-system)
3868 (outputs '("out" ; 6.1 MiB of headers and libraries
3869 "doc")) ; 4.8 MiB of documentation
3870 (native-inputs
3871 `(("doc++" ,doc++)
3872 ("netpbm" ,netpbm)
3873 ("perl" ,perl) ; needed to run 'ppmquant' during tests
3874 ("texlive" ,(texlive-union (list texlive-xypic
3875 texlive-cm
3876 texlive-latex-hyperref
3877 texlive-bibtex)))
3878 ("ghostscript" ,ghostscript)))
3879 (inputs
3880 `(("blas" ,openblas)
3881 ("lapack" ,lapack)))
3882 (arguments
3883 `(#:modules ((srfi srfi-1)
3884 ,@%gnu-build-system-modules)
3885 #:configure-flags '("--enable-shared"
3886 "--disable-fortran"
3887 "--without-MPI"
3888 "--with-openmp"
3889 "--with-fei"
3890 "--with-lapack"
3891 "--with-blas")
3892 #:phases
3893 (modify-phases %standard-phases
3894 (add-before 'build 'set-HOME
3895 (lambda _
3896 ;; FIXME: texlive-union does not find the built
3897 ;; metafonts, so it tries to generate them in HOME.
3898 (setenv "HOME" "/tmp")
3899 #t))
3900 (add-before 'configure 'chdir-src
3901 (lambda _ (chdir "src")))
3902 (replace 'configure
3903 (lambda* (#:key build target configure-flags
3904 #:allow-other-keys #:rest args)
3905 (let* ((configure (assoc-ref %standard-phases 'configure)))
3906 (apply configure
3907 (append args
3908 (list #:configure-flags
3909 (cons (string-append
3910 "--host=" (or target build))
3911 configure-flags)))))))
3912 (add-after 'build 'build-docs
3913 (lambda _
3914 (invoke "make" "-Cdocs" "pdf" "html")))
3915 (replace 'check
3916 (lambda _
3917 (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib"))
3918 (setenv "PATH" (string-append "." ":" (getenv "PATH")))
3919 (invoke "make" "check" "CHECKRUN=")
3920 (for-each (lambda (filename)
3921 (let ((size (stat:size (stat filename))))
3922 (when (positive? size)
3923 (error (format #f "~a size ~d; error indication~%"
3924 filename size)))))
3925 (find-files "test" ".*\\.err$"))
3926 #t))
3927 (add-after 'install 'install-docs
3928 (lambda* (#:key outputs #:allow-other-keys)
3929 ;; Custom install because docs/Makefile doesn't honor ${docdir}.
3930 (let* ((doc (assoc-ref outputs "doc"))
3931 (docdir (string-append doc "/share/doc/hypre-" ,version)))
3932 (with-directory-excursion "docs"
3933 (for-each (lambda (base)
3934 (install-file (string-append base ".pdf") docdir)
3935 (copy-recursively base docdir)) ; html docs
3936 '("HYPRE_usr_manual"
3937 "HYPRE_ref_manual")))
3938 #t))))))
3939 (home-page "http://www.llnl.gov/casc/hypre/")
3940 (synopsis "Library of solvers and preconditioners for linear equations")
3941 (description
3942 "HYPRE is a software library of high performance preconditioners and
3943 solvers for the solution of large, sparse linear systems of equations. It
3944 features multigrid solvers for both structured and unstructured grid
3945 problems.")
3946 (license license:lgpl2.1)))
3947
3948 (define-public hypre-openmpi
3949 (package (inherit hypre)
3950 (name "hypre-openmpi")
3951 (inputs
3952 `(("mpi" ,openmpi)
3953 ,@(package-inputs hypre)))
3954 (arguments
3955 (substitute-keyword-arguments (package-arguments hypre)
3956 ((#:configure-flags flags)
3957 ``("--with-MPI"
3958 ,@(delete "--without-MPI" ,flags)))
3959 ((#:phases phases)
3960 `(modify-phases ,phases
3961 (add-before 'check 'mpi-setup
3962 ,%openmpi-setup)))))
3963 (synopsis "Parallel solvers and preconditioners for linear equations")
3964 (description
3965 "HYPRE is a software library of high performance preconditioners and
3966 solvers for the solution of large, sparse linear systems of equations on
3967 parallel computers. It features parallel multigrid solvers for both
3968 structured and unstructured grid problems.")))
3969
3970 (define-public matio
3971 (package
3972 (name "matio")
3973 (version "1.5.6")
3974 (source
3975 (origin
3976 (method url-fetch)
3977 (uri (string-append "mirror://sourceforge/matio/matio/" version "/"
3978 "matio-" version ".tar.gz"))
3979 (sha256
3980 (base32
3981 "0y2qymgxank8wdiwc68ap8bxdzrhvyw86i29yh3xgn4z1njfd9ir"))))
3982 (build-system gnu-build-system)
3983 (inputs
3984 `(("zlib" ,zlib)
3985 ("hdf5" ,hdf5)))
3986 (home-page "http://matio.sourceforge.net/")
3987 (synopsis "Library for reading and writing MAT files")
3988 (description "Matio is a library for reading and writing MAT files. It
3989 supports compressed MAT files, as well as newer (version 7.3) MAT files.")
3990 (license license:bsd-2)))
3991
3992 (define-public vc
3993 (package
3994 (name "vc")
3995 (version "1.3.3")
3996 (source
3997 (origin (method url-fetch)
3998 (uri (string-append "https://github.com/VcDevel/Vc/releases/"
3999 "download/" version "/Vc-" version ".tar.gz"))
4000 (sha256
4001 (base32
4002 "1zmlpn32jzb38smp3j834llmbix3whsrbw0h397qxysbw792kih8"))))
4003 (build-system cmake-build-system)
4004 (arguments
4005 '(#:configure-flags
4006 '("-DBUILD_TESTING=ON"
4007 ;; By default, Vc will optimize for the CPU of the build machine.
4008 ;; Setting this to "none" makes it create portable binaries. See
4009 ;; "cmake/OptimizeForArchitecture.cmake".
4010 "-DTARGET_ARCHITECTURE=none")))
4011 (synopsis "SIMD vector classes for C++")
4012 (description "Vc provides portable, zero-overhead C++ types for explicitly
4013 data-parallel programming. It is a library designed to ease explicit
4014 vectorization of C++ code. Its types enable explicitly stating data-parallel
4015 operations on multiple values. The parallelism is therefore added via the type
4016 system. Vc has an intuitive API and provides portability between different
4017 compilers and compiler versions as well as portability between different vector
4018 instruction sets. Thus, an application written with Vc can be compiled for:
4019 @enumerate
4020 @item AVX and AVX2
4021 @item SSE2 up to SSE4.2 or SSE4a
4022 @item Scalar
4023 @item MIC
4024 @item NEON (in development)
4025 @item NVIDIA GPUs / CUDA (in development)
4026 @end enumerate\n")
4027 (home-page "https://github.com/VcDevel/Vc")
4028 ;; "No support_???.cpp file exists for this architecture."
4029 (supported-systems '("x86_64-linux" "i686-linux"))
4030 (license license:bsd-3)))
4031
4032 (define-public reducelcs
4033 ;; This is the last commit which is available upstream, no
4034 ;; release happened since 2010.
4035 (let ((commit "474f88deb968061abe8cf11c959e02319b8ae5c0")
4036 (revision "1"))
4037 (package
4038 (name "reducelcs")
4039 (version (string-append "1.0-" revision "." (string-take commit 7)))
4040 (source
4041 (origin
4042 (method git-fetch)
4043 (uri (git-reference
4044 (url "https://github.com/gdv/Reduce-Expand-for-LCS")
4045 (commit commit)))
4046 (file-name (string-append name "-" version "-checkout"))
4047 (sha256
4048 (base32
4049 "1rllzcfwc042c336mhq262a8ha90x6afq30kvk60r7i4761j4yjm"))))
4050 (build-system gnu-build-system)
4051 (inputs
4052 `(("openlibm" ,openlibm)))
4053 (arguments
4054 `(#:tests? #f ; no tests
4055 #:phases
4056 (modify-phases %standard-phases
4057 (delete 'configure) ; No configure script exists.
4058 (replace 'install ; No install phase exists.
4059 (lambda* (#:key outputs #:allow-other-keys)
4060 (let* ((out (assoc-ref outputs "out"))
4061 (bin (string-append out "/bin")))
4062 (install-file "Approximation" bin)
4063 (install-file "CollectResults" bin)
4064 (install-file "GenerateInstances" bin)
4065 #t))))))
4066 (synopsis "Approximate Longest Commons Subsequence computation tool")
4067 (description
4068 "@code{reduceLCS} is an implementation of the Reduce-Expand
4069 algorithm for LCS. It is a fast program to compute the approximate
4070 Longest Commons Subsequence of a set of strings.")
4071 (home-page "https://github.com/gdv/Reduce-Expand-for-LCS")
4072 (license license:gpl3+))))
4073
4074 (define-public jacal
4075 (package
4076 (name "jacal")
4077 (version "1c4")
4078 (source (origin
4079 (method url-fetch)
4080 (uri (string-append
4081 "http://groups.csail.mit.edu/mac/ftpdir/scm/jacal-"
4082 version ".zip"))
4083 (sha256 (base32
4084 "055zrn12a1dmy0dqkwrkq3fklbhg3yir6vn0lacp4mvbg8573a3q"))
4085 (patches (search-patches "jacal-fix-texinfo.patch"))))
4086 (build-system gnu-build-system)
4087 (arguments
4088 `(#:phases
4089 (modify-phases %standard-phases
4090 (add-before 'build 'pre-build
4091 ;; Don't use upstream's script - it really doesn't fit into
4092 ;; Guix's functional paradigm.
4093 (lambda* (#:key inputs outputs #:allow-other-keys)
4094 (substitute* "Makefile"
4095 (("^install: install-script") "install: "))))
4096 (add-after 'install 'post-install
4097 ;; Instead, we provide our own simplified script.
4098 (lambda* (#:key inputs outputs #:allow-other-keys)
4099 (let ((wrapper (string-append (assoc-ref outputs "out")
4100 "/bin/jacal")))
4101 (format (open wrapper (logior O_WRONLY O_CREAT))
4102 (string-append "#!~a\nexec ~a/bin/scm -ip1 "
4103 "-e '(slib:load \"~a/lib/jacal/math\") "
4104 "(math)' \"$@\"\n")
4105 (which "bash")
4106 (assoc-ref inputs "scm")
4107 (assoc-ref outputs "out"))
4108 (chmod wrapper #o555))))
4109 (replace 'configure
4110 (lambda* (#:key outputs #:allow-other-keys)
4111 (invoke "./configure"
4112 (string-append "--prefix="
4113 (assoc-ref outputs "out"))))))))
4114 (inputs `(("scm" ,scm)))
4115 (native-inputs `(("unzip" ,unzip)
4116 ("texinfo" ,texinfo)))
4117 (synopsis "Symbolic mathematics system")
4118 (description "GNU JACAL is an interactive symbolic mathematics program based on
4119 Scheme. It manipulate and simplify a range of mathematical expressions such
4120 as equations, scalars, vectors, and matrices.")
4121 (home-page "https://www.gnu.org/software/jacal/")
4122 (license license:gpl3+)))
4123
4124 (define-public z3
4125 (package
4126 (name "z3")
4127 (version "4.8.6")
4128 (home-page "https://github.com/Z3Prover/z3")
4129 (source (origin
4130 (method git-fetch)
4131 (uri (git-reference (url home-page)
4132 (commit (string-append "z3-" version))))
4133 (file-name (git-file-name name version))
4134 (sha256
4135 (base32
4136 "1sywcqj5y8yp28m4cdvzsgw74kd6zr1s3y1x17ky8pr9prvpvl6x"))))
4137 (build-system gnu-build-system)
4138 (arguments
4139 `(#:phases
4140 (modify-phases %standard-phases
4141 (add-after 'unpack 'fix-compatability
4142 ;; Versions after 4.8.3 have immintrin.h IFDEFed for Windows only.
4143 (lambda _
4144 (substitute* "src/util/mpz.cpp"
4145 (("#include <immintrin.h>") ""))
4146 #t))
4147 (add-before 'configure 'bootstrap
4148 (lambda _
4149 (invoke "python" "scripts/mk_make.py")))
4150 ;; work around gnu-build-system's setting --enable-fast-install
4151 ;; (z3's `configure' is a wrapper around the above python file,
4152 ;; which fails when passed --enable-fast-install)
4153 (replace 'configure
4154 (lambda* (#:key inputs outputs #:allow-other-keys)
4155 (invoke "./configure"
4156 (string-append "--prefix=" (assoc-ref outputs "out")))))
4157 (add-after 'configure 'change-directory
4158 (lambda _
4159 (chdir "build")
4160 #t))
4161 (add-before 'check 'make-test-z3
4162 (lambda _
4163 ;; Build the test suite executable.
4164 (invoke "make" "test-z3" "-j"
4165 (number->string (parallel-job-count)))))
4166 (replace 'check
4167 (lambda _
4168 ;; Run all the tests that don't require arguments.
4169 (invoke "./test-z3" "/a"))))))
4170 (native-inputs
4171 `(("which" ,which)
4172 ("python" ,python-wrapper)))
4173 (synopsis "Theorem prover")
4174 (description "Z3 is a theorem prover and @dfn{satisfiability modulo
4175 theories} (SMT) solver. It provides a C/C++ API, as well as Python bindings.")
4176 (license license:expat)))
4177
4178 (define-public elpa
4179 (package
4180 (name "elpa")
4181 (version "2018.11.001")
4182 (source (origin
4183 (method url-fetch)
4184 (uri (string-append "http://elpa.mpcdf.mpg.de/html/Releases/"
4185 version "/elpa-" version ".tar.gz"))
4186 (sha256
4187 (base32
4188 "05hv3v5i6xmziaizw350ff72y1c3k662r85fm3xfdrkclj5zw9yc"))))
4189 (build-system gnu-build-system)
4190 (native-inputs
4191 `(("fortran" ,gfortran)
4192 ("perl" ,perl))) ;for configure and deps
4193 (inputs
4194 `(("blas" ,openblas)))
4195 (arguments
4196 `(#:configure-flags
4197 `("--enable-openmp"
4198 "--with-mpi=no"
4199 ;; ELPA unfortunately does not support runtime dispatch, so we can
4200 ;; only enable the "generic" kernels. See the "Cross compilation"
4201 ;; section of INSTALL.md.
4202 "--enable-generic"
4203 "--disable-sse" "--disable-sse-assembly" ;Require SSE3
4204 "--disable-avx" "--disable-avx2" "--disable-avx512"
4205 ,(string-append "CFLAGS=-O3 "
4206 "-funsafe-loop-optimizations -funsafe-math-optimizations "
4207 "-ftree-vect-loop-version -ftree-vectorize "
4208 ,(let ((system (or (%current-target-system)
4209 (%current-system))))
4210 (cond
4211 ((or (string-prefix? "x86_64" system)
4212 (string-prefix? "i686" system))
4213 "-msse2")
4214 (else "")))))
4215 #:parallel-tests? #f ;tests are multi-threaded, via BLAS
4216 #:phases
4217 (modify-phases %standard-phases
4218 (add-before 'configure 'patch-header-generation
4219 (lambda _
4220 (substitute* "configure"
4221 (("^ *make.*top_srcdir=\"\\$srcdir\"" &)
4222 (string-append & " CPP=\"$CPP\"")))
4223 #t))
4224 (add-before 'check 'setup-tests
4225 (lambda _
4226 ;; Decrease test time and RAM use by computing fewer eigenvalues.
4227 ;; The flags are (MATRIX-SIZE, EIGENVALUES, BLOCK-SIZE), where
4228 ;; the default is (500, 250, 16) for C tests and (5000, 150, 16)
4229 ;; for Fortran. This also causes several tests to pass that
4230 ;; otherwise would otherwise fail with matrix size 5000; possibly
4231 ;; due to floating point tolerances that are too tight.
4232 (setenv "TEST_FLAGS" "1500 50 16") ;from elpa.spec
4233 (setenv "OMP_NUM_THREADS" (number->string (parallel-job-count)))
4234 (substitute* "Makefile"
4235 ;; Test scripts are generated, patch the shebang
4236 (("#!/bin/bash") (string-append "#!" (which "sh"))))
4237 #t)))))
4238 (home-page "http://elpa.mpcdf.mpg.de")
4239 (synopsis "Eigenvalue solvers for symmetric matrices")
4240 (description
4241 "The ELPA library provides efficient and scalable direct eigensolvers for
4242 symmetric matrices.")
4243 (license license:lgpl3)))
4244
4245 (define-public elpa-openmpi
4246 (package (inherit elpa)
4247 (name "elpa-openmpi")
4248 (inputs
4249 `(("mpi" ,openmpi)
4250 ("scalapack" ,scalapack)
4251 ,@(package-inputs elpa)))
4252 (arguments
4253 (substitute-keyword-arguments (package-arguments elpa)
4254 ((#:configure-flags cf '())
4255 `(cons "--with-mpi=yes" (delete "--with-mpi=no" ,cf)))
4256 ((#:phases phases '%standard-phases)
4257 `(modify-phases ,phases
4258 (add-before 'check 'mpi-setup
4259 (lambda _
4260 ;; Tests use 2 mpi tasks by default, use our remaining build
4261 ;; cores as OpenMP threads.
4262 (setenv "OMP_NUM_THREADS" (number->string
4263 (max (quotient (parallel-job-count) 2)
4264 1)))
4265 (,%openmpi-setup)))))))
4266 (synopsis "Eigenvalue solvers for symmetric matrices (with MPI support)")))
4267
4268 (define-public elemental
4269 (package
4270 (name "elemental")
4271 (version "0.87.7")
4272 (source (origin
4273 (method git-fetch)
4274 (uri (git-reference
4275 (url "https://github.com/elemental/Elemental.git")
4276 (commit (string-append "v" version))))
4277 (file-name (git-file-name name version))
4278 (sha256
4279 (base32
4280 "1687xpjjzig27y2pnqv7hv09smpijyfdpz7qjgmcxf4shfajlfkc"))))
4281 (build-system cmake-build-system)
4282 (home-page "http://libelemental.org")
4283 (native-inputs
4284 `(("gfortran" ,gfortran)))
4285 (inputs
4286 `(("blas" ,openblas)
4287 ("gfortran:lib" ,gfortran "lib")
4288 ("gmp" ,gmp)
4289 ("lapack" ,lapack)
4290 ("metis" ,metis)
4291 ("mpc" ,mpc)
4292 ("mpfr" ,mpfr)
4293 ("mpi" ,openmpi)
4294 ("qd" ,qd)))
4295 (arguments
4296 `(#:build-type "Release" ;default RelWithDebInfo not supported
4297 #:configure-flags `("-DEL_DISABLE_PARMETIS:BOOL=YES"
4298 "-DEL_AVOID_COMPLEX_MPI:BOOL=NO"
4299 "-DEL_CACHE_WARNINGS:BOOL=YES"
4300 "-DEL_TESTS:BOOL=YES"
4301 "-DCMAKE_INSTALL_LIBDIR=lib"
4302 "-DGFORTRAN_LIB=gfortran")
4303 #:phases (modify-phases %standard-phases
4304 (add-before 'check 'mpi-setup
4305 ,%openmpi-setup)
4306 (add-before 'check 'setup-tests
4307 (lambda _
4308 ;; Parallelism is done at the MPI layer.
4309 (setenv "OMP_NUM_THREADS" "1")
4310 #t))
4311 (add-after 'install 'remove-tests
4312 (lambda* (#:key outputs #:allow-other-keys)
4313 ;; Tests are installed, with no easy configuration
4314 ;; switch to prevent this, so delete them.
4315 (delete-file-recursively
4316 (string-append (assoc-ref outputs "out") "/bin"))
4317 #t)))))
4318 (synopsis "Dense and sparse-direct linear algebra and optimization")
4319 (description "Elemental is a modern C++ library for distributed-memory
4320 dense and sparse-direct linear algebra, conic optimization, and lattice
4321 reduction.")
4322 (license license:bsd-2)))
4323
4324 (define-public mcrl2
4325 (package
4326 (name "mcrl2")
4327 (version "201908.0")
4328 (source (origin
4329 (method url-fetch)
4330 (uri (string-append
4331 "https://www.mcrl2.org/download/release/mcrl2-"
4332 version ".tar.gz"))
4333 (sha256
4334 (base32
4335 "1i4xgl2d5fgiz1mwi50cyfkrrcpm8nxfayfjgmhq7chs58wlhfsz"))))
4336 (inputs
4337 `(("boost" ,boost)
4338 ("glu" ,glu)
4339 ("mesa" ,mesa)
4340 ("qtbase" ,qtbase)))
4341 (build-system cmake-build-system)
4342 (synopsis "Toolset for the mCRL2 formal specification language")
4343 (description
4344 "@dfn{mCRL2} (micro Common Representation Language 2) is a formal
4345 specification language for describing concurrent discrete event systems. Its
4346 toolset supports analysis and automatic verification, linearisation, simulation,
4347 state-space exploration and generation, and tools to optimise and analyse
4348 specifications. Also, state spaces can be manipulated, visualised and
4349 analysed.")
4350 (home-page "https://mcrl2.org")
4351 (license license:boost1.0)))
4352
4353 (define-public mcrl2-minimal
4354 (package
4355 (inherit mcrl2)
4356 (name "mcrl2-minimal")
4357 (inputs
4358 `(("boost" ,boost)))
4359 (arguments
4360 '(#:configure-flags '("-DMCRL2_ENABLE_GUI_TOOLS=OFF")))))
4361
4362 (define-public r-subplex
4363 (package
4364 (name "r-subplex")
4365 (version "1.5-4")
4366 (source
4367 (origin
4368 (method url-fetch)
4369 (uri (cran-uri "subplex" version))
4370 (sha256
4371 (base32
4372 "10cbgbx1bgsax5z7gz6716g360xpq4mvq19cf4qqrxv02mmwz57z"))))
4373 (build-system r-build-system)
4374 (native-inputs
4375 `(("gfortran" ,gfortran)))
4376 (home-page "https://cran.r-project.org/web/packages/subplex")
4377 (synopsis "Unconstrained optimization using the subplex algorithm")
4378 (description "This package implements the Subplex optimization algorithm.
4379 It solves unconstrained optimization problems using a simplex method on
4380 subspaces. The method is well suited for optimizing objective functions that
4381 are noisy or are discontinuous at the solution.")
4382 (license license:gpl3+)))
4383
4384 (define-public r-desolve
4385 (package
4386 (name "r-desolve")
4387 (version "1.24")
4388 (source
4389 (origin
4390 (method url-fetch)
4391 (uri (cran-uri "deSolve" version))
4392 (sha256
4393 (base32
4394 "0hkvspq0fp8j64l9zayab2l2nazazhwfgfym0jllh0xv5a12r99s"))))
4395 (properties `((upstream-name . "deSolve")))
4396 (build-system r-build-system)
4397 (native-inputs
4398 `(("gfortran" ,gfortran)))
4399 (home-page "https://desolve.r-forge.r-project.org/")
4400 (synopsis "Solvers for initial value problems of differential equations")
4401 (description "This package provides functions that solve initial
4402 value problems of a system of first-order ordinary differential equations (ODE),
4403 of partial differential equations (PDE), of differential algebraic equations
4404 (DAE), and of delay differential equations. The functions provide an interface
4405 to the FORTRAN functions lsoda, lsodar, lsode, lsodes of the ODEPACK collection,
4406 to the FORTRAN functions dvode and daspk and a C-implementation of solvers of
4407 the Runge-Kutta family with fixed or variable time steps. The package contains
4408 routines designed for solving ODEs resulting from 1-D, 2-D and 3-D partial
4409 differential equations (PDE) that have been converted to ODEs by numerical
4410 differencing.")
4411 (license license:gpl2+)))
4412
4413 (define-public tcalc
4414 (package
4415 (name "tcalc")
4416 (version "2.0")
4417 (source
4418 (origin
4419 (method url-fetch)
4420 (uri (string-append "https://sites.google.com/site/mohammedisam2000/tcalc/tcalc-"
4421 version ".tar.gz"))
4422 (sha256
4423 (base32
4424 "0jq806m4dqfia85nppfm75mml9w57g0cgv4cdw9bp3zymda83s0m"))))
4425 (build-system gnu-build-system)
4426 (synopsis "The terminal calculator")
4427 (description
4428 "The terminal calculator is a small program to help users of the GNU/Linux
4429 terminal do calculations simply and quickly. The formula to be calculated can
4430 be fed to @command{tcalc} through the command line.")
4431 (home-page "https://sites.google.com/site/mohammedisam2000/tcalc")
4432 (license license:gpl3+)))
4433
4434 (define-public sundials
4435 (package
4436 (name "sundials")
4437 (version "3.1.1")
4438 (source
4439 (origin
4440 (method url-fetch)
4441 (uri (string-append "https://computation.llnl.gov/projects/sundials/download/"
4442 "sundials-" version ".tar.gz"))
4443 (sha256
4444 (base32
4445 "090s8ymhd0g1s1d44fa73r5yi32hb4biwahhbfi327zd64yn8kd2"))))
4446 (build-system cmake-build-system)
4447 (native-inputs
4448 `(("python" ,python-2))) ;for tests; syntax incompatible with python 3
4449 (inputs
4450 `(("fortran" ,gfortran) ;for fcmix
4451 ("blas" ,openblas)
4452 ("suitesparse" ,suitesparse))) ;TODO: Add hypre
4453 (arguments
4454 `(#:configure-flags `("-DEXAMPLES_ENABLE_C:BOOL=ON"
4455 "-DEXAMPLES_ENABLE_CXX:BOOL=ON"
4456 "-DEXAMPLES_ENABLE_F77:BOOL=ON"
4457 "-DEXAMPLES_ENABLE_F90:BOOL=ON"
4458 "-DEXAMPLES_INSTALL:BOOL=OFF"
4459
4460 "-DFCMIX_ENABLE:BOOL=ON"
4461
4462 "-DKLU_ENABLE:BOOL=ON"
4463 ,(string-append "-DKLU_INCLUDE_DIR="
4464 (assoc-ref %build-inputs "suitesparse")
4465 "/include")
4466 ,(string-append "-DKLU_LIBRARY_DIR="
4467 (assoc-ref %build-inputs "suitesparse")
4468 "/lib"))))
4469 (home-page "https://computation.llnl.gov/projects/sundials")
4470 (synopsis "Suite of nonlinear and differential/algebraic equation solvers")
4471 (description "SUNDIALS is a family of software packages implemented with
4472 the goal of providing robust time integrators and nonlinear solvers that can
4473 easily be incorporated into existing simulation codes.")
4474 (license license:bsd-3)))
4475
4476 (define-public sundials-openmpi
4477 (package (inherit sundials)
4478 (name "sundials-openmpi")
4479 (inputs
4480 `(("mpi" ,openmpi)
4481 ("petsc" ,petsc-openmpi) ;support in SUNDIALS requires MPI
4482 ,@(package-inputs sundials)))
4483 (arguments
4484 (substitute-keyword-arguments (package-arguments sundials)
4485 ((#:configure-flags flags '())
4486 `(cons* "-DMPI_ENABLE:BOOL=ON"
4487 "-DPETSC_ENABLE:BOOL=ON"
4488 (string-append "-DPETSC_INCLUDE_DIR="
4489 (assoc-ref %build-inputs "petsc")
4490 "/include")
4491 (string-append "-DPETSC_LIBRARY_DIR="
4492 (assoc-ref %build-inputs "petsc")
4493 "/lib")
4494 ,flags))
4495 ((#:phases phases '%standard-phases)
4496 `(modify-phases ,phases
4497 (add-before 'check 'mpi-setup
4498 ,%openmpi-setup)))))
4499 (synopsis "SUNDIALS with OpenMPI support")))
4500
4501 (define-public combinatorial-blas
4502 (package
4503 (name "combinatorial-blas")
4504 (version "1.6.2")
4505 (source
4506 (origin
4507 (method url-fetch)
4508 (uri (string-append "http://eecs.berkeley.edu/~aydin/CombBLAS_FILES/"
4509 "CombBLAS_beta_"
4510 (match (string-split version #\.)
4511 ((major minor patch)
4512 (string-append major minor "_" patch))) ;e.g. "16_2"
4513 ".tgz"))
4514 (sha256
4515 (base32
4516 "1a9wbgdqyy1whhfc0yl0yqkax3amnqa6iihhq48d063gc0jwfd9a"))
4517 (patches (search-patches "combinatorial-blas-awpm.patch"
4518 "combinatorial-blas-io-fix.patch"))))
4519 (build-system cmake-build-system)
4520 (inputs
4521 `(("mpi" ,openmpi)
4522 ("test-data" ,(origin
4523 (method url-fetch)
4524 (uri (string-append "https://people.eecs.berkeley.edu/~aydin/"
4525 "CombBLAS_FILES/testdata_combblas1.6.1.tgz"))
4526 (sha256
4527 (base32
4528 "01y2781cy3fww7znmidrp85mf8zx0c905w5vzvk1mgrmhhynim87"))))))
4529 (arguments
4530 `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
4531 "-DCMAKE_CXX_FLAGS=-DUSE_FUNNEL")
4532 #:parallel-tests? #f ;tests use 'mpiexec -n4'
4533 #:phases
4534 (modify-phases %standard-phases
4535 (add-before 'check 'mpi-setup
4536 ,%openmpi-setup)
4537 (add-before 'check 'test-setup
4538 (lambda* (#:key inputs #:allow-other-keys)
4539 (setenv "OMP_NUM_THREADS" "2")
4540 (invoke "tar" "xf" (assoc-ref inputs "test-data")))))))
4541 (home-page "https://people.eecs.berkeley.edu/~aydin/CombBLAS/html/")
4542 (synopsis "Linear algebra primitives for graph analytics")
4543 (description "The Combinatorial BLAS (CombBLAS) is an extensible
4544 distributed-memory parallel graph library offering a small but powerful set of
4545 linear algebra primitives specifically targeting graph analytics.")
4546 (license (list
4547 license:gpl2+ ;include/psort/(funnel|sort)*.h
4548 license:x11 ;usort and psort
4549 license:bsd-3)))) ;CombBLAS and MersenneTwister.h
4550
4551 (define-public dune-common
4552 (package
4553 (name "dune-common")
4554 (version "2.6.0")
4555 (source
4556 (origin
4557 (method url-fetch)
4558 (uri (string-append "https://dune-project.org/download/"
4559 version "/dune-common-" version ".tar.gz"))
4560 (sha256
4561 (base32
4562 "019wcr1qf7jwyxx1y5y290wdlglylskvbb2m01ljkzcza2xnlmhw"))))
4563 (build-system cmake-build-system)
4564 (arguments
4565 `(#:phases
4566 (modify-phases %standard-phases
4567 (add-after 'build 'build-tests
4568 (lambda* (#:key make-flags #:allow-other-keys)
4569 (apply invoke "make" "build_tests" make-flags)))
4570 ;; These tests fail because they require a fully functional MPI
4571 ;; environment.
4572 (add-after 'unpack 'disable-failing-tests
4573 (lambda _
4574 (setenv "ARGS"
4575 (string-append "--exclude-regex '("
4576 (string-join
4577 (list
4578 "remoteindicestest"
4579 "remoteindicestest-mpi-2"
4580 "syncertest"
4581 "syncertest-mpi-2"
4582 "variablesizecommunicatortest"
4583 "variablesizecommunicatortest-mpi-2"
4584 "arithmetictestsuitetest"
4585 "assertandreturntest"
4586 "assertandreturntest_ndebug"
4587 "concept"
4588 "debugaligntest"
4589 "mpicollectivecommunication"
4590 "mpicollectivecommunication-mpi-2"
4591 "mpiguardtest"
4592 "mpiguardtest-mpi-2"
4593 "mpihelpertest"
4594 "mpihelpertest-mpi-2"
4595 "mpihelpertest2"
4596 "mpihelpertest2-mpi-2")
4597 "|")
4598 ")'"))
4599 #t)))))
4600 (inputs
4601 `(("gmp" ,gmp)
4602 ("metis" ,metis)
4603 ("openmpi" ,openmpi)
4604 ("openblas" ,openblas)
4605 ("python" ,python)
4606 ("superlu" ,superlu)))
4607 (native-inputs
4608 `(("gfortran" ,gfortran)
4609 ("pkg-config" ,pkg-config)))
4610 (home-page "https://dune-project.org/")
4611 (synopsis "Distributed and Unified Numerics Environment")
4612 (description "DUNE, the Distributed and Unified Numerics Environment is a
4613 modular toolbox for solving @dfn{partial differential equations} (PDEs) with
4614 grid-based methods. It supports the easy implementation of methods like
4615 @dfn{Finite Elements} (FE), @dfn{Finite Volumes} (FV), and also @dfn{Finite
4616 Differences} (FD).")
4617 ;; GPL version 2 with "runtime exception" to make it behave like LGPLv2.
4618 (license license:gpl2)))
4619
4620 (define-public dune-geometry
4621 (package
4622 (name "dune-geometry")
4623 (version "2.6.0")
4624 (source
4625 (origin
4626 (method url-fetch)
4627 (uri (string-append "https://dune-project.org/download/"
4628 version "/dune-geometry-" version ".tar.gz"))
4629 (sha256
4630 (base32
4631 "0hlaaxjyv9j05blasvb67sy02hd0w4g9znf68gdh3l731dd1aqbn"))))
4632 (build-system cmake-build-system)
4633 (arguments
4634 `(#:phases
4635 (modify-phases %standard-phases
4636 (add-after 'build 'build-tests
4637 (lambda* (#:key make-flags #:allow-other-keys)
4638 (apply invoke "make" "build_tests" make-flags))))))
4639 (inputs
4640 `(("dune-common" ,dune-common)
4641 ("openmpi" ,openmpi)
4642 ;; Optional
4643 ("openblas" ,openblas)
4644 ("gmp" ,gmp)
4645 ("python" ,python)))
4646 (native-inputs
4647 `(("gfortran" ,gfortran)
4648 ("pkg-config" ,pkg-config)))
4649 (home-page "https://dune-project.org/")
4650 (synopsis "Distributed and Unified Numerics Environment")
4651 (description "DUNE, the Distributed and Unified Numerics Environment is a
4652 modular toolbox for solving @dfn{partial differential equations} (PDEs) with
4653 grid-based methods. It supports the easy implementation of methods like
4654 @dfn{Finite Elements} (FE), @dfn{Finite Volumes} (FV), and also @dfn{Finite
4655 Differences} (FD).
4656
4657 This package contains the basic DUNE geometry classes.")
4658 ;; GPL version 2 with "runtime exception"
4659 (license license:gpl2)))
4660
4661 (define-public dune-grid
4662 (package
4663 (name "dune-grid")
4664 (version "2.6.0")
4665 (source
4666 (origin
4667 (method url-fetch)
4668 (uri (string-append "https://dune-project.org/download/"
4669 version "/dune-grid-" version ".tar.gz"))
4670 (sha256
4671 (base32
4672 "1jp4vscm9yb9xg0lh7apzccfkhvgbnk652yahigmh3cvzpl4acd0"))))
4673 (build-system cmake-build-system)
4674 (arguments
4675 `(#:phases
4676 (modify-phases %standard-phases
4677 (add-after 'build 'build-tests
4678 (lambda* (#:key make-flags #:allow-other-keys)
4679 (apply invoke "make" "build_tests" make-flags)))
4680 ;; These tests fail because they require a fully functional MPI
4681 ;; environment.
4682 (add-after 'unpack 'disable-failing-tests
4683 (lambda _
4684 (setenv "ARGS"
4685 (string-append "--exclude-regex '("
4686 (string-join
4687 (list
4688 "scsgmappertest"
4689 "conformvolumevtktest"
4690 "gnuplottest"
4691 "nonconformboundaryvtktest"
4692 "subsamplingvtktest"
4693 "vtktest"
4694 "vtktest-mpi-2"
4695 "vtksequencetest"
4696 "gmshtest-onedgrid"
4697 "test-dgf-yasp"
4698 "test-dgf-yasp-offset"
4699 "test-dgf-oned"
4700 "test-geogrid-yaspgrid"
4701 "test-gridinfo"
4702 "test-identitygrid"
4703 "testiteratorranges"
4704 "test-hierarchicsearch"
4705 "test-parallel-ug-mpi-2"
4706 "test-yaspgrid-backuprestore-equidistant"
4707 "test-yaspgrid-backuprestore-equidistant-mpi-2"
4708 "test-yaspgrid-backuprestore-equidistantoffset"
4709 "test-yaspgrid-backuprestore-equidistantoffset-mpi-2"
4710 "test-yaspgrid-backuprestore-tensor"
4711 "test-yaspgrid-backuprestore-tensor-mpi-2"
4712 "test-yaspgrid-tensorgridfactory"
4713 "test-yaspgrid-tensorgridfactory-mpi-2"
4714 "test-yaspgrid-yaspfactory-1d"
4715 "test-yaspgrid-yaspfactory-1d-mpi-2"
4716 "test-yaspgrid-yaspfactory-2d"
4717 "test-yaspgrid-yaspfactory-2d-mpi-2"
4718 "test-yaspgrid-yaspfactory-3d"
4719 "test-yaspgrid-yaspfactory-3d-mpi-2"
4720 "globalindexsettest"
4721 "persistentcontainertest"
4722 "structuredgridfactorytest"
4723 "tensorgridfactorytest"
4724 "vertexordertest")
4725 "|")
4726 ")'"))
4727 #t)))))
4728 (inputs
4729 `(("dune-common" ,dune-common)
4730 ("dune-geometry" ,dune-geometry)
4731 ("gmp" ,gmp)
4732 ("metis" ,metis)
4733 ("openblas" ,openblas)
4734 ("openmpi" ,openmpi)
4735 ("python" ,python)))
4736 (native-inputs
4737 `(("gfortran" ,gfortran)
4738 ("pkg-config" ,pkg-config)))
4739 (home-page "https://dune-project.org/")
4740 (synopsis "Distributed and Unified Numerics Environment")
4741 (description "DUNE, the Distributed and Unified Numerics Environment is a
4742 modular toolbox for solving @dfn{partial differential equations} (PDEs) with
4743 grid-based methods. It supports the easy implementation of methods like
4744 @dfn{Finite Elements} (FE), @dfn{Finite Volumes} (FV), and also @dfn{Finite
4745 Differences} (FD).
4746
4747 This package contains the basic DUNE grid classes.")
4748 ;; GPL version 2 with "runtime exception"
4749 (license license:gpl2)))
4750
4751 (define-public dune-istl
4752 (package
4753 (name "dune-istl")
4754 (version "2.6.0")
4755 (source
4756 (origin
4757 (method url-fetch)
4758 (uri (string-append "https://dune-project.org/download/"
4759 version "/dune-istl-" version ".tar.gz"))
4760 (sha256
4761 (base32
4762 "0l2gyrvys5w6wsmk0ckbb7295s80b7yk7qrl7x66akv2jv1nzq2w"))))
4763 (build-system cmake-build-system)
4764 (arguments
4765 `(#:phases
4766 (modify-phases %standard-phases
4767 (add-after 'build 'build-tests
4768 (lambda* (#:key make-flags #:allow-other-keys)
4769 (apply invoke "make" "build_tests" make-flags)))
4770 ;; These tests fail because they require a fully functional MPI
4771 ;; environment.
4772 (add-after 'unpack 'disable-failing-tests
4773 (lambda _
4774 (setenv "ARGS"
4775 (string-append "--exclude-regex '("
4776 (string-join
4777 (list
4778 "galerkintest"
4779 "hierarchytest"
4780 "pamgtest"
4781 "pamg_comm_repart_test"
4782 "matrixredisttest"
4783 "vectorcommtest"
4784 "matrixmarkettest")
4785 "|")
4786 ")'"))
4787 #t)))))
4788 (inputs
4789 `(("dune-common" ,dune-common)
4790 ("openmpi" ,openmpi)
4791 ;; Optional
4792 ("metis" ,metis)
4793 ("superlu" ,superlu)
4794 ("openblas" ,openblas)
4795 ("gmp" ,gmp)
4796 ("python" ,python)))
4797 (native-inputs
4798 `(("gfortran" ,gfortran)
4799 ("pkg-config" ,pkg-config)))
4800 (home-page "https://dune-project.org/")
4801 (synopsis "Distributed and Unified Numerics Environment")
4802 (description "DUNE, the Distributed and Unified Numerics Environment is a
4803 modular toolbox for solving @dfn{partial differential equations} (PDEs) with
4804 grid-based methods.
4805
4806 This is the iterative solver template library which provides generic sparse
4807 matrix/vector classes and a variety of solvers based on these classes. A
4808 special feature is the use of templates to exploit the recursive block
4809 structure of finite element matrices at compile time. Available solvers
4810 include Krylov methods, (block-) incomplete decompositions and
4811 aggregation-based algebraic multigrid.")
4812 ;; GPL version 2 with "runtime exception"
4813 (license license:gpl2)))
4814
4815 (define-public dune-localfunctions
4816 (package
4817 (name "dune-localfunctions")
4818 (version "2.6.0")
4819 (source
4820 (origin
4821 (method url-fetch)
4822 (uri (string-append "https://dune-project.org/download/"
4823 version "/dune-localfunctions-" version ".tar.gz"))
4824 (sha256
4825 (base32
4826 "19c6zjinwwpy8jh4v4prhphyd438rapd4x80fj93apmwgw04nrhl"))))
4827 (build-system cmake-build-system)
4828 (arguments
4829 `(#:phases
4830 (modify-phases %standard-phases
4831 (add-after 'build 'build-tests
4832 (lambda* (#:key make-flags #:allow-other-keys)
4833 (apply invoke "make" "build_tests" make-flags))))))
4834 (inputs
4835 `(("dune-common" ,dune-common)
4836 ("dune-geometry" ,dune-geometry)
4837 ("openmpi" ,openmpi)
4838 ;; Optional
4839 ("metis" ,metis)
4840 ("superlu" ,superlu)
4841 ("gmp" ,gmp)))
4842 (native-inputs
4843 `(("gfortran" ,gfortran)
4844 ("pkg-config" ,pkg-config)))
4845 (home-page "https://dune-project.org/")
4846 (synopsis "Distributed and Unified Numerics Environment") ; TODO
4847 (description "This DUNE module provides interface and implementation for
4848 shape functions defined on the DUNE reference elements. In addition to the
4849 shape function, interpolation operators and special keys are provided which
4850 can be used to assemble global function spaces on finite-element grids.
4851
4852 This package provides an interface and implementation for shape functions
4853 defined on the DUNE reference elements. In addition to the shape function,
4854 interpolation operators and special keys are provided which can be used to
4855 assemble global function spaces on finite-element grids.")
4856 ;; GPL version 2 with "runtime exception"
4857 (license license:gpl2)))
4858
4859 (define-public dune-alugrid
4860 (package
4861 (name "dune-alugrid")
4862 (version "2.6.0")
4863 (source
4864 (origin
4865 (method url-fetch)
4866 (uri (string-append "https://dune-project.org/download/"
4867 version "/dune-alugrid-" version ".tar.gz"))
4868 (sha256
4869 (base32
4870 "1l9adgyjpra8mvwm445s0lpjshnb63jag85fb2hisbjn6bm320yj"))))
4871 (build-system cmake-build-system)
4872 (arguments
4873 `(#:tests? #f ; 7 of 8 tests fail because they need a full MPI
4874 ; environment
4875 #:phases
4876 (modify-phases %standard-phases
4877 (add-after 'unpack 'patch-include
4878 (lambda _
4879 (substitute* "dune/alugrid/test/test-alugrid.cc"
4880 (("doc/grids/gridfactory/testgrids")
4881 "doc/dune-grid/grids/gridfactory/testgrids"))
4882 #t))
4883 (add-after 'build 'build-tests
4884 (lambda* (#:key inputs make-flags #:allow-other-keys)
4885 (setenv "CPLUS_INCLUDE_PATH"
4886 (string-append (assoc-ref inputs "dune-grid") "/share"))
4887 (apply invoke "make" "build_tests" make-flags))))))
4888 (inputs
4889 `(("dune-common" ,dune-common)
4890 ("dune-geometry" ,dune-geometry)
4891 ("dune-grid" ,dune-grid)
4892 ("openmpi" ,openmpi)
4893 ;; Optional
4894 ("metis" ,metis)
4895 ("openblas" ,openblas)
4896 ("python" ,python)
4897 ("superlu" ,superlu)
4898 ("gmp" ,gmp)
4899 ("zlib" ,zlib)))
4900 (native-inputs
4901 `(("gfortran" ,gfortran)
4902 ("pkg-config" ,pkg-config)))
4903 (home-page "https://dune-project.org/")
4904 (synopsis "Distributed and Unified Numerics Environment")
4905 (description "ALUGrid is an adaptive, loadbalancing, unstructured
4906 implementation of the DUNE grid interface supporting either simplices or
4907 cubes.")
4908 (license license:gpl2+)))
4909
4910 (define-public dune-typetree
4911 (package
4912 (name "dune-typetree")
4913 (version "2.6.0")
4914 (source
4915 (origin
4916 (method git-fetch)
4917 (uri (git-reference
4918 (url "https://gitlab.dune-project.org/staging/dune-typetree.git")
4919 (commit (string-append "v" version))))
4920 (file-name (git-file-name name version))
4921 (sha256
4922 (base32
4923 "0mnv6w2f22lz3j4bdpdjq55vjm8xxfx9v4vvhg9bd36xpsbjpjp9"))))
4924 (build-system cmake-build-system)
4925 (arguments
4926 `(#:phases
4927 (modify-phases %standard-phases
4928 (add-after 'build 'build-tests
4929 (lambda* (#:key make-flags #:allow-other-keys)
4930 (apply invoke "make" "build_tests" make-flags))))))
4931 (inputs
4932 `(("dune-common" ,dune-common)
4933 ("openmpi" ,openmpi)
4934 ;; Optional
4935 ("openblas" ,openblas)
4936 ("python" ,python)
4937 ("metis" ,metis)
4938 ("superlu" ,superlu)
4939 ("gmp" ,gmp)))
4940 (native-inputs
4941 `(("gfortran" ,gfortran)
4942 ("pkg-config" ,pkg-config)))
4943 (home-page "https://dune-project.org/")
4944 (synopsis "Distributed and Unified Numerics Environment")
4945 (description "TypeTree is a template library for constructing and
4946 operating on statically typed trees of objects.")
4947 ;; Either GPL version 2 with "runtime exception" or LGPLv3+.
4948 (license (list license:lgpl3+ license:gpl2))))
4949
4950 (define-public dune-functions
4951 (package
4952 (name "dune-functions")
4953 (version "2.6.0")
4954 (source
4955 (origin
4956 (method git-fetch)
4957 (uri (git-reference
4958 (url "https://gitlab.dune-project.org/staging/dune-functions.git")
4959 (commit (string-append "v" version))))
4960 (file-name (git-file-name name version))
4961 (sha256
4962 (base32
4963 "1an8gb477n8j0kzpbrv7nr1snh8pxip0gsxq6w63jc83gg3dj200"))))
4964 (build-system cmake-build-system)
4965 (arguments `(#:tests? #f)) ; FIXME: tests require dune-uugrid
4966 (inputs
4967 `(("dune-common" ,dune-common)
4968 ("dune-istl" ,dune-istl)
4969 ("dune-localfunctions" ,dune-localfunctions)
4970 ("dune-grid" ,dune-grid)
4971 ("dune-geometry" ,dune-geometry)
4972 ("dune-typetree" ,dune-typetree)
4973 ("openmpi" ,openmpi)
4974 ("openblas" ,openblas)
4975 ("metis" ,metis)
4976 ("python" ,python)
4977 ("superlu" ,superlu)
4978 ("gmp" ,gmp)))
4979 (native-inputs
4980 `(("gfortran" ,gfortran)
4981 ("pkg-config" ,pkg-config)))
4982 (home-page "https://dune-project.org/")
4983 (synopsis "Distributed and Unified Numerics Environment")
4984 (description "The dune-functions module provides an abstraction layer for
4985 global finite element functions. Its two main concepts are functions
4986 implemented as callable objects, and bases of finite element spaces.")
4987 ;; Either GPL version 2 with "runtime exception" or LGPLv3+.
4988 (license (list license:lgpl3+ license:gpl2))))
4989
4990 (define-public dune-pdelab
4991 (package
4992 (name "dune-pdelab")
4993 (version "2.6.0-rc1")
4994 (source
4995 (origin
4996 (method git-fetch)
4997 (uri (git-reference
4998 (url "https://gitlab.dune-project.org/pdelab/dune-pdelab")
4999 (commit (string-append "v" version))))
5000 (file-name (git-file-name name version))
5001 (sha256
5002 (base32
5003 "07g0s9448z65vjrq88g5rv3340iifil85k170n8kbqchsvi4ny5v"))))
5004 (build-system cmake-build-system)
5005 (arguments '(#:tests? #f)) ; XXX: the tests cannot be compiled
5006 (inputs
5007 `(("dune-common" ,dune-common)
5008 ("dune-istl" ,dune-istl)
5009 ("dune-localfunctions" ,dune-localfunctions)
5010 ("dune-geometry" ,dune-geometry)
5011 ("dune-grid" ,dune-grid)
5012 ("dune-typetree" ,dune-typetree)
5013 ("dune-functions" ,dune-functions)
5014 ("openmpi" ,openmpi)
5015 ;; Optional
5016 ("openblas" ,openblas)
5017 ("eigen" ,eigen)
5018 ("metis" ,metis)
5019 ("python" ,python)
5020 ("superlu" ,superlu)
5021 ("gmp" ,gmp)))
5022 (native-inputs
5023 `(("gfortran" ,gfortran)
5024 ("pkg-config" ,pkg-config)))
5025 (home-page "https://dune-project.org/")
5026 (synopsis "Differential equations solver toolbox")
5027 (description "PDELab is a partial differential equations solver toolbox
5028 built on top of DUNE, the Distributed and Unified Numerics Environment.")
5029 ;; Either GPL version 2 with "runtime exception" or LGPLv3+.
5030 (license (list license:lgpl3+ license:gpl2))))
5031
5032 (define-public mlucas
5033 (package
5034 (name "mlucas")
5035 (version "18")
5036 (source
5037 (origin
5038 (method url-fetch)
5039 (uri (string-append
5040 "https://mersenneforum.org/mayer/src/C/mlucas_v" version ".txz"))
5041 (sha256
5042 (base32 "0h4xj6pyyac79ka5ibqjilfa3s9j3yxnzgpwc57b54kfh2bj3447"))))
5043 (build-system gnu-build-system)
5044 (inputs
5045 `(("python2" ,python-2)))
5046 (arguments
5047 `(#:tests? #f ; no tests
5048 #:phases
5049 (modify-phases %standard-phases
5050 (replace 'configure
5051 (lambda _
5052 (chdir "src")
5053 (call-with-output-file "Makefile"
5054 (lambda (port)
5055 (format port "CC = gcc
5056 CFLAGS = -O3 ~a -DUSE_THREADS
5057 LDLIBS = -lm -lpthread -lrt
5058 Mlucas: $(addsuffix .o,$(basename $(wildcard *.c)))
5059 "
5060 ,(let ((system (or (%current-target-system)
5061 (%current-system))))
5062 (cond
5063 ((string-prefix? "x86_64" system) "-DUSE_SSE2")
5064 (else ""))))))
5065 #t))
5066 (replace 'install
5067 (lambda* (#:key outputs #:allow-other-keys)
5068 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
5069 (install-file "Mlucas" bin)
5070 (install-file "primenet.py" bin))
5071 #t)))))
5072 (home-page "https://www.mersenne.org")
5073 (synopsis "Great Internet Mersenne Prime Search (GIMPS) distributed computing client")
5074 (description "Mlucas performs Lucas-Lehmer primality testing of Mersenne
5075 numbers in search of a world-record prime. You may use it to test any
5076 suitable number as you wish, but it is preferable that you do so in a
5077 coordinated fashion, as part of the Great Internet Mersenne Prime
5078 Search (GIMPS). Mlucas also includes a simple Python script for assignment
5079 management via the GIMPS project's Primenet server.")
5080 (license license:gpl2+)))
5081
5082 (define-public nauty
5083 (package
5084 (name "nauty")
5085 (version "2.6r11")
5086 (source (origin
5087 (method url-fetch)
5088 (uri (string-append
5089 "https://pallini.di.uniroma1.it/"
5090 "nauty" (string-join (string-split version #\.) "")
5091 ".tar.gz"))
5092 (sha256
5093 (base32
5094 "05z6mk7c31j70md83396cdjmvzzip1hqb88pfszzc6k4gy8h3m2y"))))
5095 (build-system gnu-build-system)
5096 (outputs '("out" "lib"))
5097 (arguments
5098 `(#:test-target "checks"
5099 #:phases
5100 (modify-phases %standard-phases
5101 ;; Default make target does not build all available
5102 ;; executables. Create them now.
5103 (add-after 'build 'build-extra-programs
5104 (lambda _
5105 (for-each (lambda (target) (invoke "make" target))
5106 '("blisstog" "bliss2dre" "checks6" "sumlines"))
5107 #t))
5108 ;; Upstream does not provide any install target.
5109 (replace 'install
5110 (lambda* (#:key outputs #:allow-other-keys)
5111 (let* ((out (assoc-ref outputs "out"))
5112 (lib-output (assoc-ref outputs "lib"))
5113 (bin (string-append out "/bin"))
5114 (doc (string-append out "/share/doc/nauty/"))
5115 (include (string-append lib-output "/include/nauty"))
5116 (lib (string-append lib-output "/lib/nauty")))
5117 (for-each (lambda (f) (install-file f bin))
5118 '("dreadnaut" "NRswitchg" "addedgeg" "amtog" "biplabg"
5119 "blisstog" "bliss2dre" "catg" "checks6" "complg"
5120 "converseg" "copyg" "countg" "cubhamg" "deledgeg"
5121 "delptg" "directg" "dretodot" "dretog" "genbg"
5122 "genbgL" "geng" "genquarticg" "genrang" "genspecialg"
5123 "gentourng" "gentreeg" "hamheuristic" "labelg"
5124 "linegraphg" "listg" "multig" "newedgeg" "pickg"
5125 "planarg" "ranlabg" "shortg" "showg" "subdivideg"
5126 "sumlines" "twohamg" "vcolg" "watercluster2"))
5127 (for-each (lambda (f) (install-file f include))
5128 (find-files "." "\\.h$"))
5129 (for-each (lambda (f) (install-file f lib))
5130 (find-files "." "\\.a$"))
5131 (for-each (lambda (f) (install-file f doc))
5132 (append '("formats.txt" "README" "schreier.txt")
5133 (find-files "." "\\.pdf$")))))))))
5134 (inputs
5135 `(("gmp" ,gmp))) ;for sumlines
5136 (home-page "https://pallini.di.uniroma1.it/")
5137 (synopsis "Library for graph automorphisms")
5138 (description "@code{nauty} (No AUTomorphisms, Yes?) is a set of
5139 procedures for computing automorphism groups of graphs and digraphs.
5140
5141 @code{nauty} computes graph information in the form of a set of
5142 generators, the size of the group, and the orbits of the group; it can
5143 also produce a canonical label. The @code{nauty} suite is written in
5144 C and comes with a command-line interface, a collection of
5145 command-line tools, and an Application Programming Interface (API).
5146
5147 This package provides the static libraries required to run programs
5148 compiled against the nauty library.")
5149 (license license:asl2.0)))
5150
5151 (define-public ppl
5152 (package
5153 (name "ppl")
5154 (version "1.2")
5155 (source
5156 (origin
5157 (method url-fetch)
5158 (uri (string-append "https://www.bugseng.com/products/ppl/download/"
5159 "ftp/releases/" version
5160 "/ppl-" version ".tar.gz"))
5161 (sha256
5162 (base32
5163 "1j5aji1g2vmdvc0gqz45n2ll2l2f6czca04wiyfl5g3sm3a6vhvb"))))
5164 (build-system gnu-build-system)
5165 (native-inputs
5166 `(("m4", m4)))
5167 (inputs
5168 `(("glpk" ,glpk)
5169 ("gmp", gmp)))
5170 (home-page "https://www.bugseng.com/parma-polyhedra-library")
5171 (synopsis
5172 "Parma Polyhedra Library for computations with polyhedra")
5173 (description
5174 "The Parma Polyhedra Library (PPL) provides numerical abstractions
5175 especially targeted at applications in the field of analysis and
5176 verification of complex systems. These abstractions include convex
5177 polyhedra, defined as the intersection of a finite number of (open or
5178 closed) halfspaces, each described by a linear inequality (strict or
5179 non-strict) with rational coefficients; some special classes of polyhedra
5180 shapes that offer interesting complexity/precision tradeoffs; and grids
5181 which represent regularly spaced points that satisfy a set of linear
5182 congruence relations. The library also supports finite powersets and
5183 products of (any kind of) polyhedra and grids, a mixed integer linear
5184 programming problem solver using an exact-arithmetic version of the simplex
5185 algorithm, a parametric integer programming solver, and primitives for
5186 termination analysis via the automatic synthesis of linear ranking
5187 functions.")
5188 (license license:gpl3+)))
5189
5190 (define-public speedcrunch
5191 (package
5192 (name "speedcrunch")
5193 (version "0.12.0")
5194 (source
5195 (origin
5196 (method git-fetch)
5197 (uri (git-reference
5198 (url "https://bitbucket.org/heldercorreia/speedcrunch.git")
5199 (commit (string-append "release-" version))))
5200 (file-name (git-file-name name version))
5201 (sha256
5202 (base32
5203 "0vh7cd1915bjqzkdp3sk25ngy8cq624mkh8c53c5bnzk357kb0fk"))))
5204 (build-system cmake-build-system)
5205 (inputs `(("qtbase" ,qtbase)))
5206 (native-inputs `(("qttools" ,qttools)))
5207 (arguments
5208 `(#:phases
5209 (modify-phases %standard-phases
5210 (add-after 'unpack 'chdir-to-src
5211 (lambda _ (chdir "src") #t)))))
5212 (synopsis "High-precision scientific calculator")
5213 (description
5214 "SpeedCrunch is a high-precision scientific calculator. It features a
5215 syntax-highlighted scrollable display and is designed to be fully used via
5216 keyboard. Some distinctive features are auto-completion of functions and
5217 variables, a formula book, and quick insertion of constants from various
5218 fields of knowledge.")
5219 (home-page "http://speedcrunch.org/")
5220 (license license:gpl2+)))
5221