v0.14.0
Tutorials

The tutorials contain a number of basic programs that are built on top of each other. Those with the full source code has the following structure:

  1. Introduction: Problem being solved, mathematical equations and derivations leading to finite element implementation
  2. Implementation: Detailed explanation of the source code where tasks are separated in different functions
  3. Results: How to run the program, output, visualisation, interpretation and comments, possible extensions.
  4. Plain program: Full source code without extended comments

If you install MoFEM using either instructions in Installation with Docker - JupyterHub or the script provided in Installation with Spack (Scripts) the source code and corresponding binary files of the tutorials are located in the following directories:

  • Source code: $HOME/mofem_install/mofem-cephas/mofem/users_modules/tutorials
  • Binary files (build directory): $HOME/mofem_install/mofem-cephas/mofem/users_modules/um-build-Release-5sehreo/tutorials/

In the build directory described above, 5sehreo is the hash of the particular build, and it may be different on your machine.

Each tutorial in this page includes code name and keywords for quick reference and search within the browser.

Note
You do not need to go through all the tutorials in the order they are listed in this page before jumping into the topic in which you are interested. However, we do recommend you to have a look at the first few tutorials solving scalar-field problems to have a general idea how the finite element implementation is done in MoFEM. We also make a recommendation at the beginning of each tutorial regarding which tutorial(s) you should read (prerequisites) before continuing with the one you are most excited about.


Note
The tutorials are under development. Send us your feedback on Q&A regarding the tutorials that already done and the missing ones that you most prefer to see.

Source code Source code    Description Description    Jupyter Notebook Jupyter Notebook

Fundamentals

Description MoFEM Interfaces

Brief introduction about MoFEM interfaces which enable users to implement the codes with different level of complexity.
Keywords: Design

Description How to compile a program

Brief introduction about compiling MoFEM - Developer version
Keywords: Compilation

Description How to add a new module and program

Tutorial on adding a new MoFEM module (you might want to skip this tutorial for now and return after reading other tutorials)
Keywords: modules

Description FUN-0: Hello world

Creating Simple problem, and pushing operators to pipelines
Keywords: UDOs, pipelines

Description FUN-1: Integration on finite element mesh

Numerical integration is essential for most of the numerical methods employed to solve partial differential equations (PDEs)
Keywords: UDOs and integration

Description FUN-2: Hierarchical approximation

Introduce elementary concepts of the Finite Element Method (FEM) with hierarchical shape functions and their implementation in MoFEM
Keywords: Hierarchical approximation

Mesh creation

Description MSH-1: Create a 2D mesh from Gmsh

This document shows how to create a MoFEM-compatible 2D input mesh from Gmsh
Keywords: Gmsh, block definition, config file, read_med

Description MSH-2: Create a 3D mesh from Gmsh

This document shows how to create a MoFEM-compatible 3D input mesh from Gmsh
Keywords: Gmsh, block definition, config file, read_med

Scalar-field problems

Source code SCL-0: Least square approximaton

Solve the least square problem to approximate scalar function
Keywords: Simple Interface, KSP solver, mofem_part, mbconvert, 3D extension

Description
SCL-1: Poisson's equation (homogeneous BC)

Solve the Poisson's equation with zero value boundary conditions
Keywords: Simple Interface, KSP solver, mofem_part, mbconvert, 3D extension

Description SCL-2: Poisson's equation (non-homogeneous BC)

An expansion of previous tutorial to cover non-homogeneous (non-zero value) boundary condition of Poisson's equation
Keywords: Least square approximation

Source code SCL-3: Poisson's equation (Lagrange multiplier)

Solve the Poisson's equation using Lagrange multiplier for the non-homogeneous boundary condition
Keywords: PCFIELDSPLIT block solver

Source code SCL-4: Nonlinear Poisson's equation

Solve nonlinear Poisson's equation using Newton iterative scheme
Keywords: SNES solver

Source code SCL-5: Minimal surface equation

A variant of the nonlinear Poisson's equation
Keywords: SNES solver

Source code SCL-6: Heat equation

This is the first tutorial to solve a time-dependent problem with first-order time derivative
Keywords: TS solver, implicit scheme, remove dofs on skin

Source code SCL-7: Wave equation

Time-dependent problem with second-order time derivative
Keywords: TS solver, implicit scheme, non-homegenous time dependent boundaru condition

Source code SCL-8: Radiation boundary conditions

Nonlinear problem at the boundary
Keywords: axisymmetric problem, linearisation

Source code SCL-9: Heat method

Finding geodesic distance with heat method
Keywords: face elements embedded in 3d space

Source code SCL-10: Photon diffusion

Photon diffusion equation
Keywords: inital boundary conditions, parabolic equation, adding user element, postprocessing on skin, initial vector

