source: LMDZ6/trunk/libf/phylmd/newmicro.F90 @ 3265

Last change on this file since 3265 was 3265, checked in by oboucher, 6 years ago

Adding a print of cdnc_min following Fred's 3245 modset

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.4 KB
Line 
1! $Id: newmicro.F90 3265 2018-03-14 15:07:56Z oboucher $
2
3SUBROUTINE newmicro(ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, pclc, &
4    pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, &
5    mass_solu_aero, mass_solu_aero_pi, pcldtaupi, re, fl, reliq, reice, &
6    reliq_pi, reice_pi)
7
8  USE dimphy
9  USE phys_local_var_mod, ONLY: scdnc, cldncl, reffclwtop, lcc, reffclws, &
10      reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, zfice
11  USE phys_state_var_mod, ONLY: rnebcon, clwcon
12  USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14)
13  USE ioipsl_getin_p_mod, ONLY : getin_p
14  USE print_control_mod, ONLY: lunout
15
16
17  IMPLICIT NONE
18  ! ======================================================================
19  ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930910
20  ! O.   Boucher (LMD/CNRS) mise a jour en 201212
21  ! I. Musat (LMD/CNRS) : prise en compte de la meme hypothese de recouvrement
22  !                       pour les nuages que pour le rayonnement rrtm via
23  !                       le parametre novlp de radopt.h : 20160721
24  ! Objet: Calculer epaisseur optique et emmissivite des nuages
25  ! ======================================================================
26  ! Arguments:
27  ! ok_cdnc-input-L-flag pour calculer les rayons a partir des aerosols
28
29  ! t-------input-R-temperature
30  ! pqlwp---input-R-eau liquide nuageuse dans l'atmosphere dans la partie
31  ! nuageuse (kg/kg)
32  ! pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1)
33  ! mass_solu_aero-----input-R-total mass concentration for all soluble
34  ! aerosols[ug/m^3]
35  ! mass_solu_aero_pi--input-R-ditto, pre-industrial value
36
37  ! bl95_b0-input-R-a PARAMETER, may be varied for tests (s-sea, l-land)
38  ! bl95_b1-input-R-a PARAMETER, may be varied for tests (    -"-      )
39
40  ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
41  ! fl------output-R-Denominator to re, introduced to avoid problems in
42  ! the averaging of the output. fl is the fraction of liquid
43  ! water clouds within a grid cell
44
45  ! pcltau--output-R-epaisseur optique des nuages
46  ! pclemi--output-R-emissivite des nuages (0 a 1)
47  ! pcldtaupi-output-R-pre-industrial value of cloud optical thickness,
48
49  ! pcl-output-R-2D low-level cloud cover
50  ! pcm-output-R-2D mid-level cloud cover
51  ! pch-output-R-2D high-level cloud cover
52  ! pct-output-R-2D total cloud cover
53  ! ======================================================================
54
55  include "YOMCST.h"
56  include "nuage.h"
57  include "radepsi.h"
58  include "radopt.h"
59
60  ! choix de l'hypothese de recouvrement nuageuse via radopt.h (IM, 19.07.2016)
61  ! !novlp=1: max-random
62  ! !novlp=2: maximum
63  ! !novlp=3: random
64! LOGICAL random, maximum_random, maximum
65! PARAMETER (random=.FALSE., maximum_random=.TRUE., maximum=.FALSE.)
66
67  LOGICAL, SAVE :: first = .TRUE.
68  !$OMP THREADPRIVATE(FIRST)
69  INTEGER flag_max
70
71  ! threshold PARAMETERs
72  REAL thres_tau, thres_neb
73  PARAMETER (thres_tau=0.3, thres_neb=0.001)
74
75  REAL phase3d(klon, klev)
76  REAL tcc(klon), ftmp(klon), lcc_integrat(klon), height(klon)
77
78  REAL paprs(klon, klev+1)
79  REAL pplay(klon, klev)
80  REAL t(klon, klev)
81  REAL pclc(klon, klev)
82  REAL pqlwp(klon, klev)
83  REAL pcltau(klon, klev)
84  REAL pclemi(klon, klev)
85  REAL pcldtaupi(klon, klev)
86
87  REAL pct(klon)
88  REAL pcl(klon)
89  REAL pcm(klon)
90  REAL pch(klon)
91  REAL pctlwp(klon)
92
93  LOGICAL lo
94
95  ! !Abderr modif JL mail du 19.01.2011 18:31
96  ! REAL cetahb, cetamb
97  ! PARAMETER (cetahb = 0.45, cetamb = 0.80)
98  ! Remplacer
99  ! cetahb*paprs(i,1) par  prmhc
100  ! cetamb*paprs(i,1) par  prlmc
101  REAL prmhc ! Pressure between medium and high level cloud in Pa
102  REAL prlmc ! Pressure between low and medium level cloud in Pa
103  PARAMETER (prmhc=440.*100., prlmc=680.*100.)
104
105  INTEGER i, k
106  REAL xflwp(klon), xfiwp(klon)
107  REAL xflwc(klon, klev), xfiwc(klon, klev)
108
109  REAL radius
110
111  REAL coef_froi, coef_chau
112  PARAMETER (coef_chau=0.13, coef_froi=0.09)
113
114  REAL seuil_neb
115  PARAMETER (seuil_neb=0.001)
116
117! JBM (3/14) nexpo is replaced by exposant_glace
118! INTEGER nexpo ! exponentiel pour glace/eau
119! PARAMETER (nexpo=6)
120! PARAMETER (nexpo=1)
121! if iflag_t_glace=0, the old values are used:
122  REAL, PARAMETER :: t_glace_min_old = 258.
123  REAL, PARAMETER :: t_glace_max_old = 273.13
124
125  REAL rel, tc, rei
126  REAL k_ice0, k_ice, df
127  PARAMETER (k_ice0=0.005) ! units=m2/g
128  PARAMETER (df=1.66) ! diffusivity factor
129
130  ! jq for the aerosol indirect effect
131  ! jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003
132  ! jq
133  REAL mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols [ug m-3]
134  REAL mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value)
135  REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3]
136  REAL re(klon, klev) ! cloud droplet effective radius [um]
137  REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value)
138  REAL re_pi(klon, klev) ! cloud droplet effective radius [um] (pi value)
139
140  REAL fl(klon, klev) ! xliq * rneb (denominator to re; fraction of liquid water clouds
141  ! within the grid cell)
142
143  LOGICAL ok_cdnc
144  REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula
145
146  ! jq-end
147  ! IM cf. CR:parametres supplementaires
148  REAL zclear(klon)
149  REAL zcloud(klon)
150  REAL zcloudh(klon)
151  REAL zcloudm(klon)
152  REAL zcloudl(klon)
153  REAL rhodz(klon, klev) !--rho*dz pour la couche
154  REAL zrho(klon, klev) !--rho pour la couche
155  REAL dh(klon, klev) !--dz pour la couche
156  REAL rad_chaud(klon, klev) !--rayon pour les nuages chauds
157  REAL rad_chaud_pi(klon, klev) !--rayon pour les nuages chauds pre-industriels
158  REAL zflwp_var, zfiwp_var
159  REAL d_rei_dt
160
161  ! Abderrahmane oct 2009
162  REAL reliq(klon, klev), reice(klon, klev)
163  REAL reliq_pi(klon, klev), reice_pi(klon, klev)
164
165  REAL,SAVE :: cdnc_min=-1.
166  REAL,SAVE :: cdnc_min_m3
167  !$OMP THREADPRIVATE(cdnc_min,cdnc_min_m3)
168
169  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
170  ! FH : 2011/05/24
171
172  ! rei = ( rei_max - rei_min ) * T(°C) / 81.4 + rei_max
173  ! to be used for a temperature in celcius T(°C) < 0
174  ! rei=rei_min for T(°C) < -81.4
175
176  ! Calcul de la pente de la relation entre rayon effective des cristaux
177  ! et la température.
178  ! Pour retrouver les résultats numériques de la version d'origine,
179  ! on impose 0.71 quand on est proche de 0.71
180
181  if (first) THEN
182      call getin_p('cdnc_min',cdnc_min)
183      cdnc_min_m3=cdnc_min*1.E6
184      IF (cdnc_min_m3<0.) cdnc_min_m3=20.E6 ! astuce pour retrocompatibilite
185      write(lunout,*)'cdnc_min=', cdnc_min_m3/1.E6
186  ENDIF
187
188  d_rei_dt = (rei_max-rei_min)/81.4
189  IF (abs(d_rei_dt-0.71)<1.E-4) d_rei_dt = 0.71
190  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
191
192  ! Calculer l'epaisseur optique et l'emmissivite des nuages
193  ! IM inversion des DO
194
195  xflwp = 0.D0
196  xfiwp = 0.D0
197  xflwc = 0.D0
198  xfiwc = 0.D0
199
200  reliq = 0.
201  reice = 0.
202  reliq_pi = 0.
203  reice_pi = 0.
204
205  IF (iflag_t_glace.EQ.0) THEN
206    DO k = 1, klev
207      DO i = 1, klon
208        ! -layer calculation
209        rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2
210        zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
211        dh(i, k) = rhodz(i, k)/zrho(i, k) ! m
212        ! -Fraction of ice in cloud using a linear transition
213        zfice(i, k) = 1.0 - (t(i,k)-t_glace_min_old)/(t_glace_max_old-t_glace_min_old)
214        zfice(i, k) = min(max(zfice(i,k),0.0), 1.0)
215        ! -IM Total Liquid/Ice water content
216        xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
217        xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)
218      END DO
219    END DO
220  ELSE ! of IF (iflag_t_glace.EQ.0)
221    DO k = 1, klev
222        CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k))
223 
224
225        ! JBM: icefrac_lsc is now contained icefrac_lsc_mod
226!       zfice(i, k) = icefrac_lsc(t(i,k), t_glace_min, &
227!                                 t_glace_max, exposant_glace)
228      DO i = 1, klon
229        ! -layer calculation
230        rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2
231        zrho(i, k) = pplay(i, k)/t(i, k)/rd ! kg/m3
232        dh(i, k) = rhodz(i, k)/zrho(i, k) ! m
233        ! -IM Total Liquid/Ice water content
234        xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k)
235        xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)
236      END DO
237    END DO
238  ENDIF
239
240  IF (ok_cdnc) THEN
241
242    ! --we compute cloud properties as a function of the aerosol load
243
244    DO k = 1, klev
245      DO i = 1, klon
246
247        ! Formula "D" of Boucher and Lohmann, Tellus, 1995
248        ! Cloud droplet number concentration (CDNC) is restricted
249        ! to be within [20, 1000 cm^3]
250
251        ! --present-day case
252        cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), &
253          1.E-4))/log(10.))*1.E6 !-m-3
254        cdnc(i, k) = min(1000.E6, max(cdnc_min_m3,cdnc(i,k)))
255
256        ! --pre-industrial case
257        cdnc_pi(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero_pi(i,k), &
258          1.E-4))/log(10.))*1.E6 !-m-3
259        cdnc_pi(i, k) = min(1000.E6, max(cdnc_min_m3,cdnc_pi(i,k)))
260
261        ! --present-day case
262        rad_chaud(i, k) = 1.1*((pqlwp(i,k)*pplay(i, &
263          k)/(rd*t(i,k)))/(4./3*rpi*1000.*cdnc(i,k)))**(1./3.)
264        rad_chaud(i, k) = max(rad_chaud(i,k)*1.E6, 5.)
265
266        ! --pre-industrial case
267        rad_chaud_pi(i, k) = 1.1*((pqlwp(i,k)*pplay(i, &
268          k)/(rd*t(i,k)))/(4./3.*rpi*1000.*cdnc_pi(i,k)))**(1./3.)
269        rad_chaud_pi(i, k) = max(rad_chaud_pi(i,k)*1.E6, 5.)
270
271        ! --pre-industrial case
272        ! --liquid/ice cloud water paths:
273        IF (pclc(i,k)<=seuil_neb) THEN
274
275          pcldtaupi(i, k) = 0.0
276
277        ELSE
278
279          zflwp_var = 1000.*(1.-zfice(i,k))*pqlwp(i, k)/pclc(i, k)* &
280            rhodz(i, k)
281          zfiwp_var = 1000.*zfice(i, k)*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)
282          tc = t(i, k) - 273.15
283          rei = d_rei_dt*tc + rei_max
284          IF (tc<=-81.4) rei = rei_min
285
286          ! -- cloud optical thickness :
287          ! [for liquid clouds, traditional formula,
288          ! for ice clouds, Ebert & Curry (1992)]
289
290          IF (zfiwp_var==0. .OR. rei<=0.) rei = 1.
291          pcldtaupi(i, k) = 3.0/2.0*zflwp_var/rad_chaud_pi(i, k) + &
292            zfiwp_var*(3.448E-03+2.431/rei)
293
294        END IF
295
296      END DO
297    END DO
298
299  ELSE !--not ok_cdnc
300
301    ! -prescribed cloud droplet radius
302
303    DO k = 1, min(3, klev)
304      DO i = 1, klon
305        rad_chaud(i, k) = rad_chau2
306        rad_chaud_pi(i, k) = rad_chau2
307      END DO
308    END DO
309    DO k = min(3, klev) + 1, klev
310      DO i = 1, klon
311        rad_chaud(i, k) = rad_chau1
312        rad_chaud_pi(i, k) = rad_chau1
313      END DO
314    END DO
315
316  END IF !--ok_cdnc
317
318  ! --computation of cloud optical depth and emissivity
319  ! --in the general case
320
321  DO k = 1, klev
322    DO i = 1, klon
323
324      IF (pclc(i,k)<=seuil_neb) THEN
325
326        ! effective cloud droplet radius (microns) for liquid water clouds:
327        ! For output diagnostics cloud droplet effective radius [um]
328        ! we multiply here with f * xl (fraction of liquid water
329        ! clouds in the grid cell) to avoid problems in the averaging of the
330        ! output.
331        ! In the output of IOIPSL, derive the REAL cloud droplet
332        ! effective radius as re/fl
333
334        fl(i, k) = seuil_neb*(1.-zfice(i,k))
335        re(i, k) = rad_chaud(i, k)*fl(i, k)
336        rel = 0.
337        rei = 0.
338        pclc(i, k) = 0.0
339        pcltau(i, k) = 0.0
340        pclemi(i, k) = 0.0
341
342      ELSE
343
344        ! -- liquid/ice cloud water paths:
345
346        zflwp_var = 1000.*(1.-zfice(i,k))*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)
347        zfiwp_var = 1000.*zfice(i, k)*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)
348
349        ! effective cloud droplet radius (microns) for liquid water clouds:
350        ! For output diagnostics cloud droplet effective radius [um]
351        ! we multiply here with f * xl (fraction of liquid water
352        ! clouds in the grid cell) to avoid problems in the averaging of the
353        ! output.
354        ! In the output of IOIPSL, derive the REAL cloud droplet
355        ! effective radius as re/fl
356
357        fl(i, k) = pclc(i, k)*(1.-zfice(i,k))
358        re(i, k) = rad_chaud(i, k)*fl(i, k)
359
360        rel = rad_chaud(i, k)
361
362        ! for ice clouds: as a function of the ambiant temperature
363        ! [formula used by Iacobellis and Somerville (2000), with an
364        ! asymptotical value of 3.5 microns at T<-81.4 C added to be
365        ! consistent with observations of Heymsfield et al. 1986]:
366        ! 2011/05/24 : rei_min = 3.5 becomes a free PARAMETER as well as
367        ! rei_max=61.29
368
369        tc = t(i, k) - 273.15
370        rei = d_rei_dt*tc + rei_max
371        IF (tc<=-81.4) rei = rei_min
372
373        ! -- cloud optical thickness :
374        ! [for liquid clouds, traditional formula,
375        ! for ice clouds, Ebert & Curry (1992)]
376
377        IF (zflwp_var==0.) rel = 1.
378        IF (zfiwp_var==0. .OR. rei<=0.) rei = 1.
379        pcltau(i, k) = 3.0/2.0*(zflwp_var/rel) + zfiwp_var*(3.448E-03+2.431/ &
380          rei)
381
382        ! -- cloud infrared emissivity:
383        ! [the broadband infrared absorption coefficient is PARAMETERized
384        ! as a function of the effective cld droplet radius]
385        ! Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
386
387        k_ice = k_ice0 + 1.0/rei
388
389        pclemi(i, k) = 1.0 - exp(-coef_chau*zflwp_var-df*k_ice*zfiwp_var)
390
391      END IF
392
393      reice(i, k) = rei
394
395      xflwp(i) = xflwp(i) + xflwc(i, k)*rhodz(i, k)
396      xfiwp(i) = xfiwp(i) + xfiwc(i, k)*rhodz(i, k)
397
398    END DO
399  END DO
400
401  ! --if cloud droplet radius is fixed, then pcldtaupi=pcltau
402
403  IF (.NOT. ok_cdnc) THEN
404    DO k = 1, klev
405      DO i = 1, klon
406        pcldtaupi(i, k) = pcltau(i, k)
407        reice_pi(i, k) = reice(i, k)
408      END DO
409    END DO
410  END IF
411
412  DO k = 1, klev
413    DO i = 1, klon
414      reliq(i, k) = rad_chaud(i, k)
415      reliq_pi(i, k) = rad_chaud_pi(i, k)
416      reice_pi(i, k) = reice(i, k)
417    END DO
418  END DO
419
420  ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
421  ! IM cf. CR:test: calcul prenant ou non en compte le recouvrement
422  ! initialisations
423
424  DO i = 1, klon
425    zclear(i) = 1.
426    zcloud(i) = 0.
427    zcloudh(i) = 0.
428    zcloudm(i) = 0.
429    zcloudl(i) = 0.
430    pch(i) = 1.0
431    pcm(i) = 1.0
432    pcl(i) = 1.0
433    pctlwp(i) = 0.0
434  END DO
435
436  ! --calculation of liquid water path
437
438  DO k = klev, 1, -1
439    DO i = 1, klon
440      pctlwp(i) = pctlwp(i) + pqlwp(i, k)*rhodz(i, k)
441    END DO
442  END DO
443
444  ! --calculation of cloud properties with cloud overlap
445
446  IF (novlp==1) THEN
447    DO k = klev, 1, -1
448      DO i = 1, klon
449        zclear(i) = zclear(i)*(1.-max(pclc(i,k),zcloud(i)))/(1.-min(real( &
450          zcloud(i),kind=8),1.-zepsec))
451        pct(i) = 1. - zclear(i)
452        IF (paprs(i,k)<prmhc) THEN
453          pch(i) = pch(i)*(1.-max(pclc(i,k),zcloudh(i)))/(1.-min(real(zcloudh &
454            (i),kind=8),1.-zepsec))
455          zcloudh(i) = pclc(i, k)
456        ELSE IF (paprs(i,k)>=prmhc .AND. paprs(i,k)<prlmc) THEN
457          pcm(i) = pcm(i)*(1.-max(pclc(i,k),zcloudm(i)))/(1.-min(real(zcloudm &
458            (i),kind=8),1.-zepsec))
459          zcloudm(i) = pclc(i, k)
460        ELSE IF (paprs(i,k)>=prlmc) THEN
461          pcl(i) = pcl(i)*(1.-max(pclc(i,k),zcloudl(i)))/(1.-min(real(zcloudl &
462            (i),kind=8),1.-zepsec))
463          zcloudl(i) = pclc(i, k)
464        END IF
465        zcloud(i) = pclc(i, k)
466      END DO
467    END DO
468  ELSE IF (novlp==2) THEN
469    DO k = klev, 1, -1
470      DO i = 1, klon
471        zcloud(i) = max(pclc(i,k), zcloud(i))
472        pct(i) = zcloud(i)
473        IF (paprs(i,k)<prmhc) THEN
474          pch(i) = min(pclc(i,k), pch(i))
475        ELSE IF (paprs(i,k)>=prmhc .AND. paprs(i,k)<prlmc) THEN
476          pcm(i) = min(pclc(i,k), pcm(i))
477        ELSE IF (paprs(i,k)>=prlmc) THEN
478          pcl(i) = min(pclc(i,k), pcl(i))
479        END IF
480      END DO
481    END DO
482  ELSE IF (novlp==3) THEN
483    DO k = klev, 1, -1
484      DO i = 1, klon
485        zclear(i) = zclear(i)*(1.-pclc(i,k))
486        pct(i) = 1 - zclear(i)
487        IF (paprs(i,k)<prmhc) THEN
488          pch(i) = pch(i)*(1.0-pclc(i,k))
489        ELSE IF (paprs(i,k)>=prmhc .AND. paprs(i,k)<prlmc) THEN
490          pcm(i) = pcm(i)*(1.0-pclc(i,k))
491        ELSE IF (paprs(i,k)>=prlmc) THEN
492          pcl(i) = pcl(i)*(1.0-pclc(i,k))
493        END IF
494      END DO
495    END DO
496  END IF
497
498  DO i = 1, klon
499    pch(i) = 1. - pch(i)
500    pcm(i) = 1. - pcm(i)
501    pcl(i) = 1. - pcl(i)
502  END DO
503
504  ! ========================================================
505  ! DIAGNOSTICS CALCULATION FOR CMIP5 PROTOCOL
506  ! ========================================================
507  ! change by Nicolas Yan (LSCE)
508  ! Cloud Droplet Number Concentration (CDNC) : 3D variable
509  ! Fractionnal cover by liquid water cloud (LCC3D) : 3D variable
510  ! Cloud Droplet Number Concentration at top of cloud (CLDNCL) : 2D variable
511  ! Droplet effective radius at top of cloud (REFFCLWTOP) : 2D variable
512  ! Fractionnal cover by liquid water at top of clouds (LCC) : 2D variable
513
514  IF (ok_cdnc) THEN
515
516    DO k = 1, klev
517      DO i = 1, klon
518        phase3d(i, k) = 1 - zfice(i, k)
519        IF (pclc(i,k)<=seuil_neb) THEN
520          lcc3d(i, k) = seuil_neb*phase3d(i, k)
521        ELSE
522          lcc3d(i, k) = pclc(i, k)*phase3d(i, k)
523        END IF
524        scdnc(i, k) = lcc3d(i, k)*cdnc(i, k) ! m-3
525      END DO
526    END DO
527
528    DO i = 1, klon
529      lcc(i) = 0.
530      reffclwtop(i) = 0.
531      cldncl(i) = 0.
532      IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1.
533      IF (novlp.EQ.2) tcc(i) = 0.
534    END DO
535
536    DO i = 1, klon
537      DO k = klev - 1, 1, -1 !From TOA down
538
539          ! Test, if the cloud optical depth exceeds the necessary
540          ! threshold:
541
542        IF (pcltau(i,k)>thres_tau .AND. pclc(i,k)>thres_neb) THEN
543
544          IF (novlp.EQ.2) THEN
545            IF (first) THEN
546              WRITE (*, *) 'Hypothese de recouvrement: MAXIMUM'
547              first = .FALSE.
548            END IF
549            flag_max = -1.
550            ftmp(i) = max(tcc(i), pclc(i,k))
551          END IF
552
553          IF (novlp.EQ.3) THEN
554            IF (first) THEN
555              WRITE (*, *) 'Hypothese de recouvrement: RANDOM'
556              first = .FALSE.
557            END IF
558            flag_max = 1.
559            ftmp(i) = tcc(i)*(1-pclc(i,k))
560          END IF
561
562          IF (novlp.EQ.1) THEN
563            IF (first) THEN
564              WRITE (*, *) 'Hypothese de recouvrement: MAXIMUM_ &
565                &                                             &
566                &                                          RANDOM'
567              first = .FALSE.
568            END IF
569            flag_max = 1.
570            ftmp(i) = tcc(i)*(1.-max(pclc(i,k),pclc(i,k+1)))/(1.-min(pclc(i, &
571              k+1),1.-thres_neb))
572          END IF
573          ! Effective radius of cloud droplet at top of cloud (m)
574          reffclwtop(i) = reffclwtop(i) + rad_chaud(i, k)*1.0E-06*phase3d(i, &
575            k)*(tcc(i)-ftmp(i))*flag_max
576          ! CDNC at top of cloud (m-3)
577          cldncl(i) = cldncl(i) + cdnc(i, k)*phase3d(i, k)*(tcc(i)-ftmp(i))* &
578            flag_max
579          ! Liquid Cloud Content at top of cloud
580          lcc(i) = lcc(i) + phase3d(i, k)*(tcc(i)-ftmp(i))*flag_max
581          ! Total Cloud Content at top of cloud
582          tcc(i) = ftmp(i)
583
584        END IF ! is there a visible, not-too-small cloud?
585      END DO ! loop over k
586
587      IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. - tcc(i)
588
589    END DO ! loop over i
590
591    ! ! Convective and Stratiform Cloud Droplet Effective Radius (REFFCLWC
592    ! REFFCLWS)
593    DO i = 1, klon
594      DO k = 1, klev
595        ! Weight to be used for outputs: eau_liquide*couverture nuageuse
596        lcc3dcon(i, k) = rnebcon(i, k)*phase3d(i, k)*clwcon(i, k) ! eau liquide convective
597        lcc3dstra(i, k) = pclc(i, k)*pqlwp(i, k)*phase3d(i, k)
598        lcc3dstra(i, k) = lcc3dstra(i, k) - lcc3dcon(i, k) ! eau liquide stratiforme
599        lcc3dstra(i, k) = max(lcc3dstra(i,k), 0.0)
600        !FC pour la glace (CAUSES)
601        icc3dcon(i, k) = rnebcon(i, k)*(1-phase3d(i, k))*clwcon(i, k) !  glace convective
602        icc3dstra(i, k)= pclc(i, k)*pqlwp(i, k)*(1-phase3d(i, k))
603        icc3dstra(i, k) = icc3dstra(i, k) - icc3dcon(i, k) ! glace stratiforme
604        icc3dstra(i, k) = max( icc3dstra(i, k), 0.0)
605        !FC (CAUSES)
606
607        ! Compute cloud droplet radius as above in meter
608        radius = 1.1*((pqlwp(i,k)*pplay(i,k)/(rd*t(i,k)))/(4./3*rpi*1000.* &
609          cdnc(i,k)))**(1./3.)
610        radius = max(radius, 5.E-6)
611        ! Convective Cloud Droplet Effective Radius (REFFCLWC) : variable 3D
612        reffclwc(i, k) = radius
613        reffclwc(i, k) = reffclwc(i, k)*lcc3dcon(i, k)
614        ! Stratiform Cloud Droplet Effective Radius (REFFCLWS) : variable 3D
615        reffclws(i, k) = radius
616        reffclws(i, k) = reffclws(i, k)*lcc3dstra(i, k)
617      END DO !klev
618    END DO !klon
619
620    ! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D
621
622    DO i = 1, klon
623      cldnvi(i) = 0.
624      lcc_integrat(i) = 0.
625      height(i) = 0.
626      DO k = 1, klev
627        cldnvi(i) = cldnvi(i) + cdnc(i, k)*lcc3d(i, k)*dh(i, k)
628        lcc_integrat(i) = lcc_integrat(i) + lcc3d(i, k)*dh(i, k)
629        height(i) = height(i) + dh(i, k)
630      END DO ! klev
631      lcc_integrat(i) = lcc_integrat(i)/height(i)
632      IF (lcc_integrat(i)<=1.0E-03) THEN
633        cldnvi(i) = cldnvi(i)*lcc(i)/seuil_neb
634      ELSE
635        cldnvi(i) = cldnvi(i)*lcc(i)/lcc_integrat(i)
636      END IF
637    END DO ! klon
638
639    DO i = 1, klon
640      DO k = 1, klev
641        IF (scdnc(i,k)<=0.0) scdnc(i, k) = 0.0
642        IF (reffclws(i,k)<=0.0) reffclws(i, k) = 0.0
643        IF (reffclwc(i,k)<=0.0) reffclwc(i, k) = 0.0
644        IF (lcc3d(i,k)<=0.0) lcc3d(i, k) = 0.0
645        IF (lcc3dcon(i,k)<=0.0) lcc3dcon(i, k) = 0.0
646        IF (lcc3dstra(i,k)<=0.0) lcc3dstra(i, k) = 0.0
647!FC (CAUSES)
648        IF (icc3dcon(i,k)<=0.0) icc3dcon(i, k) = 0.0
649        IF (icc3dstra(i,k)<=0.0) icc3dstra(i, k) = 0.0
650!FC (CAUSES)
651      END DO
652      IF (reffclwtop(i)<=0.0) reffclwtop(i) = 0.0
653      IF (cldncl(i)<=0.0) cldncl(i) = 0.0
654      IF (cldnvi(i)<=0.0) cldnvi(i) = 0.0
655      IF (lcc(i)<=0.0) lcc(i) = 0.0
656    END DO
657
658  END IF !ok_cdnc
659
660  first=.false. !to be sure
661
662  RETURN
663
664END SUBROUTINE newmicro
Note: See TracBrowser for help on using the repository browser.