About the course
Goal: reliable hands-on computing with PDEs
When you encounter a partial differential equation, you will after this course have a clear idea of
- how to view the problem as an assemply of smaller/simplified pieces
- how to formulate a finite difference or finite element method for the problem
- how to implement the numerical method in a program
- how to verify that the numerical computations are correct
- how to estimate the reliability of numerical simulations, and in particular discover non-physical numerical artifacts
- how different sources of errors play together
Teaching method: simplify, understand, generalize
To take advantage of the true power of mathematics in physics, biology, and other applied sciences, one needs to simplify, understand, and generalize. These three concepts also form the teaching method in this course.
A series of model problems are addressed and used in examples:
- exponential decay
- vibrating systems
- diffusion
- wave motion
- advection
- elasticity
- viscous flow
- coupled flow, deformation, transport, and/or heat transfer
- discretization of the model (finite difference, element, volume; staggered grids, mixed spaces; discontinuous Galerkin methods)
- methods for nonlinear differential equations
- implementation of the discrete model (from scratch in 1D, using tools like FEniCS for 2D/3D)
- programming tools: Python, Cython, Python-F77/C++ via f2py and Instant, FEniCS, nose, SymPy
- verification of the implementation
- analysis of the discrete model: exact (Fourier) solutions, trunction error
- understanding what can go wrong (numerical artifacts)
- extensions, generalizations, real applications
- scaling, real data with units
- parallel computing
- preconditioned iterative methods for large linear systems
- report writing (LaTeX, HTML/MathJax, Sphinx), reproducibility, hg/git, Bitbucket/GitHub
Through the simplify, understand, and generalize paradigm, one will view a complex scientific application as an assembly of pieces that can be understood separately and then brought together (perhaps with considerable efforts!) to solve the problem in a reliable way. Our focus throughout the course is two-fold: 1) how to do it, and 2) how to assess the quality.
Students must do an approximately 60 h project where the main pieces from the course, such as time-dependent/nonlinear PDEs, finite elements, FEniCS programming, verification (convergence rates), critical evaluation of the method, report writing, etc. are brought together. A default project exists.
When teaching new methods, we always start out with simple ODEs to explain the very basics of the technicalities. Then we extend the methodology progressively using more advanecd models that build on what we have learned through the simpler ones. In this way, new mathematical or programming techniques are introduced in problems of the simplest possible type (but no simpler!), yet of a relevance that carries directly over to advanced PDE problems.
Files for the course
All examples and documentation for the course can be downloaded by the command
Terminal> git clone https://github.com/hplgit/INF5620.git
This gives you a directory INF5620
with the course material.
This material might be frequently updated. To get the latest update,
go to the INF5620
directory and run the command
Terminal> git pull origin master
Exam
There will be an oral exam. Two weeks prior to the exam six topics (exercises) are announced. For each topic you must prepare a 20 min talk (without any aids). In the exam room, you throw a die and the number of eyes determines which topic you are to present. You will get some questions after the presentation, about the selected topic or from the five other topics. You will not get questions beyond the given six topics.