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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 52 - (show annotations)
Fri Sep 23 12:28:01 2011 UTC (12 years, 7 months ago) by guez
Original Path: trunk/libf/phylmd/diagcld2.f90
File size: 2625 byte(s)
Split "conflx.f" into single-procedure files in directory "Conflx".

Split "cv_routines.f" into single-procedure files in directory
"CV_routines". Made module "cvparam" from included file
"cvparam.h". No included file other than "netcdf.inc" left in LMDZE.

1 module diagcld2_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE diagcld2(paprs, pplay, t, q, diafra, dialiq)
8
9 USE dimphy, ONLY : klev, klon
10 USE suphec_m, ONLY : rcpd, rd, retv, rtt
11 USE yoethf_m, ONLY : r2es
12 USE fcttre, ONLY : foeew, qsatl, qsats, thermcep
13
14 ! Arguments d'entree:
15 REAL, intent(in):: paprs(klon, klev+1) ! pression (Pa) a inter-couche
16 REAL, intent(in):: pplay(klon, klev) ! pression (Pa) au milieu de couche
17 REAL, intent(in):: t(klon, klev) ! temperature (K)
18 REAL q(klon, klev) ! humidite specifique (Kg/Kg)
19
20 ! Arguments de sortie:
21 REAL diafra(klon, klev) ! fraction nuageuse diagnostiquee
22 REAL dialiq(klon, klev) ! eau liquide nuageuse
23
24 REAL, PARAMETER:: CETAMB = 0.8
25 REAL CLOIA, CLOIB, CLOIC, CLOID
26 PARAMETER (CLOIA=1.0E+02, CLOIB=-10.00, CLOIC=-0.6, CLOID=5.0)
27 REAL RGAMMAS
28 PARAMETER (RGAMMAS=0.05)
29 REAL CRHL
30 PARAMETER (CRHL=0.15)
31 REAL t_coup
32 PARAMETER (t_coup=234.0)
33
34 ! Variables locales:
35 INTEGER i, k, kb, invb(klon)
36 REAL zqs, zrhb, zcll, zdthmin(klon), zdthdp
37 REAL zdelta, zcor
38
39 !-----------------------------------------------------------
40
41 ! Initialisation:
42
43 DO k = 1, klev
44 DO i = 1, klon
45 diafra(i, k) = 0.0
46 dialiq(i, k) = 0.0
47 ENDDO
48 ENDDO
49
50 DO i = 1, klon
51 invb(i) = klev
52 zdthmin(i)=0.0
53 ENDDO
54
55 DO k = 2, klev / 2 - 1
56 DO i = 1, klon
57 zdthdp = (t(i, k) - t(i, k+1)) / (pplay(i, k) - pplay(i, k+1)) &
58 - RD * 0.5 * (t(i, k) + t(i, k+1)) / RCPD / paprs(i, k+1)
59 zdthdp = zdthdp * CLOIA
60 IF (pplay(i, k) > CETAMB * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
61 zdthmin(i) = zdthdp
62 invb(i) = k
63 ENDIF
64 ENDDO
65 ENDDO
66
67 DO i = 1, klon
68 kb=invb(i)
69 IF (thermcep) THEN
70 zdelta=MAX(0., SIGN(1., RTT-t(i, kb)))
71 zqs= R2ES*FOEEW(t(i, kb), zdelta)/pplay(i, kb)
72 zqs=MIN(0.5, zqs)
73 zcor=1./(1.-RETV*zqs)
74 zqs=zqs*zcor
75 ELSE
76 IF (t(i, kb) < t_coup) THEN
77 zqs = qsats(t(i, kb)) / pplay(i, kb)
78 ELSE
79 zqs = qsatl(t(i, kb)) / pplay(i, kb)
80 ENDIF
81 ENDIF
82 zcll = CLOIB * zdthmin(i) + CLOIC
83 zcll = MIN(1.0, MAX(0.0, zcll))
84 zrhb= q(i, kb)/zqs
85 IF (zcll > 0.0.AND.zrhb < CRHL) &
86 zcll=zcll*(1.-(CRHL-zrhb)*CLOID)
87 zcll=MIN(1.0, MAX(0.0, zcll))
88 diafra(i, kb) = MAX(diafra(i, kb), zcll)
89 dialiq(i, kb)= diafra(i, kb) * RGAMMAS*zqs
90 ENDDO
91
92 END SUBROUTINE diagcld2
93
94 end module diagcld2_m

  ViewVC Help
Powered by ViewVC 1.1.21