New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3026 for branches/dev_2802_OBStools/NEMOGCM/TOOLS/OBSTOOLS/src – NEMO

Ignore:
Timestamp:
2011-10-28T18:10:29+02:00 (13 years ago)
Author:
djlea
Message:

Remove unneeded sec_to_dt from dataplot. Also add obstools build instructions to documentation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_2802_OBStools/NEMOGCM/TOOLS/OBSTOOLS/src/index_sort.F90

    r2945 r3026  
    279279   END SUBROUTINE index_sort_int 
    280280 
     281   SUBROUTINE  index_sort_string(cdval, kindx, kvals) 
     282      USE toolspar_kind 
     283      IMPLICIT NONE 
     284      !!---------------------------------------------------------------------- 
     285      !!                    ***  ROUTINE index_sort  *** 
     286      !!           
     287      !! ** Purpose : Get indicies for ascending order for an 
     288      !!              integer array 
     289      !! 
     290      !! ** Method  : Heapsort 
     291      !! 
     292      !! ** Action  :  
     293      !! 
     294      !! References : http://en.wikipedia.org/wiki/Heapsort 
     295      !! 
     296      !! History : 
     297      !!        !  06-05  (K. Mogensen)  Original code 
     298      !!---------------------------------------------------------------------- 
     299      !! * Arguments 
     300      CHARACTER(len=*),DIMENSION(*),INTENT(IN) :: & 
     301         & cdval                            ! Array to be sorted 
     302      INTEGER,DIMENSION(*),INTENT(INOUT) :: & 
     303         & kindx                           ! Indicies for ordering 
     304      INTEGER, INTENT(IN) :: & 
     305         & kvals                           ! Number of values 
     306 
     307      !! * Local variables 
     308      INTEGER :: ji, jj, jt, jn, jparent, jchild 
     309 
     310      DO ji = 1, kvals 
     311         kindx(ji) = ji 
     312      END DO 
     313 
     314      IF (kvals > 1 ) THEN 
     315 
     316         ji = kvals/2 + 1 
     317         jn = kvals 
     318 
     319         main_loop : DO 
     320 
     321            IF ( ji > 1 ) THEN 
     322               ji = ji-1 
     323               jt = kindx(ji) 
     324            ELSE 
     325               jt = kindx(jn) 
     326               kindx(jn) = kindx(1) 
     327               jn = jn-1 
     328               IF ( jn == 1 ) THEN 
     329                  kindx(1) = jt 
     330                  EXIT main_loop 
     331               ENDIF 
     332            ENDIF 
     333 
     334            jparent = ji 
     335            jchild =  2*ji 
     336 
     337            inner_loop : DO 
     338               IF ( jchild > jn ) EXIT inner_loop 
     339               IF ( jchild < jn ) THEN 
     340                  IF ( cdval(kindx(jchild)) <  cdval(kindx(jchild+1)) ) THEN 
     341                     jchild = jchild+1 
     342                  ENDIF 
     343               ENDIF 
     344               IF  ( cdval(jt) < cdval(kindx(jchild))) THEN 
     345                  kindx(jparent) = kindx(jchild) 
     346                  jparent = jchild 
     347                  jchild = jchild*2 
     348               ELSE  
     349                  jchild = jn + 1  
     350               ENDIF 
     351            ENDDO inner_loop 
     352 
     353            kindx(jparent) = jt 
     354 
     355         END DO  main_loop 
     356 
     357      ENDIF 
     358 
     359   END SUBROUTINE index_sort_string 
     360 
    281361END MODULE index_sort 
Note: See TracChangeset for help on using the changeset viewer.