News

Java Specification Request for
FloatingPoint Extensions
has been withdrawn due to difficulties in setting up an expert group.
Java Specification Request for
MultiArrays
under consideration. (WITHDRAWN)


Numerics Working Group

The goals of the Numerics Working Group of the Java Grande Forum are (1) to assess the
suitability of Java for numerical computation, (2) to work towards community
consensus on actions which can be taken to overcome deficiencies of the
language and its runtime environment, and (3) to encourage the development of
APIs for core mathematical operations. The Group hosts open meetings and
other forums to discuss these issues.
Reports
Presentations
Proposed APIs for Numerical Computing


Meetings

Future
Past

Workshop on Java in Computational Science,
held in conjunctions with the
International Conference on Computational Science 2003 (ICCS 2003),
Melbourne, Australia (June 24, 2003).

5th International Workshop on Java for Parallel and Distributed Computing,
held in conjunction with IPDPS 2003,
Nice, France (April 2226, 2003)

Joint ACM Java Grande  ISCOPE 2002 Conference,
Seattle, WA, USA (November 35, 2002)

Java Virtual Machine Research and Technology Symposium 2002 (JVM'02),
San Francisco, CA, USA (August 12, 2002)

4th International Workshop on Java for Parallel and Distributed Computing,
held in conjunction with IPDPS 2002, Fort Lauderdale,
Florida, USA (April 1519, 2002)
 Workshop onJava in High
Performance Computing at HPCN Eurpe 2001 Conference, Amsterdam, The Netherlands
(June 25  27, 2001)
 Third Workshop on Java
for High Performance Computing in conjunction with ICS'01, Sorrento, Italy
(June 1621, 2001).
 Joint ACM Java Grande  ISCOPE
Conference in San Francisco Bay Area (June 24, 2001). Includes meetings of the
Java Grande Numerics Working Group on June 4.
 Shortcourse on Java for High Performance Computing
at the Tenth SIAM Conference on
Parallel processing for Scientific
Computing in Portsmouth, Virginia, USA (March 11, 2001).
 EuroPar 2000
Workshop on ObjectOriented Architectures, Tools and Applications
in Munich, Germany (August 29  September 1, 2000).
 Dagsthul Seminar
on High Performance Computing in Java in Dagsthul, Germany
(August 20  August 25, 2000).
 Minisymposium on The Role
of Java in Scientific Computing at the SIAM
Annual Meeting in Puerto Rico (July 1014, 2000).
 ACM Java Grande
Conference in San Francisco (June 2000). Included meetings of the Java
Grande Numerics Working Group on June 5.
 Second Workshop
on Java for High Performance Computing at ICS 2000 in Santa Fe, NM
(May 811, 2000)
 Workshop
on Java for High Performance Computing at HPCNEurope 2000 in Amsterdam
(May 810, 2000)
 Panel at ISCOPE99 (December 1999)
 Panel at SC'99 (November 1999)
 Java for Computational Science and Engineering Minisymposium at
International Congress on Industrial and Applied Mathematics (July 1999)
 Tutorial & Workshop on
Java for HighPerformance Computing at the 1999 ACM International
Conference on Supercomputing (June 1999)
 ACM Java Grande
Conference (June 1999)
 International Workshop on Java for Parallel and Distributed Computing (April 1999)
 Panel at SC'98 in Orlando (November 1998)
 First UK Workshop on Java for
High Performance Network Computing (September 1998)
 ACM Workshop on Java
for HighPerformance Network Computing (February 1998)


Proposals

Language Extensions
Standard Classes for Numerical Computing


Benchmarks

Numeric

SciMark
is a composite benchmark comprising of FFT kernels,
finitedifference stencils, Monte Carlo simulations,
sparse matrix computations, and direct (LU) factorization.

Java Grande Benchmark Suite
is a collection of lowlevel kernels, and applications
for scientific and technical computing.

Java Linpack
Benchmark is a translation of the popular Linpack benchmark,
originally written in Fortran. It measures the performance
solving a 100x100 dense linear system.

Java matrix benchmark
is a tool for evaluating the performance and
stability of java matrix libraries.
General


Libraries

General Numerics

Apfloat is a
arbitrary precision floatingpoint arithmetic package.

ArciMath BigDecimal is an extension of java.math.BigDecimal based on IBM's Java Specification Request.

Colt is a free Java
toolkit containing data structures and utilities intended for high performance
computing.

CommonsMath The Jakarta
Mathematics Library is is a library of lightweight, selfcontained mathematics and
statistics components addressing the most common problems not available in the
Java programming language.

Drej, an opensource Java
library for linear and nonlinear leastsquares regression and regularized
leastsquares classification.

A translation of the ELEFUNT
Elementary Functions Testing Package has been ported to Java.
The collection also contains extensions to java.lang.Math and new classes
for numeric output formatting.

IBM's AlphaWorks contains several tools of interest, including

Java Numerical Toolkit (JNT)

Java Ultimate
Math Package, a framework for arbitrary precision computations.

The Java3D effort produced a matrix package for use in graphics.

JMSL, a collection of
mathematical, statistical and charting classes, written in 100% Java, marketed
by Visual Numeric, Inc. Includes linear algebra, zero finding, splines,
ordinary differential equations, linear programming, nonlinear optimization,
FFTs, special functions, regression, ANOVA, ARMA, Kalman filters.

JLargeArrays, a pure Java library of onedimensional numeric arrays that can store up to 2^63 elements.

JSci, a set of Java
packages for linear algebra, statistics, wavelets. Includes chart/graph
components and a partial MathML DOM implementation.

jScience contains packages for numerical linear algebra,
for computing with units (e.g., kg., sec.), and other utility operations.

Jspline+
is a spline approximation library for Java developed at the
Institute of Computational Mathematics and Mathematical Geophysics (RAS) in
Novosibirsk. It contains classes for univariate and multivariate spline
approximation on scattered meshes, as well as core matrix and linear system
solution classes.

JTransforms,
The first open source, multithreaded FFT library in pure Java.

Koalog Constraint Solver
is a commercial Java library for solving combinatorial optimization problems
using Constraint Programming or Local Search.

Least Squares Software markets
the jCrunch[tm] class libraries for numerical computing.

mpjava
is a Java implementation of David Bailey's Fortranbased multiprecision
package. The package performs multi precision floating point arithmetic
with arbitrary precision level. It takes advantage of Java's inheritance
facility to provide smooth transition from primitive arithmetic types.

netlib has a small collection of Java numerical classes.

A
Numerical Library in Java for Scientists and Engineers, a book published
by CRC Press, contains a CDROM with translation into Java of the library
NUMAL (NUMerical procedures in Algol 60).

ojAlgo, an open source pure Java mathematics package
containing matrices, complex numbers, and optimization, with links to
Jama, Jampack, and Colt. .

OpsResearch has developed a freeware
library of more than 450 Operations Research objects, including packages for
linear programming, graphtheoretic problems, linear algebra, nonlinear
equations, probability and geometry.

The Orbital library is a class library providing objectoriented
representations and algorithms for logic, mathematics and artificial intelligence.
It includes theorem proving, computer algebra, search and planning, as well as
machine learning algorithms.

A set of Java classes from the book Ordinary and Partial
Differential Equation Routines in C, C++, Fortran, Java, Maple and Matlab
can be obtained from author William Schiesser.

Parallel Colt,
An attempt to implement fully multithreaded version of Colt. Still in
early development stage.

RngPack, a pseudorandom
number generator library.

SSJ,
Stochastic Simulation in Java, provides facilities for generating random variates,
computing measures related to probability distributions, performing
goodnessoffit tests, applying quasiMonte Carlo methods, collecting
elementary statistics, and programming discreteevent simulations.

SuanShu, a large collection of Java classes for basic numerical analysis, statistics, and optimization.
Linear Algebra, BLAS

JAMA (JAva MAtrix package)
provides factorizatons (LU, Cholesky, QR, SVD) and
symmetric/nonsymmetric eigenvalue problems. Jama is a proposed
interface standard for dense linear algebra computations.
The package has been relesed for comment by the MathWorks and NIST.

Jampack (JAva Matrix
PACKage) is a collection of cooperating Java classes for numerical linear
algebra.
Jampack fully supports complex matrices. Developed by Pete Stewart of the
University of Maryland and NIST, Jampack is preliminary and incomplete, but is
being released to see if there is sufficient interest to continue its
development.

Java Lapack is
available from netlib at the University of Tennessee at Knoxville.
This code was automatically translated from the Fortran version of the wellknow
LAPACK linear algebra package using
f2j.

la4j is a pure Java library for
linear algebra that uses many structural and object oriented patterns from the classic
GoF book.

The Linear
Algebra component of the Java Numerical Toolkit (JNT) provides LU,
QR factorizations, optimized BLAS, and sparse matrices.

MTJ is designed to
be used as a library for developing numerical applications, both for small and
large scale computations. The library is based on BLAS and LAPACK for its dense
and structured sparse computations, and on the Templates project for unstructured
sparse operations.

OpsResearch has developed a freeware
library of more than 450 Operations Research objects which include a complete
implementation of the BLAS in both serial and parallel versions.

The OwlPack: a general purpose
linear algebra library in polymorphic, objectoriented style Java, based on the
standard Fortran LINPACK library. Not meant for highperformance applications.
Rather, serves an exercise in writing scientific programs in Java in an
elegant, objectoriented style, given sufficient compiler technologies to
ameliorate the performance problems

Steve Verrill developed one of the first Java linear
algebra packages from the Fortran BLAS and LINPACK.

Universal Java Matrix Package (UJMP)
is an open source Java library which provides sparse and dense matrix classes, as well as a large
number of calculations for linear algebra like matrix multiplication or matrix inverse.
UJMP uses multiple threads for calculations for improved performance on modern hardware.
Also supported are visualization methods, import/export filters for various file formats,
and interfaces to Matlab, Octave and R.

The vecmath
package in the Java 3D(TM)
API provides general matrix and vector classes (GMatrix,
GVector)
along with its specialized matrix classes for graphics applications.

EJML
is a linear algebra library for manipulating dense matrices. Its design goals are; 1) to be as computationally efficient as possible for both small and large matrices, and 2) to be accessible to both novices and experts. These goals are accomplished by dynamically selecting the best algorithms to use at runtime and by designing a clean API. EJML is written in 100% Java.


