The S3L_grade_detailed_down and S3L_grade_detailed_up functions differ from S3L_grade_down and S3L_grade_up in two respects:
Both grade along a single axis of A, as specified by the axis argument.
Both store a set of indices, but these indices do not indicate element positions directly. Instead, each stored index indicates the index of the corresponding element of A that has either
The j-th smallest value along the specified axis - S3L_grade_detailed_down
The j-th largest value along the specified axis - S3L_grade_detailed_up
This means G is an integer array whose rank and extents are the same as those of A.
Repeating the 3 x 3 sample array shown above,
_ _ | 6 2 4 | | | | 1 3 8 | | | | 9 7 5 | - - |
if S3_grade_detailed_down is called from a C program with the axis argument = 0, upon completion, G will contain the following values:
_ _ | 1 2 2 | | | | 2 1 0 | | | | 0 0 1 | - - |
If, instead, axis = 1, G will contain
_ _ | 0 2 1 | | | | 2 1 0 | | | | 0 1 2 | - - |
If S3L_grade_detailed_up is called from a C program with axis = 0, G will contain
_ _ | 1 0 0 | | | | 0 1 2 | | | | 2 2 1 | - - |
If S3L_grade_detailed_up is called from a C program with axis = 1, G will contain
_ _ | 2 0 1 | | | | 0 1 2 | | | | 2 1 0 | - - |
For F77 or F90 calls, each index value in these examples, including the axis argument, would be increased by 1.