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

Contents of /trunk/dyn3d/tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 37 - (show annotations)
Tue Dec 21 15:45:48 2010 UTC (13 years, 5 months ago) by guez
Original Path: trunk/libf/dyn3d/tau2alpha.f90
File size: 3933 byte(s)
Inlined procedure "pression".

Split "guide.f90" into "guide.f90" and "tau2alpha.f90". Split
"read_reanalyse.f" into single-procedure files in directory
"Read_reanalyse".

Useless copy of variables in "iniphysiq". Directly define module
variables in "gcm" and remove procedure "iniphysiq".

Added "pressure-altitude" in "test_disvert".

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

  ViewVC Help
Powered by ViewVC 1.1.21