Tools / Utilities

Formatted I/O for Java

Henrik Bengtsson's Java
printf(), package provides Clike formatted output.

Lava Rocks, by Charlton
D. Rose, provides text parsing classes for scientific I/O, including an
implementation of printf().

JNT NumericReader()
class: readapts java.io.Reader to correctly parse floating point
numbers in scientific notation.
Multidimensional Arrays
Extended Languages for Java

Robert Tolksdorf keeps a list
of langauages (compilers, interpreters, preprocessors, assemblers) for
the Java Virtual Machine (JVM).

cj, a Java compiler that
implements complex as a primitive type.

HPJava, is an environment for scientific
and parallel programming using Java. It is an extension of Java that incorporates
data parallel programming features similar to those in HPF. It also includes
Fortranstyle multiarrays.

Jython, an implementation of the highlevel,
dynamic, objectoriented language Python written in 100% Pure Java, and
seamlessly integrated with the Java platform.

Timber is a static compiler
for Spar/Java, a superset of Java with constructs for highperformance computing.
The additions include support for data parallelism and task parallelism,
tuples, multidimensional arrays, generic classes and interfaces through
templates, complex numbers, and subscript operator overloading.

zeta, a Java compiler
that admits infix notation for operations on complex variables
Linking Java to Other Technical Computing Packages

