Skip to content
Snippets Groups Projects

Document differences to tutorial and other useful stuff

Merged Dr. Jorrit Fahlke requested to merge explain-tutorial into master
2 files
+ 79
78
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 0
78
# Notes on the Tutorial
The [tutorial](tutorial01.pdf), and indeed the sample problem it describes was
taken from
[dune-pdelab-tutorials](https://gitlab.dune-project.org/pdelab/dune-pdelab-tutorials).
PDELab is very general, and as we do not need that much generality for this
project I made this module function without PDELab. While this module
replicates some functionality and concepts from PDELab, it is important to
know what it does differently in order to understand the tutorial. It is
probably also helpful to give an overview over the nomenclature used in in the
tutorial.
## Nomenclature
Finite Element Analysis breaks the solving a PDE down to solving a system
R(x) = 0 (R(x) is often something like Ax-b for some matrix A)
for x. Linear solvers will typically iteratively insert better candidates x'
for x, until they deem R(x) close enough to 0. Thus x is called a **trial
vector**. On the other hand, the result of R(x) is a **test vector**, since
that is what is tested against 0.
Trial vector names: x, z, w
Test vector names: y, r
These vectors are coefficient vectors, and together with a basis they describe
a function mapping from the computational domain Omega into the Space of Real
numbers. Similar to the vectors, the functions they describe and their basis
functions can be classified as **test function** and **trial functions** too.
Trial function names: u_h (often just u)
Test function names: v_h (often just v)
Trial space basis: { phi_i }
Test space basis: { psi_j }
The bases span a space of functions, the **test function space** or **trial
function space**.
Trial function space: U_h = span{ phi_i } (sometimes just U)
Test function space: V_h = span{ psi_j } (sometimes just V)
The above names apply to discrete functions and function spaces, this is made
explicit by the subscript "_h". Strictly speaking, the names without the
subscript "_h" denote the undiscretized functions and function spaces, but
these do not usually appear in code, so there the subscript is usually missing
even though the discrete concepts are meant.
The particular finite element method we use here is a Galerkin method, meaning
that (neglecting constraints/Dirichlet boundary conditions) the function
spaces U_h and V_h are actually identical, and are discretized by the same
basis, i.e. phi_i = psi_i. This can be exploited by only evaluating one basis
and using it to compute both trial and test functions, and if this is done
usually the trial space basis { phi_i } is used.
## Differences to PDELab
### Function Spaces
PDELab uses the concept of grid function spaces and local function spaces.
These have been completely removed in this module.
PDELab function spaces serve multiple roles. Local function spaces determine
how the coefficients of multiple functions (representing multiple physical
quantities such as pressure and velocity) are stored in the local coefficient
vectors. The also provide ways to evalutate the basis functions { phi_i }.
Since the sample problem is restricted to a single physical quantity we simply
replace the local function spaces by a local basis in the local operators, and
store the coefficients with the same numbering in the local coefficient vector
as the local basis uses.
Grid function spaces determine where each coeffiecient is stored in the global
vector. As this module uses scalar P1/Q1 finite elements, it is sufficient to
associate each coefficient with a vertex in the grid, and to use that vertices
index (as provided by the grid view) as the coefficient's index in the global
coefficient vector. Grid function spaces also provide a number of other
services, none of which are needed in our case.
Loading