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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 134 - (hide annotations)
Wed Apr 29 15:47:56 2015 UTC (9 years ago) by guez
File size: 2577 byte(s)
Sources inside, compilation outside.
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 guez 103 REAL 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 guez 103 zqs= R2ES*FOEEW(t(i, kb), RTT >= t(i, kb))/pplay(i, kb)
71 guez 52 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