/[lmdze]/trunk/dyn3d/fyhyp.f
ViewVC logotype

Diff of /trunk/dyn3d/fyhyp.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/dyn3d/fyhyp.f revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/dyn3d/fyhyp.f90 revision 81 by guez, Wed Mar 5 14:38:41 2014 UTC
# Line 1  Line 1 
1  !  
2  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/fyhyp.F,v 1.2 2005/06/03 09:11:32 fairhead Exp $  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/fyhyp.F,v 1.2 2005/06/03 09:11:32
3  !  ! fairhead Exp $
4  c  
5  c  
6         SUBROUTINE fyhyp ( yzoomdeg, grossism, dzooma,tau  ,    
7       ,  rrlatu,yyprimu,rrlatv,yyprimv,rlatu2,yprimu2,rlatu1,yprimu1 ,  SUBROUTINE fyhyp(yzoomdeg, grossism, dzooma, tau, rrlatu, yyprimu, rrlatv, &
8       ,  champmin,champmax                                            )      yyprimv, rlatu2, yprimu2, rlatu1, yprimu1, champmin, champmax)
9    
10  cc    ...  Version du 01/04/2001 ....    ! c    ...  Version du 01/04/2001 ....
11    
12         use dimens_m    USE dimens_m
13        use paramet_m    USE paramet_m
14         IMPLICIT NONE    IMPLICIT NONE
15  c  
16  c    ...   Auteur :  P. Le Van  ...    ! ...   Auteur :  P. Le Van  ...
17  c  
18  c    .......    d'apres  formulations  de R. Sadourny  .......    ! .......    d'apres  formulations  de R. Sadourny  .......
19  c  
20  c     Calcule les latitudes et derivees dans la grille du GCM pour une    ! Calcule les latitudes et derivees dans la grille du GCM pour une
21  c     fonction f(y) a tangente  hyperbolique  .    ! fonction f(y) a tangente  hyperbolique  .
22  c  
23  c     grossism etant le grossissement ( = 2 si 2 fois, = 3 si 3 fois , etc)    ! grossism etant le grossissement ( = 2 si 2 fois, = 3 si 3 fois , etc)
24  c     dzoom  etant  la distance totale de la zone du zoom ( en radians )    ! dzoom  etant  la distance totale de la zone du zoom ( en radians )
25  c     tau  la raideur de la transition de l'interieur a l'exterieur du zoom      ! tau  la raideur de la transition de l'interieur a l'exterieur du zoom
26  c  
27  c  
28  c N.B : Il vaut mieux avoir : grossism * dzoom  <  pi/2  (radians) ,en lati.    ! N.B : Il vaut mieux avoir : grossism * dzoom  <  pi/2  (radians) ,en
29  c      ********************************************************************    ! lati.
30  c    ! ********************************************************************
31  c  
32    
33         INTEGER      nmax , nmax2  
34         PARAMETER (  nmax = 30000, nmax2 = 2*nmax )    INTEGER nmax, nmax2
35  c    PARAMETER (nmax=30000, nmax2=2*nmax)
36  c  
37  c     .......  arguments  d'entree    .......  
38  c    ! .......  arguments  d'entree    .......
39         REAL yzoomdeg, grossism,dzooma,tau  
40  c         ( rentres  par  run.def )    REAL yzoomdeg, grossism, dzooma, tau
41      ! ( rentres  par  run.def )
42  c     .......  arguments  de sortie   .......  
43  c    ! .......  arguments  de sortie   .......
44         REAL rrlatu(jjp1), yyprimu(jjp1),rrlatv(jjm), yyprimv(jjm),  
45       , rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)    REAL rrlatu(jjp1), yyprimu(jjp1), rrlatv(jjm), yyprimv(jjm), rlatu1(jjm), &
46        yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)
47  c  
48  c     .....     champs  locaux    .....  
49  c    ! .....     champs  locaux    .....
50        
51         REAL   dzoom  
52         DOUBLE PRECISION ylat(jjp1), yprim(jjp1)    REAL dzoom
53         DOUBLE PRECISION yuv    DOUBLE PRECISION ylat(jjp1), yprim(jjp1)
54         DOUBLE PRECISION yt(0:nmax2)    DOUBLE PRECISION yuv
55         DOUBLE PRECISION fhyp(0:nmax2),beta,Ytprim(0:nmax2),fxm(0:nmax2)    DOUBLE PRECISION yt(0:nmax2)
56         SAVE Ytprim, yt,Yf    DOUBLE PRECISION fhyp(0:nmax2), beta, ytprim(0:nmax2), fxm(0:nmax2)
57         DOUBLE PRECISION Yf(0:nmax2),yypr(0:nmax2)    SAVE ytprim, yt, yf
58         DOUBLE PRECISION yvrai(jjp1), yprimm(jjp1),ylatt(jjp1)    DOUBLE PRECISION yf(0:nmax2), yypr(0:nmax2)
59         DOUBLE PRECISION pi,depi,pis2,epsilon,y0,pisjm    DOUBLE PRECISION yvrai(jjp1), yprimm(jjp1), ylatt(jjp1)
60         DOUBLE PRECISION yo1,yi,ylon2,ymoy,Yprimin,champmin,champmax    DOUBLE PRECISION pi, depi, pis2, epsilon, y0, pisjm
61         DOUBLE PRECISION yfi,Yf1,ffdy    DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin, champmin, champmax
62         DOUBLE PRECISION ypn,deply,y00    DOUBLE PRECISION yfi, yf1, ffdy
63         SAVE y00, deply    DOUBLE PRECISION ypn, deply, y00
64      SAVE y00, deply
65         INTEGER i,j,it,ik,iter,jlat  
66         INTEGER jpn,jjpn    INTEGER i, j, it, ik, iter, jlat
67         SAVE jpn    INTEGER jpn, jjpn
68         DOUBLE PRECISION a0,a1,a2,a3,yi2,heavyy0,heavyy0m    SAVE jpn
69         DOUBLE PRECISION fa(0:nmax2),fb(0:nmax2)    DOUBLE PRECISION a0, a1, a2, a3, yi2, heavyy0, heavyy0m
70         REAL y0min,y0max    DOUBLE PRECISION fa(0:nmax2), fb(0:nmax2)
71      REAL y0min, y0max
72         DOUBLE PRECISION     heavyside  
73      DOUBLE PRECISION heavyside
74         pi       = 2. * ASIN(1.)  
75         depi     = 2. * pi    pi = 2.*asin(1.)
76         pis2     = pi/2.    depi = 2.*pi
77         pisjm    = pi/ FLOAT(jjm)    pis2 = pi/2.
78         epsilon  = 1.e-3    pisjm = pi/float(jjm)
79         y0       =  yzoomdeg * pi/180.    epsilon = 1.E-3
80      y0 = yzoomdeg*pi/180.
81         IF( dzooma.LT.1.)  THEN  
82           dzoom = dzooma * pi    IF (dzooma<1.) THEN
83         ELSEIF( dzooma.LT. 12. ) THEN      dzoom = dzooma*pi
84           WRITE(6,*) ' Le param. dzoomy pour fyhyp est trop petit ! L aug    ELSE IF (dzooma<12.) THEN
85       ,menter et relancer ! '      WRITE (6, *) ' Le param. dzoomy pour fyhyp est trop petit &
86           STOP 1        &! L aug                                                &
87         ELSE        &            menter et relancer'
88           dzoom = dzooma * pi/180.      STOP 1
89         ENDIF    ELSE
90        dzoom = dzooma*pi/180.
91         WRITE(6,18)    END IF
92         WRITE(6,*) ' yzoom( rad.),grossism,tau,dzoom (radians)'  
93         WRITE(6,24) y0,grossism,tau,dzoom    WRITE (6, 18)
94      WRITE (6, *) ' yzoom( rad.),grossism,tau,dzoom (radians)'
95         DO i = 0, nmax2    WRITE (6, 24) y0, grossism, tau, dzoom
96          yt(i) = - pis2  + FLOAT(i)* pi /nmax2  
97         ENDDO    DO i = 0, nmax2
98        yt(i) = -pis2 + float(i)*pi/nmax2
99         heavyy0m = heavyside( -y0 )    END DO
100         heavyy0  = heavyside(  y0 )  
101         y0min    = 2.*y0*heavyy0m - pis2    heavyy0m = heavyside(-y0)
102         y0max    = 2.*y0*heavyy0  + pis2    heavyy0 = heavyside(y0)
103      y0min = 2.*y0*heavyy0m - pis2
104         fa = 999.999    y0max = 2.*y0*heavyy0 + pis2
105         fb = 999.999  
106            fa = 999.999
107         DO i = 0, nmax2    fb = 999.999
108          IF( yt(i).LT.y0 )  THEN  
109           fa (i) = tau*  (yt(i)-y0+dzoom/2. )    DO i = 0, nmax2
110           fb(i) =   (yt(i)-2.*y0*heavyy0m +pis2) * ( y0 - yt(i) )      IF (yt(i)<y0) THEN
111          ELSEIF ( yt(i).GT.y0 )  THEN        fa(i) = tau*(yt(i)-y0+dzoom/2.)
112           fa(i) =   tau *(y0-yt(i)+dzoom/2. )        fb(i) = (yt(i)-2.*y0*heavyy0m+pis2)*(y0-yt(i))
113           fb(i) = (2.*y0*heavyy0 -yt(i)+pis2) * ( yt(i) - y0 )      ELSE IF (yt(i)>y0) THEN
114         ENDIF        fa(i) = tau*(y0-yt(i)+dzoom/2.)
115                  fb(i) = (2.*y0*heavyy0-yt(i)+pis2)*(yt(i)-y0)
116         IF( 200.* fb(i) .LT. - fa(i) )   THEN      END IF
117           fhyp ( i) = - 1.  
118         ELSEIF( 200. * fb(i) .LT. fa(i) ) THEN      IF (200.*fb(i)<-fa(i)) THEN
119           fhyp ( i) =   1.        fhyp(i) = -1.
120         ELSE        ELSE IF (200.*fb(i)<fa(i)) THEN
121           fhyp(i) =  TANH ( fa(i)/fb(i) )        fhyp(i) = 1.
122         ENDIF      ELSE
123          fhyp(i) = tanh(fa(i)/fb(i))
124         IF( yt(i).EQ.y0 )  fhyp(i) = 1.      END IF
125         IF(yt(i).EQ. y0min. OR.yt(i).EQ. y0max ) fhyp(i) = -1.  
126        IF (yt(i)==y0) fhyp(i) = 1.
127         ENDDO      IF (yt(i)==y0min .OR. yt(i)==y0max) fhyp(i) = -1.
128    
129  cc  ....  Calcul  de  beta  ....    END DO
130  c  
131         ffdy   = 0.    ! c  ....  Calcul  de  beta  ....
132    
133         DO i = 1, nmax2    ffdy = 0.
134          ymoy    = 0.5 * ( yt(i-1) + yt( i ) )  
135          IF( ymoy.LT.y0 )  THEN    DO i = 1, nmax2
136           fa(i)= tau * ( ymoy-y0+dzoom/2.)      ymoy = 0.5*(yt(i-1)+yt(i))
137           fb(i) = (ymoy-2.*y0*heavyy0m +pis2) * ( y0 - ymoy )      IF (ymoy<y0) THEN
138          ELSEIF ( ymoy.GT.y0 )  THEN        fa(i) = tau*(ymoy-y0+dzoom/2.)
139           fa(i)= tau * ( y0-ymoy+dzoom/2. )        fb(i) = (ymoy-2.*y0*heavyy0m+pis2)*(y0-ymoy)
140           fb(i) = (2.*y0*heavyy0 -ymoy+pis2) * ( ymoy - y0 )      ELSE IF (ymoy>y0) THEN
141          ENDIF        fa(i) = tau*(y0-ymoy+dzoom/2.)
142          fb(i) = (2.*y0*heavyy0-ymoy+pis2)*(ymoy-y0)
143          IF( 200.* fb(i) .LT. - fa(i) )    THEN      END IF
144           fxm ( i) = - 1.  
145          ELSEIF( 200. * fb(i) .LT. fa(i) ) THEN      IF (200.*fb(i)<-fa(i)) THEN
146           fxm ( i) =   1.        fxm(i) = -1.
147          ELSE      ELSE IF (200.*fb(i)<fa(i)) THEN
148           fxm(i) =  TANH ( fa(i)/fb(i) )        fxm(i) = 1.
149          ENDIF      ELSE
150           IF( ymoy.EQ.y0 )  fxm(i) = 1.        fxm(i) = tanh(fa(i)/fb(i))
151           IF (ymoy.EQ. y0min. OR.yt(i).EQ. y0max ) fxm(i) = -1.      END IF
152           ffdy = ffdy + fxm(i) * ( yt(i) - yt(i-1) )      IF (ymoy==y0) fxm(i) = 1.
153        IF (ymoy==y0min .OR. yt(i)==y0max) fxm(i) = -1.
154          ENDDO      ffdy = ffdy + fxm(i)*(yt(i)-yt(i-1))
155    
156          beta  = ( grossism * ffdy - pi ) / ( ffdy - pi )    END DO
157    
158         IF( 2.*beta - grossism.LE. 0.)  THEN    beta = (grossism*ffdy-pi)/(ffdy-pi)
159    
160          WRITE(6,*) ' **  Attention ! La valeur beta calculee dans la rou    IF (2.*beta-grossism<=0.) THEN
161       ,tine fyhyp est mauvaise ! '  
162          WRITE(6,*)'Modifier les valeurs de  grossismy ,tauy ou dzoomy',      WRITE (6, *) ' **  Attention ! La valeur beta calculee dans &
163       , ' et relancer ! ***  '        &la rou                                                 &
164          STOP 1        &           tine fyhyp est mauvaise'
165        WRITE (6, *) 'Modifier les valeurs de  grossismy ,tauy ou dzoomy', &
166         ENDIF        ' et relancer ! ***  '
167  c      STOP 1
168  c   .....  calcul  de  Ytprim   .....  
169  c    END IF
170          
171         DO i = 0, nmax2    ! .....  calcul  de  Ytprim   .....
172          Ytprim(i) = beta  + ( grossism - beta ) * fhyp(i)  
173         ENDDO  
174      DO i = 0, nmax2
175  c   .....  Calcul  de  Yf     ........      ytprim(i) = beta + (grossism-beta)*fhyp(i)
176      END DO
177         Yf(0) = - pis2  
178         DO i = 1, nmax2    ! .....  Calcul  de  Yf     ........
179          yypr(i)    = beta + ( grossism - beta ) * fxm(i)  
180         ENDDO    yf(0) = -pis2
181      DO i = 1, nmax2
182         DO i=1,nmax2      yypr(i) = beta + (grossism-beta)*fxm(i)
183          Yf(i)   = Yf(i-1) + yypr(i) * ( yt(i) - yt(i-1) )    END DO
184         ENDDO  
185      DO i = 1, nmax2
186  c    ****************************************************************      yf(i) = yf(i-1) + yypr(i)*(yt(i)-yt(i-1))
187  c    END DO
188  c   .....   yuv  = 0.   si calcul des latitudes  aux pts.  U  .....  
189  c   .....   yuv  = 0.5  si calcul des latitudes  aux pts.  V  .....    ! ****************************************************************
190  c  
191        WRITE(6,18)    ! .....   yuv  = 0.   si calcul des latitudes  aux pts.  U  .....
192  c    ! .....   yuv  = 0.5  si calcul des latitudes  aux pts.  V  .....
193        DO 5000  ik = 1,4  
194      WRITE (6, 18)
195         IF( ik.EQ.1 )  THEN  
196           yuv  = 0.    DO ik = 1, 4
197           jlat = jjm + 1  
198         ELSE IF ( ik.EQ.2 )  THEN      IF (ik==1) THEN
199           yuv  = 0.5        yuv = 0.
200           jlat = jjm        jlat = jjm + 1
201         ELSE IF ( ik.EQ.3 )  THEN      ELSE IF (ik==2) THEN
202           yuv  = 0.25        yuv = 0.5
203           jlat = jjm        jlat = jjm
204         ELSE IF ( ik.EQ.4 )  THEN      ELSE IF (ik==3) THEN
205           yuv  = 0.75        yuv = 0.25
206           jlat = jjm        jlat = jjm
207         ENDIF      ELSE IF (ik==4) THEN
208  c        yuv = 0.75
209         yo1   = 0.        jlat = jjm
210         DO 1500 j =  1,jlat      END IF
211          yo1   = 0.  
212          ylon2 =  - pis2 + pisjm * ( FLOAT(j)  + yuv  -1.)        yo1 = 0.
213          yfi    = ylon2      DO j = 1, jlat
214  c        yo1 = 0.
215         DO 250 it =  nmax2,0,-1        ylon2 = -pis2 + pisjm*(float(j)+yuv-1.)
216          IF( yfi.GE.Yf(it))  GO TO 350        yfi = ylon2
217  250    CONTINUE  
218         it = 0        DO it = nmax2, 0, -1
219  350    CONTINUE          IF (yfi>=yf(it)) GO TO 350
220          END DO
221         yi = yt(it)        it = 0
222         IF(it.EQ.nmax2)  THEN  350   CONTINUE
223          it       = nmax2 -1  
224          Yf(it+1) = pis2        yi = yt(it)
225         ENDIF        IF (it==nmax2) THEN
226  c  .................................................................          it = nmax2 - 1
227  c  ....  Interpolation entre  yi(it) et yi(it+1)   pour avoir Y(yi)            yf(it+1) = pis2
228  c      .....           et   Y'(yi)                             .....        END IF
229  c  .................................................................        ! .................................................................
230          ! ....  Interpolation entre  yi(it) et yi(it+1)   pour avoir Y(yi)
231         CALL coefpoly ( Yf(it),Yf(it+1),Ytprim(it), Ytprim(it+1),          ! .....           et   Y'(yi)                             .....
232       ,                  yt(it),yt(it+1) ,   a0,a1,a2,a3   )              ! .................................................................
233    
234         Yf1     = Yf(it)        CALL coefpoly(yf(it), yf(it+1), ytprim(it), ytprim(it+1), yt(it), &
235         Yprimin = a1 + 2.* a2 * yi + 3.*a3 * yi *yi          yt(it+1), a0, a1, a2, a3)
236    
237         DO 500 iter = 1,300        yf1 = yf(it)
238           yi = yi - ( Yf1 - yfi )/ Yprimin        yprimin = a1 + 2.*a2*yi + 3.*a3*yi*yi
239    
240          IF( ABS(yi-yo1).LE.epsilon)  GO TO 550        DO iter = 1, 300
241           yo1      = yi          yi = yi - (yf1-yfi)/yprimin
242           yi2      = yi * yi  
243           Yf1      = a0 +  a1 * yi +     a2 * yi2  +     a3 * yi2 * yi          IF (abs(yi-yo1)<=epsilon) GO TO 550
244           Yprimin  =       a1      + 2.* a2 *  yi  + 3.* a3 * yi2          yo1 = yi
245  500   CONTINUE          yi2 = yi*yi
246          WRITE(6,*) ' Pas de solution ***** ',j,ylon2,iter          yf1 = a0 + a1*yi + a2*yi2 + a3*yi2*yi
247           STOP 2          yprimin = a1 + 2.*a2*yi + 3.*a3*yi2
248          END DO
249          WRITE (6, *) ' Pas de solution ***** ', j, ylon2, iter
250          STOP 2
251  550   CONTINUE  550   CONTINUE
 c  
        Yprimin   = a1  + 2.* a2 *  yi   + 3.* a3 * yi* yi  
        yprim(j)  = pi / ( jjm * Yprimin )  
        yvrai(j)  = yi  
   
 1500    CONTINUE  
   
        DO j = 1, jlat -1  
         IF( yvrai(j+1). LT. yvrai(j) )  THEN  
          WRITE(6,*) ' PBS. avec  rlat(',j+1,') plus petit que rlat(',j,  
      ,  ')'  
          STOP 3  
         ENDIF  
        ENDDO  
   
        WRITE(6,*) 'Reorganisation des latitudes pour avoir entre - pi/2'  
      , ,' et  pi/2 '  
 c  
         IF( ik.EQ.1 )   THEN  
            ypn = pis2  
           DO j = jlat,1,-1  
            IF( yvrai(j).LE. ypn ) GO TO 1502  
           ENDDO  
 1502     CONTINUE  
   
          jpn   = j  
          y00   = yvrai(jpn)  
          deply = pis2 -  y00  
         ENDIF  
   
          DO  j = 1, jjm +1 - jpn  
            ylatt (j)  = -pis2 - y00  + yvrai(jpn+j-1)  
            yprimm(j)  = yprim(jpn+j-1)  
          ENDDO  
   
          jjpn  = jpn  
          IF( jlat.EQ. jjm ) jjpn = jpn -1  
   
          DO j = 1,jjpn  
           ylatt (j + jjm+1 -jpn) = yvrai(j) + deply  
           yprimm(j + jjm+1 -jpn) = yprim(j)  
          ENDDO  
   
 c      ***********   Fin de la reorganisation     *************  
 c  
  1600   CONTINUE  
   
        DO j = 1, jlat  
           ylat(j) =  ylatt( jlat +1 -j )  
          yprim(j) = yprimm( jlat +1 -j )  
        ENDDO  
     
         DO j = 1, jlat  
          yvrai(j) = ylat(j)*180./pi  
         ENDDO  
   
         IF( ik.EQ.1 )  THEN  
 c         WRITE(6,18)  
 c         WRITE(6,*)  ' YLAT  en U   apres ( en  deg. ) '  
 c         WRITE(6,68) (yvrai(j),j=1,jlat)  
 cc         WRITE(6,*) ' YPRIM '  
 cc         WRITE(6,445) ( yprim(j),j=1,jlat)  
   
           DO j = 1, jlat  
             rrlatu(j) =  ylat( j )  
            yyprimu(j) = yprim( j )  
           ENDDO  
   
         ELSE IF ( ik.EQ. 2 )  THEN  
 c         WRITE(6,18)  
 c         WRITE(6,*) ' YLAT   en V  apres ( en  deg. ) '  
 c         WRITE(6,68) (yvrai(j),j=1,jlat)  
 cc         WRITE(6,*)' YPRIM '  
 cc         WRITE(6,445) ( yprim(j),j=1,jlat)  
   
           DO j = 1, jlat  
             rrlatv(j) =  ylat( j )  
            yyprimv(j) = yprim( j )  
           ENDDO  
   
         ELSE IF ( ik.EQ. 3 )  THEN  
 c         WRITE(6,18)  
 c         WRITE(6,*)  ' YLAT  en U + 0.75  apres ( en  deg. ) '  
 c         WRITE(6,68) (yvrai(j),j=1,jlat)  
 cc         WRITE(6,*) ' YPRIM '  
 cc         WRITE(6,445) ( yprim(j),j=1,jlat)  
   
           DO j = 1, jlat  
             rlatu2(j) =  ylat( j )  
            yprimu2(j) = yprim( j )  
           ENDDO  
   
         ELSE IF ( ik.EQ. 4 )  THEN  
 c         WRITE(6,18)  
 c         WRITE(6,*)  ' YLAT en U + 0.25  apres ( en  deg. ) '  
 c         WRITE(6,68)(yvrai(j),j=1,jlat)  
 cc         WRITE(6,*) ' YPRIM '  
 cc         WRITE(6,68) ( yprim(j),j=1,jlat)  
   
           DO j = 1, jlat  
             rlatu1(j) =  ylat( j )  
            yprimu1(j) = yprim( j )  
           ENDDO  
   
         ENDIF  
   
 5000   CONTINUE  
 c  
         WRITE(6,18)  
 c  
 c  .....     fin de la boucle  do 5000 .....  
   
         DO j = 1, jjm  
          ylat(j) = rrlatu(j) - rrlatu(j+1)  
         ENDDO  
         champmin =  1.e12  
         champmax = -1.e12  
         DO j = 1, jjm  
          champmin = MIN( champmin, ylat(j) )  
          champmax = MAX( champmax, ylat(j) )  
         ENDDO  
          champmin = champmin * 180./pi  
          champmax = champmax * 180./pi  
   
 24     FORMAT(2x,'Parametres yzoom,gross,tau ,dzoom pour fyhyp ',4f8.3)  
 18      FORMAT(/)  
 68      FORMAT(1x,7f9.2)  
