/[lmdze]/trunk/phylmd/nuage.f
ViewVC logotype

Diff of /trunk/phylmd/nuage.f

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

revision 213 by guez, Mon Feb 27 15:44:55 2017 UTC revision 217 by guez, Thu Mar 30 14:25:18 2017 UTC
# Line 5  module nuage_m Line 5  module nuage_m
5  contains  contains
6    
7    SUBROUTINE nuage (paprs, pplay, t, pqlwp, pclc, pcltau, pclemi, pch, pcl, &    SUBROUTINE nuage (paprs, pplay, t, pqlwp, pclc, pcltau, pclemi, pch, pcl, &
8         pcm, pct, pctlwp, ok_aie, sulfate, sulfate_pi, bl95_b0, bl95_b1, &         pcm, pct, pctlwp)
        cldtaupi, re, fl)  
9    
10      ! From LMDZ4/libf/phylmd/nuage.F, version 1.1.1.1, 2004/05/19 12:53:07      ! From LMDZ4/libf/phylmd/nuage.F, version 1.1.1.1, 2004/05/19 12:53:07
11    
12      use dimphy, only: klon, klev      use dimphy, only: klon, klev
13      use nr_util, only: pi      use SUPHEC_M, only: rg
     use SUPHEC_M, only: rd, rg  
