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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 44 - (hide annotations)
Wed Apr 13 12:29:18 2011 UTC (13 years, 1 month ago) by guez
Original Path: trunk/libf/dyn3d/tau2alpha.f90
File size: 3949 byte(s)
Removed argument "pdteta" of "calfis", because it was not used.

Created module "conf_guide_m", containing procedure
"conf_guide". Moved module variables from "guide_m" to "conf_guide_m".

In module "getparam", removed "ini_getparam" and "fin_getparam" from
generic interface "getpar".

Created module variables in "tau2alpha_m" to replace common "comdxdy".

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

  ViewVC Help
Powered by ViewVC 1.1.21