MTH 610: C++ Tools for Scientific Computation
Winter 2015
Instructor
Jay Gopalakrishnan
Venue
NH 373
Times
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.
Prerequisites
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
References
Evaluation
Grades will be assigned based on class projects.
Jay Gopalakrishnan