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

Description

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.

Topics

The course consists roughly of three parts.

  • Part 1: Scientific Software Development & Design
    Topics: C++, modular programming, building tools, 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.

Prerequisites

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 usually available in the terminal, for Windows users, the MobaXTerm application can be downloaded and used.

You will need to submit programming assignments for this course (see below for details). These assignments can be done on the Teach cluster. Most can also be done on the students' own computer, but in that case, that computer should have a UNIX/Linux-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 install the Linux Subsystem for Windows. For Mac users, we advise to install one of the GNU compiler suites available from hpc.sourceforge.net.

It is furthermore highly recommended that all students get a SciNet account, which will allow them to run their assignments on one of the SciNet supercomputers, and use these after the course has finished. Instructions on how to get an account can be found here.

Web site

The website https://scinet.courses/1234 will be maintained during the course. This is where you find this syllabus, the lecture slides, recordings of the lectures, and where you hand in your assignments and get feedback on those from the instructors.

Location and Times

Lectures will be held in person on Tuesdays and Thursdays from 11:00 AM EST to 12:00 noon EST at the SciNet Teaching Room, which is located on the 11th floor of the West Tower of the MaRS building, 661 University Ave., Suite 1140, Toronto, ON M5G 1M1.

Lecture dates:

The first lecture is on Tuesday January 10th, 2023, the last is on April 6th, 2023. There will be no lectures during Reading Week (February 20-24).

List of lecture dates:
January 10, 12, 17, 19, 24, 26, 31, 2023
February 2, 7, 9, 14, 16, 28, 2023
March 2, 7, 9, 14, 16, 21, 23, 28, 30, 2023
April 4, 6, 2023

Office hours

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

  • Wednesdays from 2:00 pm to 3:00 pm.
  • Friday from 12:00 noon to 1:00 pm (virtual).
The Wednesday office hours will be held in person, usually in the SciNet Teaching room (exceptions will be announced), while the Friday one will be virtual using Zoom. 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 scinet DOT utoronto DOT ca, 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 Specialist at the SciNet High Performance Computing Consortium.

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 26, 2023
February 2, 9, 16, 2023
March 2, 16, 23, 30, 2023
April 6, 13, 2023

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.

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 by following this link.

Last modified: Friday, 16 December 2022, 10:51 PM