/[lmdze]/trunk/dyn3d/Guide/tau2alpha.f
ViewVC logotype

Annotation of /trunk/dyn3d/Guide/tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 102 - (hide annotations)
Tue Jul 15 13:43:24 2014 UTC (9 years, 10 months ago) by guez
Original Path: trunk/dyn3d/tau2alpha.f
File size: 4001 byte(s)
Removed unused file "condsurf.f" (only useful for ocean slab).

day_step must be a multiple of 4 * iperiod if ok_guide.

Changed type of variable online of module conf_guide_m from integer to
logical. Value -1 was not useful, equivalent to not ok_guide.

Removed argument masse of procedure guide. masse is kept consistent
with ps throughout the run. masse need only be computed again just
after ps has been modified. In prodecure guide, replaced use of
remanent variable first by test on itau. Replaced test on variable
"test" by test on integer values.

In leapfrog, for the call to guide, replaced test on real values by
test on integer values.

Bug fix in tau2alpha: computation of dxdyv (following LMDZ revision 1040).

In procedure wrgrads, replaced badly chosen argument name "if" by i_f.

1 guez 37 module tau2alpha_m
2    
3 guez 44 USE paramet_m, ONLY : iip1, jjp1
4     USE dimens_m, ONLY : jjm
5    
6 guez 37 IMPLICIT NONE
7    
8 guez 44 private iip1, jjp1, jjm
9    
10     REAL dxdys(iip1, jjp1), dxdyu(iip1, jjp1), dxdyv(iip1, jjm)
11 guez 37
12     contains
13    
14     SUBROUTINE tau2alpha(type, pim, pjm, factt, taumin, taumax, alpha)
15    
16 guez 102 USE comgeom, ONLY : cu_2d, cv_2d, rlatu, rlatv
17 guez 83 use conf_guide_m, only: lat_min_guide, lat_max_guide
18 guez 102 use dump2d_m, only: dump2d
19 guez 44 USE dimens_m, ONLY : iim
20 guez 39 USE nr_util, ONLY : pi
21 guez 37 USE serre, ONLY : clat, clon, grossismx, grossismy
22    
23     ! arguments :
24     INTEGER type
25     INTEGER pim, pjm
26 guez 44 REAL, intent(in):: factt, taumin, taumax
27 guez 37 REAL dxdy_, alpha(pim, pjm)
28     REAL dxdy_min, dxdy_max
29    
30     ! local :
31     REAL alphamin, alphamax, gamma, xi
32     SAVE gamma
33     INTEGER i, j, ilon, ilat
34    
35     LOGICAL first
36     SAVE first
37     DATA first/ .TRUE./
38    
39     REAL zdx(iip1, jjp1), zdy(iip1, jjp1)
40     REAL zlat
41    
42 guez 44 !------------------------------------------------------------
43    
44 guez 37 IF (first) THEN
45     DO j = 2, jjm
46     DO i = 2, iip1
47     zdx(i, j) = 0.5*(cu_2d(i-1, j)+cu_2d(i, j))/cos(rlatu(j))
48     END DO
49     zdx(1, j) = zdx(iip1, j)
50     END DO
51     DO j = 2, jjm
52     DO i = 1, iip1
53     zdy(i, j) = 0.5*(cv_2d(i, j-1)+cv_2d(i, j))
54     END DO
55     END DO
56     DO i = 1, iip1
57     zdx(i, 1) = zdx(i, 2)
58     zdx(i, jjp1) = zdx(i, jjm)
59     zdy(i, 1) = zdy(i, 2)
60     zdy(i, jjp1) = zdy(i, jjm)
61     END DO
62     DO j = 1, jjp1
63     DO i = 1, iip1
64     dxdys(i, j) = sqrt(zdx(i, j)*zdx(i, j)+zdy(i, j)*zdy(i, j))
65     END DO
66     END DO
67     DO j = 1, jjp1
68     DO i = 1, iim
69     dxdyu(i, j) = 0.5*(dxdys(i, j)+dxdys(i+1, j))
70     END DO
71     dxdyu(iip1, j) = dxdyu(1, j)
72     END DO
73     DO j = 1, jjm
74     DO i = 1, iip1
75 guez 102 dxdyv(i, j) = 0.5*(dxdys(i, j)+dxdys(i, j + 1))
76 guez 37 END DO
77     END DO
78    
79     CALL dump2d(iip1, jjp1, dxdys, 'DX2DY2 SCAL ')
80     CALL dump2d(iip1, jjp1, dxdyu, 'DX2DY2 U ')
81     CALL dump2d(iip1, jjp1, dxdyv, 'DX2DY2 v ')
82    
83     ! coordonnees du centre du zoom
84     CALL coordij(clon, clat, ilon, ilat)
85     ! aire de la maille au centre du zoom
86     dxdy_min = dxdys(ilon, ilat)
87     ! dxdy maximale de la maille
88     dxdy_max = 0.
89     DO j = 1, jjp1
90     DO i = 1, iip1
91     dxdy_max = max(dxdy_max, dxdys(i, j))
92     END DO
93     END DO
94    
95     IF (abs(grossismx-1.)<0.1 .OR. abs(grossismy-1.)<0.1) THEN
96     PRINT *, 'ATTENTION modele peu zoome'
97     PRINT *, 'ATTENTION on prend une constante de guidage cste'
98     gamma = 0.
99     ELSE
100     gamma = (dxdy_max-2.*dxdy_min)/(dxdy_max-dxdy_min)
101     PRINT *, 'gamma=', gamma
102     IF (gamma<1.E-5) THEN
103     PRINT *, 'gamma =', gamma, '<1e-5'
104     STOP
105     END IF
106     PRINT *, 'gamma=', gamma
107     gamma = log(0.5)/log(gamma)
108     END IF
109     END IF
110    
111     alphamin = factt/taumax
112     alphamax = factt/taumin
113    
114     DO j = 1, pjm
115     DO i = 1, pim
116     IF (type==1) THEN
117     dxdy_ = dxdys(i, j)
118     zlat = rlatu(j)*180./pi
119     ELSE IF (type==2) THEN
120     dxdy_ = dxdyu(i, j)
121     zlat = rlatu(j)*180./pi
122     ELSE IF (type==3) THEN
123     dxdy_ = dxdyv(i, j)
124     zlat = rlatv(j)*180./pi
125     END IF
126     IF (abs(grossismx-1.)<0.1 .OR. abs(grossismy-1.)<0.1) THEN
127     ! pour une grille reguliere, xi=xxx**0=1 -> alpha=alphamin
128     alpha(i, j) = alphamin
129     ELSE
130     xi = ((dxdy_max-dxdy_)/(dxdy_max-dxdy_min))**gamma
131     xi = min(xi, 1.)
132     IF (lat_min_guide<=zlat .AND. zlat<=lat_max_guide) THEN
133     alpha(i, j) = xi*alphamin + (1.-xi)*alphamax
134     ELSE
135     alpha(i, j) = 0.
136     END IF
137     END IF
138     END DO
139     END DO
140    
141     END SUBROUTINE tau2alpha
142    
143     end module tau2alpha_m

  ViewVC Help
Powered by ViewVC 1.1.21