Source code SCL-11: Discontinuous Galerkin for Poisson problem

Discontinuous Galerkin for Poisson problem
Keywords: integartion on skeleton

Problems with complex variable fields

Description CLX-0: Helmholtz problem

Helmholtz problem for acoustics
Keywords: complex variable, linear solver, boundary markers, remove dofs on skin

Vector-field problems

Description VEC-0: Linear elasticity

Linear elasticity
Keywords: Hooke equation

Source code VEC-1: Eigen elastic

Eigen elastic
Keywords: eigen values, SLEPC

Source code VEC-2: Nonlinear elastic

Nonlinear elastic with Hencky material
Keywords: nonlinear problem, SNES

Source code VEC-3: Nonlinear dynamic elastic

Time-dependent nonlinear elastic (dynamics)
Keywords: Alpha2 method

Source code VEC-4: Shallow wave equation on sphere

Shallow wave equation on mainfold (atmospheric processes)
Keywords: Alpha method, initail conditions, hyperbolic equation, sphere approximation, explicit/implicit time integration, restart vector

Source code VEC-5: Phase field model and Navier-Stokes

Phase field model and Navier-Sokes equations
Keywords: phase field, Navier-Stokes, hyberbolic equation, inital boundary condition

Source code VEC-6: Discontinuous Galerkin for Kirchoff-Love Plate

Solving forth order eliptic equation describing plate bending
Keywords: discontinuous Galerkin method, plate theroy

Mixed field problems

Description MIX-0: Mixed formulation of Poisson equation

A mixed problem
Keywords: H-div space, homogenous boundary conditions by DOFs removal

Source code MIX-1: Retrive phase solving transport-of-intensity equation.

A mixed problem for transport intensity equation
Keywords: Hetergenous paramterers and source function

Source code MIX-2: Mixed formulation for incompressible elasticity

A mixed problem for incompressible elasticity
Keywords: incompressibility

Maxwell problems

Source code MAX-0: Magnetostatics

Magnetostatics
Keywords:

Source code MAX-1: Lorenz force

Lorenz force
Keywords:

Advanced topics

Source code ADV-0: Plastic problem

Plasticity problem
Keywords: Nonlinear problem, linearisation, L2 space, boundary markers, displacement control, force control

Source code ADV-1: Contact problem

Contact problem
Keywords: H-curl/H-div space, mix formulations

Source code ADV-2: Thermo-elastic example

Solve thermo-elasto-plastic probelm
Keywords: Keywords: multi-physics

Source code ADV-3: DG Upwind for advection problem or level set

Upwind Discontinuous Galerkin for Level-Set
Keywords: Keywords: upwind dg, level set

Source code ADV-5: Seepage in elsatic body example

Seepgae problem in deformable porous media
Keywords: Keywords: multi-physiscs

Tutorials using core interfaces or low level implementation

Description COR-0: Mixed formulation and integration on skeleton (h-adaptivity)

Mix formulation for transport problem
Keywords: h-adaptivity and error estimator

Description COR-1: Time dependent nonlinear mix formulation (unsaturated flow)

Mix formulation for capillary flow
Keywords: capillary flow, unsaturated soil, nonlinear mix-formulation

Description COR-2: Solving the Poisson equation

Poison equation again with different implementations
Keywords: Poisson problem

Description COR-3: Implementing operators for the Poisson equation

Poison equation implementation of differentiation operators
Keywords: Poisson problem

Description COR-4: Using fieldsplit solver and DM sub problem.

Poison equation implementation of differentiation operators
Keywords: Using subproblems and nested matrices

Description COR-5: A nonlinear Poisson equation

Poison nonlinear equation again
Keywords: SNES solver and linearisation

Description COR-6: Solid elasticity

Older implementation of elastic problem
Keywords: Operators and low level implementation

Description COR-7: Mixed formulation for incompressible elasticity

Older implementation of mixed elastic problem
Keywords: pressure field, incompressibility

Description COR-8: Implementation of spring element

Implementation of boundary element with springs
Keywords: face element, spring, user data operators

Description COR-9: Reaction-diffusion equation

Reaction-diffusion Fisher's equation
Keywords: time solver, monitor, nonlinearity

Description COR-10: Navier-Stokes equation

Navier-Stokes equations
Keywords: viscous fluid flow, mixed formulation, drag force computation

Source code COR-11: Mixed formulation of nonlinear elasticity

Mixed formulation for large strain elasticity
Keywords: H-div space, Schur complement, ADOL-C (automatic differentiation)

Tutorials implemented as a separate module

Description MOD-0: Soap film spanned on wire

Soap film as an external module
Keywords: Module implementations

Description VEC-7: Automatic Differentiation for Plasticity

Automatic differentiation for elato-plasticity
Keywords: ADOL-C, plasticity, nonlinear problem, dg projection, user module