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: 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 ;)

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: opengl_1d, opengl_2d and opengl_3d, which correspond to the 1D, 2D and 3D viewers respectively.

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.