### 3.2 {2 + 1}-dimensional codes

One-dimensional characteristic codes enjoy a very special simplicity due to the two preferred sets
(ingoing and outgoing) of characteristic null hypersurfaces. This eliminates a source of gauge freedom that
otherwise exists in either two- or three-dimensional characteristic codes. However, the manner in which the
characteristics of a hyperbolic system determine domains of dependence and lead to propagation equations
for shock waves is the same as in the one-dimensional case. This makes it desirable for the purpose of
numerical evolution to enforce propagation along characteristics as extensively as possible. In basing a
Cauchy algorithm upon shooting along characteristics, the infinity of characteristic rays (technically,
bicharacteristics) at each point leads to an arbitrariness, which, for a practical numerical scheme,
makes it necessary either to average the propagation equations over the sphere of characteristic
directions or to select out some preferred subset of propagation equations. The latter approach was
successfully applied by Butler [73] to the Cauchy evolution of two-dimensional fluid flow, but
there seems to have been very little follow-up along these lines. The closest resemblance is
the use of Riemann solvers for high-resolution shock capturing in hydrodynamic codes (see
Section 7.1).
The formal ideas behind the construction of two- or three-dimensional characteristic codes are similar,
although there are various technical options for treating the angular coordinates, which label the null rays.
Historically, most characteristic work graduated first from 1D to 2D because of the available computing
power.