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

Diff of /trunk/dyn3d/fxyhyper.f

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

revision 69 by guez, Thu Jan 6 17:52:19 2011 UTC revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC
# Line 1  Line 1 
1  SUBROUTINE fxyhyper (yzoom, grossy, dzoomy, tauy, xzoom, grossx, dzoomx, taux, &  module fxyhyper_m
      rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, yprimu2, &  
      rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, xprimp025)  
2    
3    ! From dyn3d/fxyhyper.F, v 1.1.1.1 2004/05/19 12:53:06    IMPLICIT NONE
4    
5    use dimens_m  contains
   use paramet_m  
6    
7    IMPLICIT NONE    SUBROUTINE fxyhyper(yzoom, grossy, dzoomy, tauy, xzoom, grossx, dzoomx, &
8           taux, rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, yprimu2, &
9           rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, xprimp025)
10    
11        ! From dyn3d/fxyhyper.F, version 1.1.1.1 2004/05/19 12:53:06
12    
13        USE dimens_m, ONLY: jjm
14        USE paramet_m, ONLY: iip1, jjp1
15    
16        ! Auteur : P. Le Van d'après formulations de R. Sadourny
17    
18        ! Cette procédure calcule les latitudes (routine fyhyp) et
19        ! longitudes (fxhyp) par des fonctions à tangente hyperbolique.
20    
21        ! Il y a 3 paramètres, en plus des coordonnées du centre du zoom (xzoom
22        ! et yzoom) :
23    
24        ! a) le grossissement du zoom : grossy (en y) et grossx (en x)
25        ! b) l' extension du zoom : dzoomy (en y) et dzoomx (en x)
26        ! c) la raideur de la transition du zoom : taux et tauy
27    
28        ! N. B. : il vaut mieux avoir : grossx * dzoomx < pi (radians) et
29        ! grossy * dzoomy < pi/2 (radians)
30    
31        ! Arguments
32    
33        REAL xzoom, yzoom, grossx, grossy, dzoomx, dzoomy, taux, tauy
34        REAL rlatu(jjp1), yprimu(jjp1), rlatv(jjm), yprimv(jjm)
35        real rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)
36        REAL rlonu(iip1), xprimu(iip1), rlonv(iip1), xprimv(iip1)
37        REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
38        double precision dxmin, dxmax, dymin, dymax
39    
40        ! Variables locales
41    
42        INTEGER i, j
43    
44        !----------------------------------------------------------
45    
46        CALL fyhyp(yzoom, grossy, dzoomy, tauy, rlatu, yprimu, rlatv, yprimv, &
47             rlatu2, yprimu2, rlatu1, yprimu1, dymin, dymax)
48        CALL fxhyp(xzoom, grossx, dzoomx, taux, rlonm025, xprimm025, rlonv, &
49             xprimv, rlonu, xprimu, rlonp025, xprimp025, dxmin, dxmax)
50    
51        DO i = 1, iip1
52           IF(rlonp025(i).LT.rlonv(i)) THEN
53              print *, ' Attention ! rlonp025 < rlonv', i
54              STOP 1
55           ENDIF
56    
57           IF(rlonv(i).LT.rlonm025(i)) THEN
58              print *, ' Attention ! rlonm025 > rlonv', i
59              STOP 1
60           ENDIF
61    
62           IF(rlonp025(i).GT.rlonu(i)) THEN
63              print *, ' Attention ! rlonp025 > rlonu', i
64              STOP 1
65           ENDIF
66        ENDDO
67    
68        print *, 'Test de coherence ok pour fx'
69    
70        DO j = 1, jjm
71           IF(rlatu1(j).LE.rlatu2(j)) THEN
72              print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j
73              STOP 13
74           ENDIF
75    
76           IF(rlatu2(j).LE.rlatu(j+1)) THEN
77              print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j
78              STOP 14
79           ENDIF
80    
81           IF(rlatu(j).LE.rlatu1(j)) THEN
82              print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j
83              STOP 15
84           ENDIF
85    
86           IF(rlatv(j).LE.rlatu2(j)) THEN
87              print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j
88              STOP 16
89           ENDIF
90    
91           IF(rlatv(j).ge.rlatu1(j)) THEN
92              print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j
93              STOP 17
94           ENDIF
95    
96           IF(rlatv(j).ge.rlatu(j)) THEN
97              print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j
98              STOP 18
99           ENDIF
100        ENDDO
101    
102        print *, 'Test de coherence ok pour fy'
103    
104    ! Auteur : P. Le Van.      print *, 'Latitudes'
105    ! d'apres formulations de R. Sadourny.      print 3, dymin, dymax
106        print *, 'Si cette derniere est trop lache, modifiez les parametres'
107        print *, 'grossism, tau, dzoom pour Y et repasser ! '
108    
109    ! Cette procédure calcule les latitudes (routine fyhyp) et      print *, ' Longitudes '
110    ! longitudes (fxhyp) par des fonctions a tangente hyperbolique.      print 3, dxmin, dxmax
111        print *, 'Si cette derniere est trop lache, modifiez les parametres'
112        print *, 'grossism, tau, dzoom pour Y et repasser ! '
113    
114    ! Il y a 3 parametres, en plus des coordonnees du centre du zoom (xzoom  3   Format(1x, ' Au centre du zoom, la longueur de la maille est', &
115    ! et yzoom) :           ' d environ ', f0.2, ' degres ', /, &
116             ' alors que la maille en dehors de la zone du zoom est ', &
117             "d'environ", f0.2, ' degres ')
118    
119    ! a) le grossissement du zoom : grossy (en y) et grossx (en x)    END SUBROUTINE fxyhyper
   ! b) l' extension du zoom : dzoomy (en y) et dzoomx (en x)  
   ! c) la raideur de la transition du zoom : taux et tauy  
   
   ! N.B : Il vaut mieux avoir : grossx * dzoomx < pi (radians)  
   ! et grossy * dzoomy < pi/2 (radians)  
   
   ! Arguments  
   
   REAL xzoom, yzoom, grossx, grossy, dzoomx, dzoomy, taux, tauy  
   REAL rlatu(jjp1), yprimu(jjp1), rlatv(jjm), yprimv(jjm)  
   real rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)  
   REAL rlonu(iip1), xprimu(iip1), rlonv(iip1), xprimv(iip1)  
   REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)  
   double precision dxmin, dxmax, dymin, dymax  
   
   ! variables locales  
   
   INTEGER i, j  
   
   !----------------------------------------------------------  
   
   CALL fyhyp(yzoom, grossy, dzoomy, tauy, &  
        rlatu, yprimu, rlatv, yprimv, rlatu2, yprimu2, rlatu1, yprimu1, &  
        dymin, dymax)  
   
   CALL fxhyp(xzoom, grossx, dzoomx, taux, rlonm025, xprimm025, rlonv, &  
        xprimv, rlonu, xprimu, rlonp025, xprimp025, dxmin, dxmax)  
   
   DO i = 1, iip1  
      IF(rlonp025(i).LT.rlonv(i)) THEN  
         print *, ' Attention ! rlonp025 < rlonv', i  
         STOP 1  
      ENDIF  
   
      IF(rlonv(i).LT.rlonm025(i)) THEN  
         print *, ' Attention ! rlonm025 > rlonv', i  
         STOP 1  
      ENDIF  
   
      IF(rlonp025(i).GT.rlonu(i)) THEN  
         print *, ' Attention ! rlonp025 > rlonu', i  
         STOP 1  
      ENDIF  
   ENDDO  
   
   print *, '   TEST DE COHERENCE OK POUR FX   '  
   
   DO j = 1, jjm  
      IF(rlatu1(j).LE.rlatu2(j)) THEN  
         print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j  
         STOP 13  
      ENDIF  
   
      IF(rlatu2(j).LE.rlatu(j+1)) THEN  
         print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j  
         STOP 14  
      ENDIF  
   
      IF(rlatu(j).LE.rlatu1(j)) THEN  
         print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j  
         STOP 15  
      ENDIF  
   
      IF(rlatv(j).LE.rlatu2(j)) THEN  
         print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j  
         STOP 16  
      ENDIF  
   
      IF(rlatv(j).ge.rlatu1(j)) THEN  
         print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j  
         STOP 17  
      ENDIF  
   
      IF(rlatv(j).ge.rlatu(j)) THEN  
         print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j  
         STOP 18  
      ENDIF  
   ENDDO  
   
   print *, '   TEST DE COHERENCE OK POUR FY   '  
   
   print *, ' Latitudes '  
   print 3, dymin, dymax  
   print *, ' Si cette derniere est trop lache, modifiez les parametres grossism, tau, dzoom pour Y et repasser ! '  
   
   print *, ' Longitudes '  
   print 3, dxmin, dxmax  
   print *, ' Si cette derniere est trop lache, modifiez les parametres grossism, tau, dzoom pour Y et repasser ! '  
   
 3 Format(1x, ' Au centre du zoom, la longueur de la maille est', &  
        ' d environ ', f0.2, ' degres ', /, &  
        ' alors que la maille en dehors de la zone du zoom est ', &  
        "d'environ", f0.2, ' degres ')  
120    
121  END SUBROUTINE fxyhyper  end module fxyhyper_m

Legend:
Removed from v.69  
changed lines
  Added in v.70

  ViewVC Help
Powered by ViewVC 1.1.21