Index: LMDZ4/branches/LMDZ4-dev/libf/phylmd/newmicro.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/phylmd/newmicro.F	(revision 1091)
+++ LMDZ4/branches/LMDZ4-dev/libf/phylmd/newmicro.F	(revision 1092)
@@ -110,191 +110,273 @@
       REAL zclear(klon)
       REAL zcloud(klon) 
+
+c **************************
+c *                        *
+c * DEBUT PARTIE OPTIMISEE *
+c *                        *
+c **************************
+
+      REAL diff_paprs(klon, klev), zfice1, zfice2(klon, klev)
+      REAL rad_chaud_tab(klon, klev), zflwp_var, zfiwp_var
+
 c
 c Calculer l'epaisseur optique et l'emmissivite des nuages
 c
-cIM inversion des DO
-      DO i = 1, klon
-       xflwp(i)=0.
-       xfiwp(i)=0.
-cccccccccccc!CDIR NOVECTOR
+c     IM inversion des DO
+      xflwp = 0.d0
+      xfiwp = 0.d0
+      xflwc = 0.d0
+      xfiwc = 0.d0
+
       DO k = 1, klev
-c
-       xflwc(i,k)=0.
-       xfiwc(i,k)=0.
-c
-         rad_chaud = rad_chau1
-         IF (k.LE.3) rad_chaud = rad_chau2
-         pclc(i,k) = MAX(pclc(i,k), seuil_neb)
-         zflwp(i) = 1000.*pqlwp(i,k)/RG/pclc(i,k)
-     .          *(paprs(i,k)-paprs(i,k+1))
-         zfice = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
-         zfice = MIN(MAX(zfice,0.0),1.0)
-         zfice = zfice**nexpo
-         radius = rad_chaud * (1.-zfice) + rad_froid * zfice
-         coef = coef_chau * (1.-zfice) + coef_froi * zfice
-         pcltau(i,k) = 3.0/2.0 * zflwp(i) / radius
-         pclemi(i,k) = 1.0 - EXP( - coef * zflwp(i))
-
-         if (ok_newmicro) then
-
-c -- liquid/ice cloud water paths:
-
-         zfice = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
-         zfice = MIN(MAX(zfice,0.0),1.0)
-
-         zflwp(i) = 1000.*(1.-zfice)*pqlwp(i,k)/pclc(i,k)
-     :          *(paprs(i,k)-paprs(i,k+1))/RG
-         zfiwp(i) = 1000.*zfice*pqlwp(i,k)/pclc(i,k)
-     :          *(paprs(i,k)-paprs(i,k+1))/RG
-
-         xflwp(i) = xflwp(i)+ (1.-zfice)*pqlwp(i,k)
-     :          *(paprs(i,k)-paprs(i,k+1))/RG
-         xfiwp(i) = xfiwp(i)+ zfice*pqlwp(i,k)
-     :          *(paprs(i,k)-paprs(i,k+1))/RG
-
-cIM Total Liquid/Ice water content
-         xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)
-         xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)
-cIM In-Cloud Liquid/Ice water content
-c        xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)/pclc(i,k)
-c        xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)/pclc(i,k)
-
-c -- effective cloud droplet radius (microns):
-
-c for liquid water clouds: 
+         DO i = 1, klon
+            diff_paprs(i,k) = (paprs(i,k)-paprs(i,k+1))/RG
+         ENDDO
+      ENDDO
+
+      IF (ok_newmicro) THEN
+
+
+         DO k = 1, klev
+            DO i = 1, klon
+               zfice2(i,k) = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
+               zfice2(i,k) = MIN(MAX(zfice2(i,k),0.0),1.0)
+c     IM Total Liquid/Ice water content                                    
+               xflwc(i,k) = (1.-zfice2(i,k))*pqlwp(i,k)
+               xfiwc(i,k) = zfice2(i,k)*pqlwp(i,k)
+c     IM In-Cloud Liquid/Ice water content
+c     xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)/pclc(i,k)
+c     xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)/pclc(i,k)
+            ENDDO
+         ENDDO
+
          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. * RPI * 1000. * cdnc(i,k)) )**(1./3.)
