Skip to content

Releases: ProjectPhysX/FluidX3D

FluidX3D v2.19 (camera splines)

07 Sep 08:37
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.19 adds Catmull-Rom splines for smooth camera movement, and bug fixes:


Improvements

  • the camera can now fly along a smooth path through a list of provided keyframe camera placements, using Catmull-Rom splines
  • more accurate remaining runtime estimation that includes time spent on rendering
  • enabled FP16S memory compression by default
  • printed camera placement using key G is now formatted for easier copy/paste
  • added benchmark chart in Readme using mermaid gantt chart
  • placed memory allocation info during simulation startup at better location

Bug fixes

  • fixed threading conflict between INTERACTIVE_GRAPHICS and lbm.graphics.write_frame();
  • fixed maximum buffer allocation size limit for AMD GPUs and in Intel CPU Runtime for OpenCL
  • fixed wrong Re<Re_max info printout for 2D simulations
  • minor fix in bandwidth_bytes_per_cell_device()

Have fun with the software!
-- Moritz

FluidX3D v2.18 (more bug fixes)

21 Jul 09:27
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.18 brings support for high refresh rate monitors on Linux and bug fixes:


Improvements

  • added support for high refresh rate monitors on Linux
  • more compact OpenCL Runtime installation scripts in Documentation
  • driver/runtime installation instructions will now be printed to console if no OpenCL devices are available
  • added domain information to LBM::write_status()
  • added LBM::index function for uint3 input parameter

Bug fixes

  • fixed that very large simulations sometimes wouldn't render properly by increasing maximum render distance from 10k to 2.1M
  • fixed mouse input stuttering at high screen refresh rate on Linux
  • fixed graphical artifacts in free surface raytracing on Intel CPU Runtime for OpenCL
  • fixed runtime estimation printed in console for setups with multiple lbm.run(...) calls
  • fixed density oscillations in sample setups (too large lbm_u)
  • fixed minor graphical artifacts in raytrace_phi()
  • fixed minor graphical artifacts in ray_grid_traverse_sum()
  • fixed wrong printed time step count on raindrop sample setup

Have fun with the software!
-- Moritz

FluidX3D v2.17 (unlimited domain resolution)

05 Jun 20:25
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.17 removes the limit on 2³² cells per domain and adds new field visualization:


Improvements

  • for GPUs/CPUs with >225 GB memory: domains are no longer limited to 4.29 billion (2³², 1624³) grid cells; if more are used, the OpenCL code will automatically compile with 64-bit indexing
  • new, faster raytracing-based field visualization for single-GPU simulations (thanks @Snektron for the idea!)
  • added GPU Driver and OpenCL Runtime installation instructions to documentation
  • refactored INTERACTIVE_GRAPHICS_ASCII

Bug fixes

  • fixed memory leak in destructors of floatN, floatNxN, doubleN, doubleNxN (all unused)
  • made camera movement/rotation/zoom behavior independent of framerate
  • fixed that smart_device_selection() would print a wrong warning if device reports 0 MHz clock speed

Have fun with the software!
-- Moritz


A glimpse of the new raytracing-based field visualization:
grafik

FluidX3D v2.16 (bug fixes)

02 May 19:07
Compare
Choose a tag to compare

I'm doing my part! With the v2.16 update I've put down all remaining known bugs for good. 🖖😎❌🪳❌
WOULD YOU LIKE TO KNOW MORE?


Bug fixes in this release:

  • fixed that voxelization failed in Intel OpenCL CPU Runtime due to array out-of-bounds access
  • fixed that voxelization did not always produce binary identical results in multi-GPU compared to single-GPU
  • fixed that velocity voxelization failed for free surface simulations
  • fixed terrible performance on ARM GPUs by macro-replacing fused-multiply-add (fma) with a*b+c
  • fixed that Y/Z keys were incorrect for QWERTY keyboard layout in Linux
  • fixed that free camera movement speed in help overlay was not updated in stationary image when scrolling
  • fixed that cursor would sometimes flicker when scrolling on trackpads with Linux-X11 interactive graphics
  • fixed flickering of interactive rendering with multi-GPU when camera is not moved
  • fixed missing XInitThreads() call that could crash Linux interactive graphics on some systems
  • fixed z-fighting between graphics_rasterize_phi() and graphics_flags_mc() kernels

