Stacked matrices are special forms of matrix files in which, say, four square matrices of size 20 by 20 are stored together as a single matrix file.
Stacking may take place either “vertically” or “horizontally”. Thus in the former case the combined matrix would consist of 80 rows and 20 columns. Rows 1 to 20 correspond to matrix 1, 21 to 40 to matrix 2, etc. In the latter case the combined matrix would consist of 20 rows and 80 columns such that columns 1-20 consist of matrix 1, 21-40 matrix 2. These are illustrated in Figure 10.1a and 10.1b respectively.
Figure 10.1 - Stacked matrices
We use the term “level” to refer to the different sub-matrices when stacked vertically and “block” when stacked horizontally. We also use the term “base matrix” to refer to the basic square matrix from which the levels and/or blocks are built up and whose length/width dimension would normally correspond to the number of zones in a corresponding network.
Stacked matrices by level are only used within the multiple user class assignment options of SATURN so that the four matrices above might correspond to four separate user classes. See Section 7.3.2 for further details.
Horizontally stacked matrices by block are used to represent multiple time periods as used within SATURN's dynamic assignments (see 17.4.3).
Pre version 11.5.03C it was not possible to stack by both levels and blocks at the same time, e.g. to create a single trip matrix file which is both multiple user class and multiple time period. Version 11.5.03 introduced the facility, primarily to deal with trip or skimmed matrices associated with area charging (see 20.6.19), but it is not yet guaranteed that all the various operations within MX will work correctly for such matrices.
For some operations in MX, e.g. displaying elements or row/column totals, it is possible to optionally treat stacked matrices as though they were ‘interleaved’; i.e. row 1 of level 1 is followed by row 1 of level 2 and row 1 of level 3 etc. etc. all followed by the row 2’s. See 10.10.2.
N.B. Stacking by blocks was introduced in SATURN 10; previous versions may only employ levels.
See Section 10.20 for various useful standard procedures (e.g., MXSTACK, UNSTACK, etc.) for manipulating stacked and/or blocked matrices.