Index: /LMDZ5/trunk/libf/phylmd/YOETHF.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/YOETHF.h	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/YOETHF.h	(revision 2799)
@@ -19,4 +19,6 @@
       REAL R5ALVCP,R5ALSCP,RALVDCP,RALSDCP,RALFDCP,RTWAT,RTBER,RTBERCU
       REAL RTICE,RTICECU,RTWAT_RTICE_R,RTWAT_RTICECU_R,RKOOP1,RKOOP2
+      LOGICAL OK_BAD_ECMWF_THERMO ! If TRUE, then variables set by rrtm/suphec.F90
+                                  ! If FALSE, then variables set by suphel.F90
       COMMON /YOETHF/R2ES, R3LES, R3IES, R4LES, R4IES, R5LES, R5IES,    &
      &               RVTMP2, RHOH2O,                                    &
@@ -24,5 +26,6 @@
      &               RALFDCP,RTWAT,RTBER,RTBERCU,                       &
      &               RTICE,RTICECU,RTWAT_RTICE_R,RTWAT_RTICECU_R,RKOOP1,&
-     &               RKOOP2
+     &               RKOOP2,                                            &
+     &               OK_BAD_ECMWF_THERMO
 
 !$OMP THREADPRIVATE(/YOETHF/)
Index: /LMDZ5/trunk/libf/phylmd/climb_hq_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/climb_hq_mod.F90	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/climb_hq_mod.F90	(revision 2799)
@@ -9,5 +9,5 @@
   SAVE 
   PRIVATE
-  PUBLIC :: climb_hq_down, climb_hq_up
+  PUBLIC :: climb_hq_down, climb_hq_up, d_h_col_vdf, f_h_bnd
 
   REAL, DIMENSION(:,:), ALLOCATABLE :: gamaq, gamah
@@ -23,4 +23,10 @@
   REAL, DIMENSION(:,:), ALLOCATABLE :: Kcoefhq
   !$OMP THREADPRIVATE(Kcoefhq)
+  REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: h_old ! for diagnostics, h before solving diffusion
+  !$OMP THREADPRIVATE(h_old)
+  REAL, SAVE, DIMENSION(:), ALLOCATABLE :: d_h_col_vdf ! for diagnostics, vertical integral of enthalpy change
+  !$OMP THREADPRIVATE(d_h_col_vdf)
+  REAL, SAVE, DIMENSION(:), ALLOCATABLE :: f_h_bnd ! for diagnostics, enthalpy flux at surface
+  !$OMP THREADPRIVATE(d_h_bnd)
 
 CONTAINS
@@ -71,9 +77,9 @@
     LOGICAL, SAVE                            :: first=.TRUE.
     !$OMP THREADPRIVATE(first)
-    REAL, DIMENSION(klon,klev)               :: local_H
+! JLD now renamed h_old and declared in module
+!    REAL, DIMENSION(klon,klev)               :: local_H
     REAL, DIMENSION(klon)                    :: psref 
     REAL                                     :: delz, pkh
     INTEGER                                  :: k, i, ierr
-
 ! Include
 !****************************************************************************************
@@ -113,4 +119,13 @@
        ALLOCATE(gamah(1:klon,2:klev), STAT=ierr)
        IF ( ierr /= 0 ) PRINT*,' pb in allloc gamah, ierr=', ierr
