Table of Contents
Fetching ...

MooAFEM: An object oriented Matlab code for higher-order adaptive FEM for (nonlinear) elliptic PDEs

Michael Innerberger, Dirk Praetorius

TL;DR

MooAFEM delivers a MATLAB object-oriented adaptive FEM framework for 2D elliptic PDEs with general coefficients and higher-order spaces, including nonlinear problems solved via iterative linearization. The software is organized into Geometry, Integration, and FEM modules, built from a compact set of classes that enable vectorized, reusable, and safely maintained code, with mesh events propagated through an observer pattern. The paper details the AFEM workflow, data structures, and prolongation mechanisms, and demonstrates the approach through higher-order AFEM, GOAFEM with discontinuous data, and iterative nonlinear solvers, highlighting accuracy and computational efficiency in MATLAB. Overall, MooAFEM provides a practical, extensible toolkit that combines expressive MATLAB OO design with robust AFEM capabilities for both linear and nonlinear 2D PDEs.

Abstract

We present an easily accessible, object oriented code (written exclusively in Matlab) for adaptive finite element simulations in 2D. It features various refinement routines for triangular meshes as well as fully vectorized FEM ansatz spaces of arbitrary polynomial order and allows for problems with very general coefficients. In particular, our code can handle problems typically arising from iterative linearization methods used to solve nonlinear PDEs. Due to the object oriented programming paradigm, the code can be used easily and is readily extensible. We explain the basic principles of our code and give numerical experiments that underline its flexibility as well as its efficiency.

MooAFEM: An object oriented Matlab code for higher-order adaptive FEM for (nonlinear) elliptic PDEs

TL;DR

MooAFEM delivers a MATLAB object-oriented adaptive FEM framework for 2D elliptic PDEs with general coefficients and higher-order spaces, including nonlinear problems solved via iterative linearization. The software is organized into Geometry, Integration, and FEM modules, built from a compact set of classes that enable vectorized, reusable, and safely maintained code, with mesh events propagated through an observer pattern. The paper details the AFEM workflow, data structures, and prolongation mechanisms, and demonstrates the approach through higher-order AFEM, GOAFEM with discontinuous data, and iterative nonlinear solvers, highlighting accuracy and computational efficiency in MATLAB. Overall, MooAFEM provides a practical, extensible toolkit that combines expressive MATLAB OO design with robust AFEM capabilities for both linear and nonlinear 2D PDEs.

Abstract

We present an easily accessible, object oriented code (written exclusively in Matlab) for adaptive finite element simulations in 2D. It features various refinement routines for triangular meshes as well as fully vectorized FEM ansatz spaces of arbitrary polynomial order and allows for problems with very general coefficients. In particular, our code can handle problems typically arising from iterative linearization methods used to solve nonlinear PDEs. Due to the object oriented programming paradigm, the code can be used easily and is readily extensible. We explain the basic principles of our code and give numerical experiments that underline its flexibility as well as its efficiency.
Paper Structure (32 sections, 23 equations, 9 figures, 1 algorithm)

This paper contains 32 sections, 23 equations, 9 figures, 1 algorithm.

Figures (9)

  • Figure 1: Overall structure of the presented software package. Shown are all classes of the software package, subdivided into three modules. The most important class of each submodule is at the top of the respective list.
  • Figure 2: Schematic functionality of the observer pattern. The timelines represent the lifetimes of the observable object and the listeners. Two listeners are temporarily registered to receive events (highlighted in gray). If the listeners are registered during the broadcast of an event (dashed lines), some internal reaction is triggered (bold dots). For each additional observable or event type of the same observable, a separate graph is needed.
  • Figure 3: Implemented bisection methods (top left to bottom right): , , , , , and . The refinement edge of the parent triangle is the bottom line, those of the children are highlighted by parallel lines.
  • Figure 4: Example mesh on the unit square $(0,1)^2 \subset \mathbb{R}^2$ as well as corresponding data structures. Boundary part $1$ (e.g., $\Gamma_D$) is marked in red, boundary part $2$ (e.g., $\Gamma_N$) is marked in green.
  • Figure 5: Illustration of the memory layout chosen in our implementation. The numbers indicate the order in which the items are stored in memory.
  • ...and 4 more figures

Theorems & Definitions (1)

  • Remark 1