Releases: ProjectPhysX/FluidX3D
FluidX3D v2.15 (framerate boost)
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_ASCIIrendering started
Have fun with the software!
-- Moritz
FluidX3D v2.14 (visualization upgrade)
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_SURFACEandVIS_PHI_RASTERIZEmodes is smoother now make.shnow 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.shfailing on some systems due to nonstandard interpreter path - fixed that
makewould 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:

Have fun with the software!
-- Moritz
FluidX3D v2.13 (improved .vtk export)
Thank you for using FluidX3D! Update v2.13 improves .vtk export:
- data in exported
.vtkfiles is now automatically converted to SI units - ~2x faster
.vtkexport with multithreading - added unit conversion functions for
TEMPERATUREextension
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:
enqueueFillBufferis 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)
Thank you for using FluidX3D! Update v2.12 significantly reduces compile and startup time:
- if
makeis 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:

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)
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::fillandenqueueFillBuffer(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_modeschanged
Have fun with the software!
-- Moritz
FluidX3D v2.10 (frustrum culling)
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
FluidX3D v2.9 (multithreading)
Thank you for using FluidX3D! The v2.9 update makes simulation startup a lot quicker, especially for large multi-GPU simulations:
- added cross-platform
parallel_forimplementation inutilities.hppusingstd::threads - significantly (>4x) faster simulation startup with multithreaded geometry initialization and sanity checks
- faster
calculate_force_on_object()andcalculate_torque_on_object()functions with multithreading - refactoring
- added total runtime and LBM runtime to
lbm.write_status()
Bug fixes:
- fixed bug in voxelization ray direction for re-voxelizing rotating objects
- fixed bug in
Mesh::get_bounding_box_size() - fixed bug in
print_message()function inutilities.hpp
Let the cores go brrrr!
Have fun with the software!
-- Moritz
FluidX3D v2.8 (documentation + polish)
Thank you for using FluidX3D! The v2.8 update doesn't add too many new features, but finally more documentation, loads of refactoring and significant usability improvements:
- finally added more documentation
- cleaned up all sample setups in
setup.cppfor much more beginner-friendly learning - added required extensions in
defines.hppas comments to all setups insetup.cpp - improved loading of composite .stl geometries, by adding an option to omit automatic repositioning of the mesh
- added more functionality to
Meshstruct inutilities.hpp - added
uint3 resolution(float3 box_aspect_ratio, uint memory)function to compute simulation box resolution based on box aspect ratio and VRAM occupation in MB - added
bool lbm.graphics.next_frame(...)function to export images for a specified video length in themain_setupcompute loop - added
VIS_...macros to ease setting visualization modes in headless graphics mode inlbm.graphics.visualization_modes - simulation box dimensions are now automatically made equally divisible by domains for multi-GPU simulations
- made Info/Warning/Error message labels colored
- added Cessna 172 propeller airplane and Bell 222 helicopter setups to showcase how loading of composite .stl geometries and revoxelization of moving parts works
- added Ahmed body setup as an example on how body forces and drag coefficient are computed; expect absolute forces to be too large by up to a factor 2, because even large resolution is not enough to fully capture the turbulent boundary layer in this case; a wall function is needed, I'll scan literature on it
- added optional semi-transparent rendering mode (
#define GRAPHICS_TRANSPARENCY 0.7findefines.hpp)
Bug fixes:
- fixed flickering of streamline visualization in interactive graphics
- improved smooth positioning of streamlines in slice mode
- fixed bug where mass and massex in SURFACE extension were also allocated in CPU RAM (not required)
- fixed bug in Q-criterion isosurface rendering of halo data in multi-GPU mode
- reduced gap width between domains in Q-criterion isosurface rendering in multi-GPU mode
- fixed crash/bug in local memory optimization in mesh voxelization kernel
- removed shared memory optimization from mesh voxelization kernel, as it crashes on Nvidia GPUs with new GPU drivers and is incompatible with old OpenCL 1.0 GPUs
- fixed Info/Warning/Error message formatting for loading files
Some showcases of what v2.8 is capable of:
(click on images to show videos on YouTube)
Have fun with the software!
-- Moritz
FluidX3D v2.7 (visualization upgrade)
New features:
- added slice visualization (key 2 / key 3 modes, then switch through slice modes with key T, move slice with keys Q/E)
- made flag wireframe / solid surface visualization kernels toggleable with key 1
- added surface pressure visualization (key 1 when
FORCE_FIELDis enabled andlbm.calculate_force_on_boundaries();is called) - added binary
.vtkexport function for meshes withlbm.write_mesh_to_vtk(Mesh* mesh); - added
time_step_multiplicatorforintegrate_particles()function in PARTICLES extension
Bug fixes:
- made correction of wrong memory reporting on Intel Arc more robust
- fixed bug in
write_file()template functions - reverted back to separate
cl::Contextfor each OpenCL device, as the shared Context otherwise would allocate extra VRAM on all other unused Nvidia GPUs - removed Debug and x86 configurations from Visual Studio solution file (one less complication for compiling)
- fixed bug that particles could get too close to walls and get stuck, or leave the fluid phase (added boundary force)
FluidX3D v2.6 (Intel Arc patch)
FluidX3D is now fully operational on Intel Arc GPUs (I patched their OpenCL driver issues):
- now VRAM allocations >4GB are possible
- this is necessary to use the full VRAM for simulations at the largest possible resolution
- perfromance impact is 1.5%, not significant
- correct VRAM capacity is reported on Intel Arc A770, A750, A580, A380 (driver wrongly reports only 80% on Windows and 95% on Linux)




