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

Diff of /trunk/dyn3d/fxhyp.f

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

revision 91 by guez, Wed Mar 26 17:18:58 2014 UTC revision 120 by guez, Tue Jan 13 14:56:15 2015 UTC
# Line 4  module fxhyp_m Line 4  module fxhyp_m
4    
5  contains  contains
6    
7    SUBROUTINE fxhyp(xzoomdeg, grossism, dzooma, tau, rlonm025, xprimm025, &    SUBROUTINE fxhyp(xprimm025, rlonv, xprimv, rlonu, xprimu, xprimp025)
        rlonv, xprimv, rlonu, xprimu, rlonp025, xprimp025, champmin, champmax)  
8    
9      ! From LMDZ4/libf/dyn3d/fxhyp.F, version 1.2, 2005/06/03 09:11:32      ! From LMDZ4/libf/dyn3d/fxhyp.F, version 1.2, 2005/06/03 09:11:32
10      ! Author: P. Le Van      ! Author: P. Le Van, from formulas by R. Sadourny
11    
12      ! Calcule les longitudes et dérivées dans la grille du GCM pour      ! Calcule les longitudes et dérivées dans la grille du GCM pour
13      ! une fonction f(x) à tangente hyperbolique.      ! une fonction f(x) à dérivée tangente hyperbolique.
14    
15      ! On doit avoir grossism \times dzoom < pi (radians), en longitude.      ! On doit avoir grossismx \times dzoomx < pi (radians)
16    
17      USE dimens_m, ONLY: iim      ! Le premier point scalaire pour une grille regulière (grossismx =
18      USE paramet_m, ONLY: iip1      ! 1., taux=0., clon=0.) est à - 180 degrés.
   
     REAL, intent(in):: xzoomdeg  
   
     REAL, intent(in):: grossism  
     ! grossissement (= 2 si 2 fois, = 3 si 3 fois, etc.)  
   
     REAL, intent(in):: dzooma ! distance totale de la zone du zoom  
19    
20      REAL, intent(in):: tau      use coefpoly_m, only: coefpoly
21      ! raideur de la transition de l'intérieur à l'extérieur du zoom      USE dimens_m, ONLY: iim
22        use nr_util, only: pi_d, twopi_d, arth
23      ! arguments de sortie      use serre, only: clon, grossismx, dzoomx, taux
   
     REAL, dimension(iip1):: rlonm025, xprimm025, rlonv, xprimv  
     real, dimension(iip1):: rlonu, xprimu, rlonp025, xprimp025  
24    
25      DOUBLE PRECISION, intent(out):: champmin, champmax      REAL, intent(out):: xprimm025(:), rlonv(:), xprimv(:) ! (iim + 1)
26        real, intent(out):: rlonu(:), xprimu(:), xprimp025(:) ! (iim + 1)
27    
28      ! Local:      ! Local:
29    
30      INTEGER, PARAMETER:: nmax = 30000, nmax2 = 2*nmax      DOUBLE PRECISION champmin, champmax
31        real rlonm025(iim + 1), rlonp025(iim + 1)
32      LOGICAL, PARAMETER:: scal180 = .TRUE.      INTEGER, PARAMETER:: nmax = 30000, nmax2 = 2 * nmax
     ! scal180 = .TRUE. si on veut avoir le premier point scalaire pour  
     ! une grille reguliere (grossism = 1., tau=0., clon=0.) a  
     ! -180. degres. sinon scal180 = .FALSE.  
   