-            !
-            ! Convert to um. CDR shall be at least 3 um.
-            !
-c           rad_chaud = MAX(rad_chaud*1.e6, 3.) 
-            rad_chaud = MAX(rad_chaud*1.e6, 5.) 
-            
-            ! 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 = 
-     .           1.1 * ( (pqlwp(i,k) * pplay(i,k) / (RD * T(i,k)) )  
-     .               / (4./3. * RPI * 1000. * cdnc_pi(i,k)) )**(1./3.)
-            radius = MAX(radius*1.e6, 5.) 
-            
-            tc = t(i,k)-273.15
-            rei = 0.71*tc + 61.29 
-            if (tc.le.-81.4) rei = 3.5 
-            if (zflwp(i).eq.0.) radius = 1. 
-            if (zfiwp(i).eq.0. .or. rei.le.0.) rei = 1. 
-            cldtaupi(i,k) = 3.0/2.0 * zflwp(i) / radius
-     .             + zfiwp(i) * (3.448e-03  + 2.431/rei)
-         ENDIF                  ! ok_aie
-         ! 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)
-            
-c-jq end         
+            DO k = 1, klev
+               DO i = 1, klon
+                                ! 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)))
+               ENDDO
+            ENDDO
+            DO k = 1, klev
+               DO i = 1, klon
+!                  rad_chaud_tab(i,k) = 
+!     &                 MAX(1.1e6 
+!     &                 *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+!     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.),5.)
+                  rad_chaud_tab(i,k) = 
+     &                 1.1
+     &                 *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
+                  rad_chaud_tab(i,k) = MAX(rad_chaud_tab(i,k) * 1e6, 5.) 
+               ENDDO            
+            ENDDO
+         ELSE
+            DO k = 1, MIN(3,klev)
+               DO i = 1, klon
+                  rad_chaud_tab(i,k) = rad_chau2
+               ENDDO            
+            ENDDO
+            DO k = MIN(3,klev)+1, klev
+               DO i = 1, klon
+                  rad_chaud_tab(i,k) = rad_chau1
+               ENDDO            
+            ENDDO
+
+         ENDIF
          
