**How To Get The Code**

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.

Currently PhysBAM_Tools includes the following subdirectories:

Adaptive_Arithmetic, Advection, Arrays, Arrays_Computations, Boundaries, Clone, Data_Structures, Fourier_Transforms, Fourier_Transforms_Calculations, Grids_Dyadic, Grids_Dyadic_Advection, Grids_Dyadic_Arrays, Grids_Dyadic_Boundaries, Grids_Dyadic_Computations, Grids_Dyadic_Interpolation, Grids_Dyadic_PDE_Linear, Grids_PDE_Linear, Grids_RLE, Grids_RLE_Advection, Grids_RLE_Arrays, Grids_RLE_Boundaries, Grids_RLE_Computations, Grids_RLE_Interpolation, Grids_RLE_PDE_Linear, Grids_Uniform, Grids_Uniform_Advection, Grids_Uniform_Arrays, Grids_Uniform_Boundaries, Grids_Uniform_Computations, Grids_Uniform_Interpolation, Grids_Uniform_PDE_Linear, Images, Interpolation, Kernel_Classes, Kernel_Datatypes, Kernels, Krylov_Solvers, Log, Math_Tools, Matrices, Nonlinear_Equations, Optimization, Ordinary_Differential_Equations, Parallel_Computation, Parsing, Particles, Particles_Interpolation, Point_Clouds, Point_Clouds_Computations, Polynomials, Random_Numbers, Read_Write, Utilities, Vectors

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.

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.

Currently PhysBAM_Geometry has the following subdirectories:

Adaptive_Geometry, Advection_Collidable, Basic_Geometry, Basic_Geometry_Intersections, Collision_Detection, Collision_Detection_Computations, Collisions, Collisions_And_Grids, Constitutive_Models, Continuous_Collision_Detection, Fourier_Transforms_Calculations, Fracture, Geometry_Particles, Grids_Dyadic_Advection_Collidable, Grids_Dyadic_Collisions, Grids_Dyadic_Computations, Grids_Dyadic_Interpolation_Collidable, Grids_Dyadic_Level_Sets, Grids_Dyadic_PDE_Linear, Grids_PDE_Linear, Grids_RLE_Advection_Collidable, Grids_RLE_Collisions, Grids_RLE_Computations, Grids_RLE_Interpolation_Collidable, Grids_RLE_Level_Sets, Grids_RLE_PDE_Linear, Grids_Uniform_Advection_Collidable, Grids_Uniform_Collisions, Grids_Uniform_Computations, Grids_Uniform_Interpolation_Collidable, Grids_Uniform_Level_Sets, Grids_Uniform_PDE_Linear, Implicit_Objects, Implicit_Objects_Dyadic, Implicit_Objects_RLE, Implicit_Objects_Uniform, Interpolation_Collidable, Level_Sets, Parallel_Computation, Rasterization, Read_Write, Red_Green, Registry, Solids_Geometry, Solids_Geometry_Evolution, Spatial_Acceleration, Tessellation, Topology, Topology_Based_Geometry, Topology_Based_Geometry_Computations, Topology_Based_Geometry_Intersections

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:

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

For detailed instructions on downloading and compiling the code, go here.