### About the Course

The course includes about 45 hours of lectures covering the material I normally teach in an introductory graduate class at University of Michigan. The treatment is mathematical, which is natural for a topic whose roots lie deep in functional analysis and variational calculus. It is not formal, however, because the main goal of these lectures is to turn the viewer into a competent developer of finite element code. We do spend time in rudimentary functional analysis, and variational calculus, but this is only to highlight the mathematical basis for the methods, which in turn explains why they work so well. Much of the success of the Finite Element Method as a computational framework lies in the rigor of its mathematical foundation, and this needs to be appreciated, even if only in the elementary manner presented here. A background in PDEs and, more importantly, linear algebra, is assumed, although the viewer will find that we develop all the relevant ideas that are needed.

The development itself focuses on the classical forms of partial differential equations (PDEs): elliptic, parabolic and hyperbolic. At each stage, however, we make numerous connections to the physical phenomena represented by the PDEs. For clarity we begin with elliptic PDEs in one dimension (linearized elasticity, steady state heat conduction and mass diffusion). We then move on to three dimensional elliptic PDEs in scalar unknowns (heat conduction and mass diffusion), before ending the treatment of elliptic PDEs with three dimensional problems in vector unknowns (linearized elasticity). Parabolic PDEs in three dimensions come next (unsteady heat conduction and mass diffusion), and the lectures end with hyperbolic PDEs in three dimensions (linear elastodynamics). Interspersed among the lectures are responses to questions that arose from a small group of graduate students and post-doctoral scholars who followed the lectures live. At suitable points in the lectures, we interrupt the mathematical development to lay out the code framework, which is entirely open source, and C++ based.

### Course Syllabus

**Syllabus**

The syllabus is outlined below. Each item is a unit consisting of between 4 and 24 segments (video lectures). A segment may be as short as one, and as long as 25 minutes. Expect to view around 3 hours of video lectures per week. There will be one paper-and-pencil, mathematical, assignment at the end of Unit 1, a quiz at the end of each Unit and 4 coding assignments. All code is to be in C++, using the open source library deal.ii.

1. Linear, elliptic partial differential equations in one dimension. Elasticity, heat conduction and mass diffusion.

2. Approximation. The finite-dimensional weak form.

3. Linear algebra; the matrix-vector form.

4. More on boundary conditions; basis functions; numerics.

5. Analysis of the finite element method.

6. Variational principles.

7. Linear, elliptic partial dierential equations for a scalar variable in three dimensions. Heat conduction and mass diffusion at steady state.

8. Lagrange basis functions and numerical quadrature in 1 through 3 dimensions.

9. Linear, elliptic, partial dierential equations for a scalar variable in two dimensions.

10. Linear, elliptic partial differential equations for vector unknowns in three dimensions (Linearized elasticity).

11. Linear, parabolic partial differential equations for a scalar unknown in three dimensions (Unsteady heat conduction and mass diffusion).

12. Linear, hyperbolic partial dierential equations for a vector unknown in three dimensions (Linear elastodynamics).

**Resources**

You can download the deal.ii library at dealii.org. The lectures include coding tutorials where we list other resources that you can use if you are unable to install deal.ii on your own computer. You will need cmake to run deal.ii. It is available at cmake.org.

**Work expectation**

You should expect to watch about 3 hours of video lectures a week. The first assignment is mathematical, to be worked out by paper and pencil. It should take a few hours, depending on your background. However, it will not be graded. Each quiz will consist of 2 or 5 multiple choice questions. The remaining are coding assignments, on which there can be quite a spread in the work you have to put in, again depending on your background. Almost all students will find the coding assignments to be more demanding of their time than the first, paper-and-pencil assignment. The second, third and fourth coding assignments should actually take no more time than the first one; you will stand to gain from a modular code, which we try to encourage in the templates that you will use.

**Books**

There are many books on finite element methods. This class does not have a required textbook. However, we do recommend the following books for more detailed and broader treatments than can be provided in any form of class:

The Finite Element Method: Linear Static and Dynamic Finite Element Analysis, T.J.R. Hughes, Dover Publications, 2000.

The Finite Element Method: Its Basis and Fundamentals, O.C. Zienkiewicz, R.L. Taylor and J.Z. Zhu, Butterworth-Heinemann, 2005.

A First Course in Finite Elements, J. Fish and T. Belytschko, Wiley, 2007.

### Recommended Background

A working knowledge of linear algebra (matrix-vector manipulations) is needed. Some exposure to partial differential equations would be very helpful. Experience with programming is a must, even if it is only Matlab or a language such as Fortran, C or Python.

### Suggested Readings

**Books**

There are many books on finite element methods. This class does not have a required textbook. However, we do recommend the following books for more detailed and broader treatments than can be provided in any form of class:

The Finite Element Method: Linear Static and Dynamic Finite Element Analysis, T.J.R. Hughes, Dover Publications, 2000.

The Finite Element Method: Its Basis and Fundamentals, O.C. Zienkiewicz, R.L. Taylor and J.Z. Zhu, Butterworth-Heinemann, 2005.

A First Course in Finite Elements, J. Fish and T. Belytschko, Wiley, 2007.

### Course Format

**Format**

The course consists of video lectures that span 15 weeks. However, the course itself will remain open for 17 weeks. This does not account for any holiday seasons. A typical week will cover roughly 3 hours of lectures. There is one paper-and-pencil assignment (ungraded), four programming assignments and a quiz at the end of each unit. The final grade will be determined by the programming assignments and quizzes.

**Grading**

There are five assignments in this class. The first is a “paper-and-pencil” assignment that will test your understanding of the basic mathematical idea underlying the finite element method. This assignment will not be graded. It will be followed by four coding assignments. Each is worth 100 points. We will allow resubmissions without penalty, and your last submission will be your grade on each assignment. However, note that these assignments become progressively more advanced, and the code for later assignments will use use that from the earlier ones. It is therefore in your interest to work on them early and diligently.

We have written an auto-grader to run and grade your code submissions. Because of the advanced nature of the assignments, this process can take upwards of a couple of minutes for each submission. At times, therefore, your assignment grade may not be available for 2-3 days. This, of course, depends on the number of students submitting solutions. There are many.

If you do not receive a grade for an assignment within 72 hours, please resubmit that assignment.

The quiz at the end of each unit will consist of between 2 and 5 multiple choice questions. Each question will be worth 10 points, so a quiz will be worth between 20 and 50 points. You will get three attempts, without loss of credit, for each quiz. The coding assignments allow unlimited attempts, as indicated previously.

Course grades will be calculated the day after the final deadline, and Statements of Accomplishment, and Verified Certificates will be issued roughly one week after grading is complete.

### FAQ

What resources will I need for this class? You will need computing resources sufficient to install the code and run it. Depending on the type of installation this could be between a 13MB download of a tarred and gzipped file, to 45MB for a serial MacOSX binary and 192MB for a parallel MacOSX binary. Additionally, you will need a specific visualization program that we recommend. Altogether, if you have 1GB you should be fine. Alternately, you could download a Virtual Machine Interface that unpacks to 7GB.

What is the coolest thing I’ll learn if I take this class? You will be able to write code that simulates some of the most beautiful problems in physics, and visualize that physics.

What background is expected for learners in this class? You will need to know about matrices and vectors. Having seen partial differential equations will be very helpful. The code is in C++, but you don’t need to know C++ at the outset. We will point you to resources that will teach you enough C++ for this class. However, you will need to have done some programming (Matlab, Fortran, C, Python, C++ should all do).

How much work will this class involve? Apart from the lectures, expect to put in between 5 and 10 hours a week.