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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 234 - (show annotations)
Tue Nov 7 12:20:42 2017 UTC (6 years, 5 months ago) by guez
File size: 2731 byte(s)
Almost nothing.
1 module coefkz2_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE coefkz2(nsrf, knon, paprs, pplay, t, pcfm, pcfh)
8
9 ! 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 use conf_gcm_m
17 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, intent(out):: pcfm(:, :), pcfh(:, :) ! (knon, 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
99 end module coefkz2_m

  ViewVC Help
Powered by ViewVC 1.1.21