This course concerns scientific computation in a broad sense. We will use numerical libraries written in higher level languages, such as C, Fortran, and Python, to solve computational problems. Emphasis will be placed on computational decision making. For example, how should I choose which nonlinear solver to use? How should I evaluate its suitability once I have tried it? We will also cover basic techniques of algorithm design and implementation, project planning, source management, configuration and build tools, documentation, program construction, i/o, and visualization.
If you go on to career in scientific computing, you will very often be confronted with models, discretizations, numerical methods, and solution algorithms unfamiliar to you. Some you will research and understand completely, and some you will understand at a merely mechanical level. This course mirrors that experience. When you first did arthmetic, were you aware you were doing it in an algebraically closed field or why?
Instructor | Matthew G. Knepley |
Class times | 11am to 11:50am on Monday, Wednesday, & Friday |
Location | Duncan Hall 1042 |
A course overview and grading policy are available in accordance with Rice academic policy.
Class notes have been prepared for each lecture. Students should read the notes prior to attending class, but the lecture may deviate from the notes somewhat. The notes will be continually updated as the class progresses, so students should download them again at the beginning of each week. The lectures for each week of class are contained in a chapter. The weekly lectures will roughly follow the chapter sections.
The following books are foundational for the software construction and documentation will be attempt in this class. However we will not follow them in any way, and they are intended for reference and outside reading.
The paper is the perfect vehicle for mathematical communication, but not for communication of results in scientific computing. In this arena, it is the numerical library.
Online resources
We discuss distributed version control systems, and in particular Git.
Online resources
We develop a familiarity with Git, and go through common version control scenarios.
We discuss configure, compiling and linking C code, makefiles, Python, and using Valgrind for debugging.
Online resources
We discuss configure and makefiles.
We discuss using Valgrind and gdb for debugging.
The class learns to ask all questions online immediately. Google Omnia Responsit.
Online resources
We introduce LaTeX and its use in this course.
Online resources
Introduction to PETSc
Q & A
We become acquainted with PETSc’s Vec and Mat.
We learn how to use the debugger properly, and how to interpret a simple log summary.
I will be out of town.
Online resources
Basics of MPI, and design of layering (Communicators and attributes), running in parallel
Online Resources
Definitions of strong and weak scaling. Design of tests. Discussion of what they measure.
Arguments for MPI+MPI, and parts of MPI-3 students should learn about.
We look at data structures for sparse data, and especially for sparse matrices. We examine the COO, AIJ (looks like run length encoding for 0), and ELL.
Online Resources
We look at how PetscSection encodes a data layout, and give many examples.
Explain DMDA
Explain ex5 and ex19
Proto-MMS, looking at pointwise convergence
We look at structured grid simulations
I will be out of town
I will be out of town
I will be out of town
We learn why performance modeling is necessary.
Online Resources
We learn about the popular Roofline model.
Online Resources
I am out of town.
We understand how well SpMV can perform in theory.
Online Resources
We discuss the basics of the Plex interface for unstructure meshes.
Online Resources
We learn about data layout for mesh data, geometry (several kinds, like Bezier), solution data, adjacency data, etc.
We look use SNES ex12 to look at data layout for the doublet mesh and various discretizations and dimensions.
We look at deriving one data layout from another and discuss composable methods of parallel data distribution and redistribution.
Online Resources
What pieces do we need for finite element approximation, and basic steps for finite element residual computation
We learn how to solve many equations at once, even if they are only linear.
More discussion of spaces and dual spaces.
We look at LU, Cholesky, and Schur complements
We explore Krylov solvers computationally. We discuss the main differences without proof. We look at the Nachitgal paper showing computationally that it is hard to pick a solver. We look at the Greenbaum paper showing that it is very hard to predict the behavior of GMRES.
Discussion: List the reasons that solving Navier-Stokes with a Krylov method is a bad idea.
Online Resources
Basic computational steps in MG, and hand-waving explanation for its effectiveness. Distinction between classical MG and FAS. Simple proof using Taylor series from Barry.
We learn how to solve systems of nonlinear equations. Nonlinear Richarson, Newton, Picard, Nonlinear Conjugate Gradients, etc.
I am out of town.
No class
Composition of nonlinear solvers is defined, and we explore its use in model problems from the paper.
Online Resources
We show the simplicity and power of the PCFIELDSPLIT interface, arising from composability. We show examples of robust solvers constructed by composing existing strategies.
We recapitulate the course