Index: /LMDZ5/trunk/libf/phylmd/fisrtilp.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/fisrtilp.F90	(revision 2465)
+++ /LMDZ5/trunk/libf/phylmd/fisrtilp.F90	(revision 2466)
@@ -124,4 +124,8 @@
   REAL dzfice(klon)
   REAL zsolid
+!!!!
+!  Variables pour Bergeron
+  REAL zcp, coef1, DeltaT
+  REAL zqpreci(klon), zqprecl(klon)
   !
   LOGICAL appel1er
@@ -457,5 +461,8 @@
 
 !CR ATTENTION: deplacement de la fonte de la glace
-           zmelt = ((zt(i)-273.15)/(ztfondue-273.15))**2
+!jyg : Bug !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! jyg
+!!!        zmelt = ((zt(i)-273.15)/(ztfondue-273.15))**2  !!!!!!!!! jyg
+!jyg : Bug !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! jyg
+           zmelt = ((zt(i)-273.15)/(ztfondue-273.15))             ! jyg
            zmelt = MIN(MAX(zmelt,0.),1.)
            zrfl(i)=zrfl(i)+zmelt*zifl(i)
@@ -907,8 +914,8 @@
               radliq(i,k) = radliq(i,k) + zoliq(i)/REAL(ninter+1)
            ENDIF
-        ENDDO
-     ENDDO
-     !
-         IF (.NOT. ice_thermo) THEN
+        ENDDO  ! i = 1,klon
+     ENDDO     ! n = 1,ninter
+     !
+     IF (.NOT. ice_thermo) THEN
        DO i = 1, klon
          IF (rneb(i,k).GT.0.0) THEN
@@ -919,4 +926,45 @@
        ENDDO
      ELSE
+!
+!CR&JYG<
+! On prend en compte l'effet Bergeron dans les flux de precipitation :
+! Si T < 0 C, alors les precipitations liquides sont converties en glace, ce qui
+! provoque un accroissement de temperature DeltaT. L'effet de DeltaT sur le condensat
+! et les precipitations est grossierement pris en compte en linearisant les equations 
+! et en approximant le processus de precipitation liquide par un processus a seuil.
+! On fait l'hypothese que le condensat nuageux n'est pas modifié dans cette opération.
+! Le condensat precipitant liquide est supprime (dans la limite DeltaT<273-T).
+! Le condensat precipitant solide est augmente.
+! La vapeur d'eau est augmentee.
+!
+       IF ((iflag_bergeron .EQ. 2)) THEN
+         DO i = 1, klon
+           IF (rneb(i,k) .GT. 0.0) THEN
+             zqpreci(i)=(zcond(i)-zoliq(i))*zfice(i)
+             zqprecl(i)=(zcond(i)-zoliq(i))*(1.-zfice(i))
+             zcp=RCPD*(1.0+RVTMP2*(zq(i)+zcond(i)))
+             coef1 = RLMLT*zdqs(i)/RLVTT
+             DeltaT = max( min( RTT-zt(i), RLMLT*zqprecl(i)/zcp/(1.+coef1) ) , 0.)
+             zqpreci(i) = zqpreci(i) + zcp/RLMLT*DeltaT
+             zqprecl(i) = max( zqprecl(i) - zcp/RLMLT*(1.+coef1)*DeltaT, 0. )
+             zcond(i)   = max( zcond(i)   - zcp/RLVTT*zdqs(i)*DeltaT, 0. )
+             zq(i)      = zq(i)      + zcp/RLVTT*zdqs(i)*DeltaT
+             zt(i)      = zt(i)      + DeltaT
+           ENDIF  ! rneb(i,k) .GT. 0.0
+         ENDDO
+         DO i = 1, klon
+           IF (rneb(i,k).GT.0.0) THEN
+             d_ql(i,k) = (1-zfice(i))*zoliq(i)
+             d_qi(i,k) = zfice(i)*zoliq(i)
+             zrfl(i) = zrfl(i)+ zqprecl(i) &
+                 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 
+             zifl(i) = zifl(i)+ zqpreci(i) &
+                      *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)  
+           ENDIF                      
+         ENDDO
+!!
+       ELSE  ! iflag_bergeron
+!>CR&JYG
+!!
        DO i = 1, klon
          IF (rneb(i,k).GT.0.0) THEN
@@ -940,5 +988,5 @@
 
 !CR : on prend en compte l'effet Bergeron dans les flux de precipitation
-           if ((iflag_bergeron.eq.1).and.(zt(i).LT.273.15)) then
+           IF ((iflag_bergeron .EQ. 1) .AND. (zt(i) .LT. 273.15)) THEN
               zsolid = zrfl(i)
               zifl(i) = zifl(i)+zrfl(i)
@@ -946,10 +994,12 @@
               zt(i)=zt(i)+zsolid*(RG*dtime)/(paprs(i,k)-paprs(i,k+1)) &
                       *(RLSTT-RLVTT)/RCPD/(1.0+RVTMP2*zq(i))
-           endif
+           ENDIF  ! (iflag_bergeron .EQ. 1) .AND. (zt(i) .LT. 273.15)
 !RC   
 
-         ENDIF                      
+         ENDIF ! rneb(i,k).GT.0.0
        ENDDO
-     ENDIF
+
+       ENDIF  ! iflag_bergeron .EQ. 2
+     ENDIF  ! .NOT. ice_thermo
 
 !CR: la fonte est faite au debut
