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

Contents of /trunk/phylmd/coefkz2.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 254 - (show annotations)
Mon Feb 5 10:39:38 2018 UTC (6 years, 3 months ago) by guez
File size: 2791 byte(s)
Move Sources/* to root directory.
1 module coefkz2_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE coefkz2(nsrf, paprs, pplay, t, pcfm, pcfh)
8
9 ! J'introduit un peu de diffusion sauf dans les endroits o\`u une
10 ! forte inversion est pr\'esente. On peut dire que la diffusion
11 ! repr\'esente la convection peu profonde.
12
13 use indicesol, only: is_oce
14 use dimphy, only: klev
15 use SUPHEC_M, only: RCPD, rd
16
17 integer, intent(in):: nsrf ! indicateur de la nature du sol
18
19 REAL, intent(in):: paprs(:, :) ! (knon, klev+1)
20 ! pression a chaque intercouche (en Pa)
21
22 REAL, intent(in):: pplay(:, :) ! (knon, klev)
23 ! pression au milieu de chaque couche (en Pa)
24
25 REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K)
26
27 REAL, intent(out):: pcfm(:, 2:) ! (knon, 2:klev) coefficient vitesse
28
29 REAL, intent(out):: pcfh(:, 2:) ! (knon, 2:klev)
30 ! coefficient chaleur et humidite)
31
32 ! Local:
33
34 ! Quelques constantes et options:
35
36 REAL prandtl
37 PARAMETER (prandtl=0.4)
38 REAL kstable
39 PARAMETER (kstable=0.002)
40 REAL mixlen ! constante controlant longueur de melange
41 PARAMETER (mixlen=35.0)
42 REAL seuil ! au-dela l'inversion est consideree trop faible
43 PARAMETER (seuil=-0.02)
44
45 INTEGER knon ! nombre de points a traiter
46 INTEGER i, k
47 INTEGER invb(size(paprs, 1)) ! (knon)
48 REAL zl2(size(paprs, 1)) ! (knon)
49 REAL zdthmin(size(paprs, 1)) ! (knon)
50 real zdthdp
51
52 !----------------------------------------------------------
53
54 knon = size(paprs, 1)
55
56 ! Initialiser les sorties
57 DO k = 2, 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