Skip to content

v0.5.0

Compare
Choose a tag to compare
@w1th0utnam3 w1th0utnam3 released this 29 Jan 15:18

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 to true
  • 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 with compact_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 that compact_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