These two functions grade the elements across the entire array A and store the indices of the elements in descending or ascending order (S3L_grade_down or S3L_grade_up, respectively).
If A is an array of rank n and the product of its extents is l, G is a two-dimensional array whose extents are n x l.
Upon return of the function, every j-th column of array G is set to the indices of the j-th smallest (S3L_grade_down) or largest (S3L_grade_up) element of array A.
For example, if A is the 3 x 3 array
_ _ | 6 2 4 | | | | 1 3 8 | | | | 9 7 5 | - - |
and S3L_grade_down is called from a C program, it will store the following values in G.
_ _ | 2 1 2 0 2 0 1 0 1 | | | | 0 2 1 0 2 2 1 1 0 | - - |
For the same array A, S3L_grade_up would store the following values in G (again, using zero-based indexing).
_ _ | 1 0 1 0 2 0 2 1 2 | | | | 0 1 1 2 2 0 1 2 0 | - - |
When called by a Fortran program (F77/F90) each value in G would be one greater. For example, S3L_grade_up would store the following set of values.
_ _ | 2 1 2 1 3 1 3 2 3 | | | | 1 2 2 3 3 1 2 3 1 | - - |