Other improvements:

  • simplified 10% faster marching-cubes implementation with 1D interpolation on edges instead of 3D interpolation, allowing to get rid of edge table
  • added faster, simplified marching-cubes variant for solid surface rendering where edges are always halfway between grid cells
  • refactoring in OpenCL rendering kernels

With GitHub I can track every bug from day it was discovered/fixed back to the day it was first introduced. This allows me to graph the number of open bugs over time, along with a curve weighted by their individual severity (minor 0.25, low 0.5, medium 1.0, high 2.0, showstopper 4.0):
grafik

Here is the distribution of days open, days till discovery and days till fix. I fixed 56% of bugs on the day of discovery. Notice the bimodal distribution of days open - a clear separation into "easy" and "nasty" bugs.
grafik

Lessons learned:

  • Since release there was 63 bugs in FluidX3D in total, with at max 41 open bugs at one time. 🖖😱 Now there is 0, at least until I find more. 🖖😎 For reference: FluidX3D is 12.1k lines of code.
  • Most bugs were a byproduct of big feature updates, like v2.0 (multi-GPU) and v2.1/v2.2 (voxelization). Of course at the time of introduction I didn't know that bugs slipped through, and I (or users) only discovered them later.
  • Only 17% of bugs were found by users, all the others I found myself with rigorous testing. It takes continuous poking around in the code to find these often super rare bugs.
  • 30% of bugs were actually bugs in the compiler, driver or operating system that needed a workaround on application side.
  • The latest v2.16 release is the best FluidX3D has ever been. The worst, most bugged version by this metric is v2.2. 🖖🤠

Have fun with the software!
-- Moritz


PS: Here's an amusing FluidX3D video from @SLGY, he's doing his part too!

FluidX3D v2.15 (framerate boost)

09 Apr 19:47
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.15 boosts framerate in interactive graphics by 20-70%:

  • eliminated one frame memory copy and one clear frame operation in rendering chain
  • enabled g++ compiler optimizations for faster startup and higher rendering framerate

Bug fixes:

  • fixed bug in multithreaded sanity checks
  • fixed wrong unit conversion for thermal expansion coefficient
  • fixed density to pressure conversion in LBM units
  • fixed bug that raytracing kernel could lock up simulation
  • fixed minor visual artifacts with raytracing
  • fixed that console sometimes was not cleared before INTERACTIVE_GRAPHICS_ASCII rendering started

Have fun with the software!
-- Moritz

FluidX3D v2.14 (visualization upgrade)

03 Mar 11:58
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.14 brings an upgrade to visualization kernels and eases compiling:

  • coloring can now be switched between velocity/density/temperature with key Z
  • uniform improved color palettes for velocity/density/temperature visualization
  • color scale with automatic unit conversion can now be shown with key H
  • slice mode for field visualization now draws fully filled-in slices instead of only lines for velocity vectors
  • shading in VIS_FLAG_SURFACE and VIS_PHI_RASTERIZE modes is smoother now
  • make.sh now automatically detects operating system and X11 support on Linux and only runs FluidX3D if last compilation was successful

Bug fixes:

  • fixed compiler warnings on Android
  • fixed make.sh failing on some systems due to nonstandard interpreter path
  • fixed that make would not compile with multiple cores on some systems

Here is a YouTube video (some screen recordings) to showcase the update, all real-time simulations on an Intel Arc A750:
image

Have fun with the software!
-- Moritz

FluidX3D v2.13 (improved .vtk export)

