MATH-GA 2011.004 / CSCI-GA 2945.004

Advanced Topics in Numerical Analysis:

Computational Fluid Dynamics

Warren Weaver Hall, room 1302, Tuesdays, 3:20-5:05pm
Courant Institute of Mathematical Sciences
New York University
Fall Semester, 2018

Homework Assignments

Homework assignments will involve computing. You can do all assignments using MATLAB easily, but I encourage you to use a compiled language (C++, Fortran) or Python also to prepare yourself for the final project.

Submit assigments via email as a tar or zip archive (if there are multiple files) or simple attachment. Submit a PDF file with a brief writeup of your solution, including any figures with results. Do not cut and paste code in the PDF, attach the script or source code directly. Make sure to name your files sensibly so I can unpack all of your homeworks without overwriting previous files.

As a first assignment, please submit the answers to this questionnaire via email as soon as possible:
  1. Your name, degree you are working on (if any) and class/year, and thesis advisor and topic if any.
  2. Are you taking this course for credit?
  3. List your previous academic degrees or relevant educational experience.
  4. Explain in words (e.g., relevant courses, prior research) your background in CFD, especially numerical analysis and PDE/physics experience with fluids equations.
  5. Why did you choose this course, and which of the topics listed in the course description interest you most (in particular, do you know what subject you would like to present on in class)?
  6. What is your programming experience (languages, level, parallelization, HPC)?

1. (Due Sept 16th) Advection-Diffusion Equations

Note: Everyone will need to well on the first two parts of this homework to pass this course -- you will be allowed to resubmit later if required.

2. (Due Oct 3rd) Boundary Conditions

3. (Due Oct 21st) Implicit Temporal Integrators

4. (Extended to Nov 8th) Space-Time Advection-Diffusion

5. (Due Dec 2nd) Pseudospectral Solver for 2D NS

Final Projects

Due by 9am Thursday 12/20

For the final projects, you have some freedom in selecting what you want to do. This would preferably be related to the subject of your Ph.D. research and be something you are interested in. The goal is to do something more "real-world" than the homeworks. In particular, the hope is that you will develop a larger-scale (2D or even better 3D) code in a programming language other than MATLAB. It would be even better if you learn how to parallelize your code (I can help with this also), either using more traditional approaches like MPI or OpenMP, or emerging platforms such as GPUs. However, it is OK to use MATLAB if your focus is more on numerical analysis and less on computing.

Most important is that you must carefully analyze and test the numerical accuracy of the codes using methods discussed in class. In particular, projects without validations of the code and determination of order of accuracy and discussion of sources of error will be returned for resubmission. To be more specific, here are the things that you are expected to do in your final project and report:
  1. The project is not about results (it is a numerical analysis project, not a science project). It is of course great to get some results, especially for the presentation, but this is not the goal and even if you don't finish or manage to get final results that is fine.
  2. The report should explain the numerical method you used in sufficient detail for someone else to be able to reproduce your results -- this is the standard for all scientific writing/papers.
  3. You must validate your code (consistency). Remember that this cannot be validating against the code itself, i.e., it cannot be empirical convergence testing. Validation must be done against solutions obtained by analytical methods, manufactured solutions, or results obtained by another method (perhaps slower but should be more accurate).
  4. You must study the stability (if appropriate for your code) of your method. If there is a time step size, what sets the limit. Does the problem behave well as you refine the grid or are you seeing some instabilities. Etc. Stability here is both a property of spatial and temporal discretizations. Empirical stability is OK but of course analytical explanations are best.
  5. You must confirm an order of convergence and study the accuracy of the method (consistency+stability=convergence so you cannot do this until steps 3 and 4 are complete!).
  6. You must discuss the computational complexity of the algorithm/code etc. What limits the scalability/efficiency of the code. How could you improve it if you had more time. What other methods could you have used and how would they compare.
Here are some possible projects that I am familiar with and could help you with. But please feel free to suggest your own:

1. Multigrid solver for Helmholtz equations

Develop a multigrid solver for 2D and 3D Helmholtz/Poisson equation. Use it to construct an approximate projection method preconditioner for solving the time-dependent incompressible equations on a MAC grid, either with (Navier-Stokes) or without (Stokes) the advective terms.

2. Pseudo-spectral solver for Navier-Stokes in 3D

Implement a pseudospectral solver for the NS equations in 3D for periodic domains, and explore anti-aliasing strategies; see for example this article on computing nearly-singular solutions.

3. Immersed Boundary Method

Develop an implementation of the immersed boundary method in two and three dimensions, using a fluid solver of your choice. You may restrict to Stokes flow for simplicity.

3. Method of Regularized Stokeslets

Develop an implementation of the e method of regularized Stokeslets (for two-dimensions, see this article) in two and three dimensions, and study its accuracy and computational efficiency. As an alternative to regularized Stokeslets, consider the rigid multiblob approach developed in my group, see the article "Hydrodynamics of Suspensions of Passive and Active Rigid Particles: A Rigid Multiblob Approach", F. Balboa Usabiaga, B. Kallemov, B. Delmotte, A. Pal Singh Bhalla, B. E. Griffith and A. Donev, Communications in Applied Mathematics and Computational Science, 11(2): 217--296, 2016 [ArXiv:1602.02170].

4. High-Resolution Methods

Implement a high-resolution space-time method in two dimensions for the advection-diffusion equation (focusing on advection-dominated problems) and test in model problems. For example, implement a higher order high-resolution schock-capturing advection method such as PPM or MUSCL or (W)ENO, or do advection using the  BDS algorithm by May, Nonaka, Almgren, and Bell but add diffusion into the picture as in Homework 4.

5. Shallow Water Equations

Develop a solver for the shallow water equations.

6. Pseudospectral methods for higher-order equations

Explore numerically higher-order (complicated) transport equations such as the Kuramoto-Sivashinsky equation, or the Korteweg de Vries Burgers equation (or just KdV), or the Cahn-Hilliard equation. These often combine diffusion, hyperbolics (waves), and some nonlinear terms to obtain interesting (and physically-relevant) equation. For example, use pseudospectral method o solve the Kuramoto–Sivashinsky equation in one and higher dimensions.

6. Exponential Integrators

Explore Krylov methods for computing the action of the matrix exponential to implement an exponential time integrator for some nontrivial stiff-nonstiff equation. For motivation, see this article on solving stiff large-scale MHD problems using exponential integrators.

6. Finite-element methods

Learn how to use one of a number of excellent FEM programming frameworks (consult Prof. Georg Stadler or Prof. Charles Puelz for help) such as the easy-to-use python-based FEniCS or if you are experienced in C++ already try deal.II. Use the framework to solve a nontrivial parabolic or elliptic equation.