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

Unit code | PHYSM0032 |

Credit points | 10 |

Level of study | M/7 |

Teaching block(s) |
Teaching Block 4 (weeks 1-24) |

Unit director | Dr. Hanna |

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 will be taught through a combination of

- asynchronous online materials, including narrated presentations and worked examples
- synchronous group problems classes, workshops, tutorials and/or office hours
- asynchronous directed individual formative exercises and other exercises
- guided, structured reading

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.

Introduction to High Performance Scientific Computing by Victor Eijkhout, published by Lulu.com (2015)