/[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

revision 120 by guez, Tue Jan 13 14:56:15 2015 UTC revision 131 by guez, Fri Feb 27 16:44:07 2015 UTC
# Line 13  contains Line 13  contains
13      ! Calcule les latitudes et dérivées dans la grille du GCM pour une      ! Calcule les latitudes et dérivées dans la grille du GCM pour une
14      ! fonction f(y) à dérivée tangente hyperbolique.      ! fonction f(y) à dérivée tangente hyperbolique.
15    
16      ! Nota bene : il vaut mieux avoir grossismy * dzoomy < pi / 2 (radians).      ! Il vaut mieux avoir : grossismy * dzoom < pi / 2
17    
18      use coefpoly_m, only: coefpoly      use coefpoly_m, only: coefpoly
19      USE dimens_m, only: jjm      USE dimens_m, only: jjm
20        use heavyside_m, only: heavyside
21      use serre, only: clat, grossismy, dzoomy, tauy      use serre, only: clat, grossismy, dzoomy, tauy
22    
23      REAL, intent(out):: rlatu(jjm + 1), yyprimu(jjm + 1)      REAL, intent(out):: rlatu(jjm + 1), yyprimu(jjm + 1)
# Line 37  contains Line 38  contains
38      DOUBLE PRECISION, save:: yf(0:nmax2)      DOUBLE PRECISION, save:: yf(0:nmax2)
39      DOUBLE PRECISION yypr(0:nmax2)      DOUBLE PRECISION yypr(0:nmax2)
40      DOUBLE PRECISION yvrai(jjm + 1), yprimm(jjm + 1), ylatt(jjm + 1)      DOUBLE PRECISION yvrai(jjm + 1), yprimm(jjm + 1), ylatt(jjm + 1)
41      DOUBLE PRECISION pi, pis2, epsilon, y0, pisjm      DOUBLE PRECISION pi, pis2, epsilon, pisjm
42      DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin      DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin
43      DOUBLE PRECISION yfi, yf1, ffdy      DOUBLE PRECISION yfi, yf1, ffdy
44      DOUBLE PRECISION ypn, deply, y00      DOUBLE PRECISION ypn, deply, y00
# Line 50  contains Line 51  contains
51      DOUBLE PRECISION fa(0:nmax2), fb(0:nmax2)      DOUBLE PRECISION fa(0:nmax2), fb(0:nmax2)
52      REAL y0min, y0max      REAL y0min, y0max
53    
     DOUBLE PRECISION heavyside  
   
54      !-------------------------------------------------------------------      !-------------------------------------------------------------------
55    
56      print *, "Call sequence information: fyhyp"      print *, "Call sequence information: fyhyp"
# Line 60  contains Line 59  contains
59      pis2 = pi/2.      pis2 = pi/2.
60      pisjm = pi/real(jjm)      pisjm = pi/real(jjm)
61      epsilon = 1e-3      epsilon = 1e-3
62      y0 = clat*pi/180.      dzoom = dzoomy*pi
   
     IF (dzoomy<1.) THEN  
        dzoom = dzoomy*pi  
     ELSE IF (dzoomy<12.) THEN  
        print *, "Le paramètre dzoomy pour fyhyp est trop petit. L'augmenter " &  
             // "et relancer."  
        STOP 1  
     ELSE  
        dzoom = dzoomy * pi/180.  
     END IF  
   
63      print *, 'yzoom(rad), grossismy, tauy, dzoom (rad):'      print *, 'yzoom(rad), grossismy, tauy, dzoom (rad):'
64      print *, y0, grossismy, tauy, dzoom      print *, clat, grossismy, tauy, dzoom
65    
66      DO i = 0, nmax2      DO i = 0, nmax2
67         yt(i) = -pis2 + real(i)*pi/nmax2         yt(i) = -pis2 + real(i)*pi/nmax2
68      END DO      END DO
69    
70      heavyy0m = heavyside(-y0)      heavyy0m = heavyside(-clat)
71      heavyy0 = heavyside(y0)      heavyy0 = heavyside(clat)
72      y0min = 2.*y0*heavyy0m - pis2      y0min = 2.*clat*heavyy0m - pis2
73      y0max = 2.*y0*heavyy0 + pis2      y0max = 2.*clat*heavyy0 + pis2
74    
75      fa = 999.999      fa = 999.999
76      fb = 999.999      fb = 999.999
77    
78      DO i = 0, nmax2      DO i = 0, nmax2
79         IF (yt(i)<y0) THEN         IF (yt(i)<clat) THEN
80            fa(i) = tauy*(yt(i)-y0 + dzoom/2.)            fa(i) = tauy*(yt(i)-clat + dzoom/2.)
81            fb(i) = (yt(i)-2.*y0*heavyy0m + pis2)*(y0-yt(i))            fb(i) = (yt(i)-2.*clat*heavyy0m + pis2)*(clat-yt(i))
82         ELSE IF (yt(i)>y0) THEN         ELSE IF (yt(i)>clat) THEN
83            fa(i) = tauy*(y0-yt(i) + dzoom/2.)            fa(i) = tauy*(clat-yt(i) + dzoom/2.)
84            fb(i) = (2.*y0*heavyy0-yt(i) + pis2)*(yt(i)-y0)            fb(i) = (2.*clat*heavyy0-yt(i) + pis2)*(yt(i)-clat)
85         END IF         END IF
86    
87         IF (200.*fb(i)<-fa(i)) THEN         IF (200.*fb(i)<-fa(i)) THEN
# Line 104  contains Line 92  contains
92            fhyp(i) = tanh(fa(i)/fb(i))            fhyp(i) = tanh(fa(i)/fb(i))
93         END IF         END IF
94    
95         IF (yt(i)==y0) fhyp(i) = 1.         IF (yt(i)==clat) fhyp(i) = 1.
96         IF (yt(i)==y0min .OR. yt(i)==y0max) fhyp(i) = -1.         IF (yt(i)==y0min .OR. yt(i)==y0max) fhyp(i) = -1.
97      END DO      END DO
98    
# Line 114  contains Line 102  contains
102    
103      DO i = 1, nmax2      DO i = 1, nmax2
104         ymoy = 0.5*(yt(i-1) + yt(i))         ymoy = 0.5*(yt(i-1) + yt(i))
105         IF (ymoy<y0) THEN         IF (ymoy<clat) THEN
106            fa(i) = tauy*(ymoy-y0 + dzoom/2.)            fa(i) = tauy*(ymoy-clat + dzoom/2.)
107            fb(i) = (ymoy-2.*y0*heavyy0m + pis2)*(y0-ymoy)            fb(i) = (ymoy-2.*clat*heavyy0m + pis2)*(clat-ymoy)
108         ELSE IF (ymoy>y0) THEN         ELSE IF (ymoy>clat) THEN
109            fa(i) = tauy*(y0-ymoy + dzoom/2.)            fa(i) = tauy*(clat-ymoy + dzoom/2.)
110            fb(i) = (2.*y0*heavyy0-ymoy + pis2)*(ymoy-y0)            fb(i) = (2.*clat*heavyy0-ymoy + pis2)*(ymoy-clat)
111         END IF         END IF
112    
113         IF (200.*fb(i)<-fa(i)) THEN         IF (200.*fb(i)<-fa(i)) THEN
# Line 129  contains Line 117  contains
117         ELSE         ELSE
118            fxm(i) = tanh(fa(i)/fb(i))            fxm(i) = tanh(fa(i)/fb(i))
119         END IF         END IF
120         IF (ymoy==y0) fxm(i) = 1.         IF (ymoy==clat) fxm(i) = 1.
121         IF (ymoy==y0min .OR. yt(i)==y0max) fxm(i) = -1.         IF (ymoy==y0min .OR. yt(i)==y0max) fxm(i) = -1.
122         ffdy = ffdy + fxm(i)*(yt(i)-yt(i-1))         ffdy = ffdy + fxm(i)*(yt(i)-yt(i-1))
123      END DO      END DO

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

  ViewVC Help
Powered by ViewVC 1.1.21