# Efficient and Conservative Fluids Using Bidirectional Mapping

### Related tags

Miscellaneous Bimocq

# 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

## Abstract

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 ..
make
./BiMocq2D sim_method sim_setup


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

python levelset_gen.py ../Out/2D_Zalesak/Semilag


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

./BiMocq3D


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

## BibTex

Please cite the following paper if it helps.

@article{Qu:2019:bimocq,
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)},
}

• #### New method and example adding...

Hi. How about adding to 2d new methods:

• a second-order advection-reflection solver: http://rahul.narain.name/ar2/ And add new example from this paper page 16:7 "cold bubble scenario" Big thanks. Very cool project for studying different advection schemes.
opened by goofoo 0
• #### Could you please release an old version that just matches the paper?

It seems that the OpenVDB tech and LevelSet method have been applied in the program recently. Really a good job! Whereas, those fantastic techs have confused some freshers such as me in the Bimocq study. Regarding code management, release versions would be good checkpoints for stage work, and I believe a release version that just matches the paper(Efficient and Conservative Fluids Using Bidirectional Mapping) would help readers a lot. I do hope the access to the original codes. So, could you please release an old version that just matches the paper? Best wishes! And really impressive work :)

opened by Passerby-ET 0
• #### Does this paper have a Chinese version?

Hi ziyinq. I'm glad to see this paper. en... I know you are Chinese. So the question is : does this paper have a Chinese version? Thak you very much!

opened by Akimotorakiyu 0
###### Ziyin Qu
I am Second year Ph.D student at University of Pennsylvania
###### Stable Fluids in C++ with OpenGL

This project implements the most basic fluid simulation: All physics properties are defined in centered-grid Linear equations are solved with Gauss-Se

2 Apr 6, 2022
###### A ros package for robust odometry and mapping using LiDAR with aid of different sensors

W-LOAM A ros package for robust odometry and mapping using LiDAR with aid of different sensors Demo Video https://www.bilibili.com/video/BV1Fy4y1L7kZ?

45 Jun 14, 2022
###### In DFS-BFS Implementation In One Program Using Switch Case I am Using an Simple And Efficient Code of DFS-BFS Implementation.

DFS-BFS Implementation-In-One-Program-Using-Switch-Case-in-C Keywords : Depth First Search(DFS), Breadth First Search(BFS) In Depth First Search(DFS),

1 Nov 17, 2021
###### LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometry via Smoothing and Mapping

LVI-SAM This repository contains code for a lidar-visual-inertial odometry and mapping system, which combines the advantages of LIO-SAM and Vins-Mono

966 Jun 24, 2022
###### A Multi-sensor Fusion Odometry via Smoothing and Mapping.

LVIO-SAM A multi-sensor fusion odometry, LVIO-SAM, which fuses LiDAR, stereo camera and inertial measurement unit (IMU) via smoothing and mapping. The

130 Jun 24, 2022
###### Contour mapping and 3D surface modeling app

QuikGrid v5.4 for 64-bit editions of MS Windows Contour mapping and 3D surface modeling app A 64-Bit Windows installer for QuikGrid can be found in th

2 Apr 15, 2022
###### Livox-Mapping - An all-in-one and ready-to-use LiDAR-inertial odometry system for Livox LiDAR

Livox-Mapping This repository implements an all-in-one and ready-to-use LiDAR-inertial odometry system for Livox LiDAR. The system is developed based

190 Jun 18, 2022
###### Rampin - Try to make Windows preload files into RAM by memory mapping and touching them.

rampin A small C program to try keep a file or few in Windows RAM cache. For a Unix (not only Linux) alternative see vmtouch. Takes one or more filena

1 Apr 11, 2022
###### STM32 examples for USART using DMA for efficient RX and TX transmission

STM32 UART DMA RX and TX This application note contains explanation with examples for 2 distinct topics: Data reception with UART and DMA when applica

710 Jun 25, 2022
###### minimal but extensible header only implementation of photon mapping in C++

photon_mapping minimal but extensible header only implementation of photon mapping in C++. Features Direct illumination with explicit light sampling I

61 Jun 23, 2022
###### Header only implementation of Progressive Photon Mapping: A Probabilistic Approach(PPMAPA) in C++.

ppmapa Header only implementation of Progressive Photon Mapping: A Probabilistic Approach(PPMAPA) in C++. In this reformulation of (stochastic) progre

7 Feb 18, 2022
###### The ROS version of ICP Mapping with QPEP Solver (Quadratic Pose Estimation Problems)

The ROS version of ICP Mapping with QPEP Solver (Quadratic Pose Estimation Problems) The project is based on https://github.com/ethz-asl/ethzasl_icp_m

10 Feb 25, 2022
###### Volumetric progressive photon mapping written in C++.

volppm Volumetric progressive photon mapping written in C++. WIP. Features Homogeneous medium Hero wavelength sampling for chromatic absorption/scatte

30 Jun 18, 2022
###### ⌨️ Personal key mapping for The Key.

The Key Personal key mapping for The Key. This firmware configures: The first key to be the mute key on single tap, and the pause/play key on double t

1 Dec 25, 2021
###### K-Closest Points and Maximum Clique Pruning for Efficient and Effective 3-D Laser Scan Matching (RA-L 2022)

KCP The official implementation of KCP: K-Closest Points and Maximum Clique Pruning for Efficient and Effective 3D Laser Scan Matching, accepted for p

84 Jun 20, 2022
###### (R) Efficient methods and operators for the sparse matrix classes in 'Matrix' (esp. CSR format or "RsparseMatrix")

MatrixExtra MatrixExtra is an R package which extends the sparse matrix and sparse vector types in the Matrix package, particularly the CSR or Rsparse

13 Jun 20, 2022
###### An efficient and versatile system call hook mechanism

Zpoline: hooking system calls without pain Zpoline is a novel system call hook mechanism that offers the following advantages. 100 times faster than p

88 May 26, 2022
###### BLEND: A Fast, Memory-Efficient, and Accurate Mechanism to Find Fuzzy Seed Matches

BLEND is a mechanism that can efficiently find fuzzy seed matches between sequences to significantly improve the performance and accuracy while reducing the memory space usage of two important applications: 1) finding overlapping reads and 2) read mapping.

10 May 31, 2022
###### An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

14.7k Jun 27, 2022