The routine may be called by the names f11zcf or nagf_sparse_real_rect_sort.
3Description
f11zcf takes a coordinate storage (CS) representation (see Section 2.1.1 in the F11 Chapter Introduction), or compressed column storage (CCS) representation (see Section 2.1.3 in the F11 Chapter Introduction) of a real sparse rectangular matrix , and reorders the nonzero elements by increasing column index and increasing row index within each column.
Entries with duplicate row and column indices may be removed. Alternatively, duplicate entries may be summed, which facilitates sparse matrix addition (see Section 9). Any entries with zero values may optionally be removed.
Both CS and CCS representations of the resulting matrix are output, which allows f11zcf to be used to convert between the two formats (see Section 9).
4References
None.
5Arguments
1: – IntegerInput
On entry: , the number of rows in the matrix .
Constraint:
.
2: – IntegerInput
On entry: , the number of columns in the matrix .
Constraint:
.
3: – IntegerInput/Output
On entry: the number of elements supplied in the array a.
Constraint:
.
On exit: the number of elements with unique row and column indices.
4: – Real (Kind=nag_wp) arrayInput/Output
On entry: the nonzero elements of the matrix . If , the elements may be in any order. If , the elements must be ordered by increasing column index. There may be multiple nonzero elements with the same row and column indices.
On exit: the nonzero elements ordered by increasing column index, and by increasing row index within each column. Each nonzero element has a unique row and column index.
5: – Integer arrayInput/Output
On entry: the row indices corresponding to the elements supplied in the array a.
Constraint:
, for .
On exit: the first nnz elements contain the row indices corresponding to the elements returned in the array a.
6: – Integer arrayInput/Output
On entry: if , the column indices corresponding to the elements supplied in the array a.
On entry: indicates how elements in a with zero values are to be treated.
The entries are removed.
The entries are kept.
The routine fails with on detecting a zero.
Constraint:
, or .
11: – IntegerInput/Output
On entry: ifail must be set to , or to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of means that an error message is printed while a value of means that it is not.
If halting is not appropriate, the value or is recommended. If message printing is undesirable, then the value is recommended. Otherwise, the value is recommended. When the value or is used it is essential to test the value of ifail on exit.
On exit: unless the routine detects an error or a warning has been flagged (see Section 6).
6Error Indicators and Warnings
If on entry or , explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
On entry, . Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, . Constraint: or .
On entry, .
Constraint: , or .
On entry, .
Constraint: , or .
On entry, , and . Constraint: .
On entry, , and . Constraint: if , then .
On entry, . Constraint: .
On entry, , and . Constraint: , for
On entry, , and . Constraint: .
On entry, a duplicate entry has been found in row and column .
On entry, a zero entry has been found in row and column .
An unexpected error has been triggered by this routine. Please
contact NAG.
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.
7Accuracy
Not applicable.
8Parallelism and Performance
Background information to multithreading can be found in the Multithreading documentation.
f11zcf is not threaded in any implementation.
9Further Comments
Note that the resulting matrix may have either rows or columns with no entries. If column has no entries then .
To transpose a matrix in CS format simply interchange irow and icol, and m and n. If you need the elements to be sorted, then pass these interchanged arrays to f11zcf.
Two sparse matrices can be added by concatenating the three pairs of CS format arrays, representing the two matrices, and passing these new arrays to f11zcf, specifying that duplicates should be summed.
This routine can be used to convert between CS and CCS formats. Use either format to pass into f11zcf, with the appropriate store set. The resulting matrix is output in both formats using a, irow, icol (for CS format) and istc (for CCS format).
10Example
This example reads the CS representation of the real sparse matrices and , and finds their sum, , displaying the ordered elements in both CS and CCS format. The order of rows within some columns of are changed, and the matrix is input in CCS format to be re-sorted. The CS format is output to compare to the previous result. The matrix is also sorted into row-major order by passing its transpose to f11zcf.