Efficient and Conservative Fluids Using Bidirectional Mapping

Related tags

Miscellaneous Bimocq
Overview

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]

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)},
}  
You might also like...
Header only implementation of Progressive Photon Mapping: A Probabilistic Approach(PPMAPA) in C++.
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

 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 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

Volumetric progressive photon mapping written in C++.
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

⌨️ Personal key mapping for The Key.
⌨️ 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

K-Closest Points and Maximum Clique Pruning for Efficient and Effective 3-D Laser Scan Matching (RA-L 2022)
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

(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

An efficient and versatile system call hook mechanism
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

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.

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

中文版本请参看这里 MMKV is an efficient, small, easy-to-use mobile key-value storage framework used in the WeChat application. It's currently available on Andr

Comments
  • New method and example adding...

    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?

    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?

    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
Owner
Ziyin Qu
I am Second year Ph.D student at University of Pennsylvania
Ziyin Qu
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

Yoharol 3 Oct 6, 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),

Rudra_deep 1 Nov 17, 2021
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?

Saki-Chen 51 Nov 2, 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

Tilen Majerle 809 Dec 3, 2022
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

Tixiao Shan 1.1k Nov 25, 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

Xinliang Zhong 151 Nov 20, 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

Stephen Ferrell 8 Nov 18, 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

null 248 Nov 27, 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

Błażej Roszkowski 1 Apr 11, 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

yumcyawiz 66 Nov 20, 2022