v0.5.0
The biggest new feature is a domain decomposed approach for the surface reconstruction by performing a spatial decomposition of the particle set with an octree.
The resulting local patches can then be processed in parallel (leaving a single layer of boundary cells per patch untriangulated to avoid incompatible boundaries).
Afterwards, a stitching procedure walks the octree back upwards and merges the octree leaves by averaging density values on the boundaries.
As the library uses task based parallelism, a task for stitching can be enqueued as soon as all children of an octree node are processed.
Depending on the number of available threads and the particle data, this approach results in a speedup of 4-10x in comparison to the global parallel approach in selected benchmarks.
At the moment, this domain decomposition approach is only available when allowing to parallelize over particles using the --mt-particles
flag.
- CLI: The CLI now uses subcommands, the reconstruction is now run using the
reconstruct
subcommand - CLI: Added a
convert
subcommand to convert between particle formats. All supported input formats can be read but only output to VTK is currently supported. - CLI: Add flags to enable/disable spatial decomposition and control octree usage
- CLI: Add flag to control number of threads for the worker thread pool
- CLI: Add flags for quiet/verbose output
- CLI: Use
on/off
switches for various command line parameters instead of boolean flags that can only be used to set something totrue
- CLI: Support for reading uncompressed BGEO files (previously only compressed BGEO files were supported)
- Lib: Implement domain decomposed reconstruction approach using octree spatial decomposition, the leaves of the octree are processed in parallel.
- Lib: Implement stitching of local meshes resulting from the domain decomposed reconstruction.
The resulting meshes appear to be closed (without boundary) in limited testing with a couple of examples if the old global implementation also resulted also in a closed mesh. - Lib: Introduce thread local "workspaces" to reuse allocated memory. The workspace will be stored in the
SurfaceReconstruction
result object and can be reused to reduce allocations in subsequent surface reconstructions. - Lib: Fix winding order of triangles generated by marching cubes such that triangle normals will actually point outwards from the surface
- Lib: Add benchmarks using Criterion
- Lib: Add functions to approximate the vertex normals and vertex normal directions based on are-weighted averages of the adjacent triangles
- Lib: Reduce severity of most log messages
- Lib: Replace term
kernel_radius
withcompact_support_radius
to make it less ambiguous - Updated dependencies
Breaking changes
- CLI: The CLI now requires specifying subcommands. The reconstruction is now run using the
reconstruct
subcommand - CLI: The input file now has to be provided with the
-i
or--input-file
flag and is not a positional argument anymore - CLI: Replace the
--kernel-radius
parameter with the more common term--smoothing-length
, it holds thatcompact_support_radius = 2.0 * smoothing_length
- CLI: Other small changes in parameter naming, please refer to the
--help
function - Lib: Several library API changes
Regressions
- "Splash detection" currently does nothing
- The density map is currently not returned by the reconstruction