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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.51  
changed lines
  Added in v.52

  ViewVC Help
Powered by ViewVC 1.1.21