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

Contents of /trunk/dyn3d/tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 39 - (show 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 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 USE nr_util, ONLY : pi
14 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