33      REAL dzoom      REAL dzoom
34      DOUBLE PRECISION xlon(iip1), xprimm(iip1), xuv      DOUBLE PRECISION xlon(iim + 1), xprimm(iim + 1), xuv
35      DOUBLE PRECISION xtild(0:nmax2)      DOUBLE PRECISION xtild(0:nmax2)
36      DOUBLE PRECISION fhyp(0:nmax2), ffdx, beta, Xprimt(0:nmax2)      DOUBLE PRECISION fhyp(nmax:nmax2), ffdx, beta, Xprimt(0:nmax2)
37      DOUBLE PRECISION Xf(0:nmax2), xxpr(0:nmax2)      DOUBLE PRECISION Xf(0:nmax2), xxpr(nmax2)
38      DOUBLE PRECISION xvrai(iip1), xxprim(iip1)      DOUBLE PRECISION xvrai(iim + 1), xxprim(iim + 1)
39      DOUBLE PRECISION pi, depi, epsilon, xzoom, fa, fb      DOUBLE PRECISION my_eps, xzoom, fa, fb
40      DOUBLE PRECISION Xf1, Xfi, a0, a1, a2, a3, xi2      DOUBLE PRECISION Xf1, Xfi, a0, a1, a2, a3, xi2
41      INTEGER i, it, ik, iter, ii, idif, ii1, ii2      INTEGER i, it, ik, iter, ii, idif, ii1, ii2
42      DOUBLE PRECISION xi, xo1, xmoy, xlon2, fxm, Xprimin      DOUBLE PRECISION xi, xo1, xmoy, fxm, Xprimin
43      DOUBLE PRECISION decalx      DOUBLE PRECISION decalx
44      INTEGER is2      INTEGER is2
     SAVE is2  
   
     DOUBLE PRECISION heavyside  
45    
46      !----------------------------------------------------------------------      !----------------------------------------------------------------------
47    
48      pi = 2. * ASIN(1.)      print *, "Call sequence information: fxhyp"
     depi = 2. * pi  
     epsilon = 1.e-3  
     xzoom = xzoomdeg * pi/180.  
49    
50      decalx = .75      my_eps = 1e-3
51      IF (grossism == 1. .AND. scal180) THEN      xzoom = clon * pi_d / 180.
        decalx = 1.  
     ENDIF  
   
     print *, 'FXHYP scal180, decalx', scal180, decalx  
52    
53      IF (dzooma.LT.1.) THEN      IF (grossismx == 1.) THEN
54         dzoom = dzooma * depi         decalx = 1.
55      ELSEIF (dzooma.LT. 25.) THEN      else
56         print *, "Le paramètre dzoomx pour fxhyp est trop petit. " &         decalx = 0.75
57              // "L'augmenter et relancer."      END IF
58    
59        IF (dzoomx < 1.) THEN
60           dzoom = dzoomx * twopi_d
61        ELSE IF (dzoomx < 25.) THEN
62           print *, "dzoomx pour fxhyp est trop petit."
63         STOP 1         STOP 1
64      ELSE      ELSE
65         dzoom = dzooma * pi/180.         dzoom = dzoomx * pi_d / 180.
66      ENDIF      END IF
67    
68      print *, ' xzoom(rad), grossism, tau, dzoom (rad):'      print *, 'dzoom (rad):', dzoom
     print *, xzoom, grossism, tau, dzoom  
69    
70      DO i = 0, nmax2      xtild = arth(- pi_d, twopi_d / nmax2, nmax2 + 1)
        xtild(i) = - pi + FLOAT(i) * depi /nmax2  
     ENDDO  
