/[lmdze]/trunk/libf/phylmd/coefkz2.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/coefkz2.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 51 - (show annotations)
Tue Sep 20 09:14:34 2011 UTC (12 years, 8 months ago) by guez
File size: 2513 byte(s)
Split "getincom.f90" into "getincom.f90" and "getincom2.f90". Split
"nuage.f" into "nuage.f90", "diagcld1.f90" and "diagcld2.f90". Created
module "chem" from included file "chem.h". Moved "YOEGWD.f90" to
directory "Orography".

In "physiq", for evaporation of water, "zlsdcp" was equal to
"zlvdc". Removed useless variables.

1 SUBROUTINE coefkz2(nsrf, knon, paprs, pplay, t, pcfm, pcfh)
2
3 ! J'introduit un peu de diffusion sauf dans les endroits
4 ! ou une forte inversion est presente
5 ! On peut dire qu'il represente la convection peu profonde
6
7 use dimens_m
8 use indicesol
9 use dimphy
10 use iniprint
11 use SUPHEC_M
12
13 IMPLICIT none
14
15 ! Arguments:
16 ! nsrf-----input-I- indicateur de la nature du sol
17 ! knon-----input-I- nombre de points a traiter
18 ! paprs----input-R- pression a chaque intercouche (en Pa)
19 ! pplay----input-R- pression au milieu de chaque couche (en Pa)
20 ! t--------input-R- temperature (K)
21
22 ! pcfm-----output-R- coefficients a calculer (vitesse)
23 ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)
24
25 ! Arguments:
26
27 INTEGER knon, nsrf
28 REAL paprs(klon, klev+1), pplay(klon, klev)
29 REAL t(klon, klev)
30
31 REAL pcfm(klon, klev), pcfh(klon, klev)
32
33 ! Quelques constantes et options:
34
35 REAL prandtl
36 PARAMETER (prandtl=0.4)
37 REAL kstable
38 PARAMETER (kstable=0.002)
39 REAL mixlen ! constante controlant longueur de melange
40 PARAMETER (mixlen=35.0)
41 REAL seuil ! au-dela l'inversion est consideree trop faible
42 PARAMETER (seuil=-0.02)
43
44 ! Variables locales:
45
46 INTEGER i, k, invb(knon)
47 REAL zl2(knon)
48 REAL zdthmin(knon), zdthdp
49
50 !----------------------------------------------------------
51
52 ! Initialiser les sorties
53 DO k = 1, klev
54 DO i = 1, knon
55 pcfm(i, k) = 0.0
56 pcfh(i, k) = 0.0
57 ENDDO
58 ENDDO
59
60 ! Chercher la zone d'inversion forte
61
62 DO i = 1, knon
63 invb(i) = klev
64 zdthmin(i)=0.0
65 ENDDO
66 DO k = 2, klev/ 2 - 1
67 DO i = 1, knon
68 zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
69 - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
70 zdthdp = zdthdp * 100.
71 IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
72 zdthmin(i) = zdthdp
73 invb(i) = k
74 ENDIF
75 ENDDO
76 ENDDO
77
78 ! Introduire une diffusion:
79 DO k = 2, klev
80 DO i = 1, knon
81 ! si on est sur ocean et s'il n'y a pas d'inversion ou si
82 ! l'inversion est trop faible:
83 IF ((nsrf.EQ.is_oce) .AND. &
84 ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN
85 zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &
86 /(paprs(i, 2)-paprs(i, klev+1))))**2
87 pcfm(i, k)= zl2(i)* kstable
88 pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different
89 ENDIF
90 ENDDO
91 ENDDO
92
93 END SUBROUTINE coefkz2

  ViewVC Help
Powered by ViewVC 1.1.21