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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 248 - (show annotations)
Fri Jan 5 16:40:13 2018 UTC (6 years, 4 months ago) by guez
File size: 2788 byte(s)
Move the call to clcdrag up from coefkz to clmain (folllowing
LMDZ). As both clcdrag and coefkz need zgeop, also move the
computation of zgeop from coefkz to clmain.

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
32 integer, intent(in):: nsrf
33 REAL, intent(in):: paprs(klon, klev+1), pplay(klon, klev)
34 REAL, intent(in):: t(klon, klev)
35
36 REAL, intent(out):: pcfm(:, 2:), pcfh(:, 2:) ! (knon, 2:klev)
37
38 ! Quelques constantes et options:
39
40 REAL prandtl
41 PARAMETER (prandtl=0.4)
42 REAL kstable
43 PARAMETER (kstable=0.002)
44 REAL mixlen ! constante controlant longueur de melange
45 PARAMETER (mixlen=35.0)
46 REAL seuil ! au-dela l'inversion est consideree trop faible
47 PARAMETER (seuil=-0.02)
48
49 ! Variables locales:
50
51 INTEGER i, k, invb(knon)
52 REAL zl2(knon)
53 REAL zdthmin(knon), zdthdp
54
55 !----------------------------------------------------------
56
57 ! Initialiser les sorties
58 DO k = 2, klev
59 DO i = 1, knon
60 pcfm(i, k) = 0.0
61 pcfh(i, k) = 0.0
62 ENDDO
63 ENDDO
64
65 ! Chercher la zone d'inversion forte
66
67 DO i = 1, knon
68 invb(i) = klev
69 zdthmin(i)=0.0
70 ENDDO
71 DO k = 2, klev/ 2 - 1
72 DO i = 1, knon
73 zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
74 - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
75 zdthdp = zdthdp * 100.
76 IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
77 zdthmin(i) = zdthdp
78 invb(i) = k
79 ENDIF
80 ENDDO
81 ENDDO
82
83 ! Introduire une diffusion:
84 DO k = 2, klev
85 DO i = 1, knon
86 ! si on est sur ocean et s'il n'y a pas d'inversion ou si
87 ! l'inversion est trop faible:
88 IF ((nsrf.EQ.is_oce) .AND. &
89 ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN
90 zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &
91 /(paprs(i, 2)-paprs(i, klev+1))))**2
92 pcfm(i, k)= zl2(i)* kstable
93 pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different
94 ENDIF
95 ENDDO
96 ENDDO
97
98 END SUBROUTINE coefkz2
99
100 end module coefkz2_m

  ViewVC Help
Powered by ViewVC 1.1.21