71    
72      DO i = nmax, nmax2      DO i = nmax, nmax2
73         fa = tau* (dzoom/2. - xtild(i))         fa = taux * (dzoom / 2. - xtild(i))
74         fb = xtild(i) * (pi - xtild(i))         fb = xtild(i) * (pi_d - xtild(i))
75    
76         IF (200.* fb .LT. - fa) THEN         IF (200. * fb < - fa) THEN
77            fhyp (i) = - 1.            fhyp(i) = - 1.
78         ELSEIF (200. * fb .LT. fa) THEN         ELSE IF (200. * fb < fa) THEN
79            fhyp (i) = 1.            fhyp(i) = 1.
80         ELSE         ELSE
81            IF (ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13) THEN            IF (ABS(fa) < 1e-13.AND.ABS(fb) < 1e-13) THEN
82               IF (200.*fb + fa.LT.1.e-10) THEN               IF (200. * fb + fa < 1e-10) THEN
83                  fhyp (i) = - 1.                  fhyp(i) = - 1.
84               ELSEIF (200.*fb - fa.LT.1.e-10) THEN               ELSE IF (200. * fb - fa < 1e-10) THEN
85                  fhyp (i) = 1.                  fhyp(i) = 1.
86               ENDIF               END IF
87            ELSE            ELSE
88               fhyp (i) = TANH (fa/fb)               fhyp(i) = TANH(fa / fb)
89            ENDIF            END IF
90         ENDIF         END IF
91    
92         IF (xtild(i) == 0.) fhyp(i) = 1.         IF (xtild(i) == 0.) fhyp(i) = 1.
93         IF (xtild(i) == pi) fhyp(i) = -1.         IF (xtild(i) == pi_d) fhyp(i) = -1.
94      ENDDO      END DO
95    
96      ! Calcul de beta      ! Calcul de beta
97    
# Line 121  contains Line 99  contains
99    
100      DO i = nmax + 1, nmax2      DO i = nmax + 1, nmax2
101         xmoy = 0.5 * (xtild(i-1) + xtild(i))         xmoy = 0.5 * (xtild(i-1) + xtild(i))
102         fa = tau* (dzoom/2. - xmoy)         fa = taux * (dzoom / 2. - xmoy)
103         fb = xmoy * (pi - xmoy)         fb = xmoy * (pi_d - xmoy)
104    
105         IF (200.* fb .LT. - fa) THEN         IF (200. * fb < - fa) THEN
106            fxm = - 1.            fxm = - 1.
107         ELSEIF (200. * fb .LT. fa) THEN         ELSE IF (200. * fb < fa) THEN
108            fxm = 1.            fxm = 1.
109         ELSE         ELSE
110            IF (ABS(fa).LT.1.e-13.AND.ABS(fb).LT.1.e-13) THEN            IF (ABS(fa) < 1e-13.AND.ABS(fb) < 1e-13) THEN
111               IF (200.*fb + fa.LT.1.e-10) THEN               IF (200. * fb + fa < 1e-10) THEN
112                  fxm = - 1.                  fxm = - 1.
113               ELSEIF (200.*fb - fa.LT.1.e-10) THEN               ELSE IF (200. * fb - fa < 1e-10) THEN
114                  fxm = 1.                  fxm = 1.
115               ENDIF               END IF
116            ELSE            ELSE
117               fxm = TANH (fa/fb)               fxm = TANH(fa / fb)
118            ENDIF            END IF
119         ENDIF         END IF
120    
121         IF (xmoy == 0.) fxm = 1.         IF (xmoy == 0.) fxm = 1.
122         IF (xmoy == pi) fxm = -1.         IF (xmoy == pi_d) fxm = -1.
123    
124         ffdx = ffdx + fxm * (xtild(i) - xtild(i-1))         ffdx = ffdx + fxm * (xtild(i) - xtild(i-1))
125      ENDDO      END DO
126    
127      beta = (grossism * ffdx - pi) / (ffdx - pi)      beta = (grossismx * ffdx - pi_d) / (ffdx - pi_d)
128    
129      IF (2.*beta - grossism <= 0.) THEN      IF (2. * beta - grossismx <= 0.) THEN
130         print *, 'Attention ! La valeur beta calculée dans fxhyp est mauvaise.'         print *, 'Attention ! La valeur beta calculée dans fxhyp est mauvaise.'
131         print *, 'Modifier les valeurs de grossismx, tau ou dzoomx et relancer.'         print *, 'Modifier les valeurs de grossismx, taux ou dzoomx et relancer.'
132         STOP 1         STOP 1
133      ENDIF      END IF
134    
135      ! calcul de Xprimt      ! calcul de Xprimt
136    
137      DO i = nmax, nmax2      DO i = nmax, nmax2
138         Xprimt(i) = beta + (grossism - beta) * fhyp(i)         Xprimt(i) = beta + (grossismx - beta) * fhyp(i)
139      ENDDO      END DO
140    
141      DO i = nmax + 1, nmax2      DO i = nmax + 1, nmax2
142         Xprimt(nmax2 - i) = Xprimt(i)         Xprimt(nmax2 - i) = Xprimt(i)
143      ENDDO      END DO
144    
145      ! Calcul de Xf      ! Calcul de Xf
146    
147      Xf(0) = - pi      Xf(0) = - pi_d
148    
149      DO i = nmax + 1, nmax2      DO i = nmax + 1, nmax2
150         xmoy = 0.5 * (xtild(i-1) + xtild(i))         xmoy = 0.5 * (xtild(i-1) + xtild(i))
151         fa = tau* (dzoom/2. - xmoy)         fa = taux * (dzoom / 2. - xmoy)
152         fb = xmoy * (pi - xmoy)         fb = xmoy * (pi_d - xmoy)
153    
154         IF (200.* fb .LT. - fa) THEN         IF (200. * fb < - fa) THEN
155            fxm = - 1.            fxm = - 1.
156         ELSEIF (200. * fb .LT. fa) THEN         ELSE IF (200. * fb < fa) THEN
157            fxm = 1.            fxm = 1.
158         ELSE         ELSE
159            fxm = TANH (fa/fb)            fxm = TANH(fa / fb)
160         ENDIF         END IF
161    
162         IF (xmoy == 0.) fxm = 1.         IF (xmoy == 0.) fxm = 1.
163         IF (xmoy == pi) fxm = -1.         IF (xmoy == pi_d) fxm = -1.
164         xxpr(i) = beta + (grossism - beta) * fxm         xxpr(i) = beta + (grossismx - beta) * fxm
165      ENDDO      END DO
166    
167      DO i = nmax + 1, nmax2      xxpr(:nmax) = xxpr(nmax2:nmax + 1:- 1)
        xxpr(nmax2-i + 1) = xxpr(i)  
     ENDDO  
