banner about
GPU-enabled Toolbox for Solving
Partial Differential Equations on
Unstructured Meshes

GPUTUM is a collection of libraries that use fast GPU parallel
processing in order to solve sets of differential equations.

Software Repository and Reporting Bugs


A variety of application domains from geophysics to bio-medicine employ some form of a Hamilton-Jacobi (H-J) mathematical model, as these models provide a natural means of expressing conservation properties. The two most prevalent H-J models seen in the literature are the Eikonal equation (a static H-J model based upon Fermat's Principle for determining minimal paths) and the Level-Set equations (a time-dependent H-J model used for addressing moving interface problems). Both of these sets of equations can be solved very efficiently on structured (lattice) meshes with appropriate upwind-based finite difference schemes. In addition, great strides have been made to map efficient CPU-focused structured mesh H-J formulations to commodity-based streaming architectures such as GPUs. However, many application scientists desire to use H-J formulations because of their conservation properties while at the same time their applications require the use of unstructured meshes because of the meed for geometric-modeling fidelity (for both boundaries and interfaces). Although H-J formulations exist in part for unstructured meshes, their mapping to GPUs is non-trivial due to the indexing (and corresponding data-structures) necessary for non-lattice meshes.

The goal of this work is to develop, test, document and distribute a collection of software tools for efficiently solving several classes of equations of H-J type - in particular, Eikonal (minimal path) equations and level-set equations - on unstructured (triangular and tetrahedral) meshes using commodity streaming architectures. As the project progresses, we will add additional PDE-based solvers (and support code) that require similar combinations of unstructured mesh methods (e.g. FEM) and the use of streaming architectures.


Acknowledgement: Please use the following acknowledgment and send us references to any publications, presentations, or successful funding applications that make use of this software.
"This work was supported under DOE NETL DE-EE0004449 and under NSF OCI-1148291."

GPUTUM is available for free and is open source under the MIT License
The MIT License Copyright (c) 2014 Scientific Computing and Imaging Institute, University of Utah. License for the specific language governing rights and limitations under Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Z. Fu, W.-K. Jeong, Y. Pan, R. M. Kirby, and R. T. Whitaker, "A fast iterative method for solving the Eikonal equation on triangulated surfaces", SIAM Journal of Scientific Computing, Vol. 33, No. 5, pages 2468-2488, 2011.

Zhisong Fu, Robert M. Kirby and Ross T. Whitaker, "A Fast Iterative Method for Solving the Eikonal Equation on Tetrahedral Domains", SIAM Journal of Scientific Computing, Vol. 35, No. 5, pages C473-C494, 2013.

James King and Robert M. Kirby, "A Scalable, Efficient Scheme for the Evaluation of Stencil Computations over Unstructured Meshes", IEEE SuperComputing 2013, Denver, CO, November 17-22, 2013.
Zhisong Fu, T. James Lewis, Robert M. Kirby and Ross T. Whitaker, "Architecting the Finite Element Method Pipeline for the GPU", Journal of Computational and Applied Mathematics, Volume 257, pages 195-211, 2014.

James King, Sergey Yakovlev, Zhisong Fu, Robert M. Kirby and Spencer J. Sherwin, "Exploiting Batch Processing on Streaming Architectures to Solve 2D Elliptic Finite Element Problems: A Hybridized Discontinuous Galerkin (HDG) Case Study", Journal of Scientific Computing, Volume 60, pages 457-482, 2014.

Zhisong Fu, Sergey Yakovlev, Robert M. Kirby and Ross T. Whitaker, "Fast Parallel Solver for Levelset Equations on Unstructured Meshes", Concurrency and Computation: Practice and Experience, Accepted, 2014.

Zhisong Fu (1)
Won-Ki Jeong (2)
James King (1)
T. James Lewis (1)
Yongsheng Pan (1)
Spencer J. Sherwin (3)
Sergey Yakovlev (1)
Robert M. Kirby (1)
Ross T. Whitaker (1)

(1) The Scientific Computing and Imaging Institute, University of Utah, Salt Lake City, UT 84112
(2) Electrical and Computer Engineering, UNIST (Ulsan National Institute of Science and Technology), 100 Banyeon-ri Eonyang-eup, Ulju-gun Ulsan, Korea 689-798
(3) Department of Aeronautics, Imperial College London, London, UK


Third Party Software Requirements

  • CMake (2.8+ required)
  • Git (2.0+)
  • CUDA tookit (7.0+ for FEM solver, 7.5+ for Eikonal & Level-Set solvers). Download here.
  • The standard system build environment tools.

System Requirements

  • You will need a CUDA Compatible Graphics card (see here for options). You will also need to be sure your card has CUDA compute capability of at least 2.0.
  • The following operating systems have been tested with GPUTUM solvers:
    • OpenSuse 12.3 Linux on NVidia GeForce GTX 570 HD
    • Windows 7 on NVidia GeForce GTX 775M
    • OSX 10.10 on NVidia GeForce GTX 775M
    • Ubuntu 14.04 Linux on NVidia GeForce GTX 560 Ti (FEM Solver tested only)
  • Windows: You will need Microsoft Visual Studio 2013 build tools. This document describes the "NMake" process.
  • OSX: Please be sure to follow setup for CUDA here. There are several compatibility requirements for different MAC machines, including using a different version of CUDA (ie. 5.5).


  • Linux / OSX
In a terminal, type:

mkdir <solver>/build
cd <solver>/build
cmake ../src

  • Windows
Open a Visual Studio (32 or 64 bit) Native Tools Command Prompt. Follow these commands:

mkdir C:\Path\To\<solver>\build
cd C:\Path\To\<solver>\build
cmake -G "NMake Makefiles" ..\src

  • Note: For all platforms, you may need to specify your CUDA toolkit location (especially if you have multiple CUDA versions installed):
  • Note: If you have compile errors such as undefined reference: atomicAdd, it is likely you need to set your compute capability manually. CMake outputs whether compute capability was determined automatically, or if you need to set it manually. The default (and known working) minimum compute capability is 2.0.

Regression Tests

Each solver has a set of regression tests to see if recent changes break expected results. To build the tests, you will need to set BUILD_TESTING to "ON" in either ccmake or when calling Cmake:

cmake -DBUILD_TESTING=ON ../src

The gtest library included in the repo needs to be built with forced shared libraries on Windows, so use the following:

cmake -DBUILD_TESTING=ON -Dgtest_forced_shared_crt=ON

Be sure to include all other necessary CMake definitions as annotated above.

Running Examples

For test purposes, the solver can be run standalone with sample data. To build the code with this capability, enable the CMake variable BUILD_EXAMPLES, and proceed with the rest of the CMake & build process:

cmake -DBUILD_EXAMPLES=ON ../src

You will find the example binaries built in the build/examples directory.Run the examples in the build directory:


Follow the example source code in src/examples to learn how to use the library.

Software Repository and Reporting Bugs

The source code for each solver can be obtained from its respective SCIInstitute github page:
Take the following steps in order to download the source code from github:
1. Ensure that the git program is installed on your computer.
2. Type 'git clone <repository_URL>', where the repository URL is equal to the link listed above with a '.git' suffix at the end. For example, for the FEM Solver code, type 'git clone


You can browse the gputum mailing list archive
Joining the GPUTUM Mailing List
  1. Compose an email to This email address is being protected from spambots. You need JavaScript enabled to view it. with the following in the body of message: subscribe gputum
  2. Nothing needed in the Subject line, just send.
  3. You will receive a response from the list manager requesting confirmation. Just send back a reply message to confirm your subscription (no added text needed).
  4. Finally, you will receive a welcome message confirming that you have been added to the mailing list.

  1. Compose an email to This email address is being protected from spambots. You need JavaScript enabled to view it. with the following in the body of message: unsubscribe gputum
  2. Nothing needed in the Subject line. Just send.
  3. You will receive a response from the list manager notifying you that the command has succeeded and you have been removed from the list.