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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 102 - (show 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 module tau2alpha_m
2
3 USE paramet_m, ONLY : iip1, jjp1
4 USE dimens_m, ONLY : jjm
5
6 IMPLICIT NONE
7
8 private iip1, jjp1, jjm
9
10 REAL dxdys(iip1, jjp1), dxdyu(iip1, jjp1), dxdyv(iip1, jjm)
11
12 contains
13
14 SUBROUTINE tau2alpha(type, pim, pjm, factt, taumin, taumax, alpha)
15
16 USE comgeom, ONLY : cu_2d, cv_2d, rlatu, rlatv
17 use conf_guide_m, only: lat_min_guide, lat_max_guide
18 use dump2d_m, only: dump2d
19 USE dimens_m, ONLY : iim
20 USE nr_util, ONLY : pi
21 USE serre, ONLY : clat, clon, grossismx, grossismy
22
23 ! arguments :
24 INTEGER type
25 INTEGER pim, pjm
26 REAL, intent(in):: factt, taumin, taumax
27 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 !------------------------------------------------------------
43
44 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 dxdyv(i, j) = 0.5*(dxdys(i, j)+dxdys(i, j + 1))
76 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