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:
- Your name, degree you are working on (if any) and class/year, and thesis advisor and topic if any.
- Are you taking this course for credit?
- List your previous academic degrees or relevant educational experience.
- Explain in words (e.g., relevant courses, prior research) your background in CFD, especially numerical analysis and PDE/physics experience with fluids equations.
- 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)?
- 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/20For 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:
- 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.
- 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.
- 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).
- 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.
- 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!).
- 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.