168    
169      DO i=1, nmax2      DO i=1, nmax2
170         Xf(i) = Xf(i-1) + xxpr(i) * (xtild(i) - xtild(i-1))         Xf(i) = Xf(i-1) + xxpr(i) * (xtild(i) - xtild(i-1))
171      ENDDO      END DO
172    
173      ! xuv = 0. si calcul aux pts scalaires      is2 = 0
     ! xuv = 0.5 si calcul aux pts U  
174    
175      print *      loop_ik: DO ik = 1, 4
176           ! xuv = 0. si calcul aux points scalaires
177           ! xuv = 0.5 si calcul aux points U
178    
     DO ik = 1, 4  
179         IF (ik == 1) THEN         IF (ik == 1) THEN
180            xuv = -0.25            xuv = -0.25
181         ELSE IF (ik == 2) THEN         ELSE IF (ik == 2) THEN
# Line 208  contains Line 184  contains
184            xuv = 0.50            xuv = 0.50
185         ELSE IF (ik == 4) THEN         ELSE IF (ik == 4) THEN
186            xuv = 0.25            xuv = 0.25
187         ENDIF         END IF
188    
189         xo1 = 0.         xo1 = 0.
190    
191         ii1=1         IF (ik == 1 .and. grossismx == 1.) THEN
        ii2=iim  
        IF (ik == 1.and.grossism == 1.) THEN  
192            ii1 = 2            ii1 = 2
193            ii2 = iim + 1            ii2 = iim + 1
194         ENDIF         else
195              ii1=1
196              ii2=iim
197           END IF
198    
199         DO i = ii1, ii2         DO i = ii1, ii2
200            xlon2 = - pi + (FLOAT(i) + xuv - decalx) * depi / FLOAT(iim)            Xfi = - pi_d + (REAL(i) + xuv - decalx) * twopi_d / REAL(iim)
           Xfi = xlon2  
