Home Schedule Optional Activities Office Hours Homework Archive

Optional Activities

Since the students in Math/CS 714 have a wide range of backgrounds, the course will feature several optional activities. These will consist of 2 h workshops, covering either useful background material, or topics that go beyond the standard course material. A list of optional activities is posted below.

This page contains additional details about the logistics for optional activities.

Each optional activity is scheduled for two hours (although it is unlikely to take the full timeslot). All optional activities are scheduled on Wednesdays 2pm–4pm CT in person (901 Van Vleck Hall). Activities will be recorded, but in-person participation is strongly encouraged; these sessions provide a useful venue for meeting classmates.

Summary

Click on the activity titles to be taken to the longer description and accompanying materials.

The deadline for the first submission of the writeup will be set to 5pm CT twelve days after the activity on the course Canvas site.

Detailed information

Introduction to C++

In Math/CS 714 we'll primarly use interpreted languages like Python. But why are compiled languages the go-to tool in coding applications as small as apps in our phones and as big as simulations on supercomputers? The reason is greater control, better performance, and a 100% legit reason to have a long break.

In this workshop, we will take a critical look at the differences between compiled languages and interpreted ones. We will also work on some coding examples together to get familiar with C++, a widely-used language in scientific computing.

XKCD comic

Time permitting, we will also look at the Linux command line, as it is often used to compile C++ code and run simulations on remote servers—as well as to perform complex file manipulations and transfers. The command line is also built into Mac OS (via the Terminal app) and is available on Windows (e.g. via WSL).

No prior C++ experience required.

Time:

  • Live workshop: 2pm Wed Sep 10 (in person)
  • First submission: due at 5pm Mon Sep 22

ODE integration methods

In this workshop, we will review key concepts related to solving ordinary differential equations (ODEs), with a focus on material relevant to Lectures 8 and 9 (ODE initial value problems). We will revisit foundational theory and explore common numerical methods for ODE integration. Topics include: existence and uniqueness of solutions, Lipschitz constant, one-step methods (forward and backward Euler), truncation error, Runge–Kutta methods, and Butcher tableau.

ODE integration methods

Either Python or C++ experience required.

Time:

  • Live workshop: 2pm Wed Sep 17 (in person)
  • First submission: due at 5pm Mon Sep 29

Materials:

The multigrid method

In Math/CS 714, we will learn about iterative methods for solving linear systems. In addition to the methods covered in the lecture, we will explore the multigrid method, a highly efficient iterative approach for solving linear systems at O(1) complexity—the best one could hope for. This workshop will go into more detail about the theory and application of multigrid methods. We will implement the multigrid method in two dimensions, and compare its efficiency to other approches such as the Jacobi and Gauss–Seidel methods. We will also discuss contemporary developments in multigrid research, as well as available software libraries that implement the method.

Multigrid method

Either Python or C++ experience required.

Time:

  • Live workshop: 2pm Wed Oct 1 (in person)
  • First submission: due at 5pm Mon Oct 13

Materials:

Multi-threaded programming

In high performance computing, we often see the word “multithreading” come up in the discussions (in addition to GPU computing). Multithreading is a parallelization model for CPUs to execute one job simultaneously on multiple threads. Modern laptops are equipped with processors of at least 2 cores (that is 4 threads), but oftentimes we only use 1 thread when running our Python or C++ programs. We can benefit from this performance boost if we do multithreading correctly, spending less time waiting in front of our laptops.

Multithreading comic

In this workshop, we will discuss two frameworks for parallelization: distributed and shared memory. We will then focus on the latter and introduce concepts for implementing shared memory parallelization in the code examples using Python (with joblib) and C++ (with OpenMP). We will learn about some gotchas of multithreading in memory management and reduced performance, and finally explore how these concepts are used by default in Python libraries such as NumPy, SciPy or JAX.

Either Python or C++ experience required.

Time:

  • Live workshop: 2pm Wed Oct 15 (in person)
  • First submission: due at 5pm Mon Oct 27

Materials:

Methods for fluid simulations

We see fluid dynamics in action every day, but we know very little about it. The existence and smoothness of the governing equations, the Navier–Stokes equations, remain one of the seven Millennium Prize problems yet to be solved. As we will see in the lectures, even simulating fluid dynamics is a nontrivial task.

In this workshop, we will provide a brief survey of various computational fluid dynamics (CFD) methods, their typical use cases, and representative examples. In particular, we will explore two examples in more details. The first is Stable Fluids by Jos Stam, which extends Chorin’s projection method to enable stable and fast fluid simulations—especially valuable for the computer graphics community for animation, gaming, and interactive applications. The second is the lattice Boltzmann method (LBM), which adopts a statistical physics perspective to describe fluid dynamics. This approach offers a different yet powerful framework for simulating quasi-incompressible flows, particularly when dealing with complex geometries.

Fluid simulation

Either Python or C++ experience required.

Time:

  • Live workshop: 2pm Wed Nov 19 (in person)
  • First submission: due at 5pm Mon Dec 1

Materials: