|
MFMAT = 1, PROFILE SOLVER: Accounts for the sparsity of matrix [A] on an equation by equation basis. Typical applications include finite element and finite difference programs. This is the default for sparse matrices. |
|
MFMAT = 2, BLOCK SOLVER: Divides the matrix [A] into square blocks, accounting for sparsity on a block by block basis. This solver uses industry standard BLAS3 kernels and provides excellent I/O performance on extremely large problems. Typical applications include boundary integral and moment method programs. This is the default for full matrices. |
|
MFMAT = 3, SLAB SOLVER: Extends the functionality of the Block Solver by providing full column partial pivoting for full nonsymmetric matrices. You must explicitly set MFMAT to select this option. |
FMS stores the matrix data on three separate files:
For nonsymmetric problems FMS assumes that the sparsity of the matrix is symmetric but the values are not. This allows FMS to use a single set of pointers to address the matrix elements in the lower triangle [AL] and upper triangle [AU]. Data in the upper triangle is always stored in a transposed direction from data in the lower triangle. For example if the FMS parameter IJSTEP is one, the data in [AL] will be stored by rows and the data in [AU] will be stored by columns. Note that if a symmetric matrix was processed as nonsymmetric, the files LUA(1) and LUA(3) would be identical.
FMS uses a single vector {LOWEQ} to describe the sparsity of the matrix. This vector contains the lowest coupled equation for each equation. For terms in the lower triangle [AL] this is the first non-zero term of each row, proceeding from the left edge of the matrix toward the diagonal. For terms in the upper triangle [AU] this is the first non-zero term of each column, proceeding from the top of the matrix toward the diagonal. Because FMS uses symmetric storage, the same profile vector {LOWEQ} describes both the sparsity of [AL] and [AU]. Note that for a full matrix, the profile vector {LOWEQ} would contain all 1's.