/[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 127 - (hide annotations)
Tue Feb 10 17:58:56 2015 UTC (9 years, 3 months ago) by guez
Original Path: trunk/dyn3d/Guide/init_tau2alpha.f
File size: 2585 byte(s)
clon and clat from module serre are now in rad instead of
degrees. They are only used in rad, so we do only one conversion when
we read them.

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

  ViewVC Help
Powered by ViewVC 1.1.21