Since moving to Oxford I have designed and delivered three courses to the MSc in Mathematical Modelling and Scientific Computing.

  • Practical Numerical Analysis: this course is an introductory numerical analysis course and covers floating point arithmetic, interpolation, quadrature, rootfinding, spectral and finite difference discretisations, and geometric multigrid.
  • Python in Scientific Computing: this course covers implementing finite element discretisations with FEniCS and Python. Along the way I teach how to discretise the Poisson equation, the heat equation, the \(p\)-Laplace equation, the Stokes equations with nonlinear rheology, an obstacle complementarity problem, St. Venant–Kirchhoff hyperelasticity, the time-dependent Navier–Stokes equations, and a PDE-constrained optimisation problem governed by the Ginzburg–Landau equation.

    pdf-iconLecture slides (Trinity term, 2015)

  • Solving PDEs on Supercomputers: this course covers how to design and implement scalable solvers for very large discretisations of PDEs (billions of degrees of freedom). I cover modern supercomputer architecture and its consequences for numerical algorithms, how to run jobs on┬ásupercomputers, algebraic multigrid solvers for the Poisson and Yamabe equations, block-triangular factorisation preconditioners (fieldsplit preconditioners) for the Stokes equations and the mother problem of PDE constrained optimisation, globalisation of Newton’s method, nonlinear preconditioning, and full approximation scheme nonlinear multigrid.

    pdf-iconLecture slides (Trinity term, 2015)

I have also given tutorials for Christ Church in

  • Numerical Analysis (second year course);
  • Constructive Mathematics (first year course);
  • Optimisation (first year course).