Step-1 |
Creating a grid. A simple way to write it to a file.
|
Step-2 |
Associate degrees of freedom to
each vertex and compute the resulting sparsity pattern of
matrices. Show that renumbering reduces the bandwidth of
matrices significantly, i.e. clusters nonzero entries around the
diagonal.
|
Step-3 |
Actually solve Laplace's
problem. Object-orientation. Assembling matrices and
vectors. Boundary values.
|
Step-4 |
This example is programmed in a
way that it is independent of the dimension for which we want to
solve Laplace's equation; we will solve the equation in 2D and
3D, although the program is exactly the same. Non-constant right
hand side function. Non-homogeneous boundary values.
|
Step-5 |
Computations on successively
refined grids. Reading a grid from disk. Some optimizations.
Using assertions. Non-constant coefficient in
the elliptic operator. Preconditioning the CG solver for the
linear system of equations.
|
Step-6 |
Adaptive local
refinement. Handling of hanging nodes. Higher order elements.
Catching exceptions in the “main” function.
|
Step-7 |
Helmholtz
equation. Non-homogeneous Neumann boundary conditions and
boundary integrals. Verification of correctness of computed
solutions. Computing the error between exact and numerical
solution and output of the data in tables. Using counted pointers.
|
Step-8 |
The elasticity equations will be
solved instead of Laplace's equation. The solution is
vector-valued and the equations form a system with as many
equations as the dimension of the space in which it is posed.
|
Step-9 |
Linear advection equation, assembling
the system of equations in parallel using multi-threading,
implementing a refinement criterion based on a finite difference
approximation of the gradient.
|
Step-10 |
Higher order mappings. Do not
solve equations, but rather compute the value of pi to high
accuracy.
|
Step-11 |
Solving a Laplace problem with
higher order mappings. Using strange constraints and
intermediate representations of sparsity patterns.
|
Step-12 |
Discontinuous Galerkin methods for linear advection problems.
|
Step-13 |
Software design questions and
how to write a modular, extensible finite element program.
|
Step-14 |
Duality based error estimators,
more strategies to write a modular, extensible finite element
program.
|
Step-15 |
1d problems, nonlinear solvers,
transfering a solution across mesh refinement.
|
Step-16 |
Multigrid preconditioning of the Laplace equation on adaptive
meshes.
|
Step-17 |
Using PETSc for linear algebra; running
in parallel on clusters of computers linked together by MPI.
|
Step-18 |
A time dependent problem; using a much
simplified version of implementing elasticity; moving meshes; handling
large scale output of parallel programs.
|
Step-19 |
Input parameter file handling. Merging
output of a parallel program.
|
Step-20 |
Mixed finite elements. Using block
matrices and block vectors to define more complicated solvers and
preconditioners working on the Schur complement.
|
Step-21 |
The time dependent two-phase flow in
porous media. Extensions of mixed Laplace discretizations. More
complicated block solvers. Simple time stepping.
|
Step-22 |
Solving the Stokes equations of slow fluid flow on adaptive
meshes. More on Schur complement solvers. Advanced use of the
ConstraintMatrix class.
|
Step-23 |
Finally a "real" time dependent problem, the wave equation.
|
Step-24 |
A variant of step-23 with absorbing
boundary conditions, and extracting practically useful data.
|
Step-25 |
The sine-Gordon
soliton equation, which is a nonlinear variant of the time
dependent wave equation covered in step-23 and step-24.
|
Step-27 |
hp finite element methods |
Step-28 |
Multiple grids for solving a multigroup diffusion equation
in nuclear physics simulating a nuclear reactor core |
Step-29 |
Solving a complex-valued Helmholtz equation. Sparse direct
solvers. Dealing with parameter files. |
Step-30 |
Anisotropic refinement for DG finite element methods.
|
Step-31 |
Time-dependent Stokes flow driven by temperature
differences in a fluid. Adaptive meshes that change between time
steps.
|
Step-33 |
A nonlinear hyperbolic conservation law: The Euler equations of
compressible gas dynamics.
|
Step-34 |
Boundary element methods (BEM) of low order: Exterior irrotational
flow. The ParsedFunction class.
|
Step-35 |
A projection solver for the Navier–Stokes equations.
|
Step-36 |
Using SLEPc for linear algebra; solving an eigenspectrum
problem. The Schrödinger wave equation.
|
Step-38 |
Solving the Laplace-Beltrami equation on curved manifolds embedded
in higher dimensional spaces.
|
Step-39 |
Solving Poisson's equation once more, this time with the
interior penalty method, one of the discontinous Galerkin
methods developed for this problem. Error estimator, adaptive
meshes, and multigrid preconditioner, all using the MeshWorker
framework.
|
Step-40 |
Techniques for the massively parallel solution of the Laplace
equation (up to 10,000s of processors).
|
Step-45 |
Periodic boundary conditions.
|