11 Feb 15:08
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.13 improves .vtk export:

  • data in exported .vtk files is now automatically converted to SI units
  • ~2x faster .vtk export with multithreading
  • added unit conversion functions for TEMPERATURE extension

Bug fixes:

  • fixed graphical artifacts with axis-aligned camera in raytracing
  • fixed get_exe_path() for macOS
  • fixed X11 multi-monitor issues on Linux
  • workaround for Nvidia driver bug: enqueueFillBuffer is broken for large buffers on Nvidia GPUs
  • fixed slow numeric drift issues caused by -cl-fast-relaxed-math
  • fixed wrong Maximum Allocation Size reporting in LBM::write_status()
  • fixed missing scaling of coordinates to SI units in LBM::write_mesh_to_vtk()

Have fun with the software!
-- Moritz

FluidX3D v2.12 (faster startup)

18 Jan 18:10
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.12 significantly reduces compile and startup time:

  • if make is installed, source code compiling on Linux is now ~3x faster using multiple CPU cores, from ~15s to ~5s
  • simulation initialization for single-GPU simulations is ~40% faster now
  • simulation initialization for multi-GPU simulations is ~15% faster now

Bug fixes:

  • minor bug fix in Memory_Container::reset() function

Here is how launch time changed with FluidX3D versions:
grafik
Setup: 3D Taylor-Green vortices, single 384³ domain, D3Q19 SRT FP32/FP16S
Hardware: Lenovo Y50-70, i7-4720HQ, 2x 8GB DDR3 1600 MT/s, GTX 960M 4GB

I had compared all previous versions and found v2.0 to introduce a big jump in startup time. This was due to changing LBM data field access from direct array access to domain decomposition indexing, which turned out as the main bottleneck during simulation startup. This is now fixed, with an indexing shortcut for single-GPU and pre-computing variables for multi-GPU indexing. Together with multi-core parallelization of initialization (v2.9) and faster buffer initialization (v2.11), launch time is now shorter than ever.

Have fun with the software!
-- Moritz

FluidX3D v2.11 (improved Linux graphics)

07 Dec 19:35
Compare
Choose a tag to compare

Thank you for using FluidX3D! I have recently upgraded my laptop from Windows 10 to bugged and bloated Windows 11 kubuntu Linux with the amazing KDE Plasma desktop, and wanted the same FluidX3D interactive graphics capabilities as on Windows. FluidX3D could already do interactive graphics on Linux since v1.4, but only in 720p windowed mode. Update v2.11 changes that, and also adds two more minor improvements:

  • interactive graphics on Linux are now in fullscreen mode too, fully matching interactive graphics on Windows in functionality and user interface
  • made CPU/GPU buffer initialization significantly faster with std::fill and enqueueFillBuffer (overall ~8% faster simulation startup)
  • added operating system info to OpenCL device driver version printout

Bug fixes:

  • fixed flickering with frustrum culling at very small field of view
  • fixed bug where rendered/exported frame was not updated when visualization_modes changed

Have fun with the software!
-- Moritz

128

FluidX3D v2.10 (frustrum culling)

05 Nov 10:28
Compare
Choose a tag to compare

Thank you for using FluidX3D! Update v2.10 contains improvents to rasterization performance:

  • improved rasterization performance via frustrum culling when only part of the simulation box is visible
  • improved switching between centered/free camera mode
  • refactored OpenCL rendering library
  • unit conversion factors are now automatically printed in console when units.set_m_kg_s(...) is used
  • faster startup time for FluidX3D benchmark

Bug fixes:

  • miner bug fix in voxelize_mesh(...) kernel
  • fixed bug in shading(...)
  • replaced slow (in multithreading) std::rand() function with standard C99 LCG
  • more robust correction of wrong VRAM capacity reporting on Intel Arc GPUs
  • fixed some minor compiler warnings

Have fun with the software!
-- Moritz