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

Diff of /trunk/Sources/dyn3d/fyhyp.f

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

trunk/dyn3d/fyhyp.f90 revision 81 by guez, Wed Mar 5 14:38:41 2014 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 $  
   
   
   
 SUBROUTINE fyhyp(yzoomdeg, grossism, dzooma, tau, rrlatu, yyprimu, rrlatv, &  
     yyprimv, rlatu2, yprimu2, rlatu1, yprimu1, champmin, champmax)  
   
   ! c    ...  Version du 01/04/2001 ....  
   
   USE dimens_m  
   USE paramet_m  
3    IMPLICIT NONE    IMPLICIT NONE
4    
5    ! ...   Auteur :  P. Le Van  ...  contains
   
   ! .......    d'apres  formulations  de R. Sadourny  .......  
   
   ! Calcule les latitudes et derivees dans la grille du GCM pour une  
   ! fonction f(y) a tangente  hyperbolique  .  
   
   ! grossism etant le grossissement ( = 2 si 2 fois, = 3 si 3 fois , etc)  
   ! dzoom  etant  la distance totale de la zone du zoom ( en radians )  
   ! tau  la raideur de la transition de l'interieur a l'exterieur du zoom  
   
   
   ! N.B : Il vaut mieux avoir : grossism * dzoom  <  pi/2  (radians) ,en  
   ! lati.  
   ! ********************************************************************  
   
   
   
   INTEGER nmax, nmax2  
   PARAMETER (nmax=30000, nmax2=2*nmax)  
   
   
   ! .......  arguments  d'entree    .......  
6    
7    REAL yzoomdeg, grossism, dzooma, tau    SUBROUTINE fyhyp(rlatu, yyprimu, rlatv, rlatu2, yprimu2, rlatu1, yprimu1)
   ! ( rentres  par  run.def )  
8    
9    ! .......  arguments  de sortie   .......      ! From LMDZ4/libf/dyn3d/fyhyp.F, version 1.2, 2005/06/03 09:11:32
10    
11    REAL rrlatu(jjp1), yyprimu(jjp1), rrlatv(jjm), yyprimv(jjm), rlatu1(jjm), &      ! Author: P. Le Van, from analysis by R. Sadourny
     yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)  
