Variational Stokes: A Unified Pressure-Viscosity Solver for Accurate Viscous Liquids

Egor Larionov*, Christopher Batty*, Robert Bridson,

(*Joint first authors)

Variational Stokes Teaser Figure

We propose a novel unsteady Stokes solver for coupled viscous and pressure forces in grid-based liquid animation which yields greater accuracy and visual realism than previously achieved. Modern fluid simulators treat viscosity and pressure in separate solver stages, which reduces accuracy and yields incorrect free surface behavior. Our proposed implicit variational formulation of the Stokes problem leads to a symmetric positive definite linear system that gives properly coupled forces, provides unconditional stability, and treats difficult boundary conditions naturally through simple volume weights. Surface tension and moving solid boundaries are also easily incorporated. Qualitatively, we show that our method recovers the characteristic rope coiling instability of viscous liquids and preserves fine surface details, while previous grid-based schemes do not. Quantitatively, we demonstrate that our method is convergent through grid refinement studies on analytical problems in two dimensions. We conclude by offering practical guidelines for choosing an appropriate viscous solver, based on the scenario to be animated and the computational costs of different methods.

Paper PDF
Project Page ACM, UW
Trailer YouTube
Video MP4, YouTube
Code GitHub
Supplemental Notes PDF
Supplemental Video MP4

BibTeX

@article{lbb17,
    author = {
        Larionov, Egor and
        Batty, Christopher and
        Bridson, Robert
    },
    title = {
        Variational Stokes:
        A Unified Pressure-Viscosity Solver
        for Accurate Viscous Liquids
    },
    year = {2017},
    issue_date = {July 2017},
    publisher = {Association for Computing Machinery},
    address = {New York, NY, USA},
    volume = {36},
    number = {4},
    issn = {0730-0301},
    url = {https://doi.org/10.1145/3072959.3073628},
    doi = {10.1145/3072959.3073628},
    journal = {ACM Trans. Graph.},
    month = jul,
    articleno = {Article 101},
    numpages = {11},
    keywords = {liquids, viscosity, free surfaces, stokes}
}