+       
+       ALLOCATE(h_old(klon,klev), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc h_old, ierr=', ierr
+       
+       ALLOCATE(d_h_col_vdf(klon), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc d_h_col_vdf, ierr=', ierr
+       
+       ALLOCATE(f_h_bnd(klon), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc f_h_bnd, ierr=', ierr
     END IF
 
@@ -177,15 +192,15 @@
 !
 !****************************************************************************************
-    local_H(:,:) = 0.0
+    h_old(:,:) = 0.0
 
     DO k=1,klev
        DO i = 1, knon
           ! convertie la temperature en entalpie potentielle
-          local_H(i,k) = RCPD * temp(i,k) * &
+          h_old(i,k) = RCPD * temp(i,k) * &
                (psref(i)/pplay(i,k))**RKAPPA
        ENDDO
     ENDDO
 
-    CALL calc_coef(knon, Kcoefhq(:,:), gamah(:,:), delp(:,:), local_H(:,:), &
+    CALL calc_coef(knon, Kcoefhq(:,:), gamah(:,:), delp(:,:), h_old(:,:), &
          Ccoef_H(:,:), Dcoef_H(:,:), Acoef_H, Bcoef_H)
  
@@ -349,4 +364,5 @@
 ! 1) 
 ! Definition of some variables
+    REAL, DIMENSION(klon,klev)               :: d_h, zairm
 !
 !****************************************************************************************
@@ -355,4 +371,6 @@
     d_q(:,:)    = 0.0
     d_t(:,:)    = 0.0
+    d_h(:,:)    = 0.0
+    f_h_bnd(:)= 0.0
 
     psref(1:knon) = paprs(1:knon,1)  
@@ -393,5 +411,5 @@
     q_new(1:knon,1) = Acoef_Q(1:knon) + Bcoef_Q(1:knon)*flx_q1(1:knon)*dtime
     h_new(1:knon,1) = Acoef_H(1:knon) + Bcoef_H(1:knon)*flx_h1(1:knon)*dtime
-    
+    f_h_bnd(1:knon) = flx_h1(1:knon)
 !- All the other layers 
     DO k = 2, klev
@@ -427,10 +445,15 @@
 !
 !****************************************************************************************
-
+    d_h_col_vdf(:) = 0.0
     DO k = 1, klev
        DO i = 1, knon
           d_t(i,k) = h_new(i,k)/(psref(i)/pplay(i,k))**RKAPPA/RCPD - t_old(i,k)
           d_q(i,k) = q_new(i,k) - q_old(i,k)
-       END DO
+          d_h(i,k) = h_new(i,k) - h_old(i,k)
+!JLD          d_t(i,k) = d_h(i,k)/(psref(i)/pplay(i,k))**RKAPPA/RCPD    !correction a venir
+    ! layer air mass
+          zairm(i, k) = (paprs(i,k)-paprs(i,k+1))/rg
+          d_h_col_vdf(i) = d_h_col_vdf(i) + d_h(i,k)*zairm(i,k)
+        END DO
     END DO
 
@@ -448,4 +471,6 @@
        DEALLOCATE(Kcoefhq,stat=ierr)
        IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Kcoefhq, ierr=', ierr
+       DEALLOCATE(h_old, d_h_col_vdf, f_h_bnd, stat=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in dealllocate h_old, d_h_col_vdf, f_h_bnd, ierr=', ierr
     END IF
   END SUBROUTINE climb_hq_up
Index: /LMDZ5/trunk/libf/phylmd/phys_output_var_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_output_var_mod.F90	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/phys_output_var_mod.F90	(revision 2799)
@@ -24,4 +24,17 @@
   REAL, SAVE, ALLOCATABLE :: bils_latent(:) ! bilan de chaleur au sol
   !$OMP THREADPRIVATE(bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
+  ! output variables for energy conservation tests, computed in add_phys_tend
+  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
+  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
+  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! solid watter mass budget for each column (kg/m2/s)
+  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
+  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
+  REAL, SAVE, ALLOCATABLE :: d_h_dair_col(:)  ! enthalpy budget of dry air for each column (W/m2)
+  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
+  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
+  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of solid watter  for each column (W/m2)
+  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
+  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col)
+  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
 
 ! Marine
@@ -121,4 +134,8 @@
 
     allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
+    allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
+  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_col(klon))
+    d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
+    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_col=0.
 
 ! Marine
@@ -155,4 +172,6 @@
     deallocate(snow_o,zfra_o,itau_con)
     deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
+    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
+  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
 
 ! Marine
Index: /LMDZ5/trunk/libf/phylmd/physiq_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/physiq_mod.F90	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/physiq_mod.F90	(revision 2799)
@@ -242,4 +242,6 @@
 
     USE cmp_seri_mod
+    USE add_phys_tend_mod, only : add_pbl_tend, add_phys_tend, prt_enerbil, &
+  &      fl_ebil, fl_cor_ebil
 
     !IM stations CFMIP
@@ -406,6 +408,6 @@
     REAL pphis(klon)
     REAL presnivs(klev)
-    REAL znivsig(klev)
-    real pir
+!JLD    REAL znivsig(klev)
+!JLD    real pir
 
     REAL u(klon,klev)
@@ -467,6 +469,6 @@
     ! jmin_debut : indice minimum de j; nbptj : nombre de points en
     ! direction j (latitude)
-    INTEGER imin_debut, nbpti
-    INTEGER jmin_debut, nbptj 
+!JLD    INTEGER imin_debut, nbpti
+!JLD    INTEGER jmin_debut, nbptj 
     !IM: region='3d' <==> sorties en global
     CHARACTER*3 region
@@ -617,6 +619,6 @@
     real env_tke_max0(klon)     ! TKE dans l'environnement au LCL 
 
-    !---D\'eclenchement stochastique
-    integer :: tau_trig(klon)
+!JLD    !---D\'eclenchement stochastique
+!JLD    integer :: tau_trig(klon)
 
     REAL,SAVE :: random_notrig_max=1.
@@ -652,6 +654,4 @@
     REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
     ! RomP <<<
-
-    REAL          :: calday
 
     !IM cf FH pour Tiedtke 080604
@@ -751,5 +751,7 @@
     REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
     !
+#ifdef INCA
     REAL zxsnow_dummy(klon)
+#endif
     REAL zsav_tsol(klon)
     !
@@ -762,9 +764,9 @@
     LOGICAL zx_ajustq
     !
-    REAL za, zb
-    REAL zx_t, zx_qs, zdelta, zcor, zlvdcp, zlsdcp
+    REAL za
+    REAL zx_t, zx_qs, zdelta, zcor
     real zqsat(klon,klev)
     !
-    INTEGER i, k, iq, j, nsrf, ll, l
+    INTEGER i, k, iq, nsrf, l
     !
     REAL t_coup
@@ -874,5 +876,5 @@
 
     !
-    integer itau_w   ! pas de temps ecriture = itap + itau_phy
+!JLD    integer itau_w   ! pas de temps ecriture = itap + itau_phy
     !
     !
@@ -886,9 +888,9 @@
     REAL tabcntr0( length       )
     !
-    INTEGER ndex2d(nbp_lon*nbp_lat)
+!JLD    INTEGER ndex2d(nbp_lon*nbp_lat)
     !IM
     !
     !IM AMIP2 BEG
-    REAL moyglo, mountor
+!JLD    REAL moyglo, mountor
     !IM 141004 BEG
     REAL zustrdr(klon), zvstrdr(klon)
@@ -904,6 +906,6 @@
     !  REAL airedyn(nbp_lon+1,nbp_lat)
     !IM 190504 END
-    LOGICAL ok_msk
-    REAL msk(klon)
+!JLD    LOGICAL ok_msk
+!JLD    REAL msk(klon)
     !ym A voir plus tard
     !ym      REAL zm_wo(jjmp1, klev)
@@ -912,7 +914,7 @@
     REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
     REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 
-    REAL zx_tmp_2d(nbp_lon,nbp_lat)
-    REAL zx_lon(nbp_lon,nbp_lat)
-    REAL zx_lat(nbp_lon,nbp_lat)
+!JLD    REAL zx_tmp_2d(nbp_lon,nbp_lat)
+!JLD    REAL zx_lon(nbp_lon,nbp_lat)
+!JLD    REAL zx_lat(nbp_lon,nbp_lat)
     !
     INTEGER nid_ctesGCM
@@ -930,11 +932,11 @@
     REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert.
     !
-    REAL zjulian
-    SAVE zjulian
-!$OMP THREADPRIVATE(zjulian)
-
-    INTEGER nhori, nvert
-    REAL zsto
-    REAL zstophy, zout
+!JLD    REAL zjulian
+!JLD    SAVE zjulian
+!JLD!$OMP THREADPRIVATE(zjulian)
+
+!JLD    INTEGER nhori, nvert
+!JLD    REAL zsto
+!JLD    REAL zstophy, zout
 
     character*20 modname
@@ -950,22 +952,10 @@
     parameter (prof2d_on = 1, prof3d_on = 2, &
          prof2d_av = 3, prof3d_av = 4)
-    !     Variables liees au bilan d'energie et d'enthalpi
     REAL ztsol(klon)
-    REAL      d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec
-    REAL      d_h_vcol_phy
-    REAL      fs_bound, fq_bound
-    SAVE      d_h_vcol_phy
-    !$OMP THREADPRIVATE(d_h_vcol_phy)
-    REAL      zero_v(klon)
-    CHARACTER*40 ztit
-    INTEGER   ip_ebil  ! PRINT level for energy conserv. diag.
-    SAVE      ip_ebil
-    DATA      ip_ebil/0/
-    !$OMP THREADPRIVATE(ip_ebil)
     REAL q2m(klon,nbsrf)  ! humidite a 2m
 
     !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
     CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
-    CHARACTER*40 tinst, tave, typeval
+    CHARACTER*40 tinst, tave
     REAL cldtaupi(klon,klev) ! Cloud optical thickness for
     ! pre-industrial (pi) aerosols
@@ -1025,5 +1015,4 @@
     ! vars_climoz(1:read_climoz): variables names in climoz file.
 
-    INTEGER ierr
     include "YOMCST.h"
     include "YOETHF.h"
@@ -1039,6 +1028,7 @@
     ! Declarations pour Simulateur COSP
     !============================================================
+#ifdef CPP_COSP
     real :: mr_ozone(klon,klev)
-
+#endif
     !IM stations CFMIP
     INTEGER, SAVE :: nCFMIP
@@ -1089,5 +1079,5 @@
     !--OB variables for mass fixer (hard coded for now)
     logical, parameter :: mass_fixer=.false.
-    real qql1(klon),qql2(klon),zdz,corrqql
+    real qql1(klon),qql2(klon),corrqql
 
     ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter"
@@ -1193,10 +1183,4 @@
 
     modname = 'physiq'
-    !IM
-    IF (ip_ebil_phy.ge.1) THEN
-       DO i=1,klon
-          zero_v(i)=0.
-       ENDDO
-    ENDIF
 
     IF (debut) THEN
@@ -1210,4 +1194,11 @@
        iflag_wake_tend = 0
        CALL getin_p('iflag_wake_tend',iflag_wake_tend)
+       ok_bad_ecmwf_thermo=.TRUE. ! By default thermodynamical constants are set 
+                                  ! in rrtm/suphec.F90 (and rvtmp2 is set to 0).
+       CALL getin_p('ok_bad_ecmwf_thermo',ok_bad_ecmwf_thermo)
+       fl_ebil = 0 ! by default, conservation diagnostics are desactivated
+       CALL getin_p('fl_ebil',fl_ebil)
+       fl_cor_ebil = 0 ! by default, no correction to ensure energy conservation
+       CALL getin_p('fl_cor_ebil',fl_cor_ebil)
     ENDIF
 
@@ -1273,6 +1264,4 @@
        clwcon(:,:) = 0.0
 
-       !IM      
-       IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0.
        !
        print*,'iflag_coupl,iflag_clos,iflag_wake', &
@@ -2008,5 +1997,6 @@
      CALL add_phys_tend &
             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
-               'eva',abortphy,flag_inhib_tend)
+               'eva',abortphy,flag_inhib_tend,itap)
+    call prt_enerbil('eva',itap)
 
     !=========================================================================
@@ -2230,10 +2220,11 @@
           CALL add_pbl_tend &
                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
-               'vdf',abortphy,flag_inhib_tend)
+               'vdf',abortphy,flag_inhib_tend,itap)
        ELSE
           CALL add_phys_tend &
                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
