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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 248 - (hide annotations)
Fri Jan 5 16:40:13 2018 UTC (6 years, 5 months ago) by guez
Original Path: trunk/Sources/phylmd/coefkz2.f
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 guez 233 module coefkz2_m
2 guez 234
3 guez 233 IMPLICIT none
4 guez 51
5 guez 233 contains
6    
7     SUBROUTINE coefkz2(nsrf, knon, paprs, pplay, t, pcfm, pcfh)
8    
9 guez 234 ! 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 guez 51
13 guez 234 use dimens_m
14     use indicesol
15     use dimphy
16     use conf_gcm_m
17     use SUPHEC_M
18 guez 51
19 guez 234 ! 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 guez 51
26 guez 234 ! pcfm-----output-R- coefficients a calculer (vitesse)
27     ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)
28 guez 51
29 guez 234 ! Arguments:
30 guez 51
31 guez 248 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 guez 51
36 guez 235 REAL, intent(out):: pcfm(:, 2:), pcfh(:, 2:) ! (knon, 2:klev)
37 guez 51
38 guez 234 ! Quelques constantes et options:
39 guez 51
40 guez 234 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 guez 51
49 guez 234 ! Variables locales:
50 guez 51
51 guez 234 INTEGER i, k, invb(knon)
52     REAL zl2(knon)
53     REAL zdthmin(knon), zdthdp
54 guez 51
55 guez 234 !----------------------------------------------------------
56 guez 51
57 guez 234 ! Initialiser les sorties
58 guez 235 DO k = 2, klev
59 guez 234 DO i = 1, knon
60     pcfm(i, k) = 0.0
61     pcfh(i, k) = 0.0
62     ENDDO
63     ENDDO
64 guez 51
65 guez 234 ! Chercher la zone d'inversion forte
66 guez 51
67 guez 234 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 guez 51
83 guez 234 ! 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 guez 51
98 guez 234 END SUBROUTINE coefkz2
99 guez 233
100     end module coefkz2_m

  ViewVC Help
Powered by ViewVC 1.1.21