/[lmdze]/trunk/Sources/phylmd/coefkz2.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/coefkz2.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 233 - (hide annotations)
Tue Nov 7 10:52:46 2017 UTC (6 years, 6 months ago) by guez
File size: 2569 byte(s)
Use separate variables for eddy diffusion coefficient and drag
coefficient in procedure coefkz (following LMDZ). coefkzmin only
computes eddy diffusion coefficient, not drag coefficient.

1 guez 233 module coefkz2_m
2    
3     IMPLICIT none
4 guez 51
5 guez 233 contains
6    
7     SUBROUTINE coefkz2(nsrf, knon, paprs, pplay, t, pcfm, pcfh)
8    
9 guez 51 ! J'introduit un peu de diffusion sauf dans les endroits
10     ! ou une forte inversion est presente
11     ! On peut dire qu'il represente la convection peu profonde
12    
13     use dimens_m
14     use indicesol
15     use dimphy
16 guez 57 use conf_gcm_m
17 guez 51 use SUPHEC_M
18    
19     ! Arguments:
20     ! nsrf-----input-I- indicateur de la nature du sol
21     ! knon-----input-I- nombre de points a traiter
22     ! paprs----input-R- pression a chaque intercouche (en Pa)
23     ! pplay----input-R- pression au milieu de chaque couche (en Pa)
24     ! t--------input-R- temperature (K)
25    
26     ! pcfm-----output-R- coefficients a calculer (vitesse)
27     ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)
28    
29     ! Arguments:
30    
31     INTEGER knon, nsrf
32     REAL paprs(klon, klev+1), pplay(klon, klev)
33     REAL t(klon, klev)
34    
35     REAL pcfm(klon, klev), pcfh(klon, klev)
36    
37     ! Quelques constantes et options:
38    
39     REAL prandtl
40     PARAMETER (prandtl=0.4)
41     REAL kstable
42     PARAMETER (kstable=0.002)
43     REAL mixlen ! constante controlant longueur de melange
44     PARAMETER (mixlen=35.0)
45     REAL seuil ! au-dela l'inversion est consideree trop faible
46     PARAMETER (seuil=-0.02)
47    
48     ! Variables locales:
49    
50     INTEGER i, k, invb(knon)
51     REAL zl2(knon)
52     REAL zdthmin(knon), zdthdp
53    
54     !----------------------------------------------------------
55    
56     ! Initialiser les sorties
57     DO k = 1, klev
58     DO i = 1, knon
59     pcfm(i, k) = 0.0
60     pcfh(i, k) = 0.0
61     ENDDO
62     ENDDO
63    
64     ! Chercher la zone d'inversion forte
65    
66     DO i = 1, knon
67     invb(i) = klev
68     zdthmin(i)=0.0
69     ENDDO
70     DO k = 2, klev/ 2 - 1
71     DO i = 1, knon
72     zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
73     - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
74     zdthdp = zdthdp * 100.
75     IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
76     zdthmin(i) = zdthdp
77     invb(i) = k
78     ENDIF
79     ENDDO
80     ENDDO
81    
82     ! Introduire une diffusion:
83     DO k = 2, klev
84     DO i = 1, knon
85     ! si on est sur ocean et s'il n'y a pas d'inversion ou si
86     ! l'inversion est trop faible:
87     IF ((nsrf.EQ.is_oce) .AND. &
88     ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN
89     zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &
90     /(paprs(i, 2)-paprs(i, klev+1))))**2
91     pcfm(i, k)= zl2(i)* kstable
92     pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different
93     ENDIF
94     ENDDO
95     ENDDO
96    
97     END SUBROUTINE coefkz2
98 guez 233
99     end module coefkz2_m

  ViewVC Help
Powered by ViewVC 1.1.21