COSC 89.18/189: Computational Methods for Physical Systems, Winter 2019

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. You will learn how to progress from abstract mathematical models on to concise and efficient programs on to the fabrication of actual physical objects that can be grasped in one's hand. During the quarter, we will have a "Drone Day" to fly drones controlled by your own implemented simulation algorithm and a "3D Printing Day" to teach you 3D print your optimized designs.

Trailer:

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

Staff:

**Instructor: **Bo Zhu, office hours Wednesday 1pm-3pm (Sudikoff 153)

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

Logistics:

**Time: ** Tuesday/Thursday, 2:25pm-4:15pm

**Location:** TBD

Prerequisite:

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++.

Assignments and Projects:

- Assignments (40%): The course has four bi-weekly assignments each worth 10%.
- Presentation (10%): There are two presentations including an in-class technical paper presentation and a final project presentation. Each presentation is worth 5%.
- Final Project (50%): The course includes a final project worth 50% of the grade. The project will be evaluated concerning the mathematical modeling (20%), programming implementation (20%), and writing (a proposal and a final report, 5% each).

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.

You will work on a final project either individually or in a group (with up to two members). The goal of the project is to build a small computational system to solve a physical problem, with some concrete application related to animation, robotics, design, fabrication, etc. The workload per person is approximately three times larger than one programming assignment. You can start from one of the programming assignments and extend it to a self-contained system, but you are always encouraged to start from scratch to work for your own ideas. A project proposal is required before the mid-term week to ensure the project take off on time.

Class Schedule:

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

**Week 1: Introduction**

**Jan 3 (Th):** Physical computing in animation, robotics, and fabricatoin

**Week 2: Mathematical foundations**

**Jan 8 (Tu):** Mathematical foundation of shape and motion

**Jan 10 (Th):** Particle system, collisions, and your first physics engine

Assignment 1 handed out

**Week 3: Rigid body and drones**

**Jan 15 (Tu):** Rigid body dynamics

**Jan 17 (Th):** PID control and Drones

**Week 4: Articulation and character animation**

**Jan 22 (Tu):** Articulation and inverse kinematics

**Jan 24 (Th):** Character animation, rigid-body robots

**Week 5: Deformable body and 3D printing**

**Jan 29 (Tu):** Deformable body and finite element method

**Jan 31 (Th):** Topology optimization, computational fabrication, and 3D printing

Assignment 3 handed out;Assignment 2 due

**Week 6: Cloth and Origami**

**Feb 5 (Tu): ** Mass-spring model and cloth simulation

**Feb 7 (Th):** Thin shell, folding, and Origami

**Week 7: Fluid and physically-based animation**

**Feb 12 (Tu):** Introduction to fluid simulation

**Feb 14 (Th):** Particle fluid and visual special effects

Assignment 4 handed out;Assignment 3 due

**Week 8: Multi-physics system and soft robots**

**Feb 19 (Tu):** Solid-fluid interaction and soft robotic modeling

**Feb 21 (Th):** The 3D Printing Day, fabricate your own robot, in Thayer Machine Shop

**Week 9: Real-time simulation**

**Feb 26 (Tu):** Reduced models and fast simulations for games

Assignment 4 due

**Week 10: Not the end**

**Mar 5 (Tu):** Summary: creating your own physical world