-         rel = rad_chaud
-c for ice clouds: as a function of the ambiant temperature
-c [formula used by Iacobellis and Somerville (2000), with an 
-c asymptotical value of 3.5 microns at T<-81.4 C added to be 
-c consistent with observations of Heymsfield et al. 1986]:
-         tc = t(i,k)-273.15
-         rei = 0.71*tc + 61.29 
-         if (tc.le.-81.4) rei = 3.5 
-
-c -- cloud optical thickness :
-
-c [for liquid clouds, traditional formula, 
-c  for ice clouds, Ebert & Curry (1992)] 
-
-         if (zflwp(i).eq.0.) rel = 1. 
-         if (zfiwp(i).eq.0. .or. rei.le.0.) rei = 1. 
-         pcltau(i,k) = 3.0/2.0 * ( zflwp(i)/rel )
-     .             + zfiwp(i) * (3.448e-03  + 2.431/rei)
-
-c -- cloud infrared emissivity:
-
-c [the broadband infrared absorption coefficient is parameterized
-c  as a function of the effective cld droplet radius]
-
-c Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
-         k_ice = k_ice0 + 1.0/rei
-
-         pclemi(i,k) = 1.0
-     .      - EXP( - coef_chau*zflwp(i) - DF*k_ice*zfiwp(i) )
-
-         endif ! ok_newmicro
-
-         lo = (pclc(i,k) .LE. seuil_neb)
-         IF (lo) pclc(i,k) = 0.0
-         IF (lo) pcltau(i,k) = 0.0
-         IF (lo) pclemi(i,k) = 0.0
-         
-         IF (lo) cldtaupi(i,k) = 0.0
-         IF (.NOT.ok_aie) cldtaupi(i,k)=pcltau(i,k)            
-      ENDDO
-      ENDDO
-ccc      DO k = 1, klev
-ccc      DO i = 1, klon
-ccc         t(i,k) = t(i,k)
-ccc         pclc(i,k) = MAX( 1.e-5 , pclc(i,k) )
-ccc         lo = pclc(i,k) .GT. (2.*1.e-5)
-ccc         zflwp = pqlwp(i,k)*1000.*(paprs(i,k)-paprs(i,k+1))
-ccc     .          /(rg*pclc(i,k))
-ccc         zradef = 10.0 + (1.-sigs(k))*45.0
-ccc         pcltau(i,k) = 1.5 * zflwp / zradef
-ccc         zfice=1.0-MIN(MAX((t(i,k)-263.)/(273.-263.),0.0),1.0)
-ccc         zmsac = 0.13*(1.0-zfice) + 0.08*zfice
-ccc         pclemi(i,k) = 1.-EXP(-zmsac*zflwp)
-ccc         if (.NOT.lo) pclc(i,k) = 0.0
-ccc         if (.NOT.lo) pcltau(i,k) = 0.0
-ccc         if (.NOT.lo) pclemi(i,k) = 0.0
-ccc      ENDDO
-ccc      ENDDO
-cccccc      print*, 'pas de nuage dans le rayonnement'
-cccccc      DO k = 1, klev
-cccccc      DO i = 1, klon
-cccccc         pclc(i,k) = 0.0
-cccccc         pcltau(i,k) = 0.0
-cccccc         pclemi(i,k) = 0.0
-cccccc      ENDDO
-cccccc      ENDDO
-C
-C COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
-C
-cIM cf. CR:test: calcul prenant ou non en compte le recouvrement
-cinitialisations
+         DO k = 1, klev
+!            IF(.not.ok_aie) THEN
+            rad_chaud = rad_chau1
+            IF (k.LE.3) rad_chaud = rad_chau2
+!            ENDIF
+            DO i = 1, klon
+               IF (pclc(i,k) .LE. seuil_neb) THEN
+               
+c     -- effective cloud droplet radius (microns):
+               
+c     for liquid water clouds: 
+                                ! 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) = seuil_neb*(1.-zfice2(i,k))            
+                  re(i,k) = rad_chaud_tab(i,k)*fl(i,k)
+                  
+                  pclc(i,k) = 0.0
+                  pcltau(i,k) = 0.0
+                  pclemi(i,k) = 0.0
+                  cldtaupi(i,k) = 0.0                  
+               ELSE
+
+c     -- liquid/ice cloud water paths:
+                  
+                  zflwp_var= 1000.*(1.-zfice2(i,k))*pqlwp(i,k)/pclc(i,k)
+     &                 *diff_paprs(i,k)
+                  zfiwp_var= 1000.*zfice2(i,k)*pqlwp(i,k)/pclc(i,k)
+     &                 *diff_paprs(i,k)
+                  
+c     -- effective cloud droplet radius (microns):
+               
+c     for liquid water clouds: 
+                                    
+                  IF (ok_aie) THEN
+                     radius = 
+     &                    1.1
+     &                    *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+     &                    /(4./3.*RPI*1000.*cdnc_pi(i,k)))**(1./3.)
+                     radius = MAX(radius*1e6, 5.) 
+                  
+                     tc = t(i,k)-273.15
+                     rei = 0.71*tc + 61.29 
+                     if (tc.le.-81.4) rei = 3.5 
+                     if (zflwp_var.eq.0.) radius = 1. 
+                     if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 
+                     cldtaupi(i,k) = 3.0/2.0 * zflwp_var / radius
+     &                    + zfiwp_var * (3.448e-03  + 2.431/rei)
+                  ENDIF         ! ok_aie
+                                ! 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.-zfice2(i,k))            
+                  re(i,k) = rad_chaud_tab(i,k)*fl(i,k)
+                  
+                  rel = rad_chaud_tab(i,k)
+c     for ice clouds: as a function of the ambiant temperature
+c     [formula used by Iacobellis and Somerville (2000), with an 
+c     asymptotical value of 3.5 microns at T<-81.4 C added to be 
+c     consistent with observations of Heymsfield et al. 1986]:
+                  tc = t(i,k)-273.15
+                  rei = 0.71*tc + 61.29 
+                  if (tc.le.-81.4) rei = 3.5 
+c     -- cloud optical thickness :
+               
+c     [for liquid clouds, traditional formula, 
+c     for ice clouds, Ebert & Curry (1992)] 
+                  
+                  if (zflwp_var.eq.0.) rel = 1. 
+                  if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 
+                  pcltau(i,k) = 3.0/2.0 * ( zflwp_var/rel )
+     &                 + zfiwp_var * (3.448e-03  + 2.431/rei)
+c     -- cloud infrared emissivity:
+               
+c     [the broadband infrared absorption coefficient is parameterized
+c     as a function of the effective cld droplet radius]
+               
+c     Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
+                  k_ice = k_ice0 + 1.0/rei
+                  
+                  pclemi(i,k) = 1.0
+     &                 - EXP( -coef_chau*zflwp_var - DF*k_ice*zfiwp_var)
+
+               ENDIF
+               
+            ENDDO
+         ENDDO
+
+         DO k = 1, klev
+            DO i = 1, klon
+               xflwp(i) = xflwp(i)+ xflwc(i,k) * diff_paprs(i,k)
+               xfiwp(i) = xfiwp(i)+ xfiwc(i,k) * diff_paprs(i,k)
+            ENDDO
+         ENDDO
+
+      ELSE
+         DO k = 1, klev
+            rad_chaud = rad_chau1
+            IF (k.LE.3) rad_chaud = rad_chau2
+            DO i = 1, klon
+                              
+               IF (pclc(i,k) .LE. seuil_neb) THEN
+
+                  pclc(i,k) = 0.0
+                  pcltau(i,k) = 0.0
+                  pclemi(i,k) = 0.0
+                  cldtaupi(i,k) = 0.0
+
+               ELSE
+
+                  zflwp_var = 1000.*pqlwp(i,k)*diff_paprs(i,k)
+     &                 /pclc(i,k)
+                  
+                  zfice1 = MIN(
+     &                 MAX( 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
+     &                 ,0.0),1.0)**nexpo
+                  
+                  radius = rad_chaud * (1.-zfice1) + rad_froid * zfice1
+                  coef   = coef_chau * (1.-zfice1) + coef_froi * zfice1
+
+                  pcltau(i,k) = 3.0 * zflwp_var / (2.0 * radius)
+                  pclemi(i,k) = 1.0 - EXP( - coef * zflwp_var)
+
+               ENDIF
+                              
+            ENDDO
+         ENDDO
+      ENDIF
+      
+      IF (.NOT.ok_aie) THEN
+         DO k = 1, klev
+            DO i = 1, klon
+               cldtaupi(i,k)=pcltau(i,k)
+            ENDDO
+         ENDDO               
+      ENDIF
+
+ccc   DO k = 1, klev
+ccc   DO i = 1, klon
+ccc   t(i,k) = t(i,k)
+ccc   pclc(i,k) = MAX( 1.e-5 , pclc(i,k) )
+ccc   lo = pclc(i,k) .GT. (2.*1.e-5)
+ccc   zflwp = pqlwp(i,k)*1000.*(paprs(i,k)-paprs(i,k+1))
+ccc   .          /(rg*pclc(i,k))
+ccc   zradef = 10.0 + (1.-sigs(k))*45.0
+ccc   pcltau(i,k) = 1.5 * zflwp / zradef
+ccc   zfice=1.0-MIN(MAX((t(i,k)-263.)/(273.-263.),0.0),1.0)
+ccc   zmsac = 0.13*(1.0-zfice) + 0.08*zfice
+ccc   pclemi(i,k) = 1.-EXP(-zmsac*zflwp)
+ccc   if (.NOT.lo) pclc(i,k) = 0.0
+ccc   if (.NOT.lo) pcltau(i,k) = 0.0
+ccc   if (.NOT.lo) pclemi(i,k) = 0.0
+ccc   ENDDO
+ccc   ENDDO
+ccccc print*, 'pas de nuage dans le rayonnement'
+ccccc DO k = 1, klev
+ccccc DO i = 1, klon
+ccccc pclc(i,k) = 0.0
+ccccc pcltau(i,k) = 0.0
+ccccc pclemi(i,k) = 0.0
+ccccc ENDDO
+ccccc ENDDO
+C     
+C     COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
+C     
+c     IM cf. CR:test: calcul prenant ou non en compte le recouvrement
+c     initialisations
       DO i=1,klon
          zclear(i)=1.
