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

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

  ViewVC Help
Powered by ViewVC 1.1.21