Skip to content
Efficient and Conservative Fluids Using Bidirectional Mapping
C++ Cuda CMake C
Branch: master
Clone or download
Latest commit 39c6f57 Jul 10, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
CMake initial commit Jun 28, 2019
Images initial commit Jun 28, 2019
src fix 2D DMC bug Jul 10, 2019
CMakeLists.txt initial commit Jun 28, 2019
LICENSE Initial commit Jun 28, 2019 update README Jul 9, 2019

Efficient and Conservative Fluids with Bidirectional Mapping

Ziyin Qu* Xinxin Zhang*(*joint first authors) Ming Gao Chenfanfu Jiang Baoquan Chen

ACM Transaction on Graphics(Proceedings of SIGGRAPH 2019), 38, 4, 2019

Alt text

[Paper] [Video]


In this paper, we introduce BiMocq2, an unconditionally stable, pure Eulerian-based advection scheme to efficiently preserve the advection accuracy of all physical quantities for long-term fluid simulations. Our approach is built upon the method of characteristic mapping (MCM). Instead of the costly evaluation of the temporal characteristic integral, we evolve the mapping function itself by solving an advection equation for the mappings. Dual mesh characteristics (DMC) method is adopted to more accurately update the mapping. Furthermore, to avoid visual artifacts like instant blur and temporal inconsistency introduced by re-initialization, we introduce multi-level mapping and back and forth error compensation. We conduct comprehensive 2D and 3D benchmark experiments to compare against alternative advection schemes. In particular, for the vortical flow and level set experiments, our method outperforms almost all state-of-art hybrid schemes, including FLIP, PolyPic and Particle-Level-Set, at the cost of only two Semi-Lagrangian advections. Additionally, our method does not rely on the particle-grid transfer operations, leading to a highly parallelizable pipeline. As a result, more than $45\times$ performance acceleration can be achieved via even a straightforward porting of the code from CPU to GPU.

Compile and Run

To build this project, you will need tbb, openvdb, boost, and CUDA as dependencies.

sudo apt-get install libtbb-dev libopenvdb-dev libboost-all-dev

This code is built and tested on Ubuntu 16.04 and 18.04, and tested with SM_6X GPUs and above.

2D code and 3D code are seperated, you can execute them seperately.

For 2D code, you should specify simulation method as the second input parameter. 0-7 are Semi-Lagrangian, MacCormack, BFECC, Mac_Reflection, FLIP, APIC, PolyPIC, BiMocq method respectively. Third parameter is the example case you wish to run, 0-4 represents Taylor Vortex, Vortex-Leapfrogging, Rayleigh-Taylor, Zalesak's disc and Vortex in a Box respectively.

mkdir build
cd build && cmake ..
./BiMocq2D sim_method sim_setup

We provide a simple python script in Sript folder for visualizing level sets, for example

python ../Out/2D_Zalesak/Semilag

For 3D code, we provide two vortex colliding setup, simply run


Generated .vdb file will be located in BIMOCQ/Out folder, you can use any software(e.g. Houdini) to visualize.


Please cite the following paper if it helps.

 author       = {Ziyin Qu* and Xinxin Zhang* and Ming Gao and Chenfanfu Jiang and Baoquan Chen},
 title        = {Efficient and Conservative Fluids with Bidirectional Mapping},
 journal      = {ACM Transactions on Graphics (Proceedings of SIGGRAPH 2019)},
 volume       = {38},  
 number       = {4},  
 year         = {2019},   
 publisher    = {ACM Press},
 address      = {New York, NY, USA},
 note         = {(*Joint First Authors)},
You can’t perform that action at this time.