surface_multigrid_code
surface_multigrid_code copied to clipboard
C++ implementation of "Surface Multigrid via Intrinsic Prolongation"
Surface Multigrid via Intrinsic Prolongation
Public code release for Surface Multigrid via Intrinsic Prolongation. For more details, please refer to:
Surface Multigrid via Intrinsic Prolongation
Hsueh-Ti Derek Liu, Jiayi Eris Zhang, Mirela Ben-Chen, and Alec Jacobson
ACM Transaction on Graphics (Proceedings of SIGGRAPH 2021)
[Paper] [ArXiv] [Project Page]
Installation
To get started, clone this repository recursively
git clone --recursive https://github.com/HTDerekLiu/surface_multigrid_code.git
On all platforms, we assume you have installed cmake and a modern c++ compiler on Mac OS X, Linux, or Windows.
Layout
The main folder contains 6 separate examples that demonstrate some core functionalities and typical usage of our code. All of them have a similar directory and file layout:
cmake/
CMakeLists.txt
README.md
main.cpp
01_single_SSP/: visualize our prolongation operator by mapping the fine mesh vertices onto the coarse mesh.02_mg_hierarchy/: show the construction of our multigrid hierarchy and visualize the corresponding prolongation operators between different levels.03_mg_solver/: show the usage of our multigrid solver on surface meshes with boundaries.04_mg_solver_nobd/: show the usage of our multigrid solver on surface meshes without boundaries.05_example_mean_curvature_flow/: show the usage of our multigrid solver in mean curvature flow.06_example_balloon_sim/: show the usage of our multigrid solver in balloon simulation.07_coarse_to_fine/: show how to use our successive parameterization to map points on the coarse mesh to the input fine mesh.
And they share a common src folder for source code and a meshes folder for input meshes.
Compilation
Inside each subfolder, for example 01_single_SSP, compile in release mode using the following typical cmake/make build routine:
cd 01_single_SSP
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j8
If all goes well, you should be able to find and run the executable main_bin directly with no arguments.
Usage
We aim to make our multigrid solver as easy to use as possible. To use our multigrid solver for linear systems defined on a fixed surface mesh i.e. typically for solving Ax = b, first call mg_precompute to construct the multigrid hierarchy. Then, similar to libigl's style of calling direct solvers min_quad_with_fixed, our multigrid solver can be used by calling min_quad_with_fixed_mg_precompute given a left-hand-side system matrix A and then calling min_quad_with_fixed_mg_solve to solve the system with the right-hand-side b. Please refer to the above examples for more details.
If any issues or questions, please do not hesitate to contact [email protected] or [email protected].