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

Annotation of /trunk/dyn3d/tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 37 - (hide 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 guez 37 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