Build status DOI

GradientRobustMultiPhysics.jl

This package offers (mostly low-order) finite element methods for multiphysics problems in Julia that focus on the preservation of structural and qualitative properties, in particular the gradient-robustness property for the discretisation of (nearly) incompressible flows and resulting qualitative properties in coupled processes. The code therefore offers several classical and novel non-standard finite element discretisations to play and compare with in these applications and a toolkit to setup multi-physics problems by defining PDE systems and generating fixed-point iterations to solve them.

The implementation is based on ExtendableGrids.jl that allows to have unstructured grids with mixed element geometries in it, e.g. triangles and quads in the same mesh.

Also note, that this package is part of the meta-package PDELIB.jl

Note

This package is not further developed. There is a new package in development called ExtendableFEM.jl that incorporates all functionality and offers a more flexible API and generally faster assembly times. Please inform the developers or open an issue there if some functionality is missing or in case you have problems to transition an old project to the new code. The low level finite element structures were outsourced to the new package ExtendableFEMBase.jl.

Installation

via Julia package manager in Julia 1.6 or above:

# latest stable version
(@v1.6) pkg> add GradientRobustMultiPhysics
# latest version
(@v1.6) pkg> add GradientRobustMultiPhysics#master

Dependencies on other Julia packages

ExtendableGrids.jl
GridVisualize.jl
ExtendableSparse.jl
DocStringExtensions.jl
ForwardDiff.jl
DiffResults.jl

Getting started

The general work-flow is as follows:

  1. Mesh the domain of computation, possibly using one of the constructors by ExtendableGrid.jl or via mesh generators in SimplexGridFactory.jl.
  2. Describe your PDE system with the help of the PDE Description and PDE Operators. User parameters and customised operator actions are framed with the help of User Data and Actions.
  3. Discretise, i.e. choose suitable finite element ansatz spaces for the unknowns of your PDE system.
  4. Solve (stationary, time-dependent, iteratively?)
  5. Postprocess (compute stuff, plot, export data)

Please have a look at the Examples.

What is gradient-robustness?

Gradient-robustness is a feature of discretisations that exactly balance gradient forces in the momentum balance. In the case of the incompressible Navier–Stokes equations this means that the discrete velocity does not depend on the exact pressure. Divergence-free finite element methods have this property but are usually expensive and difficult to contruct. However, also non-divergence-free classical finite element methods can be made pressure-robust with the help of reconstruction operators applied to testfuntions in certain terms of the momentum balance, see e.g. references [1,2] below.

Recently gradient-robustness was also connected to the design of well-balanced schemes e.g. in the context of (nearly) compressible flows, see e.g. reference [3] below.

References

  • [1] "On the divergence constraint in mixed finite element methods for incompressible flows",
    V. John, A. Linke, C. Merdon, M. Neilan and L. Rebholz,
    SIAM Review 59(3) (2017), 492–544,
    >Journal-Link<, >Preprint-Link<
  • [2] "Pressure-robustness and discrete Helmholtz projectors in mixed finite element methods for the incompressible Navier–Stokes equations",
    A. Linke and C. Merdon, Computer Methods in Applied Mechanics and Engineering 311 (2016), 304–326,
    >Journal-Link< >Preprint-Link<
  • [3] "A gradient-robust well-balanced scheme for the compressible isothermal Stokes problem",
    M. Akbas, T. Gallouet, A. Gassmann, A. Linke and C. Merdon,
    Computer Methods in Applied Mechanics and Engineering 367 (2020),
    >Journal-Link< >Preprint-Link<