Although my research was aimed at the accurate numerical solution
of fracture problems, design and implementation of such a
numerical algorithm turned out to be the most ... interesting ...
part of the work. Among the most useful tools were
- The Ocaml programming
language. The combination of functional programming,
static typing, interactive toplevel, and near-C speeds
makes this my language of choice for complex algorithms.
- The Python programming
language. An easy-to-use, dynamically typed, imperative/OO
programming language with bindings to many libraries; very
convenient for writing that occasional 3000-line, throw-away
prototype -- like this GUI.
- Some UNIX tools: lex, yacc, make, m4, and
- The TeX
typesetting system, to produce legible equations.
- The C programming language.
A small language that never gets in the way.
Also the one language to which every other practical language
must (or at least should) interface to.
very low-level, and this gets tedious.
Using the Boehm-Demers-Weiser
garbage collector together with a simple exception-handling
framework, e.g. that in the book
"C Interfaces and Implementations",
makes it much nicer.
Of course, at this point one might as well use Ocaml...
Unfortunately, these two environments are not cheap...
- The Maple
computer algebra system is very convenient for generating
and testing the expressions which go into the real
programs. Its three-dimensional scientific graphics
facilities are also nice, although the generated PostScript
leaves much to be desired.
- The Matlab numerical
computation environment. Once complicated data structures
are reduced to dense (or sparse) matrices, experimentation
is trivial in Matlab. Along with its visualization
facilities, this is a very nice environment for getting to
understand one's data.
Some pictures -- worth more (and larger
than) a thousand words.