The em3d program [CDG+93] models the propagation of electromagnetic waves through objects in three dimensions [Mad92]. In em3d, an object is divided into a grid of convex polyhedral cells (typically nonorthogonal hexahedra). From this primary grid, a dual grid is defined by using the barycenters of the primary grid cells as the vertices of the dual grid. The electric field is projected onto each edge in the primary grid, and such edges are called E nodes. Similarly, the magnetic field is projected onto each edge in the dual grid, called H nodes.
The computation consists of a series of ``leapfrog'' integration steps: on alternate half time steps, changes in the electric field are calculated as a linear function of the neighboring magnetic field values and vice versa. Specifically, the value of each E node is updated by a weighted sum of neighboring H nodes, and then H nodes are similarly updated using the E nodes. Thus, the dependencies between E and H nodes form a bipartite graph. Using the Bipartite graph data structure, the computation proceeds as a series of bulk-synchronous iterations of node updates.