201    
202            it = nmax2            it = nmax2
203            do while (xfi < xf(it) .and. it >= 1)            do while (xfi < xf(it) .and. it >= 1)
# Line 234  contains Line 210  contains
210    
211            IF (it == nmax2) THEN            IF (it == nmax2) THEN
212               it = nmax2 -1               it = nmax2 -1
213               Xf(it + 1) = pi               Xf(it + 1) = pi_d
214            ENDIF            END IF
215    
216            ! Appel de la routine qui calcule les coefficients a0, a1,            ! Appel de la routine qui calcule les coefficients a0, a1,
217            ! a2, a3 d'un polynome de degre 3 qui passe par les points            ! a2, a3 d'un polynome de degre 3 qui passe par les points
# Line 245  contains Line 221  contains
221                 xtild(it), xtild(it + 1), a0, a1, a2, a3)                 xtild(it), xtild(it + 1), a0, a1, a2, a3)
222    
223            Xf1 = Xf(it)            Xf1 = Xf(it)
224            Xprimin = a1 + 2.* a2 * xi + 3.*a3 * xi *xi            Xprimin = a1 + 2. * a2 * xi + 3. * a3 * xi * xi
225    
226            iter = 1            iter = 1
227    
228            do            do
229               xi = xi - (Xf1 - Xfi)/ Xprimin               xi = xi - (Xf1 - Xfi) / Xprimin
230               IF (ABS(xi - xo1) <= epsilon .or. iter == 300) exit               IF (ABS(xi - xo1) <= my_eps .or. iter == 300) exit
231               xo1 = xi               xo1 = xi
232               xi2 = xi * xi               xi2 = xi * xi
233               Xf1 = a0 + a1 * xi + a2 * xi2 + a3 * xi2 * xi               Xf1 = a0 + a1 * xi + a2 * xi2 + a3 * xi2 * xi
234               Xprimin = a1 + 2.* a2 * xi + 3.* a3 * xi2               Xprimin = a1 + 2. * a2 * xi + 3. * a3 * xi2
235            end DO            end DO
236    
237            if (ABS(xi - xo1) > epsilon) then            if (ABS(xi - xo1) > my_eps) then
238               ! iter == 300               ! iter == 300
239               print *, 'Pas de solution.'               print *, 'Pas de solution.'
240               print *, i, xlon2               print *, i, xfi
241               STOP 1               STOP 1
242            end if            end if
243    
244              xxprim(i) = twopi_d / (REAL(iim) * Xprimin)
           xxprim(i) = depi/ (FLOAT(iim) * Xprimin)  
245            xvrai(i) = xi + xzoom            xvrai(i) = xi + xzoom
246         end DO         end DO
247    
248         IF (ik == 1.and.grossism == 1.) THEN         IF (ik == 1 .and. grossismx == 1.) THEN
249            xvrai(1) = xvrai(iip1)-depi            xvrai(1) = xvrai(iim + 1)-twopi_d
250            xxprim(1) = xxprim(iip1)            xxprim(1) = xxprim(iim + 1)
251         ENDIF         END IF
252    
253         DO i = 1, iim         DO i = 1, iim
254            xlon(i) = xvrai(i)            xlon(i) = xvrai(i)
255            xprimm(i) = xxprim(i)            xprimm(i) = xxprim(i)
256         ENDDO         END DO
257    
258         DO i = 1, iim -1         DO i = 1, iim -1
259            IF (xvrai(i + 1).LT. xvrai(i)) THEN            IF (xvrai(i + 1) < xvrai(i)) THEN
260               print *, 'Problème avec rlonu(', i + 1, &               print *, 'rlonu(', i + 1, ') < rlonu(', i, ')'
                   ') plus petit que rlonu(', i, ')'  
261               STOP 1               STOP 1
262            ENDIF            END IF
263         ENDDO         END DO
   
        ! Reorganisation des longitudes pour les avoir entre - pi et pi  
