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

Legend:
Removed from v.3  
changed lines
  Added in v.119

  ViewVC Help
Powered by ViewVC 1.1.21