Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
orderc

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     ORDERC ( Order of a character array )

     SUBROUTINE ORDERC ( ARRAY, NDIM, IORDER )

Abstract

     Determine the order of elements in an array of character strings.

Required_Reading

     None.

Keywords

     ARRAY
     SORT

Declarations

     IMPLICIT NONE

     CHARACTER*(*)    ARRAY  ( * )
     INTEGER          NDIM
     INTEGER          IORDER ( * )

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     ARRAY      I    Input array.
     NDIM       I    Dimension of ARRAY.
     IORDER     O    Order vector for ARRAY.

Detailed_Input

     ARRAY    is the input array.

     NDIM     is the number of elements in the input array.

Detailed_Output

     IORDER   is the order vector for the input array.
              IORDER(1) is the index of the smallest element
              of ARRAY; IORDER(2) is the index of the next
              smallest; and so on. Strings are ordered according
              to the ASCII collating sequence.

Parameters

     None.

Exceptions

     Error free.

Files

     None.

Particulars

     ORDERC finds the index of the smallest element of the input
     array. This becomes the first element of the order vector.
     The process is repeated for the rest of the elements.

     The order vector returned by ORDERC may be used by any of
     the REORD routines to sort sets of related arrays, as shown
     in the example below.

Examples

     The numerical results shown for this example may differ across
     platforms. The results depend on the SPICE kernels used as
     input, the compiler and supporting libraries, and the machine
     specific arithmetic implementation.

     1) Sort four related arrays (containing the names, masses,
        integer ID codes, and flags indicating whether they have
        a ring system, for a group of planets).


        Example code begins here.


              PROGRAM ORDERC_EX1
              IMPLICIT NONE

        C
        C     Local constants.
        C
              INTEGER                 NDIM
              PARAMETER             ( NDIM   = 8  )

              INTEGER                 STRLEN
              PARAMETER             ( STRLEN = 7  )

        C
        C     Local variables.
        C
              CHARACTER*(STRLEN)      NAMES  ( NDIM )

              DOUBLE PRECISION        MASSES ( NDIM )

              INTEGER                 CODES  ( NDIM )
              INTEGER                 I
              INTEGER                 IORDER ( NDIM )

              LOGICAL                 RINGS  ( NDIM )

        C
        C     Set the arrays containing the names, masses (given as
        C     ratios to of Solar GM to barycenter GM), integer ID
        C     codes, and flags indicating whether they have a ring
        C     system.
        C
              DATA                    NAMES  /
             .            'MERCURY', 'VENUS',  'EARTH',  'MARS',
             .            'JUPITER', 'SATURN', 'URANUS', 'NEPTUNE' /

              DATA                    MASSES /
             .                       22032.080D0,   324858.599D0,
             .                      398600.436D0,    42828.314D0,
             .                   126712767.881D0, 37940626.068D0,
             .                     5794559.128D0,  6836534.065D0 /

              DATA                    CODES  / 199, 299, 399, 499,
             .                                 599, 699, 799, 899 /

              DATA                    RINGS  /
             .                   .FALSE., .FALSE., .FALSE., .FALSE.,
             .                   .TRUE.,  .TRUE.,  .TRUE., .TRUE.   /

        C
        C     Sort the object arrays by name.
        C
              CALL ORDERC ( NAMES,  NDIM, IORDER )

              CALL REORDC ( IORDER, NDIM, NAMES  )
              CALL REORDD ( IORDER, NDIM, MASSES )
              CALL REORDI ( IORDER, NDIM, CODES  )
              CALL REORDL ( IORDER, NDIM, RINGS  )

        C
        C     Output the resulting table.
        C
              WRITE(*,'(A)') ' Planet   Mass(GMS/GM)  ID Code  Rings?'
              WRITE(*,'(A)') '-------  -------------  -------  ------'

              DO I = 1, NDIM

                 WRITE(*,'(A,F15.3,I9,L5)') NAMES(I), MASSES(I),
             .                              CODES(I), RINGS(I)

              END DO

              END


        When this program was executed on a Mac/Intel/gfortran/64-bit
        platform, the output was:


         Planet   Mass(GMS/GM)  ID Code  Rings?
        -------  -------------  -------  ------
        EARTH       398600.436      399    F
        JUPITER  126712767.881      599    T
        MARS         42828.314      499    F
        MERCURY      22032.080      199    F
        NEPTUNE    6836534.065      899    T
        SATURN    37940626.068      699    T
        URANUS     5794559.128      799    T
        VENUS       324858.599      299    F

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     J. Diaz del Rio    (ODC Space)
     W.L. Taber         (JPL)
     I.M. Underwood     (JPL)

Version

    SPICELIB Version 1.1.0, 04-JUL-2021 (JDR)

        Added IMPLICIT NONE statement.

        Edited the header to comply with NAIF standard.
        Added complete code example.

    SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)

        Comment section for permuted index source lines was added
        following the header.

    SPICELIB Version 1.0.0, 31-JAN-1990 (IMU)
Fri Dec 31 18:36:36 2021