This project replaces the coding portion of Exam 2 and the coding portion of the Final Exam.

- It will be due Tuesday April 25 before the final exam.

For this project, you will select a problem or topic in numerical methods, investigate it, and report on your findings.

## Approach

There are two main approaches:

- Apply existing numerical methods we have discussed this semester to a unique and interesting numerical problem.
- Learn about a new technique that we did not discuss, and apply it to either a standard problem that we have considered, or a unique problem.

## Deliverable

You should turn in a report on your work. This should be typed, not handwritten. Jupyter is a good platform for this. If you do not use Jupyter, turn in a PDF document generated using, e.g., LaTeX, MS Word, etc.

- You should introduce the problem, give a description, motivation, issues, and approach.
- Describe the methods you are using in detail. This applies to both approaches above.
- Provide your code. If you are submitting a PDF, you should submit your code separately.
- Discuss results, figures, etc. Investigate the problem. Many of our homework assignments were designed to do this. We did not simply solve a problem, but investigated it to gain insight. Remember Hamming’s motto: “the purpose of computing is insight, not numbers.”
- Provide a concluding statement.

## Examples

Many of you are involved in research, and that work may provide motivation for a topic selected. Be creative, search the web, look up papers, talk to your research advisor or other professors, expand on a topic we have already covered. In some cases, I noted that we could spend a whole semester on something, but we only give it a day. A few examples to inspire are below. I have some experience with most of these. Be careful about Google. You can be easily overwhelmed and intimidated. Many methods are simpler and easier to implement than you would think if you read the wrong source.

**Euler equations**Write a code that will solve the Euler equations, which are a nonlinear, hyperbolic system of equations. You could do this in one dimension or more.- In walking back from class I was daydreaming about recording my voice and interpreting it as a pressure signal and seeing how it sounded after solving the Euler equations with various methods over some spatial domain. This would be cooler using a spherical axisymmetric system, but solving in the radial coordinate only (still one-dimensional), though this would preclude a periodic domain, so you might want to stay away from the boundaries.

**Boundary conditions**Speaking of boundary conditions, investigate how to treat boundary conditions in the Euler or Navier Stokes equations (one dimensional is fine), for compressible flows. (The Euler equations presented in class are compressible.) I have some good papers on this. This makes use of*characteristics*and applies an Eigen decomposition similar to that presented for the Euler equations.

**Level set methods**Learn about level set methods and use them to solve a problem. These have application to motion of surfaces and interfaces, like a flame front.**Multigrid**Learn about multigrid methods and apply to a simple problem.**Finite element methods**Finite element methods are different than finite difference and finite volume methods for solving PDEs. They are very popular for solid mechanics problems. Rather than using a grid of points and approximating derivatives in terms of that grid, the solution is written as a sume of simple-shaped basis functions like triangular profiles, and weights for those functions are computed from the PDE. This gives the solution everywhere instead of just at discrete points.**Stiff solvers**We only really discussed Backward Euler as an implicit method for solving stiff systems. Learn about more accurate solvers, code it up, and try one out on a stiff system.**Parallel computing**Use MPI to parallelize a basic solver or approach for a PDE. Python has MPI and openMP libraries.- You could also consider solution with a GPU if you have access to one through your research group, or have access to BYU’s supercomputing facilities.

**Optimization**Learn about a technique for optimization (minimizing/maximizing some function) and demonstrate it’s use. Optimization algorithms are important in many fields, including machine learning. Some optimization approaches are motivated by physical processes, such as simulated annealing.**Example problems**- There are a wide range of problems in chemical engineering that could be solved. Here are a few examples
- Radiative transfer using ray tracing, discrete ordinates, or spherical harmonics
- Fluid mechanics: Euler equations, Navier-Stokes equations, compressible or incompressible, vorticity/streamfunction formulations, etc.
- Heat and/or mass transfer.
- Chemical kinetics: solution of stiff systems, or large systems of coupled reactions, as occur in e.g., combustion or polymeric systems.
- Adaptive grid solvers for resolving variable profiles. Numerical Recipes discusses quad-tree and oct-tree grids, for instance.
- Equilibrium solvers for systems with multiple species/reactions, such as by minimizing Gibbs energy. These involve linear and nonlinear solvers.

- There are a wide range of problems in chemical engineering that could be solved. Here are a few examples