@@ -308,56 +390,70 @@
 cIM cf CR DO k=1,klev
       DO k = klev, 1, -1
-      DO i = 1, klon
-         pctlwp(i) = pctlwp(i) 
-     .             + pqlwp(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
-cIM cf. CR
-            IF (NOVLP.EQ.1) THEN
+         DO i = 1, klon
+            pctlwp(i) = pctlwp(i) 
+     &           + pqlwp(i,k)*diff_paprs(i,k)
+         ENDDO
+      ENDDO
+c     IM cf. CR
+      IF (NOVLP.EQ.1) THEN
+         DO k = klev, 1, -1
+            DO i = 1, klon
                zclear(i)=zclear(i)*(1.-MAX(pclc(i,k),zcloud(i)))
-     s                            /(1.-MIN(zcloud(i),1.-ZEPSEC))
+     &              /(1.-MIN(zcloud(i),1.-ZEPSEC))
                pct(i)=1.-zclear(i) 
-               if (pplay(i,k).LE.cetahb*paprs(i,1)) then
+               IF (pplay(i,k).LE.cetahb*paprs(i,1)) THEN
                   pch(i) = pch(i)*(1.-MAX(pclc(i,k),zcloud(i)))
-     s                            /(1.-MIN(zcloud(i),1.-ZEPSEC))
-               else if (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
-     .                  pplay(i,k).LE.cetamb*paprs(i,1)) then
+     &                 /(1.-MIN(zcloud(i),1.-ZEPSEC))
+               ELSE IF (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
+     &                 pplay(i,k).LE.cetamb*paprs(i,1)) THEN
                   pcm(i) = pcm(i)*(1.-MAX(pclc(i,k),zcloud(i)))
-     s                            /(1.-MIN(zcloud(i),1.-ZEPSEC))
-               else if (pplay(i,k).GT.cetamb*paprs(i,1)) then 
+     &                 /(1.-MIN(zcloud(i),1.-ZEPSEC))
+               ELSE IF (pplay(i,k).GT.cetamb*paprs(i,1)) THEN 
                   pcl(i) = pcl(i)*(1.-MAX(pclc(i,k),zcloud(i)))
-     s                            /(1.-MIN(zcloud(i),1.-ZEPSEC))
+     &                 /(1.-MIN(zcloud(i),1.-ZEPSEC))
                endif
                zcloud(i)=pclc(i,k)
-            ELSE IF (NOVLP.EQ.2) THEN
+            ENDDO
+         ENDDO
+      ELSE IF (NOVLP.EQ.2) THEN
+         DO k = klev, 1, -1
+            DO i = 1, klon
                zcloud(i)=MAX(pclc(i,k),zcloud(i))
                pct(i)=zcloud(i)
-               if (pplay(i,k).LE.cetahb*paprs(i,1)) then
+               IF (pplay(i,k).LE.cetahb*paprs(i,1)) THEN
                   pch(i) = MIN(pclc(i,k),pch(i))
-               else if (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
-     .                  pplay(i,k).LE.cetamb*paprs(i,1)) then
+               ELSE IF (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
+     &                 pplay(i,k).LE.cetamb*paprs(i,1)) THEN
                   pcm(i) = MIN(pclc(i,k),pcm(i))
-               else if (pplay(i,k).GT.cetamb*paprs(i,1)) then
+               ELSE IF (pplay(i,k).GT.cetamb*paprs(i,1)) THEN
                   pcl(i) = MIN(pclc(i,k),pcl(i))
                endif
-            ELSE IF (NOVLP.EQ.3) THEN
+            ENDDO
+         ENDDO
+      ELSE IF (NOVLP.EQ.3) THEN
+         DO k = klev, 1, -1
+            DO i = 1, klon
                zclear(i)=zclear(i)*(1.-pclc(i,k))
                pct(i)=1-zclear(i)
-               if (pplay(i,k).LE.cetahb*paprs(i,1)) then
-               pch(i) = pch(i)*(1.0-pclc(i,k))
-               else if (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
-     .                  pplay(i,k).LE.cetamb*paprs(i,1)) then 
-               pcm(i) = pcm(i)*(1.0-pclc(i,k))
-               else if (pplay(i,k).GT.cetamb*paprs(i,1)) then
-               pcl(i) = pcl(i)*(1.0-pclc(i,k))
+               IF (pplay(i,k).LE.cetahb*paprs(i,1)) THEN
+                  pch(i) = pch(i)*(1.0-pclc(i,k))
+               ELSE IF (pplay(i,k).GT.cetahb*paprs(i,1) .AND.
+     &                 pplay(i,k).LE.cetamb*paprs(i,1)) THEN 
+                  pcm(i) = pcm(i)*(1.0-pclc(i,k))
+               ELSE IF (pplay(i,k).GT.cetamb*paprs(i,1)) THEN
+                  pcl(i) = pcl(i)*(1.0-pclc(i,k))
                endif
-            ENDIF
-         ENDDO
-      ENDDO
-C
+            ENDDO
+         ENDDO
+      ENDIF
+      
+C     
       DO i = 1, klon
-cIM cf. CR          pct(i)=1.-pct(i)
+c     IM cf. CR          pct(i)=1.-pct(i)
          pch(i)=1.-pch(i)
          pcm(i)=1.-pcm(i)
          pcl(i)=1.-pcl(i)
       ENDDO
+      
 C
       RETURN
