PhysBAM_Tools is intended to be the lowest level representation of data
structures and numerical algorithms on them. It represents a first pass at
siphoning out the underlying framework that the PhysBAM code has been built
upon. As time progresses other parts of the library will have their data
structures and associated algorithms abstracted so that this can also be moved
into PhysBAM_Tools growing the size of this stand alone library. Once all the
computational intensive parts of a library are removed, what remains is simply a
super user API or domain specific language that allows one to manipulate the
underlying functionality without undue hindrance from hardware specific
considerations.

We are not releasing PhysBAM_Tools because we feel it is done, rather (the
opposite) we feel the work is just getting started. The current plan is:

To keep increasing the amount of fundamental data structures and
associated algorithms in PhysBAM_Tools by pulling them out of the PhysBAM
library

To add new data structures and algorithms not currently represented
increasing the size of the PhysBAM_Tools library

To better structure, classify and organize the existing and future
subdirectories

To pursue MPI, shared memory threading, GPU implementations, etc.

If after perusing the code, you have specific ideas of what you might contribute, email us with a well thought out proposal. Also, we are looking for "gate keepers" for things like ODE's, numerical linear algebra, optimization, KD Trees, Krylov Solvers, I/O, debugging, octrees, advection, threading, MPI or whatever you would like to propose - please be someone who plays well with others ;)
PhysBAM_Geometry

The release of PhysBAM_Geometry will occur once we feel the collaborations and
development of PhysBAM_Tools are established and stable.

From an organizational point of view PhysBAM_Geometry could be seen as a part of
PhysBAM_Tools, but given the heavy interest in computational geometry we instead
decided to make this a separate library that sits on top of PhysBAM_Tools. It is
fashioned in much the same way as PhysBAM_Tools containing data structures for
explicit and implicit geometry as well as algorithms on those data structures.

PhysBAM_OpenGL is a code base of opengl viewers that read PhysBAM simulation data
from files for the purpose of debugging. The current released version only supports
viewing data structures defined in PhysBAM_Tools, such as scalar fields and vector
fields. After the release of PhysBAM_Geometry an updated version of
PhysBAM_OpenGL will also be released to include support for data structures
defined in PhysBAM_Geometry, such as segmented curves, triangulated meshes and
tetrahedron meshes.

Currently PhysBAM_OpenGL includes the following subdirectories:
OpenGL, OpenGL_Components, Read_Write

There are 3 projects related to PhysBAM_OpenGL: opengl_1d, opengl_2d and
opengl_3d, which correspond to the 1D, 2D and 3D viewers respectively.
PhysBAM_Ray_Tracing

PhysBAM_Ray_Tracing
provides the basis for rendering PhysBAM simulation data. The currently released
version only supports rendering data structures that are defined in
PhysBAM_Tools, such as the voxel data used in smoke simulations, and a limited
set of primitives from PhysBAM_Geometry that can be directly set when
rendering. After the release of PhysBAM_Geometry an updated version of
PhysBAM_Ray_Tracing will also be released to include support for data structures
defined in PhysBAM_Geometry, such as segmented curves, triangulated meshes,
tetrahedron meshes, and levelsets.

Currently PhysBAM_Ray_Tracing includes the
following subdirectories: Rendering, Rendering_Objects,
Rendering_Shaders and Rendering_Lights.

The renderer itself is
present as the project ray_tracing.
For detailed instructions on downloading and compiling the code, go here.