This is the opensource code for the ACM Transaction On Graphics (TOG) 2020 paper:
Hierarchical Optimization Time Integration for CFL-Rate MPM Stepping (https://dl.acm.org/doi/10.1145/3386760)
PDF, Supplemental Document, Youtube
Authors: Xinlei Wang*, Minchen Li*, Yu Fang, Xinxin Zhang, Ming Gao, Min Tang, Danny M. Kaufman, Chenfanfu Jiang (* Equal contributions)
We propose Hierarchical Optimization Time Integration (HOT) for efficient implicit timestepping of the material point method (MPM) irrespective of simulated materials and conditions. HOT is an MPM-specialized hierarchical optimization algorithm that solves nonlinear timestep problems for large-scale MPM systems near the CFL limit. HOT provides convergent simulations out of the box across widely varying materials and computational resolutions without parameter tuning. As an implicit MPM timestepper accelerated by a custom-designed Galerkin multigrid wrapped in a quasi-Newton solver, HOT is both highly parallelizable and robustly convergent. As we show in our analysis, HOT maintains consistent and efficient performance even as we grow stiffness, increase deformation, and vary materials over a wide range of finite strain, elastodynamic, and plastic examples. Through careful benchmark ablation studies, we compare the effectiveness of HOT against seemingly plausible alternative combinations of MPM with standard multigrid and other Newton-Krylov models. We show how these alternative designs result in severe issues and poor performance. In contrast, HOT outperforms existing state-of-the-art, heavily optimized implicit MPM codes with an up to 10× performance speedup across a wide range of challenging benchmark test simulations.
The following instruction is tested on Ubuntu 18.04 LTS with g++7.4, on Ubuntu 19.10 with g++7.4, g++8.4, clang-9.
Run the command to install all dependencies:
sudo apt-get install make cmake g++ libeigen3-dev gfortran libmetis-dev
sudo apt-get install libopenvdb-dev libboost-all-dev libilmbase-dev libopenexr-dev
sudo apt-get install libtbb2 libtbb-dev libz-dev clang-format-6.0 clang-format libarpack2-dev
pip install --upgrade cmake
Run the following command in the root directory.
make Release
Or use the cmake toolchain.
mkdir build && cd build && cmake .. && make -j4
Extract all models at Data/LevelSets in place.
Go to the project directory (Projects/multigrid/), check all default settings included in Configurations.h file.
To test different setups, run commands with specific options. For example:
./multigrid -test 777011 --3d --usecn -cneps 1e-7 -lsolver 3 -Ainv 1 --project --linesearch --bcproject -mg_level 3 -mg_times 1 -coarseSolver 2 -smoother 5 --l2norm -o faceless_lbfgs
Here are some of the command options:
- usecn: whether to use characteristic norm
- cneps: epsilon of characteristic norm
- lsolver: numerical method
- coarseSolver: top level solver in multigrid
- smoother: non-top level smoother in multigrid
- ...
Please see bash script tog.sh and README for more details.
Please cite our paper if you use this code for your research:
@article{Wang2020HOT,
author = {Wang, Xinlei and Li, Minchen and Fang, Yu and Zhang, Xinxin and Gao, Ming and Tang, Min and Kaufman, Danny M. and Jiang, Chenfanfu},
title = {Hierarchical Optimization Time Integration for CFL-Rate MPM Stepping},
year = {2020},
volume = {39},
number = {3},
journal = {ACM Trans. Graph.},
articleno = {Article 21},
numpages = {16}
}