JavaMath
is free software to enable mathematical programs in Java to use the computational
capabilities of existing compute engines, either standalone applications or
Webbased clientserver applications.

J/Link for Mathematica
provides tools to call Java from Mathematica and Mathematica from Java.
Scientific Visualization

Java 3D(TM) API
is a set of classes for writing threedimensional graphics applications.

The NCSA Horizon Image
Data Browser Package is a toolkit for visualizing multidimensional
arrays in a formatindependent way.

Visual Numeric's JWAVE
provides a set of Netscape IFC based Java components for data visualization
and numerics, using a PVWAVE server.

The Scientific Graphics
Toolkit of NOAA's NOAAServer Project
aims to provide Java classes to produce publication
quality, object oriented graphics of scientific data. Features include user
settable or automatically scaled axes, automatically selfscaling time axes,
labels as movable, customizable objects, and automatic generation of legends.

VisAD, from the
SSEC Visualization Project,
is a Java class library for interactive and collaborative visualization
and analysis of numerical data.


Related Papers, Talks

From flop to megaflops: Java for technical computing
Jos‰ E. Moreira, Samuel P. Midkiff and Manish Gupta
ACM Transactions on Programming Languages and Systems
Volume 22 , Issue 2 (2000), pp. 265295.
Just when you thought your little language was safe:
`Expression Templates' in Java
Todd L. Veldhuizen
Indiana University CS Technical Report Numer 539, July 2000
Postscript
Digital Journey,
Work of the Java Grande Forum featured in
videotaped interviews with
John Gage at JavaOne 2000.
Towards a Science of Reliable Programming
Bill Joy
ACM Java Grande Conference, June 1999.
Slides in Powerpoint
Efficient Support for Complex Numbers in Java
Peng Wu, Sam Midkiff, Jose Moreira and Manish Gupta
ACM Java Grande Conference, June 1999.
Postscript
PDF
Slides in PDF
An Evaluation of Java for Numerical Computing
B.L. Blount and S. Chatterjee
January 1999.
PDF
Numerical Performance in Java
Jon Meyer
Working Paper, January 1999.
Is Java ready for computational science?
Michael Philippsen
EuroPDS'98, the 2nd European Parallel and Distributed
Systems Conference, July 1998.
Postscript
FloatingPoint Performance in Java
Marc Snir, Jose Moreira, Manish Gupta, Lois Haibt and Sam Midkiff
Slides from presentation at the May 1998 Java Grande Forum.
PDF
Developing numerical libraries in Java
Ronald F. Boisvert,
Jack J. Dongarra, Roldan Pozo, Karin A. Remington, and G. W. Stewart
ACM 1998 Workshop
on Java for HighPerformance Network Computing, March 1998.
Postscript
PDF
How Java's FloatingPoint Hurts Everyone Everywhere
W. Kahan and Joseph D. Darcy
Slides from presentation at the
ACM 1998 Workshop on Java for
HighPerformance Network Computing, March 1998.
PDF
A Proposal for RealJava
Jerome Coonen
July 1997


Related Links

Borneo, a Java
dialect with true support for the IEEE 754 floatingpoint standard
Joseph D. Darcy
validlab's Java numerics page
David Hough
List of Java Compilers and Virtual Machines
Marco Schmidt
Index of Scientific Java resources on the Web
Mathtools.net
Java at Sun
Sun Microsystems
Java Community Process
Sun Microsystems
Other NIST Projects Related to Java