-               'vdf',abortphy,flag_inhib_tend)
-       ENDIF
+               'vdf',abortphy,flag_inhib_tend,itap)
+       ENDIF
+       call prt_enerbil('vdf',itap)
        !--------------------------------------------------------------------
 
@@ -2616,5 +2607,6 @@
 
     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
-         'convection',abortphy,flag_inhib_tend)
+         'convection',abortphy,flag_inhib_tend,itap)
+    call prt_enerbil('convection',itap)
 
     !-------------------------------------------------------------------------
@@ -2745,5 +2737,6 @@
        ! ajout des tendances des poches froides
        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
-            abortphy,flag_inhib_tend)
+            abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('wake',itap)
        !------------------------------------------------------------------------
 
@@ -2754,5 +2747,5 @@
             (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, &
              'wake', abortphy) 
-
+          call prt_enerbil('wake',itap)
        ENDIF   ! (iflag_wake_tend .GT. 0.)
 
@@ -2875,9 +2868,11 @@
              CALL add_wake_tend &
                  (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy) 
+             call prt_enerbil('the',itap)
           !
           ENDIF  ! (mod(iflag_pbl_split/2,2) .EQ. 1)
           !
           CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
-                             dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend)
+                             dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap)
+          call prt_enerbil('thermals',itap)
           !
 !
