Index: LMDZ5/trunk/libf/phylmd/clesphys.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/clesphys.h	(revision 2945)
+++ LMDZ5/trunk/libf/phylmd/clesphys.h	(revision 2946)
@@ -29,4 +29,6 @@
 !OM Fonte calotte dans bilan eau
        LOGICAL ok_lic_melt
+!OB Depot de vapeur d eau sur la calotte pour le bilan eau
+       LOGICAL ok_lic_cond
 
 !IM simulateur ISCCP 
@@ -129,5 +131,5 @@
      &     , ip_ebil_phy                                                &
      &     , iflag_gusts ,iflag_z0_oce                                  &
-     &     , ok_lic_melt,           aer_type                            &
+     &     , ok_lic_melt, ok_lic_cond, aer_type                         &
      &     , iflag_rrtm, ok_strato,ok_hines, ok_qch4                    &
      &     , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo          &
Index: LMDZ5/trunk/libf/phylmd/conf_phys_m.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 2945)
+++ LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 2946)
@@ -207,4 +207,5 @@
     REAL,SAVE :: cvl_corr_omp
     LOGICAL,SAVE :: ok_lic_melt_omp
+    LOGICAL,SAVE :: ok_lic_cond_omp
     !
     LOGICAL,SAVE  :: cycle_diurne_omp,soil_model_omp,new_oliq_omp
@@ -1383,4 +1384,12 @@
     ok_lic_melt_omp = .FALSE.
     CALL getin('ok_lic_melt', ok_lic_melt_omp)
+
+
+    !Config Key = ok_lic_cond
+    !Config Desc = Prise en compte depot de vapeur d'eau sur la calotte dans le bilan d'eau
+    !Config Def  = .FALSE.
+    !Config Help = mettre a .TRUE. pour assurer la conservation en eau
+    ok_lic_cond_omp = .FALSE.
+    CALL getin('ok_lic_cond', ok_lic_cond_omp)
 
     !
Index: LMDZ5/trunk/libf/phylmd/fonte_neige_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/fonte_neige_mod.F90	(revision 2945)
+++ LMDZ5/trunk/libf/phylmd/fonte_neige_mod.F90	(revision 2946)
@@ -213,9 +213,20 @@
 
     snow_evap = 0.
-    WHERE (evap > 0. ) 
-       snow_evap = MIN (snow / dtime, evap) 
-       snow = snow - snow_evap * dtime
-       snow = MAX(0.0, snow)
-    END WHERE
+  
+    IF (.NOT. ok_lic_cond) THEN
+!---only positive evaporation has an impact on snow 
+!---note that this could create a bit of water
+!---this was the default until CMIP6 
+      WHERE (evap > 0. )
+         snow_evap = MIN (snow / dtime, evap)    !---one cannot evaporate more than the amount of snow
+         snow = snow - snow_evap * dtime         !---snow that remains on the ground
+         snow = MAX(0.0, snow)                   !---just in case
+      END WHERE
+    ELSE
+!--now considers both positive and negative evaporation in the budget of snow 
+      snow_evap = MIN (snow / dtime, evap)    !---one cannot evaporate more than the amount of snow
+      snow = snow - snow_evap * dtime         !---snow that remains or deposits on the ground
+      snow = MAX(0.0, snow)                   !---just in case
+   ENDIF
     
     bil_eau_s(:) = (precip_rain(:) * dtime) - (evap(:) - snow_evap(:)) * dtime
@@ -232,8 +243,8 @@
     fqcalving(:) = 0.0
     fqfonte(:) = 0.0
+
     DO i = 1, knon
        ! Y'a-t-il fonte de neige?
-       neige_fond = ((snow(i) > epsfra .OR. nisurf == is_sic .OR. nisurf == is_lic) &
-            .AND. tsurf_new(i) >= RTT)
+       neige_fond = (snow(i)>epsfra .OR. nisurf==is_sic .OR. nisurf==is_lic) .AND. tsurf_new(i)>=RTT
        IF (neige_fond) THEN
           fq_fonte     = MIN( MAX((tsurf_new(i)-RTT )/chasno,0.0),snow(i))
@@ -258,9 +269,8 @@
        ENDIF
 
-       ! s'il y a une hauteur trop importante de neige, elle s'coule
+       ! s'il y a une hauteur trop importante de neige, elle est ecretee
        fqcalving(i) = MAX(0., snow(i) - snow_max)/dtime
        snow(i)=MIN(snow(i),snow_max)
-    END DO
-
+    ENDDO
 
     IF (nisurf == is_ter) THEN
@@ -269,13 +279,14 @@
           run_off_ter(i) = run_off_ter(i) + MAX(qsol(i) - max_eau_sol, 0.0)
           qsol(i) = MIN(qsol(i), max_eau_sol) 
-       END DO
+       ENDDO
     ELSE IF (nisurf == is_lic) THEN
        DO i = 1, knon
           j = knindex(i)
-          run_off_lic(i)   = (coeff_rel *  fqcalving(i)) + &
-               (1. - coeff_rel) * run_off_lic_0(j)
+          !--temporal filtering
+          run_off_lic(i)   = coeff_rel*fqcalving(i) + (1.-coeff_rel)*run_off_lic_0(j)
           run_off_lic_0(j) = run_off_lic(i)
+          !--add melting snow and liquid precip to runoff of ice cap
           run_off_lic(i)   = run_off_lic(i) + fqfonte(i) + precip_rain(i)
-       END DO
+       ENDDO
     ENDIF
     
