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