MTH 610: C++ Tools for Scientific Computation

Winter 2015

Jay Gopalakrishnan
NH 373
Tue, Thu: 17:15 - 18:30
Office Hours
Tue 13:15 - 14:15 (in NH 309) or by appointment.

Learning Outcomes

This course focuses on the abstraction mechanisms provided by C++ (including the C++11 and C++14 standards) that have proved useful in scientific computation in recent years. All concepts are introduced concretely through implementations in the open source software NGSolve. The emphasis is on learning to build new code using existing libraries and not on coding from scratch.


Basic C++ skills, familiarity with Linux, and consent of the instructor are required. An algorithmic understanding of finite elements would be useful, but not required.

Learning methods

This course will not follow the traditional lecture-based model. Most of the class time will be spent on hands-on projects that involve programming of scientific algorithms.

Students are expected to bring their own laptop to each class meeting. The laptop must be able to connect to the university's WiFi network.

In the first class meeting, the instructor will provide a Virtual Machine (in the form of a very large file) with an NGSolve installation for all students. It will virtually run the Ubuntu Linux operating system on student's host machines (even if the host machine has other operating systems like Windows, Mac, or other linux variants).

Topical outline
  • Installing and using Netgen and NGsolve
  • Writing shared libraries loadable into NGsolve
  • Choosing static vs. dynamic polymorphism
  • TMP, traits, the CRTP idiom, Barton-Nackman trick, etc.
  • Matrix expressions using ET and lambda functions
  • Automatic differentiation and finite elements
  • Orientation and shape functions
  • Facet spaces and hybrid methods
  • Implementation of multilevel methods


Grades will be assigned based on class projects.

Jay Gopalakrishnan