@@ -2941,5 +2936,6 @@
           ! ajout des tendances de l'ajustement sec ou des thermiques
           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
-               'ajsb',abortphy,flag_inhib_tend)
+               'ajsb',abortphy,flag_inhib_tend,itap)
+          call prt_enerbil('ajsb',itap)
           d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
           d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
@@ -2984,6 +2980,13 @@
     WHERE (snow_lsc < 0) snow_lsc = 0.
 
+!+JLD
+!    write(*,9000) 'phys lsc',"enerbil: bil_q, bil_e,",rain_lsc+snow_lsc &
+!        & ,((rcw-rcpd)*rain_lsc + (rcs-rcpd)*snow_lsc)*t_seri(1,1)-rlvtt*rain_lsc+rlstt*snow_lsc &
+!        & ,rain_lsc,snow_lsc
+!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
+!-JLD 
     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
-         'lsc',abortphy,flag_inhib_tend)
+         'lsc',abortphy,flag_inhib_tend,itap)
+    call prt_enerbil('lsc',itap)
     rain_num(:)=0.
     DO k = 1, klev
@@ -3764,6 +3767,8 @@
     ENDDO
 
-    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend)
-    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend)
+    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap)
+    call prt_enerbil('SW',itap)
+    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap)
+    call prt_enerbil('LW',itap)
 
     !
