Unit name | Advanced Computational Physics |
---|---|

Unit code | PHYSM0032 |

Credit points | 10 |

Level of study | M/7 |

Teaching block(s) |
Teaching Block 1 (weeks 1 - 12) |

Unit director | Dr. Antognozzi |

Open unit status | Not open |

Pre-requisites |
Level 6 unit in computing, either PHYS38012: Computational Physics, or PHYS30009: Introduction to Computational Physics, or equivalent. |

Co-requisites |
None. |

School/department | School of Physics |

Faculty | Faculty of Science |

This unit is designed for students with an interest in computational methods who wish to learn the basics of parallel programming, and parallel computational methods for physics. The course is aimed at students with a working knowledge of either the C (C++) or Python programming languages.

**Aims:** To introduce concepts of high performance computing for physicists, including parallel computing and use of GPU arrays, and to gain practical experience in the use of such methods to solve physics problems. The course will be aimed at students who might go forward to research in computational physics, and would want to obtain maximum benefit from the current generation of supercomputers.

**General Description:** The course will consist of a set of lectures and on-line tutorials, and supported by regular drop-in sessions. Assessment will be via a mini-project. The following topics will be covered:

- Parallel computer architectures; memory access and memory sharing; CPU versus GPU based systems and heterogeneous systems.
- Parallel algorithms for linear algebra; parallel dense matrix-vector products; parallel sparse matrix-vector products; block algorithms; scalability.
- Parallel methods in physics simulations; domain decomposition; load balancing and system tuning.
- Application examples:

- parallel fast Fourier transform;
- parallel integration schemes for many body problems (molecular dynamics or Newtonian gravity problems);
- hierarchical tree methods for many body problems;
- parallel Markov-chain Monte Carlo methods;
- lattice-based simulations e.g. Lattice Boltzmann flow simulators;
- efficient nearest-neighbour searching in molecular and astronomical systems.

Mini-projects will be available in the application areas detailed above.

After taking this unit, students should have a thorough grasp of parallel computing architectures for applications in physics research, as well as parallel algorithms for linear algebra and techniques for performing physics simulations across multiple processors. They should also be aware of the scalability of these techniques and the need to tune the size of the simulation to optimise its efficiency on a given computer system. They should be able to construct a working parallel program to solve a given physical problem, and be able to critically analyse the results obtained from the program in the context of the physics being studied.

**Transferable Skills:** Parallel programming techniques for application in physical sciences research or in a commercial (industrial) context.

The unit is taught through a set of lectures, on-line tutorials and drop-in sessions. The lectures will cover basic ideas and algorithms for parallel computing, as well as specific applications drawn from a variety of branches of physics. The on-line tutorials will include simple exercises in parallel programming, which will be handed in for marking. Weekly drop-in sessions with a post-graduate demonstrator be used to support the on-line tutorials and the mini-project which will be used for assessment.

Formative assessment through on-line tutorials and exercises which will be submitted for marking.

Summative assessment will consist of a mini-project (100%) consisting of a copy of the student's computer program and a structured technical report (maximum 2000 words) reviewing the results obtained using it.

The following books are recommended but is not essential:

- Kinder, J.M. and Nelson, P., A Student's Guide to Python for Physical Modelling, Princeton University Press, 2015.
- Kaeli, D.R., Mistry, P., Schaa, D. and Zhang, D.P., Heterogeneous Computing with OpenCL 2.0, Morgan Kaufman, 2015.