I have attached a PDF file summarizing my take on a paper [1] describing a finite-difference approach to a flow simulation that was of interest to Chevron. If people would like copies of the original paper, please supply a FAX number.
This simulation is interesting for a couple of reasons. First, it requires a staggered, non-orthogonal grid and a flux field with a unique face-like centering. Ultimately, it introduces multi-block meshes and fields to obtain geometries that are locally structured, but globally unstructured. Second, their paper shows how complicated, inflexible, and hard-to-follow things can get if you use the wrong abstractions (they linearized indices of control volumes, thereby locking them to 3D and forcing the use of indirection lists).
While the authors clearly messed up the abstractions, it isn't so clear what the correct abstractions are. After thinking about this a long time, I think I have at least some of the vocabulary:
Note that there are no array-like concepts in here like Intervals, Ranges, etc. One reason is that field operations inherently involve centering points and, specifically, mappings between centering points and our rectangular domains are not the very good at expressing this. Another reason is that if one expresses operations in terms of geometrical concepts, the code is born dimension independent.
Based on Jeffrey's excellent discussion, I think that the Caramana hydrodynamics kernel has a similar flavor and is therefore described by similar language.
Let me emphasize that I'm talking about USER interface here. When push comes to shove, everything needs to turn into indexing.