COSC 89.18/189: Computational Methods for Physical Systems, Fall 2020

From Hollywood visual effects to EA game engines, from virtual dressing mirrors to drone design, and from soft exosuits to Origami robots, computer-based modeling and simulation of physical systems are essential in various fields related to entertainment, manufacturing, and scientific research. This course introduces mathematical and algorithmic techniques to simulate, design, and make various physical systems, with applications to computer graphics, animation, robotics, and 3D printing. We will introduce classical numerical algorithms to simulate rigid body, soft body, fluid, and cloth, as well as control and optimization algorithms to design drones and 3D printable objects. The theoretical underpinnings are formed by multi-variable calculus, linear algebra, unconstrained and constrained optimizations, and introductory-level topics in continuum mechanics. This course will focus on the design and implementation of physical computing algorithms and their connections to the real world.

[News] For the quarter of 2020F, we add new course contents of differentiable physics simulation related to AI applications and high-performance GPU physics simulation.


Dartmouth COSC 89.18/189.02: Computational Methods for Physical Systems from Bo Zhu on Vimeo.

This is a trailer for the first time the class was taught in Winter 2019.

Students' Projects

Dancing of surface tension droplet -- Lisa A. Oh (2019F)

Ballon up! -- Ziyue Liu (2019F)

PIC/FLIP fluid -- Soren M. Thompson (2019F)

MPM sand simulation -- Benedikt Bitterli (2019W)

Position-based fluid dynamics -- Aaron N. Svendsen, Sharon Bian, and William Wolfe (2019W)

Alphabetphone (print), Kate Salesin (2019W)

Curly hair -- Gregory Szypko (2019W)

Pentacopter -- Luyang Zhao (2019W)

Chemical reaction simulation -- Dario Seyb (2019W)

Rocket engine simulation -- William Wolfe-McGuire (2019W)


Instructor: Bo Zhu (Sudikoff 153)

Teaching assistant: TBD

Guest instructors: Tao Du (MIT CSAIL) -- Drone Day; Yuanming Hu (MIT CSAIL, the author of Taichi) -- Particle Fluid


Class Time: K, Tuesday/Thursday, 2:50pm-4:40pm

X-Hours: KX, Friday, 5:10pm-6:00pm

Office Hours:, Professor, Tuesday/Thursday 4:50-5:50pm; TA, TBD

Location: Zoom Link TBD


The course information will be posted on both Canvas and the public course website.


We will use Piazza for our class discussion. Linked to be posted within Canvas.

Reading Materials:

The reading materials for the course include a bunch of course notes and papers, covering the topics of rigid body, soft body, cloth, and fluid simulation.


This course assumes an understanding of multi-variable calculus and linear algebra. Students are recommended to take COSC 50 as a prerequisite or to show equivalent understanding and comfortableness with programming in C++.

Starter Code:

The code repository for the programming assignments is in

Assignments and Projects:

Grading policies:: Programming Assignments:

There are four short programming assignments (100 lines C++ code) during the quarter, corresponding to the mathematical foundations, rigid body, deformable body, and fluid. In each assignment, you are expected to implement some critical parts of the numerical algorithm taught in class. A sample code will be delivered for each assignment.


You are expected to exercise two in-class presentations, including a presentation of a technical paper relevant to one of the class topics and a presentation for the final project at the end of the quarter.

Final Project:

We encourage you to customize your path for programming practices. You may take four assignments in four different topics to get tastes of different simulation problems and then pick one theme for your final project. Or, You may also dive into one or two simulation topics that you are strongly interested in at the very beginning and fully develop your mathematical and programming skills by working on them intensively before you start your final project on the same topic. You are encouraged to take advantage of your assignments and starter codes we have provided to help your final project. But the workloads for the assignments and the final projects need to be distinguished clearly and can't be double-counted.

Class Schedule:

The following is a tentative lecture schedule. It will be updated dynamically as the course proceeds.

Week 1: Introduction and math foundation

Tu: Introduction to physical computing and course logistics

Th: Dynamic system, time integration, C++ programming foundation

Week 2: Soft Body

Tu: Soft body simulation with body with mass-spring

Th: Cloth, implicit methods, and large time steps

Assignment 1 handed out

Week 3: Collision

Tu: Collision detection with spatial hashing and levelset

Th: Collision response

Week 4: Particle physics

Tu: Particle sand simlation

Th: Particle fluid simulation

Week 5: Grid-based fluid

Tu:Grid-based data structures and differential equation solvers

Th:Stable fluid simulation for video games

Assignment 3 handed out;Assignment 2 due

Week 6: Rigid body

Feb 5 (Tu): Math and programming foundation for rigid bodies

Feb 7 (Th): Articulated body and robotic simulation

Week 7: Control


Th:Soft drone

Assignment 4 handed out;Assignment 3 due

Week 8: High-Performance Physics

Tu:High-performance computing for physical simulation

Th:Introduction to GPU physical computing

Week 9: Physics and AI

Tu:Differentiable simulators and machine learning

Th:Physical computing for the future

Assignment 4 due

[Back to home]