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