Philip Blakely

Post-Doctoral Research Associate
Laboratory for Scientific Computing, Department of Physics
University of Cambridge


Current Research Interests

My current research is involved with Adaptive Mesh Refinement, its parallelisation and optimization. This is being used to solve a wide range of problems in Scientific Computing by other members of the LSC Research Group.

Ph.D. Research

My PhD focused on Numerical Relativity. The purpose of this was to develop a code for simulating solutions of Einstein's equations using up-to-date techniques such as AMR, overlapping grids, and HRSC schemes. The code was be used to simulate wind accretion onto a Kerr-Schild black hole.
The code is built on the Overture package, which generates overlapping grids and provides capabilities for coding numerical algorithms in a parallel environment

A copy of my thesis can be downloaded from DSpace. There was also a DVD accompanying my thesis, and the browseable content can be found here.



I undertake teaching for the MPhil in Scientific Computing run by the Centre for Scientific Computing. This is also part of the CDT in Computational Methods for Materials Science.

Introduction to Linux

This course is taught to all MPhil students in the Michaelmas Term. GNU/Linux is the operating system of choice in most scientific research environments. In this course we cover the following topics:

Scientific Programming in C++

This course is taught to all MPhil students in the Michaelmas Term. While there are other scientific computational languages available, notably Fortran, many scientific programs are written in C++. This course aims to give students a solid grounding in the basics of the language and a good introduction to some of the more advanced aspects as might be needed for writing robust scientific programs. It does not cover all of C++ by any means.

There is a set of practicals to accompany this course:

The solutions can be downloaded here.

MPI (Message Passing Interface)

I have occasionally replaced Dr Michael Rutter, standing in for lecturing his MPI course. Dr Rutter's notes can be found at MPI.pdf. I have used my own practical sheets for this, which can be found below:

Introduction to CUDA

This course is taught to all MPhil students in the Michaelmas Term. It is intended to provide an introduction to the essentials of the CUDA programming language as developed by NVIDIA.

Code samples used in the lectures can be downloaded here.

There is a set of practicals to accompany this course:

Skeleton code for these practicals, as well as solutions, can be downloaded here (skeleton code) and here (solutions).

Scientific Programming in C++ Advanced

This course is under development, but covers aspects of C++11 not covered in the earlier course. It also covers some more advanced design constructs within C++.

There are no practicals to go with this course, but virtually every topic introduced in the lectures is illustrated by a self-contained example in this tar-ball.

Other talks/notes

Brief talk on profiling given as an RSE Seminar. Profiling for HPC.

Brief talk on valgrind given as an RSE Seminar. Valgrind for debugging.

Brief introduction to issues of Parallel I/O and HDF5 given as an RSE Seminar. Parallel I/O and HDF5.


This probably doesn't count as a hobby, but I have written some obfuscated C programmes. Two of them have won awards in the International Obfuscated C Coding Contest:

Any complaints, comments or questions about this website and its content should be directed to Philip Blakely: