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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 39 - (hide annotations)
Tue Jan 25 15:11:05 2011 UTC (13 years, 3 months ago) by guez
Original Path: trunk/libf/dyn3d/tau2alpha.f90
File size: 3855 byte(s)
"pi" comes from "nr_util". Removed subroutine "initialize" in module
"comconst".

Copied the content of "fxy_sin.h" into "fxysinus", instead of getting
it from an "include" line. Removed file "fxy_sin.h".

"ps" has rank 2 in "gcm" and "dynetat0".

Assumed-shape for argument "q" of "integrd".

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

  ViewVC Help
Powered by ViewVC 1.1.21