Starlab is a collection of modular software tools designed to simulate the evolution of stars and stellar systems, and analyze the resulting data. Starlab consists of a library of loosely coupled programs, sharing a common flexible data structure, which can be combined in arbitrarily complex ways to study the dynamics and evolution of binary and multiple star systems, star clusters and galactic nuclei.
The software is designed to be highly modular, allowing individual tools to be combined in arbitrarily complex ways. Individual Starlab modules may be linked in the ``traditional'' way, as function calls to C++ (the language in which most of the package is written), C, or FORTRAN routines, or at a much higher level--as individual programs connected by UNIX pipes. The former linkage is more efficient, and allows finer control of the package's capabilities; however, the latter provides a quick and compact way of running test simulations and managing production runs. The combination affords great flexibility to Starlab, allowing it to be used by both the novice and the expert programmer with equal ease. For example, in the command sequence
makeplummer -n 1000 -i | makemass -l 0.5 -u 10 -F Scalo \ | add_star -R 1 \ | scale -s \ | kira -S -t 100 -D 1 \ | lagrad -t \ | xhrdplot \ > save_snap.dat("\" is the UNIX continuation character)
|makeplummer||creates a standard Plummer model of 1000 particles, numbering the stars sequentially for future reference|
|makemass||sets stellar masses between 0.5 and 10 units, according to the Scalo mass distribution (default would be a Salpeter power-law)|
|add_star||attaches stellar properties to each particle, interpreting input msses in solar units and adopting a length unit of 1 pc|
|scale||scales masses, positions and velocities to standard dynamical units, and forces te center of mass of the system to be at rest at the origin of coordinates|
|kira||integrates the system forward in time for 100 dynamical times, with stellar evolution turned on, printing out a snapshot every time unit|
|lagrad||computes and prints out the 10-percentile radii of the system for each input snapshot (i.e. 100 times)|
|xhrdplot||plots an H-R diagram for the system for each input snapshot|
Finally, all snapshots are saved in the file save_snap.dat. For a current list of all tools automatically built as part of the current Starlab distribution, click here.
Starlab is intended for use by researchers in stellar dynamics who wish to compute the evolution of dense stellar systems, but who may not necessarily be experts in either N-body dynamics or in the details of stellar or binary evolution. Starlab's modular software and data structures are designed to allow experts in different field to combine their knowledge without first having to become intimately familiar with all aspects of the problem at hand.
In the example given above, makeplummer sets positions and velocities only, makemass modifies masses (knowing nothing of the other dynamical variables), addstar adds stellar properties to each particle (with no reference to or knowledge of dynamics), scale scales the dynamics without reference to physical stellar quantities, kira combines dynamical and stellar information, lagrad knows nothing of stellar evolution, and xhrplot knows nothing of dynamics. In principle, the dynamics routines could have been written by a programmer with no knowledge of stellar physics, while the stellar-evolution programs require no detailed knowledge of dynamics. The means by which this separation is accomplished is discussed in the "internals " section.
To some extent, Starlab is modeled on NEMO, a stellar dynamics software environment developed during the 1980s at the Institute for Advanced Study, in large part by Josh Barnes, with input from Peter Teuben and Piet Hut (and subsequently maintained and extended by Peter Teuben). Starlab differs from NEMO mainly in its use of UNIX pipes, rather than temporary files, its use of tree structures rather than arrays to represent N-body systems, and its guarantee of data conservation--data which are not understood by a given module are simply passed on to the next rather than filtered out and lost.
The development history of Starlab is as follows
Utility programs in Starlab may be divided into four basic classes:
|kepler||Tools for handling two-body orbital motion|
|dyn||Tools for creating and analyzing N-body systems|
|sdyn||General small-N scattering|
|kira||Large-scale N-body simulations|
|seba||Stellar and binary evolution|