This belongs there but distracts from that flow too much.

We now pin down a few details of the scheme of the preceding paragraph and assign a name to the new coordinate system. Vertices of zones and facets are ordered according to their global vertex number which means that the facet numbering in a facet is like that of its neighboring zones with just one omission from the vertex set of each neighbor. In particular basis element 2 of the zone bcc is elided from the bases of facet 2 of that zone, and further, basis element 3 of the zone bcc is basis element 2 of the facet bcc of the same facet. Basis element n−1 for the facet bcc is the normal of the facet, pointing into the zone.

Damn, the last two sentences are hard to read but they are correct. Let me expand the example: In this example n=4. A zone’s vertices are globally numbered 3, 7, 14, 21, 33. The zone has no access to these numbers but knows its vertices by array indexes 0, 1, 2, 3, 4. The facet with global numbers 3, 7, 21, 33 is a facet of our zone and the zone’s facet 2 has been elided. The facet knows its vertex numbers as 0, 1, 2, 3 and these numbers serve to index arrays associated with the facet. When zone logic prepares information for facet 2 it knows that the facet logic will know the order and so it can merely translate into the world of four vertices.

This facet coordinate system is hereby called the facet bcc of fbcc and the numbering of its basis elements is hereby fixed! Note that the facet has n−1 dimensions and that the n coordinates of the facet bcc are not redundant, as would be natural to suppose; rather the last coordinate is the coefficient of the normal to the facet which does not lie in the facet! We bend the terminology. Note that the facet bcc seen by the neighboring zone, for the shared facet, reverses the sign of the normal.

We generally adopt the highest vertex number as the bcc origin. Concomitantly we may omit the last redundant element of bcc value. When dimensions are low and tensor rank is high this amounts to real storage.


A notion that may make above clearer: We have in each zone, and for each facet thereof, already calculated and stored the inward normal to the facet. This fits the pattern below which makes converting between zone and facet coordinate systems trivial.
Consider the alias style of linear transformation which results from changing one vector in a
basis of n elements, for another. A basis is a set of vectors and we have two of them, B and C.
B∖C = {b}
C∖B = {c}
B∩C spans a particular n−1 dimensional space X. There is a scalar α≠0 and vector x ∊ X such that c = αb + x. x and α are unique. b = (1/α)c − (1/α)x.

Adapting this to the case of the zone and a particular facet j, b is the vector from the zone’s vertex n to vertex j and c is the inward normal from facet j. c is the array gu.(j) expressed in zone bcc. α is gu.(n).(j) . x is in the facet.

For the opposite facet more hair is needed but not as much as I first thought! Vertex n is the coordinate origin for the zone. The origin of the facet opposite the zone origin is the zone’s vertex n−1 which is also the facet’s vertex n−1. For 0≤j<n, zbj are the basis vectors of the zone. For 0≤j<n−1, zbj − zbn = fbj are the basis vectors for the facet, numbered as the facet numbers them.

Incoming vector v = (v[0], … , v[n−1]) expressed in facet bcc of facet n. v[n−1] is the scalar coefficient of the inward normal vector of facet n. Vector (1, 0, … 0, 0) in facet bcc becomes (1, 0, … 0, −1) in zone bcc, and (0, … 1, 0) becomes (0, … 1, −1). (0, … 0, 1) denotes the inward normal and its zone bcc is found in the precomputed table of normals.