Reference documentation for deal.II version Git a39983f358 20200120 20:47:10 0500

New to deal.II? You might want to start with tutorial step1 and work your way up to step5. At that point you can explore what features you are interested in and look at the large collection of programs listed below.
The deal.II tutorial contains a collection of programs, each more or less built atop of previous ones, which demonstrate various aspects of the library. Each such example has the following structure:
You can browse the available tutorial programs
The programs are in the examples/
directory of your local deal.II installation. After compiling the library itself, if you go into one of the tutorial directories, you can configure the program by typing cmake .
, build it via make
and run it using make run
. The latter command also compiles the program if that has not already been done. The CMakeLists.txt files in the different directories are based on the autopilot style CMakeLists.txt example.
The following graph shows the connections between tutorial programs and how they build on each other. Click on any of the boxes to go to one of the programs. If you hover your mouse pointer over a box, a brief description of the program should appear.
Legend:
step1  Creating a grid. A simple way to write it to a file. 
step2  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. 
step3  Actually solve Laplace's problem. Objectorientation. Assembling matrices and vectors. Boundary values. 
step4  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. Nonconstant right hand side function. Nonhomogeneous boundary values. 
step5  Computations on successively refined grids. Reading a grid from disk. Some optimizations. Using assertions. Nonconstant coefficient in the elliptic operator (yielding the extended Poisson equation). Preconditioning the CG solver for the linear system of equations. 
step6  Adaptive local refinement. Handling of hanging nodes. Higher order elements. Catching exceptions in the 
step7  Helmholtz equation. Nonhomogeneous 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. 
step8  The elasticity equations will be solved instead of Laplace's equation. The solution is vectorvalued and the equations form a system with as many equations as the dimension of the space in which it is posed. 
step9  Linear advection equation, assembling the system of equations in parallel using multithreading, implementing a refinement criterion based on a finite difference approximation of the gradient. 
step10  Higher order mappings. Do not solve equations, but rather compute the value of pi to high accuracy. 
step11  Solving a Laplace problem with higher order mappings. Using mean value constraints and intermediate representations of sparsity patterns. 
step12  Discontinuous Galerkin methods for linear advection problems. 
step13  Software design questions and how to write a modular, extensible finite element program. 
step14  Duality based error estimators, more strategies to write a modular, extensible finite element program. 
step15  A nonlinear elliptic problem: The minimal surface equation. Newton's method. Transferring a solution across mesh refinement. 
step16  Multigrid preconditioning of the Laplace equation on adaptive meshes. 
step16b  A variant of step16 but with MeshWorker for assembly: Multigrid preconditioning of the Laplace equation on adaptive meshes. 
step17  Using PETSc for linear algebra; running in parallel on clusters of computers linked together by MPI. 
step18  A time dependent problem; using a much simplified version of implementing elasticity; moving meshes; handling large scale output of parallel programs. 
step19  Input parameter file handling. Merging output of a parallel program. 
step20  Mixed finite elements. Using block matrices and block vectors to define more complicated solvers and preconditioners working on the Schur complement. 
step21  The time dependent twophase flow in porous media. Extensions of mixed Laplace discretizations. More complicated block solvers. Simple time stepping. 
step22  Solving the Stokes equations of slow fluid flow on adaptive meshes. More on Schur complement solvers. Advanced use of the AffineConstraints class. 
step23  Finally a "real" time dependent problem, the wave equation. 
step24  A variant of step23 with absorbing boundary conditions, and extracting practically useful data. 
step25  The sineGordon soliton equation, which is a nonlinear variant of the time dependent wave equation covered in step23 and step24. 
step26  The heat equation, solved on a mesh that is adapted every few time steps. 
step27  The hp finite element method. 
step28  Multiple grids for solving a multigroup diffusion equation in nuclear physics simulating a nuclear reactor core. 
step29  Solving a complexvalued Helmholtz equation. Sparse direct solvers. Dealing with parameter files. 
step30  Anisotropic refinement for DG finite element methods. 
step31  Timedependent Stokes flow driven by temperature differences in a fluid. Adaptive meshes that change between time steps. 
step32  A massively parallel solver for timedependent Stokes flow driven by temperature differences in a fluid. Adapting methods for realworld equations. 
step33  A nonlinear hyperbolic conservation law: The Euler equations of compressible gas dynamics. 
step34  Boundary element methods (BEM) of low order: Exterior irrotational flow. The ParsedFunction class. 
step35  A projection solver for the Navier–Stokes equations. 
step36  Using SLEPc for linear algebra; solving an eigenspectrum problem. The SchrÃ¶dinger wave equation. 
step37  Solving a Poisson problem with a multilevel preconditioner without explicitly storing the matrix (a matrixfree method) in a massively parallel context. 
step38  Solving the LaplaceBeltrami equation on curved manifolds embedded in higher dimensional spaces. 
step39  Solving Poisson's equation once more, this time with the interior penalty method, one of the discontinuous Galerkin methods developed for this problem. Error estimator, adaptive meshes, and multigrid preconditioner, all using the MeshWorker framework. 
step40  Techniques for the massively parallel solution of the Laplace equation (up to 10,000s of processors). 
step41  Solving the obstacle problem, a variational inequality. 
step42  A solver for an elastoplastic contact problem, running on parallel machines. 
step43  Advanced techniques for the simulation of porous media flow. 
step44  Finite strain hyperelasticity based on a threefield formulation. 
step45  Periodic boundary conditions. 
step46  Coupling different kinds of equations in different parts of the domain. 
step48  Explicit time stepping for the Sine–Gordon equation based on a diagonal mass matrix. Efficient implementation of (nonlinear) finite element operators. 
step49  Advanced mesh creation and manipulation techniques. 
step51  Solving the convectiondiffusion equation with a hybridizable discontinuous Galerkin method using face elements. 
step52  Solving the time dependent neutron diffusion equation using RungeKutta methods. 
step53  Describing the geometry of complex domains and curved boundaries. 
step54  Using CAD files to describe the boundary of your domain. 
step55  Solving the Stokes problem in parallel. 
step56  Geometric Multigrid for Stokes. 
step57  Incompressible, stationary Navier Stokes equations. 
step59  Solving a Poisson problem discretized with an interior penalty DG method and a multilevel preconditioner in a matrixfree fashion using a massively parallel implementation. 
step60  Distributed Lagrange multipliers for the solution of Poisson problems in complex domains with constraints defined on nonmatching grids. 
step61  Solving the Poisson problem with the "weak Galerkin" finite element method. 
step62  Resonance frequency and bandgap of a phononic crystal. Elastic wave equation in the frequency domain with Perfectly Matched Layer boundary conditions. Parallelization via MUMPS and MPI. 
step63  Block smoothers for geometric multigrid. A scalar convection diffusion equation is solved with different additive or multiplicative multigrid smoothers. 
step64  Solving a Helmholtz problem using matrixfree methods on the GPU with MPI parallelization. 
step65  The TransfiniteInterpolationManifold and MappingQCache classes for advanced manifold operations. 
step71  Solving the fourthorder biharmonic equation using the \(C^0\) Interior Penalty (C0IP) method. 
Creating a grid. A simple way to write it to a file  
Degrees of freedom  
Solving the Laplace equation  
Dimension independent programming, nonzero data  
Computing on uniformly refined meshes  
Adaptivity  
Evaluating errors  
Nonlinear problems, Newton's method 
Multithreading  
Block solvers and preconditioners  step20, step21, step22, step31, step32, step43, step44, step55, step56, step57 
Using Trilinos  step31, step32, step33, step41, step42, step43, step55 
Parallelization via PETSc and MPI  
Parallelization via Trilinos and MPI  
Parallelization via MUMPS and MPI  
Parallelization via CUDA and MPI  
Parallelization on very large numbers of processors  
Input parameter handling  step19, step28, step29, step32, step33, step34, step35, step36, step42, step44, step60, step62 
Higher order mappings  
Error indicators and estimators  
Transferring solutions across mesh refinement  step15, step28, step31, step32, step33, step42, step43, step57 
Discontinuous Galerkin methods  step12, step21, step39, step46, step51, step59, step61, step71 
hp finite elements  
Anisotropic refinement for DG finite element methods  
Computing Jacobians from residuals, automatic differentiation  
Boundary element methods, curved manifolds  
Periodic boundary conditions  
Matrixfree methods with sum factorization  
Advanced meshes and geometries  
Non matching algorithms  
HDF5 and Python 
Conjugate Gradient solver  
Preconditioned CG solver  
BiCGStab  
Direct solvers  
Multilevel preconditioners  step16, step16b step31, step32, step37, step39, step41, step42, step43, step56, step59, step63 
Parallel solvers  step17, step18, step32, step37, step40, step42, step55, step59 
Block and Schur complement solvers  step20, step21, step22, step31, step32, step43, step55, step56, step57, step60 
Decoupled projection solvers  
Linear Newton systems from nonlinear equations  
Eigenvalue solvers  
Linear operators 
Helmholtz equation  
Elasticity and elastoplasticity equations  
Heat equation  
Minimal surface equation  
Quasistatic elasticity equations  
Transport (advection) equations  
The nonlinear hyperbolic Euler system of compressible gas dynamics  
Mixed Laplace, Darcy, Porous media  
Stokes and incompressible NavierStokes flow  step22, step31, step32, step35, step46, step55, step56, step57 
The wave equation, in linear and nonlinear variants  
A multigroup diffusion problem in neutron transport  
Irrotational flow  
An eigenspectrum problem  
Fourthorder biharmonic equation  
The obstacle problem, a variational inequality  
Coupling different equations in different parts of the domain 
Elasticity and elastoplasticity equations  
Mixed Laplace  
Mixed Laplace plus an advection equation  
Incompressible Stokes and NavierStokes flow  step22, step31, step32, step35, step55, step56, step57 
A complexvalued Helmholtz problem  
The Euler equations of compressible gas dynamics  
Coupling different equations in different parts of the domain 
The heat equation  
Quasistatic elasticity  
Porous media flow  
The wave equation, in linear and nonlinear variants  
Time dependent Stokes flow driven by buoyancy  
The Euler equations of compressible gas dynamics  
Time dependent neutron diffusion equation  step52 