  Within the finite element community, discontinuous Galerkin (DG) and mixed
finite element methods have become increasingly popular in simulating
geophysical flows. However, robust and efficient solvers for the resulting
saddle-point and elliptic systems arising from these discretizations continue
to be an on-going challenge. One possible approach for addressing this issue is
to employ a method known as hybridization, where the discrete equations are
transformed such that classic static condensation and local post-processing
methods can be employed. However, it is challenging to implement hybridization
as performant parallel code within complex models, whilst maintaining
separation of concerns between applications scientists and software experts. In
this paper, we introduce a domain-specific abstraction within the Firedrake
finite element library that permits the rapid execution of these hybridization
techniques within a code-generating framework. The resulting framework composes
naturally with Firedrake's solver environment, allowing for the implementation
of hybridization and static condensation as runtime-configurable
preconditioners via the Python interface to PETSc, petsc4py. We provide
examples derived from second order elliptic problems and geophysical fluid
dynamics. In addition, we demonstrate that hybridization shows great promise
for improving the performance of solvers for mixed finite element
discretizations of equations related to large-scale geophysical flows.
