!
! $Header$
!
       SUBROUTINE ord_coordm ( nmax, xi, xo, jjm, jmods, decrois )

c   ....  Auteur :  P. Le Van  .... 

c   ... Reordonne eventuellement les coordonnees de la grille modele ...
c
       IMPLICIT NONE

c    .....  Arguments  en entree  .....

       INTEGER nmax,jjm
       REAL xi(nmax)

c    .....  Arguments  en sortie  .....
c
       REAL xo(nmax+1) 
       LOGICAL decrois
       INTEGER jmods

c    .... Variables  locales  ....

       REAL xscr(nmax)
       INTEGER i
       REAL pi, degres, chmin, chmax,mult
c
       DO i = 1, nmax 
        xo(i) = xi(i)
       ENDDO

       mult = 1.
       IF( xo(1).GT.xo(nmax) )  mult = - 1.
       IF( nmax.EQ.jjm    ) jmods = nmax +1
       IF( nmax.EQ.jjm +1 ) jmods = nmax -1 
     
       pi     = 2.*ASIN(1.)
       degres = 180./pi
       decrois = .FALSE.

       CALL minmax(nmax,xo(1),chmin,chmax)

       IF(chmax.LT.6.5 )  THEN
          DO i = 1,nmax
           xo(i) = xo(i) * degres 
          ENDDO
       ENDIF

       IF( nmax.EQ.jjm )   THEN
         IF( xo(1).GT.xo(nmax) )   THEN
           DO i = 1, nmax 
            xscr(i) = xo(i)
           ENDDO
           DO i = 1, nmax 
            xo(i+1) = xscr(i)
           ENDDO
            xo (   1    ) =   90.
         ELSE
            xo ( nmax+1 ) =   90.
         ENDIF
       ELSE
          IF( nmax.NE.jjm +1 )   THEN
             PRINT *,'  Dans la routine ord_coordm , l argument nmax '
             PRINT *,'  n est pas egal a jjm ni a jjm +1 . Corriger !'
             CALL ABORT
          ELSE
            IF( ABS( xo(1)+ mult * 90.).GT.0.01 )  THEN
              PRINT *,' Avec nmax =',nmax,'on devrait avoir des',
     ,    ' ordonnees = 90. deg pour j=1 ou jjm+1 ! '
             CALL ABORT
            ELSE
               IF( xo(1).LT.xo(nmax) )  THEN
                 DO i = 1, nmax
                  xscr(i) = xo(i)
                 ENDDO
                 DO i = 1, nmax -1
                  xo(i) = xscr(i+1)
                 ENDDO
               ENDIF
            ENDIF
          ENDIF
       ENDIF

       IF ( xo(2).LT.xo(1) ) decrois =.TRUE.

       DO i = 3, nmax 

        IF(decrois.AND.xo(i).GT.xo(i-1) ) THEN
         PRINT 1
         CALL ABORT 
        ENDIF
        IF(.NOT.decrois.AND.xo(i).LT.xo(i-1) ) THEN
         PRINT 1
         CALL ABORT
        ENDIF

       ENDDO
        
       IF( decrois )  THEN
         CALL sort(jmods,xo(1))
       ENDIF


1      FORMAT(5x,' Incoherence dans les valeurs des latitudes de la ',
     ,  'grille du modele ')
2      FORMAT(1x,8f8.2)

       RETURN
       END
