Scientific Computing for Physicists (PHY1610H)
Winter 2022
University of Toronto


Scientific computing is now an integral part of the scientific endeavour. It is an interdisciplinary field that combines computer science, software development, physical sciences and numerical mathematics. Yet, many computational projects start off with knowledge of the science you want to do, and with a bit of programming experience, after which follows an arduous journey to get to a (maintainable) piece of code which you trust to compute the right thing.

This course is aimed at reducing your struggle, and make you a more efficient computational scientist. Topics include well-established best practices for developing software as it applies to scientific computations, common numerical techniques and packages (so you don't reinvent the wheel), and aspects of high performance computing.

While the course title is 'Scientific Computing for Physicists', its content is equally applicable to other physical sciences (astrophysics, chemistry, engineering, ...), and much of the software development and high performance computing material will be of interests to students in other research areas where they have to write or maintain scientific code.


The course consists roughly of three parts.

  • Part 1: Scientific Software Development & Design
    Topics: C++, modular programming, make, debugging, version control, I/O
  • Part 2: Numerical Tools for Physical Scientists
    Topics: Random numbers and Monte Carlo, ODE and Molecular Dynamics, partial differential equations, linear algebra, fast fourier transforms.
  • Part 3: Optimization High Performance Scientific Computing
    Topics: profiling, supercomputing, parallel programming (shared and distributed programming), gpu computing.


Students should have a fair amount programming experience (e.g. in C, C++, Fortran, Python, or similar). While we will introduce the C++ language, in one language or another, students should already know things like: how to use variables, how to write a function, how to print something to screen, how to define an array, fill it, and add all numbers in that array.

To be able to follow along with the examples, all registered students of the course will be given access to SciNet's Teach cluster. To access the cluster, the students will require a computer with an ssh client. For Linux and Mac computers, the 'ssh' command is usual available in the terminal, for Windows users, the MobaXTerm application can be downloaded and used.

Most assignment can also be done on the students' own computer, but in that case, that computer should have unix-like environment with the GNU compiler suite. For windows users, Cygwin is a decent choice (just make sure you install packages like gcc-g++, make, openssl, and git), or the Linux Subsystem for Windows. For Mac users, we advise to install one of the GNU compiler suites available from

We furthermore recommend that all students get a SciNet account as well, which would allow them to run their assignments on one of the SciNet supercomputers, and use these after the course has finished. Instruction on how to get an account can be found here.

Web site

The website will be maintained during the course. It's where you find the zoom links, the lecture slides, where you hand in your assignments, and get feedback on those from the instructors.

Location and Times

For the time being, in accordance with the university's policy regarding COVID-19, all lectures and office hours will be held virtually using Zoom. The Zoom link can be found if you log into the course web site.

Starting February 8th, lectures will be held in person:
Tuesday lectures will be in Sidney Smith Hall (100 Sr. George Street), room 1070
Thursday lectures will be in Galbraith Building (35 St. George Street), room 244

Lecture dates:

The first lecture is on Tuesday January 11th, 2022, the last is on April 7th, 2022. There will be no lectures during Reading Week (February 22-25).

List of lecture dates:

January 11, 13, 18, 20, 25, 27, 2022
February 1, 3, 8, 10, 15, 17, 2022
March 1, 3, 8, 10, 15, 17, 22, 24, 29, 31, 2022
April 5, 7, 2022

Office hours

For the duration of the course, office hours will be on

  • Wednesdays from 2:00 pm to 3:00 pm.
  • Friday from 12:00 noon to 1:00 pm.
As is the case for the lectures, the office hours will be held over Zoom as well. Note that the course also has a forum on which you can post questions. Student can answer questions on the forum as well. If neither the forum nor the office hours work, feel free to send question them by email to courses AT, mentioning the course code PHY1610

Instructor and TA

The lecturer for this course will Dr. Ramses van Zon, who is a also a Computational Science Specialists at the SciNet High Performance Computing Consortium. The TA for this course, who will primarily be grading your assignments, is Alistair Duff.

Assignments and Grading

Most weeks, students will be given a programming assignment, with a due date one week after. These assignments are designed to help absorb the course material.

There will be ten such assignments. The average of the assignments will make up your grade. To ensure a timely reporting of student grades, we will adhere to the following policy:

Homework may be submitted up to one week after the due date, at a penalty of 5% per day taken off from your mark. Deviations of this rule will only be considered, on a case-by-case basis, in exceptional circumstances.
All sets of homework need to be handed in for a passing grade, which is based on the average of the ten sets. If, due to exceptional circumstances, an assignment was missed, a make-up assignment can be given at the end of the module. Rather than focusing on the topic of a specific week, the make-up assignment may involve any of the material of the course.

List of tentative assignment due dates:

January 27, 2022
February 3, 10, 17, 2022
March 3, 17, 24, 31, 2022
April 7, 14, 2022

Course Credit

This course is an official physics graduate course. It is possible for graduate students outside of Physics to take the course, if they are allowed to take physics courses. However, they should first confirm this with the graduate coordinator in their own department.

For participants that cannot take this course for credit (e.g. other SciNet users), each of the parts can be taken as a 'SciNet course', which count towards the SciNet certificates.

In addition, participation in this course counts towards the SciNet Scientific Computing Certificate and the SciNet HPC Certificate.

More information on the SciNet's Certification Program, can be found here.

Last modified: Thursday, 3 February 2022, 12:17 PM