![[Wear proper safety equipment when building a new code.] [Safety First]](./springhill.png) |
Wear proper safety equipment when building a new code.
Jonathan Dursi
Code Development
For both experimentalists and computational scientists, doing new science
sometimes means building your own equipment. I have been one of the
developers — having checked in code well over 600 times, touching
almost every module —
of the FLASH code,
a multi-physics, highly parallel, astrophysical fluids code that has
won a Gordon Bell prize.
Doing the next big project also always requires adding one
more tool. In parallel with computational projects using tools already
at my disposal, over the next five years I plan to develop
all-speed
hydrodynamic solvers (already in use in other disciplines) for use in
publicly available codes, to make accessible regimes unavailable to the
current generation of astrophysical solvers. In testing such a solver,
collaboration with experimentalists will be essential, and can generate
interesting science in its own right.
In the shorter term, my development projects involve re-writing the FLASH
multigrid solver from scratch, and re-writing its hdf5 output routines
to write many individual files (this is helpful on clusters without a parallel
file system.)
Easily the hardest and most morale-sapping aspect
of code development is debugging; I've put together a lecture
on debugging that I try to slip into introductory computing courses whenever
possible.
I do much of my computation these days on CITA's McKenzie cluster, and maintain
a list of codes that run on McKenzie and how
to get them up and running.
On smaller scale code development, here you can also find:
- Source
code for doing one-zone ignition and steady-state detonation structure
calculations, used in a recent paper;
- Sometimes getting MPI built on your laptop for your
favourite compilers just isn't worth it. Here is a `null' MPI implementation with just enough
MPI `functionality' to be able to compile and run FLASH on a single
processor without installing a real MPI implementation. Other MPI codes will
doubtless require other functions to be written; some just stubs, and some that
actually have to do something.
|