264    
265         champmin = 1.e12         IF (.not. (MINval(xvrai(:iim)) >= - pi_d - 0.1 &
266         champmax = -1.e12              .and. MAXval(xvrai(:iim)) <= pi_d + 0.1)) THEN
267         DO i = 1, iim            print *, &
268            champmin = MIN(champmin, xvrai(i))                 'Réorganisation des longitudes pour les avoir entre - pi et pi'
           champmax = MAX(champmax, xvrai(i))  
        ENDDO  
   
        IF (.not. (champmin >= -pi-0.10.and.champmax <= pi + 0.10)) THEN  
           print *, 'Reorganisation des longitudes pour avoir entre - pi', &  
                ' et pi '  
269    
270            IF (xzoom <= 0.) THEN            IF (xzoom <= 0.) THEN
271               IF (ik == 1) THEN               IF (ik == 1) THEN
272                  i = 1                  i = 1
273    
274                  do while (xvrai(i) < - pi .and. i < iim)                  do while (xvrai(i) < - pi_d .and. i < iim)
275                     i = i + 1                     i = i + 1
276                  end do                  end do
277    
278                  if (xvrai(i) < - pi) then                  if (xvrai(i) < - pi_d) then
279                     print *, ' PBS. 1 ! Xvrai plus petit que - pi ! '                     print *, 'Xvrai plus petit que - pi !'
280                     STOP 1                     STOP 1
281                  end if                  end if
282    
283                  is2 = i                  is2 = i
284               ENDIF               END IF
285    
286               IF (is2.NE. 1) THEN               IF (is2 /= 1) THEN
287                  DO ii = is2, iim                  DO ii = is2, iim
288                     xlon (ii-is2 + 1) = xvrai(ii)                     xlon(ii-is2 + 1) = xvrai(ii)
289                     xprimm(ii-is2 + 1) = xxprim(ii)                     xprimm(ii-is2 + 1) = xxprim(ii)
290                  ENDDO                  END DO
291                  DO ii = 1, is2 -1                  DO ii = 1, is2 -1
292                     xlon (ii + iim-is2 + 1) = xvrai(ii) + depi                     xlon(ii + iim-is2 + 1) = xvrai(ii) + twopi_d
293                     xprimm(ii + iim-is2 + 1) = xxprim(ii)                     xprimm(ii + iim-is2 + 1) = xxprim(ii)
294                  ENDDO                  END DO
295               ENDIF               END IF
296            ELSE            ELSE
297               IF (ik == 1) THEN               IF (ik == 1) THEN
298                  i = iim                  i = iim
299    
300                  do while (xvrai(i) > pi .and. i > 1)                  do while (xvrai(i) > pi_d .and. i > 1)
301                     i = i - 1                     i = i - 1
302                  end do                  end do
303    
304                  if (xvrai(i) > pi) then                  if (xvrai(i) > pi_d) then
305                     print *, ' PBS. 2 ! Xvrai plus grand que pi ! '                     print *, 'Xvrai plus grand que pi !'
306                     STOP 1                     STOP 1
307                  end if                  end if
308    
309                  is2 = i                  is2 = i
310               ENDIF               END IF
311    
312               idif = iim -is2               idif = iim -is2
313    
314               DO ii = 1, is2               DO ii = 1, is2
315                  xlon (ii + idif) = xvrai(ii)                  xlon(ii + idif) = xvrai(ii)
316                  xprimm(ii + idif) = xxprim(ii)                  xprimm(ii + idif) = xxprim(ii)
317               ENDDO               END DO
318    
319               DO ii = 1, idif               DO ii = 1, idif
320                  xlon (ii) = xvrai (ii + is2) - depi                  xlon(ii) = xvrai(ii + is2) - twopi_d
321                  xprimm(ii) = xxprim(ii + is2)                  xprimm(ii) = xxprim(ii + is2)
322               ENDDO               END DO
323            ENDIF            END IF
324         ENDIF         END IF
325    
326         ! Fin de la reorganisation         xlon(iim + 1) = xlon(1) + twopi_d
327           xprimm(iim + 1) = xprimm(1)
        xlon (iip1) = xlon(1) + depi  
        xprimm(iip1) = xprimm (1)  
