CEED Bakeoff Problems

The Center for Efficient Exascale Discretizations (CEED) uses Bakeoff Problems (BPs) to test and compare the performance of high-order finite element implementations. The definitions of the problems are given on the ceed website. Each of the following bakeoff problems that use external discretization libraries (such as MFEM, PETSc, and Nek5000) are located in the subdirectories mfem/, petsc/, and nek5000/, respectively.

Here we provide a short summary:

User code

Supported BPs


  • BP1 (scalar mass operator) with \(Q=P+1\)

  • BP3 (scalar Laplace operator) with \(Q=P+1\)


  • BP1 (scalar mass operator) with \(Q=P+1\)

  • BP2 (vector mass operator) with \(Q=P+1\)

  • BP3 (scalar Laplace operator) with \(Q=P+1\)

  • BP4 (vector Laplace operator) with \(Q=P+1\)

  • BP5 (collocated scalar Laplace operator) with \(Q=P\)

  • BP6 (collocated vector Laplace operator) with \(Q=P\)


  • BP1 (scalar mass operator) with \(Q=P+1\)

  • BP3 (scalar Laplace operator) with \(Q=P+1\)

These are all T-vector-to-T-vector and include parallel scatter, element scatter, element evaluation kernel, element gather, and parallel gather (with the parallel gathers/scatters done externally to libCEED).

BP1 and BP2 are \(L^2\) projections, and thus have no boundary condition. The rest of the BPs have homogeneous Dirichlet boundary conditions.

The BPs are parametrized by the number \(P\) of Gauss-Legendre-Lobatto nodal points (with \(P=p+1\), and \(p\) the degree of the basis polynomial) for the Lagrange polynomials, as well as the number of quadrature points, \(Q\). A \(Q\)-point Gauss-Legendre quadrature is used for all BPs except BP5 and BP6, which choose \(Q = P\) and Gauss-Legendre-Lobatto quadrature to collocate with the interpolation nodes. This latter choice is popular in applications that use spectral element methods because it produces a diagonal mass matrix (enabling easy explicit time integration) and significantly reduces the number of floating point operations to apply the operator.

Mass Operator

The Mass Operator used in BP1 and BP2 is defined via the \(L^2\) projection problem, posed as a weak form on a Hilbert space \(V^p \subset H^1\), i.e., find \(u \in V^p\) such that for all \(v \in V^p\)

(5)\[ \langle v,u \rangle = \langle v,f \rangle , \]

where \(\langle v,u\rangle\) and \(\langle v,f\rangle\) express the continuous bilinear and linear forms, respectively, defined on \(V^p\), and, for sufficiently regular \(u\), \(v\), and \(f\), we have:

\[ \begin{aligned} \langle v,u \rangle &:= \int_{\Omega} \, v \, u \, dV ,\\ \langle v,f \rangle &:= \int_{\Omega} \, v \, f \, dV . \end{aligned} \]

Following the standard finite/spectral element approach, we formally expand all functions in terms of basis functions, such as

(6)\[ \begin{aligned} u(\bm x) &= \sum_{j=1}^n u_j \, \phi_j(\bm x) ,\\ v(\bm x) &= \sum_{i=1}^n v_i \, \phi_i(\bm x) . \end{aligned} \]

The coefficients \(\{u_j\}\) and \(\{v_i\}\) are the nodal values of \(u\) and \(v\), respectively. Inserting the expressions (6) into (5), we obtain the inner-products

(7)\[ \langle v,u \rangle = \bm v^T M \bm u , \qquad \langle v,f\rangle = \bm v^T \bm b \,. \]

Here, we have introduced the mass matrix, \(M\), and the right-hand side, \(\bm b\),

\[ M_{ij} := (\phi_i,\phi_j), \;\; \qquad b_{i} := \langle \phi_i, f \rangle, \]

each defined for index sets \(i,j \; \in \; \{1,\dots,n\}\).

Laplace’s Operator

The Laplace’s operator used in BP3-BP6 is defined via the following variational formulation, i.e., find \(u \in V^p\) such that for all \(v \in V^p\)

\[ a(v,u) = \langle v,f \rangle , \, \]

where now \(a (v,u)\) expresses the continuous bilinear form defined on \(V^p\) for sufficiently regular \(u\), \(v\), and \(f\), that is:

\[ \begin{aligned} a(v,u) &:= \int_{\Omega}\nabla v \, \cdot \, \nabla u \, dV ,\\ \langle v,f \rangle &:= \int_{\Omega} \, v \, f \, dV . \end{aligned} \]

After substituting the same formulations provided in (6), we obtain

\[ a(v,u) = \bm v^T K \bm u , \]

in which we have introduced the stiffness (diffusion) matrix, \(K\), defined as

\[ K_{ij} = a(\phi_i,\phi_j), \]

for index sets \(i,j \; \in \; \{1,\dots,n\}\).