/[lmdze]/trunk/phylmd/newmicro.f90
ViewVC logotype

Diff of /trunk/phylmd/newmicro.f90

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

revision 336 by guez, Thu Jun 13 14:40:06 2019 UTC revision 337 by guez, Mon Sep 16 16:54:50 2019 UTC
# Line 4  module newmicro_m Line 4  module newmicro_m
4    
5  contains  contains
6    
7    SUBROUTINE newmicro (paprs, play, t, qlwp, clc, cltau, clemi, cldh, cldl, &    SUBROUTINE newmicro (paprs, play, t, qlwp, clc, cldtau, clemi, cldh, cldl, &
8         cldm, cldt, ctlwp, flwp, fiwp, flwc, fiwc)         cldm, cldt, ctlwp, flwp, fiwp, flwc, fiwc)
9    
10      ! From LMDZ4/libf/phylmd/newmicro.F, version 1.2 2004/06/03 09:22:43      ! From LMDZ4/libf/phylmd/newmicro.F, version 1.2 2004/06/03 09:22:43
11    
12      ! Authors: Z. X. Li (LMD/CNRS), Johannes Quaas      ! Authors: Z. X. Li (LMD/CNRS), Johannes Quaas
13      ! Date: 1993/09/10      ! Date: 1993/09/10
14      ! Objet: calcul de l'épaisseur optique et de l'émissivité des nuages.      ! Objet: calcul de l'\'epaisseur optique et de l'\'emissivit\'e des nuages.
15    
16      USE conf_phys_m, ONLY: rad_chau1, rad_chau2      USE conf_phys_m, ONLY: rad_chau1, rad_chau2
17      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
# Line 23  contains Line 23  contains
23      REAL, intent(in):: t(:, :) ! (klon, klev) temperature      REAL, intent(in):: t(:, :) ! (klon, klev) temperature
24    
25      REAL, intent(in):: qlwp(:, :) ! (klon, klev)      REAL, intent(in):: qlwp(:, :) ! (klon, klev)
26      ! eau liquide nuageuse dans l'atmosphère (kg/kg)      ! eau liquide nuageuse dans l'atmosphère (kg / kg)
27    
28      REAL, intent(inout):: clc(:, :) ! (klon, klev)      REAL, intent(inout):: clc(:, :) ! (klon, klev)
29      ! couverture nuageuse pour le rayonnement (0 à 1)      ! couverture nuageuse pour le rayonnement (0 à 1)
30    
31      REAL, intent(out):: cltau(:, :) ! (klon, klev)  épaisseur optique des nuages      REAL, intent(out):: cldtau(:, :) ! (klon, klev)
32      REAL, intent(out):: clemi(:, :) ! (klon, klev) émissivité des nuages (0 à 1)      ! \'epaisseur optique des nuages
33        
34        REAL, intent(out):: clemi(:, :) ! (klon, klev)
35        ! \'emissivit\'e des nuages (0 à 1)
36    
37      REAL, intent(out):: cldh(:), cldl(:), cldm(:), cldt(:) ! (klon)      REAL, intent(out):: cldh(:), cldl(:), cldm(:), cldt(:) ! (klon)
38      REAL, intent(out):: ctlwp(:) ! (klon)      REAL, intent(out):: ctlwp(:) ! (klon)
# Line 48  contains Line 51  contains
51    
52      REAL, PARAMETER:: cetahb = 0.45, cetamb = 0.8      REAL, PARAMETER:: cetahb = 0.45, cetamb = 0.8
53      INTEGER i, k      INTEGER i, k
54      REAL zflwp(klon), fice      REAL zflwp
55        real fice ! fraction of ice in cloud
56      REAL rad_chaud      REAL rad_chaud
57      REAL, PARAMETER:: coef_chau = 0.13      REAL, PARAMETER:: coef_chau = 0.13
58      REAL, PARAMETER:: seuil_neb = 0.001, t_glace = 273. - 15.      REAL, PARAMETER:: seuil_neb = 0.001, t_glace = 258.
59      real rel, tc, rei, zfiwp(klon)      real rel, tc, rei, zfiwp
60      real k_ice      real k_ice
61      real, parameter:: k_ice0 = 0.005 ! units=m2/g      real, parameter:: k_ice0 = 0.005 ! units=m2 / g
62      real, parameter:: DF = 1.66 ! diffusivity factor      real, parameter:: DF = 1.66 ! diffusivity factor
63    
64      !-----------------------------------------------------------------      !-----------------------------------------------------------------
65    
66      ! Calculer l'épaisseur optique et l'émissivité des nuages      ! Calculer l'\'epaisseur optique et l'\'emissivit\'e des nuages
67    
68      loop_horizontal: DO i = 1, klon      loop_horizontal: DO i = 1, klon
69         flwp(i) = 0.         flwp(i) = 0.
# Line 70  contains Line 74  contains
74    
75            ! liquid/ice cloud water paths:            ! liquid/ice cloud water paths:
76    
77              ! Linear transition:
78            fice = 1. - (t(i, k) - t_glace) / (273.13 - t_glace)            fice = 1. - (t(i, k) - t_glace) / (273.13 - t_glace)
79            fice = MIN(MAX(fice, 0.), 1.)            fice = MIN(MAX(fice, 0.), 1.)
80    
81            zflwp(i) = 1000. * (1. - fice) * qlwp(i, k) / clc(i, k) &            zflwp = 1000. * (1. - fice) * qlwp(i, k) / clc(i, k) &
82                 * (paprs(i, k) - paprs(i, k + 1)) / RG                 * (paprs(i, k) - paprs(i, k + 1)) / RG
83            zfiwp(i) = 1000. * fice * qlwp(i, k) / clc(i, k) &            zfiwp = 1000. * fice * qlwp(i, k) / clc(i, k) &
84                 * (paprs(i, k) - paprs(i, k + 1)) / RG                 * (paprs(i, k) - paprs(i, k + 1)) / RG
85    
86            flwp(i) = flwp(i) &            flwp(i) = flwp(i) &
# Line 114  contains Line 119  contains
119            tc = t(i, k)-273.15            tc = t(i, k)-273.15
120            rei = merge(3.5, 0.71 * tc + 61.29, tc <= -81.4)            rei = merge(3.5, 0.71 * tc + 61.29, tc <= -81.4)
121    
122            ! cloud optical thickness:            ! Cloud optical thickness:
123              ! (for liquid clouds, traditional formula, for ice clouds,
124            ! (for liquid clouds, traditional formula,            ! Ebert and Curry (1992))
125            ! for ice clouds, Ebert & Curry (1992))            if (zflwp == 0.) rel = 1.
126              if (zfiwp == 0. .or. rei <= 0.) rei = 1.
127            if (zflwp(i) == 0.) rel = 1.            cldtau(i, k) = 3. / 2. * (zflwp / rel) &
128            if (zfiwp(i) == 0. .or. rei <= 0.) rei = 1.                 + zfiwp * (3.448e-03 + 2.431 / rei)
           cltau(i, k) = 3./2. * (zflwp(i)/rel) &  
                + zfiwp(i) * (3.448e-03 + 2.431/rei)  
129    
130            ! cloud infrared emissivity:            ! cloud infrared emissivity:
131    
# Line 132  contains Line 135  contains
135            ! Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):            ! Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
136            k_ice = k_ice0 + 1. / rei            k_ice = k_ice0 + 1. / rei
137    
138            clemi(i, k) = 1. - EXP(- coef_chau * zflwp(i) - DF * k_ice * zfiwp(i))            clemi(i, k) = 1. - EXP(- coef_chau * zflwp - DF * k_ice * zfiwp)
139    
140            if (clc(i, k) <= seuil_neb) then            if (clc(i, k) <= seuil_neb) then
141               clc(i, k) = 0.               clc(i, k) = 0.
142               cltau(i, k) = 0.               cldtau(i, k) = 0.
143               clemi(i, k) = 0.               clemi(i, k) = 0.
144            end if            end if
145         ENDDO loop_vertical         ENDDO loop_vertical

Legend:
Removed from v.336  
changed lines
  Added in v.337

  ViewVC Help
Powered by ViewVC 1.1.21