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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 251 - (hide annotations)
Mon Jan 8 14:12:02 2018 UTC (6 years, 4 months ago) by guez
File size: 2791 byte(s)
Polishing.
1 guez 233 module coefkz2_m
2 guez 234
3 guez 233 IMPLICIT none
4 guez 51
5 guez 233 contains
6    
7 guez 251 SUBROUTINE coefkz2(nsrf, paprs, pplay, t, pcfm, pcfh)
8 guez 233
9 guez 251 ! 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 guez 51
13 guez 251 use indicesol, only: is_oce
14     use dimphy, only: klev
15     use SUPHEC_M, only: RCPD, rd
16 guez 51
17 guez 251 integer, intent(in):: nsrf ! indicateur de la nature du sol
18 guez 51
19 guez 251 REAL, intent(in):: paprs(:, :) ! (knon, klev+1)
20     ! pression a chaque intercouche (en Pa)
21 guez 51
22 guez 251 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 guez 51
27 guez 251 REAL, intent(out):: pcfm(:, 2:) ! (knon, 2:klev) coefficient vitesse
28 guez 51
29 guez 251 REAL, intent(out):: pcfh(:, 2:) ! (knon, 2:klev)
30     ! coefficient chaleur et humidite)
31 guez 51
32 guez 251 ! Local:
33    
34 guez 234 ! Quelques constantes et options:
35 guez 51
36 guez 234 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 guez 51
45 guez 251 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 guez 51
52 guez 234 !----------------------------------------------------------
53 guez 51
54 guez 251 knon = size(paprs, 1)
55    
56 guez 234 ! Initialiser les sorties
57 guez 235 DO k = 2, klev
58 guez 234 DO i = 1, knon
59     pcfm(i, k) = 0.0
60     pcfh(i, k) = 0.0
61     ENDDO
62     ENDDO
63 guez 51
64 guez 234 ! Chercher la zone d'inversion forte
65 guez 51
66 guez 234 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 guez 51
82 guez 234 ! 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 guez 51
97 guez 234 END SUBROUTINE coefkz2
98 guez 233
99     end module coefkz2_m

  ViewVC Help
Powered by ViewVC 1.1.21