Syllabus
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).
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.