Reference documentation for deal.II version GIT 58febcd5cf 20230930 20:00:01+00:00

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 their major components 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. 
step12b  A variant of step12 (for linear advection problems), but using the MeshWorker framework for the assembly of linear systems. 
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. Simple implicit (backward Euler) time stepping. 
step19  Coupling particles to the solution of partial differential equations. 
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 explicit (forward Euler) 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. Fractional time stepping (explicit, fully implicit and CrankNicolson method). 
step24  A variant of step23 with absorbing boundary conditions, and extracting practically useful data. Implicit time stepping. 
step25  The sineGordon soliton equation, which is a nonlinear variant of the time dependent wave equation covered in step23 and step24. Fractional time stepping. 
step26  The heat equation, solved on a mesh that is adapted every few time steps. Fractional time stepping. 
step27  The hpfinite 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. Implicit/explicit time stepping. 
step32  A massively parallel solver for timedependent Stokes flow driven by temperature differences in a fluid. Adapting methods for realworld equations. Implicit/explicit time stepping. 
step33  A nonlinear hyperbolic conservation law: The Euler equations of compressible gas dynamics. Fractional time stepping. 
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. Explicit time stepping. 
step44  Finite strain hyperelasticity based on a threefield formulation. Implicit time stepping. 
step45  Periodic boundary conditions. 
step46  Coupling different kinds of equations in different parts of the domain. 
step47  Solving the fourthorder biharmonic equation using the \(C^0\) Interior Penalty (C0IP) method. 
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. 
step50  Geometric multigrid on adaptive meshes distributed in parallel. 
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. Explicit and implicit time stepping. 
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. 
step58  The nonlinear Schrödinger equation. 
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. 
step66  A matrixfree geometric multigrid solver for a nonlinear problem. 
step67  Solving the Euler equations of compressible gas dynamics with an explicit time integrator and highorder discontinuous Galerkin methods based on matrixfree implementations. 
step68  Simulation of the motion of massless tracer particles in a vortical flow. Parallel simulation of the advection of particles with load balancing. 
step69  Hyperbolic conservation laws: a firstorder guaranteed maximum wavespeed method for the compressible Euler equations. Explicit time stepping. 
step70  A fluid structure interaction problem on fully distributed nonmatching grids, using penalty methods, and a coupling constructed through a ParticleHandler object. 
step71  Constitutive modelling: a demonstration of how automatic and symbolic differentiation can be used to rapidly implement a complex coupled constitutive law. 
step72  A nonlinear elliptic problem: The minimal surface equation. Newton's method. Using automatic differentiation to linearize the residual, or to compute the full linear system from an energy functional. 
step74  The Symmetric interior penalty Galerkin (SIPG) method for Poisson's equation. 
step75  Solving the Laplace equation on hpadaptive meshes with MatrixFree methods on thousands of processors. 
step76  Like step67, but for demonstrating MPI3.0 sharedmemory features. 
step77  The nonlinear minimal surface equation revisited. Interfacing with SUNDIALS' KINSOL nonlinear solver. 
step78  Solving the BlackScholes equation for options pricing in 1d. 
step79  A topology optimization program for elastic media using the solid isotropic material penalization (SIMP) formulation. 
step81  Solving the complexvalued timeharmonic Maxwell equations. 
step82  Solving the fourthorder biharmonic equation using a lifting operator approach. 
step85  Solving the Poisson equation using the cut finite element 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  step9, step28, step32, step44, step48, step51, step69 
Block solvers and preconditioners  step20, step21, step22, step31, step32, step43, step44, step55, step56, step57, step60, step70 
Using Trilinos  step31, step32, step33, step40, step41, step42, step43, step50, step55, step71, step72, step75 
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  step32, step37, step40, step42, step50, step55, step59, step66, step67, step69, step70, step75 
Input parameter handling  step28, step29, step32, step33, step34, step35, step36, step42, step44, step60, step62, step69, step70, step71, step72 
Higher order mappings  step10, step11, step32, step60, step65, step66, step67 
Error indicators and estimators  
Transferring solutions across mesh refinement  step15, step28, step31, step32, step33, step42, step43, step57, step70 
Discontinuous Galerkin methods  step12, step12b, step21, step39, step46, step47, step51, step59, step61, step67, step74, step82 
hpfinite elements  
Anisotropic refinement for DG finite element methods  
Computing Jacobians from residuals, automatic and symbolic differentiation  
Operator splitting  
Boundary element methods, curved manifolds  
Periodic boundary conditions  
Matrixfree methods with sum factorization  step37, step48, step50, step59, step64, step66, step67, step75, step76 
Advanced meshes and geometries  
Nonmatching algorithms  
HDF5 and Python  
Particles 
Conjugate Gradient solver  
Preconditioned CG solver  
BiCGStab  
Direct solvers  step29, step44, step47, step46, step58, step62, step81, step82 
Multilevel preconditioners  step16, step16b step31, step32, step37, step39, step41, step42, step43, step50, step56, step59, step63, step66, step75 
Parallel solvers  step17, step18, step32, step37, step40, step42, step50, step55, step59, step66, step75 
Block and Schur complement solvers  step20, step21, step22, step31, step32, step43, step55, step56, step57, step60, step70 
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, step70 
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  
The nonlinear Schrödinger equation  
The timeharmonic Maxwell equations  
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, step70 
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  
The nonlinear Schrödinger equation  
Time dependent neutron diffusion equation  
Time dependent fluid structure interaction problems  step70 