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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 103 - (hide 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 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