Welcome to the  Linearized Underground Convection in FEniCSx package!
LUCiFEx is a flexible and user-friendly package for the applied mathematician to solve time-dependent PDEs numerically by the finite element method using FEniCSx. To get started with LUCiFEx, refer to the user guide.
Development has primarily been motivated by the numerical study of two-dimensional convection in porous media, however the tools developed are general-purpose and widely-applicable. For any queries, comments or feedback do not hesitate to email grp39@cantab.ac.uk.
The complete gallery of examples can be viewed here. See ./demo/notebooks/ to browse their source code. Examples from fluid dynamics include:
- Darcy equations formulated in terms of either velocity and pressure
$\textbf{u}$ ,$p$ or the streamfunction$\psi$ - Stokes equations formulated in terms of either velocity and pressure
$\textbf{u}$ ,$p$ or the streamfunction$\psi$ - Navier-Stokes equations formulated in terms of either velocity and pressure
$\textbf{u}$ ,$p$ or the streamfunction and vorticity$\psi$ ,$\omega$ - advection-diffusion-reaction equations for the transport of solute and/or heat coupled to fluid flow
- classic instabilities such as Rayleigh-Bénard and Rayleigh-Taylor
These short notebooks are primarily for quick, inexpensive demonstration purposes and as such most do not use a high-resolution mesh, sophisticated stabilization methods or low-level problem-specific optimizations. Users are encouraged to use them as a learning tool and a stepping stone to more detailed numerical experimentation. See ./bench/ for more rigorous benchmarking.
In addition to what can be achieved with FEniCSx, LUCiFEx provides abstractions and utilities for
- time-dependent functions, constants and expressions
- finite difference operators for the discretization of time-dependent functions, constants and expressions
- setting initial conditions with optional perturbations
- imposing (possibly time-dependent) essential, natural and periodic boundary conditions via a unified interface
- solving boundary-value, initial-value, eigenvalue and evaluation problems via a unified interface
- creating and configuring time-dependent simulations
- running time-dependent simulations interactively in a
.ipynbnotebook - running time-dependent simulations in the background from a
.pyscript - postprocessing and visualization with
numpyandmatplotlib
These features are outside the scope of current development, but could be of interest in the future:
- adaptive mesh refinement
- time-dependent domains and boundaries
- time-stepping with Runge-Kutta methods
- nonlinear solvers
See ./install/INSTALL.md .
These features remain to be implemented as part of ongoing development:
- update to latest version of
fenicsx(currently on 0.6.0) and Python (currently on 3.10.12) - parallelisation with
mpi4py - more documentation
- more unit testing