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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 103 - (show annotations)
Fri Aug 29 13:00:05 2014 UTC (9 years, 8 months ago) by guez
Original Path: trunk/phylmd/diagcld2.f
File size: 2577 byte(s)
Renamed module cvparam to cv_param. Deleted procedure
cv_param. Changed variables of module cv_param into parameters.

In procedures cv_driver, cv_uncompress and cv3_uncompress, removed
some arguments giving dimensions and used module variables klon and
klev instead.

In procedures gradiv2, laplacien_gam and laplacien, changed
declarations of local variables because klevel is not always klev.

Removed code for nudging surface pressure.

Removed arguments pim and pjm of tau2alpha. Added assignment of false
to variable first.

Replaced real argument del of procedures foeew and FOEDE by logical
argument.

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 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 zqs= R2ES*FOEEW(t(i, kb), RTT >= t(i, kb))/pplay(i, kb)
71 zqs=MIN(0.5, zqs)
72 zcor=1./(1.-RETV*zqs)
73 zqs=zqs*zcor
74 ELSE
75 IF (t(i, kb) < t_coup) THEN
76 zqs = qsats(t(i, kb)) / pplay(i, kb)
77 ELSE
78 zqs = qsatl(t(i, kb)) / pplay(i, kb)
79 ENDIF
80 ENDIF
81 zcll = CLOIB * zdthmin(i) + CLOIC
82 zcll = MIN(1.0, MAX(0.0, zcll))
83 zrhb= q(i, kb)/zqs
84 IF (zcll > 0.0.AND.zrhb < CRHL) &
85 zcll=zcll*(1.-(CRHL-zrhb)*CLOID)
86 zcll=MIN(1.0, MAX(0.0, zcll))
87 diafra(i, kb) = MAX(diafra(i, kb), zcll)
88 dialiq(i, kb)= diafra(i, kb) * RGAMMAS*zqs
89 ENDDO
90
91 END SUBROUTINE diagcld2
92
93 end module diagcld2_m

  ViewVC Help
Powered by ViewVC 1.1.21