[A]{X} = {B}
where:
[A] is an N-by-N coefficient matrix
{B} is one or more right-hand side vectors
{X} represents the solution vectors being determined.
FMS offers the following significant developments that enable computers to approach their theoretical maximum speed throughout the solution process:
Storage and processing requirements depend significantly on matrix symmetry and data type, so FMS subroutines are divided into five modules, as shown in the following table:
| MODULE | DATA TYPE | SYMMETRY | TYPICAL APPLICATION |
|---|---|---|---|
| RS | Real | Symmetric | Structural Analysis Heat Transfer |
| RN | Real | Nonsymmetric | Diffusion Fluid Mechanics |
| CH | Complex | Hermitian | Chemistry |
| CS | Complex | Symmetric | Radar Cross Section Acoustics |
| CN | Complex | Nonsymmetric | Electromagnetics Circuit Design |
Each module is optimized to provide maximum performance and minimum data storage for the type of problem it is designed to solve.
FMS is actually 3 out-of-core solvers in 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. |
|
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. |
|
SLAB SOLVER: Extends the functionality of the Block Solver by providing full column partial pivoting for full nonsymmetric matrices. |
| OPERATION | MATRIX SYMMETRY | |
|---|---|---|
| SYMMETRIC | NONSYMMETRIC | |
| MATRIX FACTORING | [L][D][L]T = [A] | [L][U] = [A] |
[L] is a lower triangular, [D] a diagonal, and [U] an upper triangular matrix. [L]T is the transpose of matrix [L]. For Hermitian matrices, [L]T will be used for the transposed conjugate of [L]. FMS uses data structures that permit the factors [L], [D], and [U] to be overlaid on the original matrix [A] to conserve memory and disk space.
Because factoring does not depend on the right-hand side vectors {B}, the factors can be saved and reused if several related systems having the same matrix [A] are to be solved. This factoring calculation takes most of the processing time for solving the system of equations.
The second stage is to solve for the solution vectors {X}. This calculation is divided into the following steps:
| OPERATION | MATRIX SYMMETRY | |
|---|---|---|
| SYMMETRIC | NONSYMMETRIC | |
| FORWARD REDUCTION | [L]{Y} = {B} | [L]{Y} = {B} |
| DIAGONAL SCALING | [D]{Z} = {Y} | Not Required |
| BACK SUBSTITUTION | [L]T{X} = {Z} | [U]{X} = {Y} |
The first step is forward reduction, which computes the intermediate vectors {Y} from the right-hand side vectors {B} and lower triangular matrix factor [L]. The same calculation is performed for both symmetric and nonsymmetric matrices.
The second step is diagonal scaling. Because symmetric problems store only half the matrix, this calculation must be performed as a separate step. Nonsymmetric problems perform diagonal scaling during back substitution.
The final step is back substitution, which computes the solution vectors {X}. FMS permits the intermediate and solution vectors to be overlaid on the original right-hand side vectors.
In addition to solving simultaneous equations, FMS performs other matrix algebra operations. Included are matrix and vector multiply calculations typically used to compute eigenvalues and eigenvectors of the matrix [A]. The following matrix-vector multiply calculation multiplies one or more vectors {X} by a matrix [A] stored in FMS format:
{Y} = [A] {X}
The following vectors-vectors multiply calculation computes the inner products of groups of vectors and stores the results in the full matrix [F]:
[F] = {X}T {Y}
For diagonal matrices [D], FMS computes the quadratic form directly with the following equation:
[F] = {X}T [D] {Y}
FMS also provides for combining and scaling vectors with the vectors-matrix multiply operation:
{Y} = {X} [F]
|
|
|---|---|
For most applications, the matrix [A] will far exceed the memory in the machine. Therefore the terms in matrix [A] must be transferred into the FMS Database as they are generated, rather than as a full array A(N,N).
Based on years of practical experience, the following options have been developed in FMS for defining matrix terms: