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

Contents of /trunk/dyn3d/tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 108 - (show annotations)
Tue Sep 16 14:00:41 2014 UTC (9 years, 7 months ago) by guez
File size: 3842 byte(s)
Imported writefield from LMDZ. Close at the end of gcm the files which
were created by writefiled (not done in LMDZ).

Removed procedures for the output of Grads files. Removed calls to
dump2d. In guide, replaced calls to wrgrads by calls to writefield.

In vlspltqs, removed redundant programming of saturation
pressure. Call foeew from module FCTTRE instead.

Bug fix in interpre: size of w exceeding size of correponding actual
argument wg in advtrac.

In leapfrog, call guide until the end of the run, instead of six hours
before the end.

Bug fix in readsulfate_preind: type of arguments.

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

  ViewVC Help
Powered by ViewVC 1.1.21