252    
253          RETURN        yprimin = a1 + 2.*a2*yi + 3.*a3*yi*yi
254          END        yprim(j) = pi/(jjm*yprimin)
255          yvrai(j) = yi
256    
257        END DO
258    
259        DO j = 1, jlat - 1
260          IF (yvrai(j+1)<yvrai(j)) THEN
261            WRITE (6, *) ' PBS. avec  rlat(', j + 1, ') plus petit que rlat(', j, &
262              ')'
263            STOP 3
264          END IF
265        END DO
266    
267        WRITE (6, *) 'Reorganisation des latitudes pour avoir entre - pi/2', &
268          ' et  pi/2 '
269    
270        IF (ik==1) THEN
271          ypn = pis2
272          DO j = jlat, 1, -1
273            IF (yvrai(j)<=ypn) GO TO 1502
274          END DO
275    1502  CONTINUE
276    
277          jpn = j
278          y00 = yvrai(jpn)
279          deply = pis2 - y00
280        END IF
281    
282        DO j = 1, jjm + 1 - jpn
283          ylatt(j) = -pis2 - y00 + yvrai(jpn+j-1)
284          yprimm(j) = yprim(jpn+j-1)
285        END DO
286    
287        jjpn = jpn
288        IF (jlat==jjm) jjpn = jpn - 1
289    
290        DO j = 1, jjpn
291          ylatt(j+jjm+1-jpn) = yvrai(j) + deply
292          yprimm(j+jjm+1-jpn) = yprim(j)
293        END DO
294    
295        ! ***********   Fin de la reorganisation     *************
296    
297    
298        DO j = 1, jlat
299          ylat(j) = ylatt(jlat+1-j)
300          yprim(j) = yprimm(jlat+1-j)
301        END DO
302    
303        DO j = 1, jlat
304          yvrai(j) = ylat(j)*180./pi
305        END DO
306    
307        IF (ik==1) THEN
308          ! WRITE(6,18)
309          ! WRITE(6,*)  ' YLAT  en U   apres ( en  deg. ) '
310          ! WRITE(6,68) (yvrai(j),j=1,jlat)
311          ! c         WRITE(6,*) ' YPRIM '
312          ! c         WRITE(6,445) ( yprim(j),j=1,jlat)
313    
314          DO j = 1, jlat
315            rrlatu(j) = ylat(j)
316            yyprimu(j) = yprim(j)
317          END DO
318    
319        ELSE IF (ik==2) THEN
320          ! WRITE(6,18)
321          ! WRITE(6,*) ' YLAT   en V  apres ( en  deg. ) '
322          ! WRITE(6,68) (yvrai(j),j=1,jlat)
323          ! c         WRITE(6,*)' YPRIM '
324          ! c         WRITE(6,445) ( yprim(j),j=1,jlat)
325    
326          DO j = 1, jlat
327            rrlatv(j) = ylat(j)
328            yyprimv(j) = yprim(j)
329          END DO
330    
331        ELSE IF (ik==3) THEN
332          ! WRITE(6,18)
333          ! WRITE(6,*)  ' YLAT  en U + 0.75  apres ( en  deg. ) '
334          ! WRITE(6,68) (yvrai(j),j=1,jlat)
335          ! c         WRITE(6,*) ' YPRIM '
336          ! c         WRITE(6,445) ( yprim(j),j=1,jlat)
337    
338          DO j = 1, jlat
339            rlatu2(j) = ylat(j)
340            yprimu2(j) = yprim(j)
341          END DO
342    
343        ELSE IF (ik==4) THEN
344          ! WRITE(6,18)
345          ! WRITE(6,*)  ' YLAT en U + 0.25  apres ( en  deg. ) '
346          ! WRITE(6,68)(yvrai(j),j=1,jlat)
347          ! c         WRITE(6,*) ' YPRIM '
348          ! c         WRITE(6,68) ( yprim(j),j=1,jlat)
349    
350          DO j = 1, jlat
351            rlatu1(j) = ylat(j)
352            yprimu1(j) = yprim(j)
353          END DO
354    
355        END IF
356    
357      END DO
358    
359      WRITE (6, 18)
360    
361      ! .....     fin de la boucle  do 5000 .....
362    
363      DO j = 1, jjm
364        ylat(j) = rrlatu(j) - rrlatu(j+1)
365      END DO
366      champmin = 1.E12
367      champmax = -1.E12
368      DO j = 1, jjm
369        champmin = min(champmin, ylat(j))
370        champmax = max(champmax, ylat(j))
371      END DO
372      champmin = champmin*180./pi
373      champmax = champmax*180./pi
374    
375    24 FORMAT (2X, 'Parametres yzoom,gross,tau ,dzoom pour fyhyp ', 4F8.3)
376    18 FORMAT (/)
377    68 FORMAT (1X, 7F9.2)
378    
379      RETURN
380    END SUBROUTINE fyhyp

Legend:
Removed from v.76  
changed lines
  Added in v.81

  ViewVC Help
Powered by ViewVC 1.1.21