@@ -3835,5 +3840,6 @@
        ! ajout des tendances de la trainee de l'orographie
        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
-            abortphy,flag_inhib_tend)
+            abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('oro',itap)
        !----------------------------------------------------------------------
        !
@@ -3881,5 +3887,6 @@
        ! ajout des tendances de la portance de l'orographie
        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
-            'lif', abortphy,flag_inhib_tend)
+            'lif', abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('lif',itap)
     ENDIF ! fin de test sur ok_orolf
 
@@ -3904,5 +3911,6 @@
        d_t_hin(:, :)=0.
        CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
-            dqi0, paprs, 'hin', abortphy,flag_inhib_tend)
+            dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('hin',itap)
     ENDIF
 
@@ -3921,5 +3929,6 @@
 
        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
-            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend)
+            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('front_gwd_rando',itap)
     ENDIF
 
@@ -3929,5 +3938,6 @@
             du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
-            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend)
+            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap)
+       call prt_enerbil('flott_gwd_rando',itap)
        zustr_gwd_rando=0.
        zvstr_gwd_rando=0.
@@ -3979,5 +3989,5 @@
        ! ajout de la tendance d'humidite due au methane
        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4*dtime, dql0, dqi0, paprs, &
-            'q_ch4', abortphy,flag_inhib_tend)
+            'q_ch4', abortphy,flag_inhib_tend,itap)
     ENDIF
     !
Index: /LMDZ5/trunk/libf/phylmd/reevap.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/reevap.F90	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/reevap.F90	(revision 2799)
@@ -2,5 +2,7 @@
    &         d_t_eva,d_q_eva,d_ql_eva,d_qs_eva)
 
-
+    ! flag to include modifications to ensure energy conservation (if flag >0)
+    USE add_phys_tend_mod, only : fl_cor_ebil 
+    
     IMPLICIT none
     !>======================================================================
@@ -25,4 +27,8 @@
     DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
        DO i = 1, klon
+        if (fl_cor_ebil .GT. 0) then
+          zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
+          zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
+        else
           zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
           !jyg<
