Building robust scientific codes
by Dr Matthew G Knepley
University of Chicago Computation Institute
Scientific software has progressed far beyond its humble beginnings in single-author codes developed quickly and abandoned on graduation. A modern simulation will incorporate many third-party packages for specific functionality, involve several developers, usually geographically distributed, and must leverage the latest advances in hardware, from the distributed Blue Gene P to the massively parallel Fermi C2050.
We will guide students through each facet of code construction:
- Overall design of multilanguage codes
- Version control
- Configure and Build systems
- Linear algebra and solvers
- Integration of GPU resources
- Symbolic computing
- Metaprogramming and code generation
To make the experience concrete, and provide students a platform on which to build, we will follow a particular version of this paradigm in class using popular open-source tools:
We will produce working prototype code incorporating all these diverse elements by the end of this course. Extensive laboratory sessions will accompany the lecture, and the instructor will be closely involved in helping students construct scalable, extensible software that will outlive this summer school. In addition, material from other courses in this institute can be easily and quickly implemented during this course.
In order to derive the most benefit from this course, the interested student should have:
- familiarity with Python,
- a concrete simulation problem in mind,
- willingness to write code and experiment.
- Introduction to Computer Science and Programming, a course using Python from MIT’s OpenCourseWare (includes full-lecture videos)
- Beginner’s Guide to Python
- The Python Tutorial
- A Python Programming Tutorial, by John W. Shipman
- PETSC User’s Manual