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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (hide annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 1 month ago) by guez
Original Path: trunk/phylmd/diagcld2.f
File size: 2625 byte(s)
Changed all ".f90" suffixes to ".f".
1 guez 52 module diagcld2_m
2 guez 51
3     IMPLICIT none
4    
5 guez 52 contains
6 guez 51
7 guez 52 SUBROUTINE diagcld2(paprs, pplay, t, q, diafra, dialiq)
8 guez 51
9 guez 52 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 guez 51
14 guez 52 ! 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 guez 51
20 guez 52 ! Arguments de sortie:
21     REAL diafra(klon, klev) ! fraction nuageuse diagnostiquee
22     REAL dialiq(klon, klev) ! eau liquide nuageuse
23 guez 51
24 guez 52 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 guez 51
34 guez 52 ! Variables locales:
35     INTEGER i, k, kb, invb(klon)
36     REAL zqs, zrhb, zcll, zdthmin(klon), zdthdp
37     REAL zdelta, zcor
38 guez 51
39 guez 52 !-----------------------------------------------------------
40 guez 51
41 guez 52 ! Initialisation:
42 guez 51
43 guez 52 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 guez 51
50 guez 52 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