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

Legend:
Removed from v.37  
changed lines
  Added in v.38

  ViewVC Help
Powered by ViewVC 1.1.21