328    
329         DO i = 1, iim + 1         DO i = 1, iim + 1
330            xvrai(i) = xlon(i)*180./pi            xvrai(i) = xlon(i) * 180. / pi_d
331         ENDDO         END DO
332    
333         IF (ik == 1) THEN         IF (ik == 1) THEN
334            DO i = 1, iim + 1            DO i = 1, iim + 1
335               rlonm025(i) = xlon(i)               rlonm025(i) = xlon(i)
336               xprimm025(i) = xprimm(i)               xprimm025(i) = xprimm(i)
337            ENDDO            END DO
338         ELSE IF (ik == 2) THEN         ELSE IF (ik == 2) THEN
339            DO i = 1, iim + 1            rlonv = xlon
340               rlonv(i) = xlon(i)            xprimv = xprimm
              xprimv(i) = xprimm(i)  
           ENDDO  
341         ELSE IF (ik == 3) THEN         ELSE IF (ik == 3) THEN
342            DO i = 1, iim + 1            DO i = 1, iim + 1
343               rlonu(i) = xlon(i)               rlonu(i) = xlon(i)
344               xprimu(i) = xprimm(i)               xprimu(i) = xprimm(i)
345            ENDDO            END DO
346         ELSE IF (ik == 4) THEN         ELSE IF (ik == 4) THEN
347            DO i = 1, iim + 1            rlonp025 = xlon
348               rlonp025(i) = xlon(i)            xprimp025 = xprimm
349               xprimp025(i) = xprimm(i)         END IF
350            ENDDO      end DO loop_ik
        ENDIF  
     end DO  
351    
352      print *      print *
353    
354      DO i = 1, iim      DO i = 1, iim
355         xlon(i) = rlonv(i + 1) - rlonv(i)         xlon(i) = rlonv(i + 1) - rlonv(i)
356      ENDDO      END DO
357      champmin = 1.e12      champmin = 1e12
358      champmax = -1.e12      champmax = -1e12
359      DO i = 1, iim      DO i = 1, iim
360         champmin = MIN(champmin, xlon(i))         champmin = MIN(champmin, xlon(i))
361         champmax = MAX(champmax, xlon(i))         champmax = MAX(champmax, xlon(i))
362      ENDDO      END DO
363      champmin = champmin * 180./pi      champmin = champmin * 180. / pi_d
364      champmax = champmax * 180./pi      champmax = champmax * 180. / pi_d
365    
366        DO i = 1, iim + 1
367           IF (rlonp025(i) < rlonv(i)) THEN
368              print *, ' Attention ! rlonp025 < rlonv', i
369              STOP 1
370           END IF
371    
372           IF (rlonv(i) < rlonm025(i)) THEN
373              print *, ' Attention ! rlonm025 > rlonv', i
374              STOP 1
375           END IF
376    
377           IF (rlonp025(i) > rlonu(i)) THEN
378              print *, 'rlonp025(', i, ') = ', rlonp025(i)
379              print *, "> rlonu(", i, ") = ", rlonu(i)
380              STOP 1
381           END IF
382        END DO
383    
384        print *, ' Longitudes '
385        print 3, champmin, champmax
386    
387    3   Format(1x, ' Au centre du zoom, la longueur de la maille est', &
388             ' d environ ', f0.2, ' degres ', /, &
389             ' alors que la maille en dehors de la zone du zoom est ', &
390             "d'environ ", f0.2, ' degres ')
391    
392    END SUBROUTINE fxhyp    END SUBROUTINE fxhyp
393    

Legend:
Removed from v.91  
changed lines
  Added in v.120

  ViewVC Help
Powered by ViewVC 1.1.21