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

Legend:
Removed from v.71  
changed lines
  Added in v.112

  ViewVC Help
Powered by ViewVC 1.1.21