14    
15      ! Author: Z. X. Li (LMD/CNRS)      ! Author: Z. X. Li (LMD/CNRS)
16      ! Date: 1993/09/10      ! Date: 1993/09/10
# Line 30  contains Line 28  contains
28      REAL, intent(inout):: pclc(klon, klev)      REAL, intent(inout):: pclc(klon, klev)
29      ! couverture nuageuse pour le rayonnement (0 \`a 1)      ! couverture nuageuse pour le rayonnement (0 \`a 1)
30    
31      REAL pcltau(klon, klev), pclemi(klon, klev)      REAL, intent(out):: pcltau(klon, klev) ! \'epaisseur optique des nuages
32      ! pcltau--output-R-epaisseur optique des nuages      real pclemi(klon, klev) ! pclemi--output-R-emissivite des nuages (0 a 1)
     ! pclemi--output-R-emissivite des nuages (0 a 1)  
   
33      REAL pch(klon), pcl(klon), pcm(klon), pct(klon), pctlwp(klon)      REAL pch(klon), pcl(klon), pcm(klon), pct(klon), pctlwp(klon)
34    
     !jq for the aerosol indirect effect  
     !jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003  
     !jq  
     LOGICAL ok_aie ! Apply AIE or not?  
     ! ok_aie--input-L-apply aerosol indirect effect or not  
   
     REAL sulfate(klon, klev) ! sulfate aerosol mass concentration [ug m-3]  
     ! sulfate-input-R-sulfate aerosol mass concentration [um/m^3]  
   
     REAL, intent(in):: sulfate_pi(klon, klev) ! sulfate aerosol mass concentration [ug m-3] (pre-industrial value)  
     ! sulfate_pi-input-R-dito, pre-industrial value  
   
     REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula  
     ! bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)  
     ! bl95_b1-input-R-a parameter, may be varied for tests (-"-)  
   
     REAL cldtaupi(klon, klev) ! pre-industrial cloud opt thickness for diag  
     ! cldtaupi-output-R-pre-industrial value of cloud optical thickness,  
     ! needed for the diagnostics of the aerosol indirect  
     ! radiative forcing (see radlwsw)  
   
     REAL re(klon, klev) ! cloud droplet effective radius [um]  
     ! re------output-R-Cloud droplet effective radius multiplied by fl [um]  
   
     REAL fl(klon, klev) ! xliq * rneb (denominator to re ; fraction of liquid water clouds within the grid cell)  
     ! fl------output-R-Denominator to re, introduced to avoid problems in  
     ! the averaging of the output. fl is the fraction of liquid  
     ! water clouds within a grid cell  
   
35      ! Local:      ! Local:
36    
37      LOGICAL lo      LOGICAL lo
# Line 86  contains Line 53  contains
53      INTEGER nexpo ! exponentiel pour glace/eau      INTEGER nexpo ! exponentiel pour glace/eau
54      PARAMETER (nexpo=6)      PARAMETER (nexpo=6)
55    
     REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3]  
     REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value)  
   
56      !--------------------------------------------------------------------      !--------------------------------------------------------------------
57            
58      ! Calculer l'epaisseur optique et l'emmissivite des nuages      ! Calculer l'epaisseur optique et l'emmissivite des nuages
# Line 105  contains Line 69  contains
69            zfice = MIN(MAX(zfice, 0.0), 1.0)            zfice = MIN(MAX(zfice, 0.0), 1.0)
70            zfice = zfice**nexpo            zfice = zfice**nexpo
71    
           IF (ok_aie) THEN  
              ! Formula "D" of Boucher and Lohmann, Tellus, 1995  
   
              cdnc(i, k) = 10.**(bl95_b0+bl95_b1* &  
                   log(MAX(sulfate(i, k), 1.e-4))/log(10.))*1.e6 !-m-3  
              ! Cloud droplet number concentration (CDNC) is restricted  
              ! to be within [20, 1000 cm^3]  
   
              cdnc(i, k)=MIN(1000.e6, MAX(20.e6, cdnc(i, k)))  
              cdnc_pi(i, k) = 10.**(bl95_b0+bl95_b1* &  
                   log(MAX(sulfate_pi(i, k), 1.e-4))/log(10.))*1.e6 !-m-3  
              cdnc_pi(i, k)=MIN(1000.e6, MAX(20.e6, cdnc_pi(i, k)))  
   
              ! air density: pplay(i, k) / (RD * zT(i, k))  
              ! factor 1.1: derive effective radius from volume-mean radius  
              ! factor 1000 is the water density  
              ! _chaud means that this is the CDR for liquid water clouds  
   
              rad_chaud = &  
                   1.1 * ((pqlwp(i, k) * pplay(i, k) / (RD * T(i, k))) &  
                   / (4./3. * PI * 1000. * cdnc(i, k)))**(1./3.)  
   
              ! Convert to um. CDR shall be at least 3 um.  
   
              rad_chaud = MAX(rad_chaud*1.e6, 3.)  
   
              ! For output diagnostics  
   
              ! Cloud droplet effective radius [um]  
   
              ! we multiply here with f * xl (fraction of liquid water  
              ! clouds in the grid cell) to avoid problems in the  
              ! averaging of the output.  
              ! In the output of IOIPSL, derive the real cloud droplet  
              ! effective radius as re/fl  
   
              fl(i, k) = pclc(i, k)*(1.-zfice)  
              re(i, k) = rad_chaud*fl(i, k)  
   
              ! Pre-industrial cloud opt thickness  
   
              ! "radius" is calculated as rad_chaud above (plus the  
              ! ice cloud contribution) but using cdnc_pi instead of  
              ! cdnc.  
              radius = MAX(1.1e6 * ((pqlwp(i, k)*pplay(i, k)/(RD*T(i, k))) &  
                   / (4./3.*PI*1000.*cdnc_pi(i, k)))**(1./3.), &  
                   3.) * (1.-zfice) + rad_froid * zfice  
              cldtaupi(i, k) = 3.0/2.0 * zflwp / radius  
   
           END IF ! ok_aie  
   
72            radius = rad_chaud * (1.-zfice) + rad_froid * zfice            radius = rad_chaud * (1.-zfice) + rad_froid * zfice
73            coef = coef_chau * (1.-zfice) + coef_froi * zfice            coef = coef_chau * (1.-zfice) + coef_froi * zfice
74            pcltau(i, k) = 3.0/2.0 * zflwp / radius            pcltau(i, k) = 3.0/2.0 * zflwp / radius
# Line 164  contains Line 77  contains
77            IF (lo) pclc(i, k) = 0.0            IF (lo) pclc(i, k) = 0.0
78            IF (lo) pcltau(i, k) = 0.0            IF (lo) pcltau(i, k) = 0.0
79            IF (lo) pclemi(i, k) = 0.0            IF (lo) pclemi(i, k) = 0.0
   
           IF (.NOT.ok_aie) cldtaupi(i, k)=pcltau(i, k)  
80         END DO         END DO
81      END DO      END DO
82    

Legend:
Removed from v.213  
changed lines
  Added in v.217

  ViewVC Help
Powered by ViewVC 1.1.21