@@ -30,4 +36,5 @@
           !                  A verifier !!!
           zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
+        end if
           IF (iflag_ice_thermo .EQ. 0) THEN
              zlsdcp=zlvdcp
Index: /LMDZ5/trunk/libf/phylmd/rrtm/suphec.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/rrtm/suphec.F90	(revision 2798)
+++ /LMDZ5/trunk/libf/phylmd/rrtm/suphec.F90	(revision 2799)
@@ -129,36 +129,46 @@
 
 IF (LHOOK) CALL DR_HOOK('SUPHEC',0,ZHOOK_HANDLE)
-!CALL GSTATS(1811,0) ! MPL 28.11.08
-!RVTMP2=RCPV/RCPD-1.0_JPRB   !use cp,moist
-RVTMP2=0.0_JPRB              !neglect cp,moist
-RHOH2O=RATM/100._JPRB
-R2ES=611.21_JPRB*RD/RV
-R3LES=17.502_JPRB
-R3IES=22.587_JPRB
-R4LES=32.19_JPRB
-R4IES=-0.7_JPRB
-R5LES=R3LES*(RTT-R4LES)
-R5IES=R3IES*(RTT-R4IES)
-R5ALVCP=R5LES*RLVTT/RCPD
-R5ALSCP=R5IES*RLSTT/RCPD
-RALVDCP=RLVTT/RCPD
-RALSDCP=RLSTT/RCPD
-RALFDCP=RLMLT/RCPD
-RTWAT=RTT
-RTBER=RTT-5._JPRB
-RTBERCU=RTT-5.0_JPRB
-RTICE=RTT-23._JPRB
-RTICECU=RTT-23._JPRB
-
-RTWAT_RTICE_R=1.0_JPRB/(RTWAT-RTICE)
-RTWAT_RTICECU_R=1.0_JPRB/(RTWAT-RTICECU)
-IF(NPHYINT == 0) THEN
-  ISMAX=NSMAX
-ELSE
-  ISMAX=PHYS_GRID%NSMAX
-ENDIF
-
-RKOOP1=2.583_JPRB
-RKOOP2=0.48116E-2_JPRB
+!
+  IF (OK_BAD_ECMWF_THERMO) THEN
+!
+     ! Modify constants defined in suphel.F90 and set RVTMP2 to 0.
+     ! CALL GSTATS(1811,0) ! MPL 28.11.08
+     ! RVTMP2=RCPV/RCPD-1.0_JPRB   !use cp,moist
+     RVTMP2=0.0_JPRB              !neglect cp,moist
+     RHOH2O=RATM/100._JPRB
+     R2ES=611.21_JPRB*RD/RV
+     R3LES=17.502_JPRB
+     R3IES=22.587_JPRB
+     R4LES=32.19_JPRB
+     R4IES=-0.7_JPRB
+     R5LES=R3LES*(RTT-R4LES)
+     R5IES=R3IES*(RTT-R4IES)
+     R5ALVCP=R5LES*RLVTT/RCPD
+     R5ALSCP=R5IES*RLSTT/RCPD
+     RALVDCP=RLVTT/RCPD
+     RALSDCP=RLSTT/RCPD
+     RALFDCP=RLMLT/RCPD
+     RTWAT=RTT
+     RTBER=RTT-5._JPRB
+     RTBERCU=RTT-5.0_JPRB
+     RTICE=RTT-23._JPRB
+     RTICECU=RTT-23._JPRB
+     
+     RTWAT_RTICE_R=1.0_JPRB/(RTWAT-RTICE)
+     RTWAT_RTICECU_R=1.0_JPRB/(RTWAT-RTICECU)
+     IF(NPHYINT == 0) THEN
+       ISMAX=NSMAX
+     ELSE
+       ISMAX=PHYS_GRID%NSMAX
+     ENDIF
+     
+     RKOOP1=2.583_JPRB
+     RKOOP2=0.48116E-2_JPRB
+     
+  ELSE 
+     ! Keep constants defined in suphel.F90
+     RTICE=RTT-23._JPRB
+!
+  ENDIF  ! (OK_BAD_ECMWF_THERMO)
 
 !     ------------------------------------------------------------------
