PURPOSE
To open a Matrix File for storing a matrix [A].SYNOPSIS
CALL RSDI (LOWEQ, NUMEQ, NAME, LUA)
CALL RNDI (LOWEQ, NUMEQ, NAME, LUA)
CALL CHDI (LOWEQ, NUMEQ, NAME, LUA)
CALL CSDI (LOWEQ, NUMEQ, NAME, LUA)
CALL CNDI (LOWEQ, NUMEQ, NAME, LUA)
INPUT PARAMETERS
- LOWEQ(NUMEQ) = Integer array.
Matrix profile vector that specifies the lowest coupled equation for each equation. For the lower triangular matrix [AL], this is the column number of the first nonzero term in each row. For the upper triangular matrix [AU], this is the row number of the first nonzero term in each column. For a full matrix you may use a shortcut and specify LOWEQ(1) = -1. If you are opening an existing file and know you will not be creating a new one (IEXIST=1), {LOWEQ} is not required and you may specify a dummy argument. - NUMEQ = Integer.
Number of equations in matrix [A]. - NAME = Character.
A 1 to 119 character string that contains a unique alphanumeric name for the matrix. FMS generates names for the lower triangle, diagonal, upper triangle (nonsymmetric) and segment control files by appending 'L', 'D', 'U', and 'T' to NAME.
OUTPUT PARAMETERS
- LUA(25) = Integer array.
FMS Matrix File Attribute List that describes the files used to store the matrix [A]. If several matrices are to be stored at the same time, a separate attribute list must be maintained for each matrix.
NOTE: For files being reopened, this is an input parameter.
FMS PARAMETERS:
The following FMS Parameters are especially important to this routine:Parameter | Description |
---|---|
IPRI | Initialization print code |
MFMAT | Matrix format type (PROFILE, BLOCK, SLAB) |
LENSDF | I/O record size (PROFILE format) |
NEQBIO | I/O block size (BLOCK & SLAB format) |
NEQBLK | Compute block size |
NEQBLO | Minimum compute block size |
NEQBHI | Maximum compute block size |
IJSTEP | Stride toward diagonal |
INSIDE | Blocking pattern (PROFILE format) |
INCORE | File location (disk or memory) |
IEXIST | Use existing file |
NOOPEN | Do not physically open the file |
LSECTR | Disk sector length (8-byte words) |
IEXIST | Use existing file |
DESCRIPTION:
This subroutine opens files LUA(1), LUA(2), LUA(3), and LUA(4) for storing the lower triangle, diagonal, upper triangle, and Segment Table for matrix [A]. The file names are generated by appending 'L', 'D', 'U', and 'T' to the actual parameter NAME. No matrix data is written to files LUA(1), LUA(2) or LUA(3) at this time.Depending on the FMS parameter IEXIST, FMS will use an existing file or create a new one. When using existing files, you must supply the file attribute list LUA(25) that was used when the file was created.
For new files, the attribute list LUA(25) is computed by FMS. This list contains all information necessary for performing data transfers to any of the four matrix files. The attribute list is supplied by you to the remaining FMS subroutines as an actual parameter to define the matrix files.
Memory resident matrix files can be created by setting the INCORE parameter prior to calling this subroutine.
The Segment Table on file LUA(4) contains all the pointers and addresses used by FMS for processing the profile matrix. This information is not altered by FMS subroutines. Therefore, unless the matrix profile contained in the vector {LOWEQ} is changed, this initialization subroutine should be called only once.
FMS determines the record size for files LUA(1) and LUA(3) based on the available memory, cpu and gpu hardware and matrix profile. If you require a specific size, use the LENSDF parameter for PROFILE matrices or the NEQBIO parameter for BLOCK and SLAB matrices. FMS may alter your specified value to satisfy other constraints.
The profile vector LOWEQ(NUMEQ)
must be computed in your
program prior to calling this subroutine. If the matrix is
being assembled from submatrices, subroutine
FMSPF or
FMSWF may be used to compute
LOWEQ(NUMEQ)
automatically.
EXAMPLE
The following example illustrates how the profile vector could be computed for a matrix with constant bandwidth IBAND.SUBROUTINE PBAND (IBAND, LOWEQ, NUMEQ) C Profile vector for a constant band matrix: INTEGER IBAND, NUMEQ, LOWEQ(NUMEQ) DO I = 1,NUMEQ LOWEQ(I) = MAX0(1,I-BAND+1) END DO RETURN END