12    
13        ! Calcule les latitudes et dérivées dans la grille du GCM pour une
14    ! .....     champs  locaux    .....      ! fonction f(y) à dérivée tangente hyperbolique.
15    
16        ! Nota bene : il vaut mieux avoir grossismy * dzoomy < pi / 2 (radians).
17    REAL dzoom  
18    DOUBLE PRECISION ylat(jjp1), yprim(jjp1)      USE dimens_m, only: jjm
19    DOUBLE PRECISION yuv      use serre, only: clat, grossismy, dzoomy, tauy
20    DOUBLE PRECISION yt(0:nmax2)  
21    DOUBLE PRECISION fhyp(0:nmax2), beta, ytprim(0:nmax2), fxm(0:nmax2)      REAL, intent(out):: rlatu(jjm + 1), yyprimu(jjm + 1)
22    SAVE ytprim, yt, yf      REAL, intent(out):: rlatv(jjm)
23    DOUBLE PRECISION yf(0:nmax2), yypr(0:nmax2)      real, intent(out):: rlatu2(jjm), yprimu2(jjm), rlatu1(jjm), yprimu1(jjm)
24    DOUBLE PRECISION yvrai(jjp1), yprimm(jjp1), ylatt(jjp1)  
25    DOUBLE PRECISION pi, depi, pis2, epsilon, y0, pisjm      ! Local:
26    DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin, champmin, champmax  
27    DOUBLE PRECISION yfi, yf1, ffdy      DOUBLE PRECISION champmin, champmax
28    DOUBLE PRECISION ypn, deply, y00      INTEGER, PARAMETER:: nmax=30000, nmax2=2*nmax
29    SAVE y00, deply      REAL dzoom ! distance totale de la zone du zoom (en radians)
30        DOUBLE PRECISION ylat(jjm + 1), yprim(jjm + 1)
31    INTEGER i, j, it, ik, iter, jlat      DOUBLE PRECISION yuv
32    INTEGER jpn, jjpn      DOUBLE PRECISION, save:: yt(0:nmax2)
33    SAVE jpn      DOUBLE PRECISION fhyp(0:nmax2), beta
34    DOUBLE PRECISION a0, a1, a2, a3, yi2, heavyy0, heavyy0m      DOUBLE PRECISION, save:: ytprim(0:nmax2)
35    DOUBLE PRECISION fa(0:nmax2), fb(0:nmax2)      DOUBLE PRECISION fxm(0:nmax2)
36    REAL y0min, y0max      DOUBLE PRECISION, save:: yf(0:nmax2)
37        DOUBLE PRECISION yypr(0:nmax2)
38    DOUBLE PRECISION heavyside      DOUBLE PRECISION yvrai(jjm + 1), yprimm(jjm + 1), ylatt(jjm + 1)
39        DOUBLE PRECISION pi, pis2, epsilon, y0, pisjm
40    pi = 2.*asin(1.)      DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin
41    depi = 2.*pi      DOUBLE PRECISION yfi, yf1, ffdy
42    pis2 = pi/2.      DOUBLE PRECISION ypn, deply, y00
43    pisjm = pi/float(jjm)      SAVE y00, deply
44    epsilon = 1.E-3  
45    y0 = yzoomdeg*pi/180.      INTEGER i, j, it, ik, iter, jlat
46        INTEGER jpn, jjpn
47    IF (dzooma<1.) THEN      SAVE jpn
48      dzoom = dzooma*pi      DOUBLE PRECISION a0, a1, a2, a3, yi2, heavyy0, heavyy0m
49    ELSE IF (dzooma<12.) THEN      DOUBLE PRECISION fa(0:nmax2), fb(0:nmax2)
50      WRITE (6, *) ' Le param. dzoomy pour fyhyp est trop petit &      REAL y0min, y0max
51        &! L aug                                                &  
52        &            menter et relancer'      DOUBLE PRECISION heavyside
53      STOP 1  
54    ELSE      !-------------------------------------------------------------------
55      dzoom = dzooma*pi/180.  
56    END IF      pi = 2.*asin(1.)
57        pis2 = pi/2.
58    WRITE (6, 18)      pisjm = pi/real(jjm)
59    WRITE (6, *) ' yzoom( rad.),grossism,tau,dzoom (radians)'      epsilon = 1e-3
60    WRITE (6, 24) y0, grossism, tau, dzoom      y0 = clat*pi/180.
61    
62    DO i = 0, nmax2      IF (dzoomy<1.) THEN
63      yt(i) = -pis2 + float(i)*pi/nmax2         dzoom = dzoomy*pi
64    END DO      ELSE IF (dzoomy<12.) THEN
65           print *, "Le paramètre dzoomy pour fyhyp est trop petit. L'augmenter " &
66    heavyy0m = heavyside(-y0)              // "et relancer."
67    heavyy0 = heavyside(y0)         STOP 1
   y0min = 2.*y0*heavyy0m - pis2  
   y0max = 2.*y0*heavyy0 + pis2  
   
   fa = 999.999  
   fb = 999.999  
   
   DO i = 0, nmax2  
     IF (yt(i)<y0) THEN  
       fa(i) = tau*(yt(i)-y0+dzoom/2.)  
       fb(i) = (yt(i)-2.*y0*heavyy0m+pis2)*(y0-yt(i))  
     ELSE IF (yt(i)>y0) THEN  
       fa(i) = tau*(y0-yt(i)+dzoom/2.)  
       fb(i) = (2.*y0*heavyy0-yt(i)+pis2)*(yt(i)-y0)  
     END IF  
   
     IF (200.*fb(i)<-fa(i)) THEN  
       fhyp(i) = -1.  
     ELSE IF (200.*fb(i)<fa(i)) THEN  
       fhyp(i) = 1.  
68      ELSE      ELSE
69        fhyp(i) = tanh(fa(i)/fb(i))         dzoom = dzoomy * pi/180.
70      END IF      END IF
71    
72      IF (yt(i)==y0) fhyp(i) = 1.      print *, 'yzoom(rad), grossismy, tauy, dzoom (rad):'
73      IF (yt(i)==y0min .OR. yt(i)==y0max) fhyp(i) = -1.      print *, y0, grossismy, tauy, dzoom
   
   END DO  
