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

Annotation of /trunk/Sources/dyn3d/Guide/init_tau2alpha.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 115 - (hide annotations)
Fri Sep 19 17:36:20 2014 UTC (9 years, 7 months ago) by guez
Original Path: trunk/dyn3d/Guide/init_tau2alpha.f
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 guez 115 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