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

Contents of /trunk/dyn3d/Guide/init_tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 115 - (show annotations)
Fri Sep 19 17:36:20 2014 UTC (9 years, 8 months ago) by guez
File size: 2552 byte(s)
Extracted code from tau2alpha for first call into new procedure
init_tau2alpha. dxdys, dxdyu, dxdyv are now local variables if guide
computed by init_tau2alpha. This allows us to remove terrible argument
type of tau2alpha: we just give to tau2alpha the right dxdy and
rlat.

In module conf_guide_m, changed default values of tau_min_*, because
0.02 is too small for the default daystep = 240, iperiod = 5. Changed
default values of guide_[uv] to false. Moved variable ok_guide from
conf_gcm_m to conf_guide_m, ok_guide is no longer an input parameter,
it is computed from guide_*. Had then to move test on ok_guide and
day_step from conf_gcm_m to conf_guide_m. Added checks on input
nudging parameters in procedure conf_guide. Upgraded variable factt to
module conf_guide_m in order to check nudging parameters. Bug fix:
variable guide_q was not in namelist conf_guide_nml.

Removed unused variables aire_min, aire_max of MODULE guide_m.

Moved the call to conf_guide from guide to gcm. This was needed to
define ok_guide before getting into guide (since ok_guide is no longer
in conf_gcm_m). Moved test on grossismx and grossismy from tau2alpha
to guide. It is clearer now that only tau_max is used for a regular
grid, and we do not have to repeat this test in each call to
tau2alpha. In guide, we only call writefield when alpha is not a
constant.

1 module init_tau2alpha_m
2
3 IMPLICIT NONE
4
5 REAL dxdy_min, dxdy_max, gamma
6
7 contains
8
9 SUBROUTINE init_tau2alpha(dxdys, dxdyu, dxdyv)
10
11 USE comgeom, ONLY: cu_2d, cv_2d, rlatu
12 use conf_guide_m, only: guide_u, guide_v
13 USE dimens_m, ONLY: iim, jjm
14 USE paramet_m, ONLY: iip1, jjp1
15 USE serre, ONLY: clat, clon, grossismx, grossismy
16 use writefield_m, only: writefield
17
18 REAL, intent(out):: dxdys(iip1, jjp1), dxdyu(iip1, jjp1), dxdyv(iip1, jjm)
19
20 ! Local:
21 INTEGER i, j, ilon, ilat
22 REAL dx(iip1, jjp1), dy(iip1, jjp1)
23
24 !------------------------------------------------------------
25
26 PRINT *, 'Call sequence information: init_tau2alpha'
27
28 DO j = 2, jjm
29 DO i = 2, iip1
30 dx(i, j) = 0.5 * (cu_2d(i - 1, j) + cu_2d(i, j)) / cos(rlatu(j))
31 END DO
32 dx(1, j) = dx(iip1, j)
33 END DO
34 DO j = 2, jjm
35 DO i = 1, iip1
36 dy(i, j) = 0.5 * (cv_2d(i, j - 1) + cv_2d(i, j))
37 END DO
38 END DO
39 DO i = 1, iip1
40 dx(i, 1) = dx(i, 2)
41 dx(i, jjp1) = dx(i, jjm)
42 dy(i, 1) = dy(i, 2)
43 dy(i, jjp1) = dy(i, jjm)
44 END DO
45
46 DO j = 1, jjp1
47 DO i = 1, iip1
48 dxdys(i, j) = sqrt(dx(i, j)**2 + dy(i, j)**2)
49 END DO
50 END DO
51 CALL writefield("dxdys", dxdys)
52
53 if (guide_u) then
54 DO j = 1, jjp1
55 DO i = 1, iim
56 dxdyu(i, j) = 0.5 * (dxdys(i, j) + dxdys(i + 1, j))
57 END DO
58 dxdyu(iip1, j) = dxdyu(1, j)
59 END DO
60 end if
61
62 if (guide_v) then
63 DO j = 1, jjm
64 DO i = 1, iip1
65 dxdyv(i, j) = 0.5 * (dxdys(i, j) + dxdys(i, j + 1))
66 END DO
67 END DO
68 end if
69
70 ! coordonnees du centre du zoom
71 CALL coordij(clon, clat, ilon, ilat)
72 ! aire de la maille au centre du zoom
73 dxdy_min = dxdys(ilon, ilat)
74
75 ! dxdy maximal de la maille :
76 dxdy_max = 0.
77 DO j = 1, jjp1
78 DO i = 1, iip1
79 dxdy_max = max(dxdy_max, dxdys(i, j))
80 END DO
81 END DO
82
83 IF (abs(grossismx - 1.) < 0.1 .OR. abs(grossismy - 1.) < 0.1) THEN
84 PRINT *, 'Attention : modèle peu zoomé.'
85 PRINT *, 'On prend une constante de guidage constante.'
86 ELSE
87 gamma = (dxdy_max - 2. * dxdy_min) / (dxdy_max - dxdy_min)
88 IF (gamma < 1E-5) THEN
89 PRINT *, '(dxdy_max - 2. * dxdy_min) / (dxdy_max - dxdy_min) ' &
90 // '< 1e-5'
91 STOP 1
92 END IF
93 gamma = log(0.5) / log(gamma)
94 PRINT *, 'gamma=', gamma
95 END IF
96
97 END SUBROUTINE init_tau2alpha
98
99 end module init_tau2alpha_m

  ViewVC Help
Powered by ViewVC 1.1.21