Evolving FEniCS: The Extension Ecosystem at Simula Scientific Computing

FEniCS 2026 at University of Chicago in Paris
Jørgen S. Dokken
Henrik N.T. Finsberg

Wellcome Logo Fenics Logo Batcat Logo

It all started over 21 years ago

FEniCS 05 (Chicago) - Tools for Multi-Physics Simulation
by Hans Petter Langtangen (Simula/UiO)

Packages developed or maintained

  • UFL/FFC(x)/DOLFIN(x)
  • DOLFINx_MPC
  • scifem
  • io4dolfinx (adios4dolfinx)
  • fenicsx_ii
  • DOLFIN(x)-adjoint
  • networks_fenicsx

Scifem - FEM prototyping playground

Not all ideas are good ideas in the beginning

Examples that are now in DOLFINx
  • Real function spaces scifem.create_real_functionspace
  r_el = basix.ufl.real_element(mesh.basix_cell(), shape=(2, 3))
R = dolfinx.fem.functionspace(mesh, r_el)
  • Blocked Newton solvers scifem.BlockedNewtonSolver
  dolfinx.fem.petsc.NonlinearProblem
  • Transfer tags to submesh scifem.transfer_meshtags_to_submesh
  dolfinx.mesh.transfer_meshtags_to_submesh

What is next?

scifem.create_space_of_simple_functions
mesh = dolfinx.mesh.create_unit_square(comm, 10, 10)
tdim = mesh.topology.dim
tol = 1e-14
# Divide cell into three regions
tags = (4,5,8)
cell_map = mesh.topology.index_map(tdim)
num_cells_local = cell_map.size_local + cell_map.num_ghosts
markers = np.full(num_cells_local, tags[0],  dtype=np.int32)
markers[dolfinx.mesh.locate_entities(
    mesh, tdim, lambda x: x[0] <= 0.5+tol)] = tags[1]
markers[dolfinx.mesh.locate_entities(
    mesh, tdim, lambda x: x[1] <= 0.5+tol)] = tags[2]
cells = np.arange(num_cells_local, dtype=np.int32)
ct = dolfinx.mesh.meshtags(mesh, tdim, cells, markers)
# Create a piecewise constant (per region) function space
V = create_space_of_simple_functions(mesh, ct, tags)
u = dolfinx.fem.Function(V)
u.x.array[0] = 3.2
u.x.array[1] = 5.5
u.x.array[2] = 4.2
assert len(u.x.array) == 3

What is next?


from scifem import closest_point_projection
points, ref_points = closest_point_projection(
    mesh,
    closest_cells,
    points,
    tol_x=1e-7,
)
Based on simplex projections2,3,4
Figure from the morning tutorial1

IO4DOLFINx - a unified IO?


Visualization and checkpointing (write/read functions) has diverged due to N+1 different file formats and finite elements.

From M. Habera's presentation5 at FEniCS 2018 on the XDMF format

5 Habera, Demarle, Hale, Richardson, Zilian , XDMF and Paraview Checkpointing format), FEniCS'18

IO4DOLFINx - a unified IO?

ADIOS4DOLFINx6 introduced a specific split between readable and visualizable functions.