74    
75    ! c  ....  Calcul  de  beta  ....      DO i = 0, nmax2
76           yt(i) = -pis2 + real(i)*pi/nmax2
77    ffdy = 0.      END DO
   
   DO i = 1, nmax2  
     ymoy = 0.5*(yt(i-1)+yt(i))  
     IF (ymoy<y0) THEN  
       fa(i) = tau*(ymoy-y0+dzoom/2.)  
       fb(i) = (ymoy-2.*y0*heavyy0m+pis2)*(y0-ymoy)  
     ELSE IF (ymoy>y0) THEN  
       fa(i) = tau*(y0-ymoy+dzoom/2.)  
       fb(i) = (2.*y0*heavyy0-ymoy+pis2)*(ymoy-y0)  
     END IF  
   
     IF (200.*fb(i)<-fa(i)) THEN  
       fxm(i) = -1.  
     ELSE IF (200.*fb(i)<fa(i)) THEN  
       fxm(i) = 1.  
     ELSE  
       fxm(i) = tanh(fa(i)/fb(i))  
     END IF  
     IF (ymoy==y0) fxm(i) = 1.  
     IF (ymoy==y0min .OR. yt(i)==y0max) fxm(i) = -1.  
     ffdy = ffdy + fxm(i)*(yt(i)-yt(i-1))  
   
   END DO  
   
   beta = (grossism*ffdy-pi)/(ffdy-pi)  
   
   IF (2.*beta-grossism<=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  
   
   END IF  
   
   ! .....  calcul  de  Ytprim   .....  
   
   
   DO i = 0, nmax2  
     ytprim(i) = beta + (grossism-beta)*fhyp(i)  
   END DO  
   
   ! .....  Calcul  de  Yf     ........  
78    
79    yf(0) = -pis2      heavyy0m = heavyside(-y0)
80    DO i = 1, nmax2      heavyy0 = heavyside(y0)
81      yypr(i) = beta + (grossism-beta)*fxm(i)      y0min = 2.*y0*heavyy0m - pis2
82    END DO      y0max = 2.*y0*heavyy0 + pis2
83    
84        fa = 999.999
85        fb = 999.999
86    
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
101              fhyp(i) = tanh(fa(i)/fb(i))
102           END IF
103    
104    DO i = 1, nmax2         IF (yt(i)==y0) fhyp(i) = 1.
105      yf(i) = yf(i-1) + yypr(i)*(yt(i)-yt(i-1))         IF (yt(i)==y0min .OR. yt(i)==y0max) fhyp(i) = -1.
106    END DO      END DO
107    
108    ! ****************************************************************      ! Calcul de beta
109    
110    ! .....   yuv  = 0.   si calcul des latitudes  aux pts.  U  .....      ffdy = 0.
   ! .....   yuv  = 0.5  si calcul des latitudes  aux pts.  V  .....  
111    
112    WRITE (6, 18)      DO i = 1, nmax2
113           ymoy = 0.5*(yt(i-1) + yt(i))
114           IF (ymoy<y0) THEN
115              fa(i) = tauy*(ymoy-y0 + dzoom/2.)
116              fb(i) = (ymoy-2.*y0*heavyy0m + pis2)*(y0-ymoy)
117           ELSE IF (ymoy>y0) THEN
118              fa(i) = tauy*(y0-ymoy + dzoom/2.)
119              fb(i) = (2.*y0*heavyy0-ymoy + pis2)*(ymoy-y0)
120           END IF
121    
122           IF (200.*fb(i)<-fa(i)) THEN
123              fxm(i) = -1.
124           ELSE IF (200.*fb(i)<fa(i)) THEN
125              fxm(i) = 1.
126           ELSE
127              fxm(i) = tanh(fa(i)/fb(i))
128           END IF
129           IF (ymoy==y0) fxm(i) = 1.
130           IF (ymoy==y0min .OR. yt(i)==y0max) fxm(i) = -1.
131           ffdy = ffdy + fxm(i)*(yt(i)-yt(i-1))
132        END DO
133    
134    DO ik = 1, 4      beta = (grossismy*ffdy-pi)/(ffdy-pi)
135    
136      IF (ik==1) THEN      IF (2. * beta - grossismy <= 0.) THEN
137        yuv = 0.         print *, 'Attention ! La valeur beta calculee dans la routine fyhyp ' &
138        jlat = jjm + 1              // 'est mauvaise. Modifier les valeurs de grossismy, tauy ou ' &
139      ELSE IF (ik==2) THEN              // 'dzoomy et relancer.'
140        yuv = 0.5         STOP 1
       jlat = jjm  
     ELSE IF (ik==3) THEN  
       yuv = 0.25  
       jlat = jjm  
     ELSE IF (ik==4) THEN  
       yuv = 0.75  
       jlat = jjm  
141      END IF      END IF
142    
143      yo1 = 0.      ! calcul de Ytprim
     DO j = 1, jlat  
       yo1 = 0.  
       ylon2 = -pis2 + pisjm*(float(j)+yuv-1.)  
       yfi = ylon2  
   
       DO it = nmax2, 0, -1  
         IF (yfi>=yf(it)) GO TO 350  
       END DO  
       it = 0  
 350   CONTINUE  
   
       yi = yt(it)  
       IF (it==nmax2) THEN  
         it = nmax2 - 1  
         yf(it+1) = pis2  
       END IF  
       ! .................................................................  
       ! ....  Interpolation entre  yi(it) et yi(it+1)   pour avoir Y(yi)  
       ! .....           et   Y'(yi)                             .....  
       ! .................................................................  
   
       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 iter = 1, 300  
         yi = yi - (yf1-yfi)/yprimin  
   
         IF (abs(yi-yo1)<=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  
       END DO  
       WRITE (6, *) ' Pas de solution ***** ', j, ylon2, iter  
       STOP 2  
 550   CONTINUE  
   
       yprimin = a1 + 2.*a2*yi + 3.*a3*yi*yi  
       yprim(j) = pi/(jjm*yprimin)  
       yvrai(j) = yi  
144    
145        DO i = 0, nmax2
146           ytprim(i) = beta + (grossismy-beta)*fhyp(i)
147      END DO      END DO
148    
149      DO j = 1, jlat - 1      ! Calcul de Yf
       IF (yvrai(j+1)<yvrai(j)) THEN  
         WRITE (6, *) ' PBS. avec  rlat(', j + 1, ') plus petit que rlat(', j, &  
           ')'  
         STOP 3  
       END IF  
     END DO  
   
     WRITE (6, *) 'Reorganisation des latitudes pour avoir entre - pi/2', &  
       ' et  pi/2 '  
   
     IF (ik==1) THEN  
       ypn = pis2  
       DO j = jlat, 1, -1  
         IF (yvrai(j)<=ypn) GO TO 1502  
       END DO  
 1502  CONTINUE  
   
       jpn = j  
       y00 = yvrai(jpn)  
       deply = pis2 - y00  
     END IF  
150    
151      DO j = 1, jjm + 1 - jpn      yf(0) = -pis2
152        ylatt(j) = -pis2 - y00 + yvrai(jpn+j-1)      DO i = 1, nmax2
153        yprimm(j) = yprim(jpn+j-1)         yypr(i) = beta + (grossismy-beta)*fxm(i)
154      END DO      END DO
155    
156      jjpn = jpn      DO i = 1, nmax2
157      IF (jlat==jjm) jjpn = jpn - 1         yf(i) = yf(i-1) + yypr(i)*(yt(i)-yt(i-1))
   
     DO j = 1, jjpn  
       ylatt(j+jjm+1-jpn) = yvrai(j) + deply  
       yprimm(j+jjm+1-jpn) = yprim(j)  
158      END DO      END DO
159    
160      ! ***********   Fin de la reorganisation     *************      ! 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           ! Fin de la reorganisation
258    
259           DO j = 1, jlat
260              ylat(j) = ylatt(jlat + 1-j)
261              yprim(j) = yprimm(jlat + 1-j)
262           END DO
263    
264           DO j = 1, jlat
265              yvrai(j) = ylat(j)*180./pi
266           END DO
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, jlat      DO j = 1, jjm
291        ylat(j) = ylatt(jlat+1-j)         ylat(j) = rlatu(j) - rlatu(j + 1)
       yprim(j) = yprimm(jlat+1-j)  
292      END DO      END DO
293        champmin = 1e12
294      DO j = 1, jlat      champmax = -1e12
295        yvrai(j) = ylat(j)*180./pi      DO j = 1, jjm
296           champmin = min(champmin, ylat(j))
297           champmax = max(champmax, ylat(j))
298      END DO      END DO
299        champmin = champmin*180./pi
300        champmax = champmax*180./pi
301    
302      IF (ik==1) THEN      DO j = 1, jjm
303        ! WRITE(6,18)         IF (rlatu1(j) <= rlatu2(j)) THEN
304        ! WRITE(6,*)  ' YLAT  en U   apres ( en  deg. ) '            print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j
305        ! WRITE(6,68) (yvrai(j),j=1,jlat)            STOP 13
306        ! c         WRITE(6,*) ' YPRIM '         ENDIF
307        ! c         WRITE(6,445) ( yprim(j),j=1,jlat)  
308           IF (rlatu2(j) <= rlatu(j+1)) THEN
309        DO j = 1, jlat            print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j
310          rrlatu(j) = ylat(j)            STOP 14
311          yyprimu(j) = yprim(j)         ENDIF
312        END DO  
313           IF (rlatu(j) <= rlatu1(j)) THEN
314      ELSE IF (ik==2) THEN            print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j
315        ! WRITE(6,18)            STOP 15
316        ! WRITE(6,*) ' YLAT   en V  apres ( en  deg. ) '         ENDIF
317        ! WRITE(6,68) (yvrai(j),j=1,jlat)  
318        ! c         WRITE(6,*)' YPRIM '         IF (rlatv(j) <= rlatu2(j)) THEN
319        ! c         WRITE(6,445) ( yprim(j),j=1,jlat)            print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j
320              STOP 16
321        DO j = 1, jlat         ENDIF
322          rrlatv(j) = ylat(j)  
323          yyprimv(j) = yprim(j)         IF (rlatv(j) >= rlatu1(j)) THEN
324        END DO            print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j
325              STOP 17
326      ELSE IF (ik==3) THEN         ENDIF
327        ! WRITE(6,18)  
328        ! WRITE(6,*)  ' YLAT  en U + 0.75  apres ( en  deg. ) '         IF (rlatv(j) >= rlatu(j)) THEN
329        ! WRITE(6,68) (yvrai(j),j=1,jlat)            print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j
330        ! c         WRITE(6,*) ' YPRIM '            STOP 18
331        ! c         WRITE(6,445) ( yprim(j),j=1,jlat)         ENDIF
332        ENDDO
333        DO j = 1, jlat  
334          rlatu2(j) = ylat(j)      print *, 'Latitudes'
335          yprimu2(j) = yprim(j)      print 3, champmin, champmax
336        END DO      print *, 'Si cette derniere est trop lache, modifiez les parametres'
337        print *, 'grossismy, tauy, dzoom pour Y et repasser ! '
338      ELSE IF (ik==4) THEN  
339        ! WRITE(6,18)  3   Format(1x, ' Au centre du zoom, la longueur de la maille est', &
340        ! WRITE(6,*)  ' YLAT en U + 0.25  apres ( en  deg. ) '           ' d environ ', f0.2, ' degres ', /, &
341        ! WRITE(6,68)(yvrai(j),j=1,jlat)           ' alors que la maille en dehors de la zone du zoom est ', &
342        ! c         WRITE(6,*) ' YPRIM '           "d'environ", f0.2, ' degres ')
       ! c         WRITE(6,68) ( yprim(j),j=1,jlat)  
   
       DO j = 1, jlat  
         rlatu1(j) = ylat(j)  
         yprimu1(j) = yprim(j)  
       END DO  
   
     END IF  
   
   END DO  
   
   WRITE (6, 18)  
   
   ! .....     fin de la boucle  do 5000 .....  
343    
344    DO j = 1, jjm    END SUBROUTINE fyhyp
     ylat(j) = rrlatu(j) - rrlatu(j+1)  
   END DO  
   champmin = 1.E12  
   champmax = -1.E12  
   DO j = 1, jjm  
     champmin = min(champmin, ylat(j))  
     champmax = max(champmax, ylat(j))  
   END DO  
   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 SUBROUTINE fyhyp  

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

  ViewVC Help
Powered by ViewVC 1.1.21