Index: LMDZ5/trunk/libf/phylmd/calcul_STDlev.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/calcul_STDlev.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/calcul_STDlev.h	(revision 1862)
@@ -1,45 +1,45 @@
-c
-c $Header$
-c
-cIM on initialise les variables 
-c
+!
+! $Header$
+!
+!IM on initialise les variables 
+!
         missing_val=nf90_fill_real
-c
-cIM freq_moyNMC = frequences auxquelles on moyenne les champs accumules 
-cIM               sur les niveaux de pression standard du NMC
+!
+!IM freq_moyNMC = frequences auxquelles on moyenne les champs accumules 
+!IM               sur les niveaux de pression standard du NMC
       DO n=1, nout
        freq_moyNMC(n)=freq_outNMC(n)/freq_calNMC(n)
       ENDDO
-c
+!
         CALL ini_undefSTD(itap,freq_outNMC)
-c
-cIM on interpole les champs sur les niveaux STD de pression 
-cIM a chaque pas de temps de la physique
-c
-c-------------------------------------------------------c
-c positionnement de l'argument logique a .false.        c
-c pour ne pas recalculer deux fois la meme chose !      c
-c a cet effet un appel a plevel_new a ete deplace       c
-c a la fin de la serie d'appels                         c
-c la boucle 'DO k=1, nlevSTD' a ete internalisee        c
-c dans plevel_new, d'ou la creation de cette routine... c
-c-------------------------------------------------------c
-c
-        CALL plevel_new(klon,klev,nlevSTD,.true.,pplay,rlevSTD,
-     &              t_seri,tlevSTD)
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             u_seri,ulevSTD)
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             v_seri,vlevSTD)
-c
-
-c
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zphi/RG,philevSTD)
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             qx(:,:,ivap),qlevSTD)
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_rh*100.,rhlevSTD)
-c
+!
+!IM on interpole les champs sur les niveaux STD de pression 
+!IM a chaque pas de temps de la physique
+!
+!-------------------------------------------------------c
+! positionnement de l'argument logique a .false.        c
+! pour ne pas recalculer deux fois la meme chose !      c
+! a cet effet un appel a plevel_new a ete deplace       c
+! a la fin de la serie d'appels                         c
+! la boucle 'DO k=1, nlevSTD' a ete internalisee        c
+! dans plevel_new, d'ou la creation de cette routine... c
+!-------------------------------------------------------c
+!
+        CALL plevel_new(klon,klev,nlevSTD,.true.,pplay,rlevSTD, &
+                    t_seri,tlevSTD)
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   u_seri,ulevSTD)
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   v_seri,vlevSTD)
+!
+
+!
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zphi/RG,philevSTD)
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   qx(:,:,ivap),qlevSTD)
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_rh*100.,rhlevSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -47,7 +47,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,uvSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,uvSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -55,7 +55,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,vqSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,vqSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -63,7 +63,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,vTSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,vTSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -71,7 +71,7 @@
          ENDDO !i 
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,wqSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,wqSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -79,7 +79,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,vphiSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,vphiSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -87,7 +87,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,wTSTD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,wTSTD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -95,7 +95,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,u2STD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,u2STD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -103,7 +103,7 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,v2STD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,v2STD)
+!
         DO l=1, klev
          DO i=1, klon
@@ -111,18 +111,18 @@
          ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,T2STD)
-
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,T2STD)
+
+!
       zx_tmp_fi3d(:,:)=wo(:,:,1) * dobson_u * 1e3 / zmasse / rmo3 * rmd
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,O3STD)
-c
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,O3STD)
+!
       if (read_climoz == 2) THEN
       zx_tmp_fi3d(:,:)=wo(:,:,2) * dobson_u * 1e3 / zmasse / rmo3 * rmd
-        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
-     &             zx_tmp_fi3d,O3daySTD)
+        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD, &
+                   zx_tmp_fi3d,O3daySTD)
       endif
-c
+!
         DO l=1, klev
         DO i=1, klon
@@ -130,38 +130,38 @@
         ENDDO !i
         ENDDO !l
-        CALL plevel_new(klon,klev,nlevSTD,.true.,zx_tmp_fi3d,rlevSTD,
-     &             omega,wlevSTD)
-c
-cIM on somme les valeurs toutes les freq_calNMC secondes
-c
+        CALL plevel_new(klon,klev,nlevSTD,.true.,zx_tmp_fi3d,rlevSTD, &
+                   omega,wlevSTD)
+!
+!IM on somme les valeurs toutes les freq_calNMC secondes
+!
        CALL undefSTD(itap,freq_calNMC, read_climoz)
-c
-cIM on moyenne a la fin du mois ou du jour (toutes les freq_outNMC secondes)
-c
+!
+!IM on moyenne a la fin du mois ou du jour (toutes les freq_outNMC secondes)
+!
        CALL moy_undefSTD(itap,freq_outNMC,freq_moyNMC)
-c
-       CALL plevel(klon,klev,.true.,pplay,50000.,
-     &              zphi/RG,geo500)
-
-cIM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
-c
-      CALL plevel(klon,klevp1,.true.,paprs,20000.,
-     $     swdn0,SWdn200clr)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     swdn,SWdn200)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     swup0,SWup200clr)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     swup,SWup200)
-c
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     lwdn0,LWdn200clr)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     lwdn,LWdn200)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     lwup0,LWup200clr)
-      CALL plevel(klon,klevp1,.false.,paprs,20000.,
-     $     lwup,LWup200)
-c
+!
+       CALL plevel(klon,klev,.true.,pplay,50000., &
+                    zphi/RG,geo500)
+
+!IM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
+!
+      CALL plevel(klon,klevp1,.true.,paprs,20000., &
+           swdn0,SWdn200clr)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           swdn,SWdn200)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           swup0,SWup200clr)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           swup,SWup200)
+!
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           lwdn0,LWdn200clr)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           lwdn,LWdn200)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           lwup0,LWup200clr)
+      CALL plevel(klon,klevp1,.false.,paprs,20000., &
+           lwup,LWup200)
+!
       twriteSTD(:,:,1)=tsumSTD(:,:,1)
       qwriteSTD(:,:,1)=qsumSTD(:,:,1)
@@ -195,6 +195,6 @@
       vwriteSTD(:,:,4)=vlevSTD(:,:)
       wwriteSTD(:,:,4)=wlevSTD(:,:)
-c
-cIM initialisation 5eme fichier de sortie 
+!
+!IM initialisation 5eme fichier de sortie 
       twriteSTD(:,:,5)=tlevSTD(:,:)
       qwriteSTD(:,:,5)=qlevSTD(:,:)
@@ -204,6 +204,6 @@
       vwriteSTD(:,:,5)=vlevSTD(:,:)
       wwriteSTD(:,:,5)=wlevSTD(:,:)
-c
-cIM initialisation 6eme fichier de sortie 
+!
+!IM initialisation 6eme fichier de sortie 
       twriteSTD(:,:,6)=tlevSTD(:,:)
       qwriteSTD(:,:,6)=qlevSTD(:,:)
@@ -213,5 +213,5 @@
       vwriteSTD(:,:,6)=vlevSTD(:,:)
       wwriteSTD(:,:,6)=wlevSTD(:,:)
-cIM for NMC files
+!IM for NMC files
       DO n=1, nlevSTD3
        DO k=1, nlevSTD
@@ -227,5 +227,5 @@
        ENDDO 
       ENDDO 
-c
+!
       DO n=1, nlevSTD8
        DO k=1, nlevSTD
Index: LMDZ5/trunk/libf/phylmd/calcul_divers.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/calcul_divers.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/calcul_divers.h	(revision 1862)
@@ -1,11 +1,11 @@
-c
-c $Header$
-c
+!
+! $Header$
+!
 
-c     Initialisations diverses au "debut" du mois
+!     Initialisations diverses au "debut" du mois
       IF(debut) THEN
          nday_rain(:)=0.
 
-c        surface terre
+!        surface terre
          paire_ter(:)=0.
          DO i=1, klon
@@ -16,5 +16,5 @@
       ENDIF
 
-cIM   Calcul une fois par jour : total_rain, nday_rain
+!IM   Calcul une fois par jour : total_rain, nday_rain
       IF(MOD(itap,INT(un_jour/dtime)).EQ.0) THEN
          DO i = 1, klon
Index: LMDZ5/trunk/libf/phylmd/declare_STDlev.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/declare_STDlev.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/declare_STDlev.h	(revision 1862)
@@ -1,3 +1,3 @@
-cIM for NMC files
+!IM for NMC files
 !      real twriteSTD(klon,nlevSTD,nfiles)
 !      real qwriteSTD(klon,nlevSTD,nfiles)
@@ -26,32 +26,32 @@
 
       real, save :: rlevSTD(nlevSTD)
-      DATA rlevSTD/100000., 92500., 85000., 70000.,
-     .60000., 50000., 40000., 30000., 25000., 20000.,
-     .15000., 10000., 7000., 5000., 3000., 2000., 1000./
-c$OMP THREADPRIVATE(rlevstd)
+      DATA rlevSTD/100000., 92500., 85000., 70000., &
+      60000., 50000., 40000., 30000., 25000., 20000., &
+      15000., 10000., 7000., 5000., 3000., 2000., 1000./
+!$OMP THREADPRIVATE(rlevstd)
 
       CHARACTER*4, SAVE :: clevSTD(nlevSTD)
-      DATA clevSTD/'1000','925 ','850 ','700 ','600 ',
-     .'500 ','400 ','300 ','250 ','200 ','150 ','100 ',
-     .'70  ','50  ','30  ','20  ','10  '/
-c$OMP THREADPRIVATE(clevSTD)
+      DATA clevSTD/'1000','925 ','850 ','700 ','600 ', &
+      '500 ','400 ','300 ','250 ','200 ','150 ','100 ', &
+      '70  ','50  ','30  ','20  ','10  '/
+!$OMP THREADPRIVATE(clevSTD)
 
       real, save :: rlevSTD3(nlevSTD3)
       DATA rlevSTD3/85000., 50000., 25000./
-c$OMP THREADPRIVATE(rlevSTD3)
+!$OMP THREADPRIVATE(rlevSTD3)
 
       real, save :: rlevSTD8(nlevSTD8)
-      DATA rlevSTD8/100000., 85000., 70000., 50000., 25000., 10000.,
-     $     5000., 1000./
-c$OMP THREADPRIVATE(rlevSTD8) 
-c
+      DATA rlevSTD8/100000., 85000., 70000., 50000., 25000., 10000., &
+           5000., 1000./
+!$OMP THREADPRIVATE(rlevSTD8) 
+!
       REAL geo500(klon)
 
-c nout : niveau de output des variables a une pression donnee
+! nout : niveau de output des variables a une pression donnee
       logical oknondef(klon,nlevSTD,nout)
-c
-c les produits uvSTD, vqSTD, .., T2STD sont calcules
-c a partir des valeurs instantannees toutes les 6 h
-c qui sont moyennees sur le mois
+!
+! les produits uvSTD, vqSTD, .., T2STD sont calcules
+! a partir des valeurs instantannees toutes les 6 h
+! qui sont moyennees sur le mois
 
       REAL zx_tmp_fiNC(klon,nlevSTD)
@@ -59,3 +59,3 @@
       REAL missing_val
       REAL, SAVE :: freq_moyNMC(nout)
-c$OMP THREADPRIVATE(freq_moyNMC)
+!$OMP THREADPRIVATE(freq_moyNMC)
Index: LMDZ5/trunk/libf/phylmd/ini_histday_seri.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/ini_histday_seri.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/ini_histday_seri.h	(revision 1862)
@@ -1,16 +1,16 @@
-c
-c $Id$
-c
-cym Ne fonctionnera pas en mode parallele
+!
+! $Id$
+!
+!ym Ne fonctionnera pas en mode parallele
       IF (is_sequential) THEN
       
       IF (type_run.EQ."AMIP") THEN
-c
+!
        zstophy = dtime
        zout = ecrit_day
-c
+!
          idayref = day_ref
          CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
-c
+!
          CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlon,zx_lon)
          DO i = 1, iim
@@ -22,109 +22,109 @@
          ENDDO
          CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlat,zx_lat)
-c
+!
          imin_debut=1 
          nbpti=1
          jmin_debut=1 
          nbptj=1
-c
-         CALL histbeg("histday_seri.nc", 
-     .                 iim,zx_lon(:,1), jjmp1,zx_lat(1,:),
-     .                 imin_debut,nbpti,jmin_debut,nbptj,
-     .                 itau_phy, zjulian, dtime,
-     .                 nhori, nid_day_seri)
-c
-         CALL histvert(nid_day_seri, "presnivs", 
-     .                "Vertical levels","mb",
-     .                 klev, presnivs/100., nvert)
-c
-         CALL histdef(nid_day_seri, "bilTOA", 
-     .                "Net radiation at model top", "W/m2",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "bils", 
-     .                "Net downward energy flux at surface","W/m2",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "ecin", 
-     .                "Total kinetic energy (per unit area)","J/m2",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-cIM 151004 BEG
+!
+         CALL histbeg("histday_seri.nc",  &
+                       iim,zx_lon(:,1), jjmp1,zx_lat(1,:), &
+                       imin_debut,nbpti,jmin_debut,nbptj, &
+                       itau_phy, zjulian, dtime, &
+                       nhori, nid_day_seri)
+!
+         CALL histvert(nid_day_seri, "presnivs",  &
+                      "Vertical levels","mb", &
+                       klev, presnivs/100., nvert)
+!
+         CALL histdef(nid_day_seri, "bilTOA",  &
+                      "Net radiation at model top", "W/m2", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "bils",  &
+                      "Net downward energy flux at surface","W/m2", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "ecin",  &
+                      "Total kinetic energy (per unit area)","J/m2", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+!IM 151004 BEG
          IF(1.EQ.0) THEN
-c
-         CALL histdef(nid_day_seri, "momang", 
-     .               "Total relative angular momentum (per unit area)",
-     .               "kg/s",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "frictor", 
-     .               "Friction torque (per unit area)", "N/m",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "mountor", 
-     .               "Mountain torque (per unit area)", "N/m",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
+!
+         CALL histdef(nid_day_seri, "momang",  &
+                     "Total relative angular momentum (per unit area)", &
+                     "kg/s", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "frictor",  &
+                     "Friction torque (per unit area)", "N/m", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "mountor",  &
+                     "Mountain torque (per unit area)", "N/m", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
          ENDIF !(1.EQ.0) THEN
-c
-         CALL histdef(nid_day_seri, "momang", 
-     .               "Axial angular momentum (per unit area)",
-     .               "kg/s",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "torsfc", 
-     .        "Total surface torque (including mountain torque)", "N/m",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-cIM 151004 END        
-c
-         CALL histdef(nid_day_seri, "tamv", 
-     .                "Temperature (mass-weighted vert. ave)", "K",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "psol", 
-     .                "Surface pressure", "Pa",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-         CALL histdef(nid_day_seri, "evap", 
-     .                "Evaporation and sublimation (per unit area)", 
-     .                "kg/(m2*s)",
-     .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-c          call histdef(nid_day_seri, 
-c    .         "SnowFrac", 
-c    .         "Snow-covered area ", "%",  
-c    .         iim,jjmp1,nhori, 1,1,1, -99, 32,
-c    .         "ave(X)", zstophy,zout)
-c
-c        CALL histdef(nid_day_seri, "snow_depth", 
-cIM 080904  .                "Snow Depth (water equivalent)", "m",
-cIM 191104  .                "Snow Depth (water equivalent)", "kg/m2",
-c    .                "Snow Mass", "kg/m2",
-c    .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
-c    .               "ave(X)", zstophy,zout)
-c
-           call histdef(nid_day_seri, 
-     .         "tsol_"//clnsurf(is_oce), 
-     .         "SST over open (ice-free) ocean ", "K",  
-     .         iim,jjmp1,nhori, 1,1,1, -99, 32,
-     .         "ave(X)", zstophy,zout)
-c
-c=================================================================
-c
+!
+         CALL histdef(nid_day_seri, "momang",  &
+                     "Axial angular momentum (per unit area)", &
+                     "kg/s", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "torsfc",  &
+              "Total surface torque (including mountain torque)", "N/m", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+!IM 151004 END        
+!
+         CALL histdef(nid_day_seri, "tamv",  &
+                      "Temperature (mass-weighted vert. ave)", "K", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "psol",  &
+                      "Surface pressure", "Pa", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+         CALL histdef(nid_day_seri, "evap",  &
+                      "Evaporation and sublimation (per unit area)",  &
+                      "kg/(m2*s)", &
+                      iim,jjmp1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+!          call histdef(nid_day_seri, 
+!    .         "SnowFrac", 
+!    .         "Snow-covered area ", "%",  
+!    .         iim,jjmp1,nhori, 1,1,1, -99, 32,
+!    .         "ave(X)", zstophy,zout)
+!
+!        CALL histdef(nid_day_seri, "snow_depth", 
+!IM 080904  .                "Snow Depth (water equivalent)", "m",
+!IM 191104  .                "Snow Depth (water equivalent)", "kg/m2",
+!    .                "Snow Mass", "kg/m2",
+!    .                iim,jjmp1,nhori, 1,1,1, -99, 32, 
+!    .               "ave(X)", zstophy,zout)
+!
+           call histdef(nid_day_seri,  &
+               "tsol_"//clnsurf(is_oce),  &
+               "SST over open (ice-free) ocean ", "K",   &
+               iim,jjmp1,nhori, 1,1,1, -99, 32, &
+               "ave(X)", zstophy,zout)
+!
+!=================================================================
+!
          CALL histend(nid_day_seri)
-c
-c=================================================================
+!
+!=================================================================
       ENDIF ! fin de test sur type_run.EQ.AMIP
       
Index: LMDZ5/trunk/libf/phylmd/ini_paramLMDZ_phy.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/ini_paramLMDZ_phy.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/ini_paramLMDZ_phy.h	(revision 1862)
@@ -1,3 +1,3 @@
-cIM    Implemente en modes sequentiel et parallele
+!IM    Implemente en modes sequentiel et parallele
 
        CALL gather(rlat,rlat_glo)
@@ -6,13 +6,13 @@
        CALL bcast(rlon_glo)
 
-c$OMP MASTER
+!$OMP MASTER
       if (is_mpi_root) then
-c
+!
        zstophy = dtime
        zout = mth_len*un_jour
-c
+!
        idayref = day_ref
        CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
-c
+!
        CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlon_glo,zx_lon)
        if (iim.gt.1) then
@@ -23,111 +23,111 @@
        endif
        CALL gr_fi_ecrit(1,klon,iim,jjmp1,rlat_glo,zx_lat)
-c
-       CALL histbeg("paramLMDZ_phy.nc", 
-     .                 np,zx_lon(np:np,1), np,zx_lat(1,np:np),
-     .                 1,1,1,1,
-     .                 itau_phy, zjulian, dtime,
-     .                 nhori, nid_ctesGCM)
-c
-       CALL histdef(nid_ctesGCM, "R_ecc", 
-     .                "Excentricite","-",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "R_peri", 
-     .                "Equinoxe","-",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "R_incl", 
-     .                "Inclinaison","deg",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "solaire", 
-     .                "Constante solaire","W/m2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "co2_ppm", 
-     .                "Concentration du CO2", "ppm",
-     .                1,1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "CH4_ppb", 
-     .                "Concentration du CH4", "ppb",
-     .                1,1,nhori, 1,1,1, -99, 32, 
-     .                "ave(X)", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "N2O_ppb",
-     .                "Concentration du N2O", "ppb",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "CFC11_ppt",
-     .                "Concentration du CFC11", "ppt",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "CFC12_ppt",
-     .                "Concentration du CFC12", "ppt",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave(X)", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "bils",
-     .                "Surface total heat flux", "W m-2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "evap",
-     .                "Evaporation", "kg m-2 s-1",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "evap_land",
-     .                "Land evaporation", "kg m-2 s-1",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "flat",
-     .                "Latent heat flux", "W m-2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "nettop0",
-     .                "Clear sky net downward radiatif flux at TOA", 
-     .                "W m-2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "nettop",
-     .                "Net downward radiatif flux at TOA", "W m-2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "precip",
-     .                "Total precipitation (liq+sol)", "kg m-2 s-1",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "tsol",
-     .                "Surface temperature", "K",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "t2m",
-     .                "Temperature at 2m", "K",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout)
-c
-       CALL histdef(nid_ctesGCM, "prw",
-     .                "Precipitable water", "kg m-2",
-     .                1,1,nhori, 1,1,1, -99, 32,
-     .                "ave", zstophy,zout) 
-c=================================================================
-c
+!
+       CALL histbeg("paramLMDZ_phy.nc",  &
+                       np,zx_lon(np:np,1), np,zx_lat(1,np:np), &
+                       1,1,1,1, &
+                       itau_phy, zjulian, dtime, &
+                       nhori, nid_ctesGCM)
+!
+       CALL histdef(nid_ctesGCM, "R_ecc",  &
+                      "Excentricite","-", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "R_peri",  &
+                      "Equinoxe","-", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "R_incl",  &
+                      "Inclinaison","deg", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "solaire",  &
+                      "Constante solaire","W/m2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "co2_ppm",  &
+                      "Concentration du CO2", "ppm", &
+                      1,1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "CH4_ppb",  &
+                      "Concentration du CH4", "ppb", &
+                      1,1,nhori, 1,1,1, -99, 32,  &
+                      "ave(X)", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "N2O_ppb", &
+                      "Concentration du N2O", "ppb", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "CFC11_ppt", &
+                      "Concentration du CFC11", "ppt", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "CFC12_ppt", &
+                      "Concentration du CFC12", "ppt", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave(X)", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "bils", &
+                      "Surface total heat flux", "W m-2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "evap", &
+                      "Evaporation", "kg m-2 s-1", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "evap_land", &
+                      "Land evaporation", "kg m-2 s-1", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "flat", &
+                      "Latent heat flux", "W m-2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "nettop0", &
+                      "Clear sky net downward radiatif flux at TOA",  &
+                      "W m-2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "nettop", &
+                      "Net downward radiatif flux at TOA", "W m-2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "precip", &
+                      "Total precipitation (liq+sol)", "kg m-2 s-1", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "tsol", &
+                      "Surface temperature", "K", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "t2m", &
+                      "Temperature at 2m", "K", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout)
+!
+       CALL histdef(nid_ctesGCM, "prw", &
+                      "Precipitable water", "kg m-2", &
+                      1,1,nhori, 1,1,1, -99, 32, &
+                      "ave", zstophy,zout) 
+!=================================================================
+!
        CALL histend(nid_ctesGCM)
        
        endif !(is_mpi_root)
-c$OMP END MASTER
-c=================================================================
+!$OMP END MASTER
+!=================================================================
Index: LMDZ5/trunk/libf/phylmd/physiq.F
===================================================================
--- LMDZ5/trunk/libf/phylmd/physiq.F	(revision 1861)
+++ 	(revision )
@@ -1,4108 +1,0 @@
-! $Id$
-c#define IO_DEBUG
-
-      SUBROUTINE physiq (nlon,nlev,
-     .            debut,lafin,jD_cur, jH_cur,pdtphys,
-     .            paprs,pplay,pphi,pphis,presnivs,clesphy0,
-     .            u,v,t,qx,
-     .            flxmass_w,
-     .            d_u, d_v, d_t, d_qx, d_ps
-     .            , dudyn
-     .            , PVteta)
-
-      USE ioipsl, only: histbeg, histvert, histdef, histend, histsync,
-     $     histwrite, ju2ymds, ymds2ju, ioget_year_len
-      USE comgeomphy
-      USE phys_cal_mod
-      USE write_field_phy
-      USE dimphy
-      USE infotrac
-      USE mod_grid_phy_lmdz
-      USE mod_phys_lmdz_para
-      USE iophy
-      USE misc_mod, mydebug=>debug
-      USE vampir
-      USE pbl_surface_mod, ONLY : pbl_surface
-      USE change_srf_frac_mod
-      USE surface_data,     ONLY : type_ocean, ok_veget
-      USE phys_local_var_mod ! Variables internes non sauvegardees de la physique
-      USE phys_state_var_mod ! Variables sauvegardees de la physique
-      USE phys_output_var_mod ! Variables pour les ecritures des sorties
-      USE phys_output_write_mod
-      USE fonte_neige_mod, ONLY  : fonte_neige_get_vars
-      USE phys_output_mod
-      USE phys_output_ctrlout_mod
-      USE iophy
-      use open_climoz_m, only: open_climoz ! ozone climatology from a file
-      use regr_pr_av_m, only: regr_pr_av
-      use netcdf95, only: nf95_close
-cIM for NMC files
-c     use netcdf, only: nf90_fill_real
-      use netcdf
-      use mod_phys_lmdz_mpi_data, only: is_mpi_root
-      USE aero_mod
-      use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer
-      use conf_phys_m, only: conf_phys
-      use radlwsw_m, only: radlwsw
-      use phyaqua_mod, only: zenang_an
-      USE control_mod
-#ifdef REPROBUS
-      USE CHEM_REP, ONLY : Init_chem_rep_xjour
-#endif
-      USE indice_sol_mod
-      USE phytrac_mod, ONLY : phytrac
-
-!IM stations CFMIP
-      USE CFMIP_point_locations
-      IMPLICIT none
-!>======================================================================
-!!
-!! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
-!!
-!! Objet: Moniteur general de la physique du modele
-!!AA      Modifications quant aux traceurs :
-!!AA                  -  uniformisation des parametrisations ds phytrac
-!!AA                  -  stockage des moyennes des champs necessaires
-!!AA                     en mode traceur off-line 
-!!======================================================================
-!!   CLEFS CPP POUR LES IO
-!!   =====================
-#define histNMC
-c#define histISCCP
-!!======================================================================
-!!    modif   ( P. Le Van ,  12/10/98 )
-!!
-!!  Arguments:
-!!
-!! nlon----input-I-nombre de points horizontaux
-!! nlev----input-I-nombre de couches verticales, doit etre egale a klev
-!! debut---input-L-variable logique indiquant le premier passage
-!! lafin---input-L-variable logique indiquant le dernier passage
-!! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
-!! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
-!! pdtphys-input-R-pas d'integration pour la physique (seconde)
-!! paprs---input-R-pression pour chaque inter-couche (en Pa)
-!! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
-!! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
-!! pphis---input-R-geopotentiel du sol
-!! presnivs-input_R_pressions approximat. des milieux couches ( en PA)
-!! u-------input-R-vitesse dans la direction X (de O a E) en m/s
-!! v-------input-R-vitesse Y (de S a N) en m/s
-!! t-------input-R-temperature (K)
-!! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
-!! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
-!! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
-!! flxmass_w -input-R- flux de masse verticale
-!! d_u-----output-R-tendance physique de "u" (m/s/s)
-!! d_v-----output-R-tendance physique de "v" (m/s/s)
-!! d_t-----output-R-tendance physique de "t" (K/s)
-!! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
-!! d_ps----output-R-tendance physique de la pression au sol
-!!IM
-!! PVteta--output-R-vorticite potentielle a des thetas constantes
-!!======================================================================
-#include "dimensions.h"
-      integer jjmp1
-      parameter (jjmp1=jjm+1-1/jjm)
-      integer iip1
-      parameter (iip1=iim+1)
-
-#include "regdim.h"
-#include "dimsoil.h"
-#include "clesphys.h"
-#include "temps.h"
-#include "iniprint.h"
-#include "thermcell.h"
-c======================================================================
-      LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
-      PARAMETER (ok_cvl=.TRUE.)
-      LOGICAL ok_gust ! pour activer l'effet des gust sur flux surface
-      PARAMETER (ok_gust=.FALSE.)
-      integer iflag_radia     ! active ou non le rayonnement (MPL)
-      save iflag_radia
-c$OMP THREADPRIVATE(iflag_radia)
-c======================================================================
-      LOGICAL check ! Verifier la conservation du modele en eau
-      PARAMETER (check=.FALSE.)
-      LOGICAL ok_stratus ! Ajouter artificiellement les stratus
-      PARAMETER (ok_stratus=.FALSE.)
-c======================================================================
-      REAL amn, amx
-      INTEGER igout
-c======================================================================
-c Clef controlant l'activation du cycle diurne:
-ccc      LOGICAL cycle_diurne
-ccc      PARAMETER (cycle_diurne=.FALSE.)
-c======================================================================
-c Modele thermique du sol, a activer pour le cycle diurne:
-ccc      LOGICAL soil_model
-ccc      PARAMETER (soil_model=.FALSE.)
-c======================================================================
-c Dans les versions precedentes, l'eau liquide nuageuse utilisee dans
-c le calcul du rayonnement est celle apres la precipitation des nuages.
-c Si cette cle new_oliq est activee, ce sera une valeur moyenne entre
-c la condensation et la precipitation. Cette cle augmente les impacts
-c radiatifs des nuages.
-ccc      LOGICAL new_oliq
-ccc      PARAMETER (new_oliq=.FALSE.)
-c======================================================================
-c Clefs controlant deux parametrisations de l'orographie:
-cc      LOGICAL ok_orodr
-ccc      PARAMETER (ok_orodr=.FALSE.)
-ccc      LOGICAL ok_orolf
-ccc      PARAMETER (ok_orolf=.FALSE.)
-c======================================================================
-      LOGICAL ok_journe ! sortir le fichier journalier
-      save ok_journe
-c$OMP THREADPRIVATE(ok_journe)
-c
-      LOGICAL ok_mensuel ! sortir le fichier mensuel
-      save ok_mensuel
-c$OMP THREADPRIVATE(ok_mensuel)
-c
-      LOGICAL ok_instan ! sortir le fichier instantane
-      save ok_instan
-c$OMP THREADPRIVATE(ok_instan)
-c
-      LOGICAL ok_LES ! sortir le fichier LES 
-      save ok_LES                            
-c$OMP THREADPRIVATE(ok_LES)                  
-c
-      LOGICAL callstats ! sortir le fichier stats 
-      save callstats                            
-c$OMP THREADPRIVATE(callstats)                  
-c
-      LOGICAL ok_region ! sortir le fichier regional
-      PARAMETER (ok_region=.FALSE.)
-c======================================================================
-      real seuil_inversion
-      save seuil_inversion
-c$OMP THREADPRIVATE(seuil_inversion)
-      integer iflag_ratqs
-      save iflag_ratqs
-c$OMP THREADPRIVATE(iflag_ratqs)
-      real facteur
-
-      REAL zz,znum,zden
-      REAL wmax_th(klon)
-      REAL tau_overturning_th(klon)
-
-      integer lmax_th(klon)
-      integer limbas(klon)
-      real ratqscth(klon,klev)
-      real ratqsdiff(klon,klev)
-      real zqsatth(klon,klev)
-
-c======================================================================
-c
-      INTEGER ivap          ! indice de traceurs pour vapeur d'eau
-      PARAMETER (ivap=1)
-      INTEGER iliq          ! indice de traceurs pour eau liquide
-      PARAMETER (iliq=2)
-
-c
-c
-c Variables argument:
-c
-      INTEGER nlon
-      INTEGER nlev
-      REAL, intent(in):: jD_cur, jH_cur
-
-      REAL pdtphys
-      LOGICAL debut, lafin
-      REAL paprs(klon,klev+1)
-      REAL pplay(klon,klev)
-      REAL pphi(klon,klev)
-      REAL pphis(klon)
-      REAL presnivs(klev)
-      REAL znivsig(klev)
-      real pir
-
-      REAL u(klon,klev)
-      REAL v(klon,klev)
-      REAL t(klon,klev),thetal(klon,klev)
-c thetal: ligne suivante a decommenter si vous avez les fichiers     MPL 20130625
-c fth_fonctions.F90 et parkind1.F90
-c sinon thetal=theta
-c     REAL fth_thetae,fth_thetav,fth_thetal
-      REAL qx(klon,klev,nqtot)
-      REAL flxmass_w(klon,klev)
-      REAL d_u(klon,klev)
-      REAL d_v(klon,klev)
-      REAL d_t(klon,klev)
-      REAL d_qx(klon,klev,nqtot)
-      REAL d_ps(klon)
-! Variables pour le transport convectif
-      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
-! Variables pour le lessivage convectif
-! RomP >>> 
-      real phi2(klon,klev,klev)
-      real d1a(klon,klev),dam(klon,klev)
-      real ev(klon,klev),ep(klon,klev)
-      real clw(klon,klev),elij(klon,klev,klev)
-      real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
-! RomP <<<
-!IM definition dynamique o_trac dans phys_output_open
-!      type(ctrl_out) :: o_trac(nqtot)
-c
-cIM Amip2 PV a theta constante 
-c
-      INTEGER nbteta
-      PARAMETER(nbteta=3)
-      CHARACTER*3 ctetaSTD(nbteta)
-      DATA ctetaSTD/'350','380','405'/
-      SAVE ctetaSTD
-c$OMP THREADPRIVATE(ctetaSTD)
-      REAL rtetaSTD(nbteta)
-      DATA rtetaSTD/350., 380., 405./
-      SAVE rtetaSTD
-c$OMP THREADPRIVATE(rtetaSTD)     
-c
-      REAL PVteta(klon,nbteta)
-      REAL zx_tmp_3dte(iim,jjmp1,nbteta)
-c
-cMI Amip2 PV a theta constante
-
-cym      INTEGER klevp1, klevm1
-cym      PARAMETER(klevp1=klev+1,klevm1=klev-1)
-cym#include "raddim.h"
-c
-c
-cIM Amip2
-c variables a une pression donnee
-c
-#include "declare_STDlev.h"
-c
-      CHARACTER*4 bb2
-      CHARACTER*2 bb3
-c
-#include "radopt.h"
-c
-c
-
-      REAL convliq(klon,klev)  ! eau liquide nuageuse convective
-      REAL convfra(klon,klev)  ! fraction nuageuse convective
-
-      REAL cldl_c(klon),cldm_c(klon),cldh_c(klon) !nuages bas, moyen et haut
-      REAL cldt_c(klon),cldq_c(klon) !nuage total, eau liquide integree
-      REAL cldl_s(klon),cldm_s(klon),cldh_s(klon) !nuages bas, moyen et haut
-      REAL cldt_s(klon),cldq_s(klon) !nuage total, eau liquide integree
-
-      INTEGER linv, kp1
-c flwp, fiwp = Liquid Water Path & Ice Water Path (kg/m2)
-c flwc, fiwc = Liquid Water Content & Ice Water Content (kg/kg)
-      REAL flwp_c(klon), fiwp_c(klon)
-      REAL flwc_c(klon,klev), fiwc_c(klon,klev)
-      REAL flwp_s(klon), fiwp_s(klon)
-      REAL flwc_s(klon,klev), fiwc_s(klon,klev)
-
-
-cIM ISCCP simulator v3.4
-c dans clesphys.h top_height, overlap
-cv3.4
-      INTEGER debug, debugcol
-cym      INTEGER npoints
-cym      PARAMETER(npoints=klon) 
-c
-      INTEGER sunlit(klon) !sunlit=1 if day; sunlit=0 if night
-      INTEGER nregISCtot
-      PARAMETER(nregISCtot=1) 
-c
-c imin_debut, nbpti, jmin_debut, nbptj : parametres pour sorties sur 1 region rectangulaire
-c y compris pour 1 point
-c imin_debut : indice minimum de i; nbpti : nombre de points en direction i (longitude)
-c jmin_debut : indice minimum de j; nbptj : nombre de points en direction j (latitude)
-      INTEGER imin_debut, nbpti
-      INTEGER jmin_debut, nbptj 
-cIM parametres ISCCP BEG
-      INTEGER nbapp_isccp
-!     INTEGER nbapp_isccp,isccppas
-!     PARAMETER(isccppas=6) !appel du simulateurs tous les 6pas de temps de la physique
-!                           !i.e. toutes les 3 heures 
-      INTEGER n
-      INTEGER ifreq_isccp(napisccp), freqin_pdt(napisccp)
-      DATA ifreq_isccp/3/
-      SAVE ifreq_isccp
-c$OMP THREADPRIVATE(ifreq_isccp)
-      CHARACTER*5 typinout(napisccp)
-      DATA typinout/'i3od'/
-      SAVE typinout
-c$OMP THREADPRIVATE(typinout)
-cIM verif boxptop BEG
-      CHARACTER*1 verticaxe(napisccp)
-      DATA verticaxe/'1'/ 
-      SAVE verticaxe
-c$OMP THREADPRIVATE(verticaxe)
-cIM verif boxptop END
-      INTEGER nvlev(napisccp)
-c     INTEGER nvlev
-      REAL t1, aa
-      REAL seed_re(klon,napisccp)
-cym !!!! A voir plus tard 
-cym      INTEGER iphy(iim,jjmp1)
-cIM parametres ISCCP END
-c
-c ncol = nb. de sous-colonnes pour chaque maille du GCM 
-c ncolmx = No. max. de sous-colonnes pour chaque maille du GCM 
-c      INTEGER ncol(napisccp), ncolmx, seed(klon,napisccp)
-      INTEGER,SAVE :: ncol(napisccp)
-c$OMP THREADPRIVATE(ncol)
-      INTEGER ncolmx, seed(klon,napisccp)
-      REAL nbsunlit(nregISCtot,klon,napisccp)  !nbsunlit : moyenne de sunlit
-c     PARAMETER(ncolmx=1500)
-      PARAMETER(ncolmx=300)
-c
-cIM verif boxptop BEG
-      REAL vertlev(ncolmx,napisccp)
-cIM verif boxptop END
-c
-      REAL,SAVE :: tautab_omp(0:255),tautab(0:255)
-      INTEGER,SAVE :: invtau_omp(-20:45000),invtau(-20:45000)
-c$OMP THREADPRIVATE(tautab,invtau)
-      REAL emsfc_lw
-      PARAMETER(emsfc_lw=0.99)
-c     REAL    ran0                      ! type for random number fuction
-c
-      REAL cldtot(klon,klev)
-c variables de haut en bas pour le simulateur ISCCP
-      REAL dtau_s(klon,klev) !tau nuages startiformes
-      REAL dtau_c(klon,klev) !tau nuages convectifs
-      REAL dem_s(klon,klev)  !emissivite nuages startiformes 
-      REAL dem_c(klon,klev)  !emissivite nuages convectifs
-c
-c variables de haut en bas pour le simulateur ISCCP
-      REAL pfull(klon,klev)
-      REAL phalf(klon,klev+1)
-      REAL qv(klon,klev)
-      REAL cc(klon,klev)
-      REAL conv(klon,klev)
-      REAL dtau_sH2B(klon,klev)
-      REAL dtau_cH2B(klon,klev)
-      REAL at(klon,klev)
-      REAL dem_sH2B(klon,klev)
-      REAL dem_cH2B(klon,klev)
-c
-      INTEGER kmax, lmax, lmax3
-      PARAMETER(kmax=8, lmax=8, lmax3=3)
-      INTEGER kmaxm1, lmaxm1
-      PARAMETER(kmaxm1=kmax-1, lmaxm1=lmax-1)
-      INTEGER iimx7, jjmx7, jjmp1x7
-      PARAMETER(iimx7=iim*kmaxm1, jjmx7=jjm*lmaxm1, 
-     .jjmp1x7=jjmp1*lmaxm1)
-c
-c output from ISCCP simulator
-      REAL fq_isccp(klon,kmaxm1,lmaxm1,napisccp)
-      REAL fq_is_true(klon,kmaxm1,lmaxm1,napisccp)
-      REAL totalcldarea(klon,napisccp) 
-      REAL meanptop(klon,napisccp)
-      REAL meantaucld(klon,napisccp)
-      REAL boxtau(klon,ncolmx,napisccp)
-      REAL boxptop(klon,ncolmx,napisccp) 
-      REAL zx_tmp_fi3d_bx(klon,ncolmx)
-      REAL zx_tmp_3d_bx(iim,jjmp1,ncolmx)
-c
-      REAL cld_fi3d(klon,lmax3)
-      REAL cld_3d(iim,jjmp1,lmax3)
-c
-      INTEGER iw, iwmax
-      REAL wmin, pas_w
-c     PARAMETER(wmin=-100.,pas_w=10.,iwmax=30)
-cIM 051005     PARAMETER(wmin=-200.,pas_w=10.,iwmax=40)
-      PARAMETER(wmin=-100.,pas_w=10.,iwmax=20)
-      REAL o500(klon)
-c
-
-c sorties ISCCP
-
-      integer nid_isccp
-      save nid_isccp        
-c$OMP THREADPRIVATE(nid_isccp)
-
-      REAL zx_tau(kmaxm1), zx_pc(lmaxm1), zx_o500(iwmax)
-      DATA zx_tau/0.0, 0.3, 1.3, 3.6, 9.4, 23., 60./
-      SAVE zx_tau
-      DATA zx_pc/180., 310., 440., 560., 680., 800., 1000./
-      SAVE zx_pc
-c$OMP THREADPRIVATE(zx_tau,zx_pc)
-c cldtopres pression au sommet des nuages
-      REAL cldtopres(lmaxm1), cldtopres3(lmax3)
-      DATA cldtopres/180., 310., 440., 560., 680., 800., 1000./
-      DATA cldtopres3/440., 680., 1000./
-      SAVE cldtopres,cldtopres3
-c$OMP THREADPRIVATE(cldtopres,cldtopres3)
-cIM 051005 BEG
-      INTEGER komega, nhoriRD 
-
-c taulev: numero du niveau de tau dans les sorties ISCCP
-      CHARACTER *4 taulev(kmaxm1)
-c     DATA taulev/'tau1','tau2','tau3','tau4','tau5','tau6','tau7'/
-      DATA taulev/'tau0','tau1','tau2','tau3','tau4','tau5','tau6'/
-      CHARACTER *3 pclev(lmaxm1)
-      DATA pclev/'pc1','pc2','pc3','pc4','pc5','pc6','pc7'/
-      SAVE taulev,pclev
-c$OMP THREADPRIVATE(taulev,pclev)
-c
-c cnameisccp
-      CHARACTER *29 cnameisccp(lmaxm1,kmaxm1)
-cIM bad 151205     DATA cnameisccp/'pc< 50hPa, tau< 0.3', 
-      DATA cnameisccp/'pc= 50-180hPa, tau< 0.3',
-     .                'pc= 180-310hPa, tau< 0.3',
-     .                'pc= 310-440hPa, tau< 0.3',
-     .                'pc= 440-560hPa, tau< 0.3',
-     .                'pc= 560-680hPa, tau< 0.3',
-     .                'pc= 680-800hPa, tau< 0.3',
-     .                'pc= 800-1000hPa, tau< 0.3',
-     .                'pc= 50-180hPa, tau= 0.3-1.3',
-     .                'pc= 180-310hPa, tau= 0.3-1.3',
-     .                'pc= 310-440hPa, tau= 0.3-1.3',
-     .                'pc= 440-560hPa, tau= 0.3-1.3',
-     .                'pc= 560-680hPa, tau= 0.3-1.3',
-     .                'pc= 680-800hPa, tau= 0.3-1.3',
-     .                'pc= 800-1000hPa, tau= 0.3-1.3',
-     .                'pc= 50-180hPa, tau= 1.3-3.6',
-     .                'pc= 180-310hPa, tau= 1.3-3.6',
-     .                'pc= 310-440hPa, tau= 1.3-3.6',
-     .                'pc= 440-560hPa, tau= 1.3-3.6',
-     .                'pc= 560-680hPa, tau= 1.3-3.6',
-     .                'pc= 680-800hPa, tau= 1.3-3.6',
-     .                'pc= 800-1000hPa, tau= 1.3-3.6',
-     .                'pc= 50-180hPa, tau= 3.6-9.4',
-     .                'pc= 180-310hPa, tau= 3.6-9.4',
-     .                'pc= 310-440hPa, tau= 3.6-9.4',
-     .                'pc= 440-560hPa, tau= 3.6-9.4',
-     .                'pc= 560-680hPa, tau= 3.6-9.4',
-     .                'pc= 680-800hPa, tau= 3.6-9.4',
-     .                'pc= 800-1000hPa, tau= 3.6-9.4',
-     .                'pc= 50-180hPa, tau= 9.4-23',
-     .                'pc= 180-310hPa, tau= 9.4-23',
-     .                'pc= 310-440hPa, tau= 9.4-23',
-     .                'pc= 440-560hPa, tau= 9.4-23',
-     .                'pc= 560-680hPa, tau= 9.4-23',
-     .                'pc= 680-800hPa, tau= 9.4-23',
-     .                'pc= 800-1000hPa, tau= 9.4-23',
-     .                'pc= 50-180hPa, tau= 23-60',
-     .                'pc= 180-310hPa, tau= 23-60',
-     .                'pc= 310-440hPa, tau= 23-60',
-     .                'pc= 440-560hPa, tau= 23-60',
-     .                'pc= 560-680hPa, tau= 23-60',
-     .                'pc= 680-800hPa, tau= 23-60',
-     .                'pc= 800-1000hPa, tau= 23-60',
-     .                'pc= 50-180hPa, tau> 60.',
-     .                'pc= 180-310hPa, tau> 60.',
-     .                'pc= 310-440hPa, tau> 60.',
-     .                'pc= 440-560hPa, tau> 60.',
-     .                'pc= 560-680hPa, tau> 60.',
-     .                'pc= 680-800hPa, tau> 60.',
-     .                'pc= 800-1000hPa, tau> 60.'/
-       SAVE cnameisccp
-c$OMP THREADPRIVATE(cnameisccp)
-c
-c     REAL zx_lonx7(iimx7), zx_latx7(jjmp1x7)
-c     INTEGER nhorix7
-cIM: region='3d' <==> sorties en global
-      CHARACTER*3 region
-      PARAMETER(region='3d')
-c
-cIM ISCCP simulator v3.4
-c
-      logical ok_hf
-c
-      integer nid_hf, nid_hf3d
-      save ok_hf, nid_hf, nid_hf3d
-c$OMP THREADPRIVATE(ok_hf, nid_hf, nid_hf3d)
-c  QUESTION : noms de variables ?
-
-      INTEGER        longcles
-      PARAMETER    ( longcles = 20 )
-      REAL clesphy0( longcles      )
-c
-c Variables propres a la physique
-      INTEGER itap
-      SAVE itap                   ! compteur pour la physique
-c$OMP THREADPRIVATE(itap)
-c
-      REAL,save ::  solarlong0
-c$OMP THREADPRIVATE(solarlong0)
-
-c
-c  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
-c
-cIM 141004     REAL zulow(klon),zvlow(klon),zustr(klon), zvstr(klon)
-      REAL zulow(klon),zvlow(klon)
-c
-      INTEGER igwd,idx(klon),itest(klon)
-c
-c      REAL,allocatable,save :: run_off_lic_0(:)
-cc$OMP THREADPRIVATE(run_off_lic_0)
-cym      SAVE run_off_lic_0
-cKE43
-c Variables liees a la convection de K. Emanuel (sb):
-c
-      REAL bas, top             ! cloud base and top levels
-      SAVE bas
-      SAVE top
-c$OMP THREADPRIVATE(bas, top)
-
-      REAL wdn(klon), tdn(klon), qdn(klon)
-c
-c=================================================================================================
-cCR04.12.07: on ajoute les nouvelles variables du nouveau schema de convection avec poches froides
-c Variables li\'ees \`a la poche froide (jyg)
-
-      REAL mip(klon,klev)  ! mass flux shed by the adiab ascent at each level
-c
-      REAL wape_prescr, fip_prescr
-      INTEGER it_wape_prescr
-      SAVE wape_prescr, fip_prescr, it_wape_prescr
-c$OMP THREADPRIVATE(wape_prescr, fip_prescr, it_wape_prescr)
-c
-c variables supplementaires de concvl
-      REAL Tconv(klon,klev)
-      REAL ment(klon,klev,klev),sij(klon,klev,klev)
-      REAL dd_t(klon,klev),dd_q(klon,klev)
-
-      real, save :: alp_bl_prescr=0.
-      real, save :: ale_bl_prescr=0.
-
-      real, save :: ale_max=1000.
-      real, save :: alp_max=2.
-
-      real, save :: wake_s_min_lsp=0.1
-
-c$OMP THREADPRIVATE(alp_bl_prescr,ale_bl_prescr)
-c$OMP THREADPRIVATE(ale_max,alp_max)
-c$OMP THREADPRIVATE(wake_s_min_lsp)
-
-
-      real ok_wk_lsp(klon)
-
-cRC
-c Variables li\'ees \`a la poche froide (jyg et rr)
-c Version diagnostique pour l'instant : pas de r\'etroaction sur la convection
-
-      REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection
-
-      REAL wake_dth(klon,klev)        ! wake : temp pot difference
-
-      REAL wake_d_deltat_gw(klon,klev)! wake : delta T tendency due to Gravity Wave (/s)
-      REAL wake_omgbdth(klon,klev)    ! Wake : flux of Delta_Theta transported by LS omega
-      REAL wake_dp_omgb(klon,klev)    ! Wake : vertical gradient of large scale omega
-      REAL wake_dtKE(klon,klev)       ! Wake : differential heating (wake - unpertubed) CONV
-      REAL wake_dqKE(klon,klev)       ! Wake : differential moistening (wake - unpertubed) CONV
-      REAL wake_dtPBL(klon,klev)      ! Wake : differential heating (wake - unpertubed) PBL
-      REAL wake_dqPBL(klon,klev)      ! Wake : differential moistening (wake - unpertubed) PBL
-      REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)
-      REAL wake_dp_deltomg(klon,klev) ! Wake : gradient vertical de wake_omg
-      REAL wake_spread(klon,klev)     ! spreading term in wake_delt
-c
-cpourquoi y'a pas de save??
-c
-      INTEGER wake_k(klon)            ! Wake sommet
-c
-      REAL t_undi(klon,klev)               ! temperature moyenne dans la zone non perturbee
-      REAL q_undi(klon,klev)               ! humidite moyenne dans la zone non perturbee
-c
-cjyg
-ccc      REAL wake_pe(klon)              ! Wake potential energy - WAPE 
-
-      REAL wake_gfl(klon)             ! Gust Front Length
-      REAL wake_dens(klon)
-c
-c
-      REAL dt_dwn(klon,klev)
-      REAL dq_dwn(klon,klev)
-      REAL wdt_PBL(klon,klev)
-      REAL udt_PBL(klon,klev)
-      REAL wdq_PBL(klon,klev)
-      REAL udq_PBL(klon,klev)
-      REAL M_dwn(klon,klev)
-      REAL M_up(klon,klev)
-      REAL dt_a(klon,klev)
-      REAL dq_a(klon,klev)
-      REAL, SAVE :: alp_offset
-c$OMP THREADPRIVATE(alp_offset)
-
-c
-cRR:fin declarations poches froides
-c=======================================================================================================
-        
-      REAL ztv(klon,klev),ztva(klon,klev)
-      REAL zpspsk(klon,klev)
-      REAL ztla(klon,klev),zqla(klon,klev) 
-      REAL zthl(klon,klev)
-
-ccc nrlmd le 10/04/2012
-
-c--------Stochastic Boundary Layer Triggering: ALE_BL--------
-c---Propri\'et\'es du thermiques au LCL 
-      real zlcl_th(klon)                                     ! Altitude du LCL calcul\'e continument (pcon dans thermcell_main.F90)
-      real fraca0(klon)                                      ! Fraction des thermiques au LCL
-      real w0(klon)                                          ! Vitesse des thermiques au LCL
-      real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
-      real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
-      real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL 
-      real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL 
-
-c---D\'eclenchement stochastique
-      integer :: tau_trig(klon)
-
-c--------Statistical Boundary Layer Closure: ALP_BL--------
-c---Profils de TKE dans et hors du thermique
-      real pbl_tke_input(klon,klev+1,nbsrf)
-      real therm_tke_max(klon,klev)                          ! Profil de TKE dans les thermiques
-      real env_tke_max(klon,klev)                            ! Profil de TKE dans l'environnement
-
-
-ccc fin nrlmd le 10/04/2012
-
-c Variables locales pour la couche limite (al1):
-c
-cAl1      REAL pblh(klon)           ! Hauteur de couche limite
-cAl1      SAVE pblh
-c34EK
-c
-c Variables locales:
-c
-cAA
-cAA  Pour phytrac 
-      REAL u1(klon)             ! vents dans la premiere couche U
-      REAL v1(klon)             ! vents dans la premiere couche V
-
-c@$$      LOGICAL offline           ! Controle du stockage ds "physique"
-c@$$      PARAMETER (offline=.false.)
-c@$$      INTEGER physid
-      REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
-      REAL frac_nucl(klon,klev) ! idem (nucleation)
-! RomP >>> 
-      REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
-! RomP <<<
-      INTEGER       :: iii
-      REAL          :: calday
-
-cIM cf FH pour Tiedtke 080604
-      REAL rain_tiedtke(klon),snow_tiedtke(klon)
-c
-cIM 050204 END
-      REAL devap(klon) ! evaporation et sa derivee
-      REAL dsens(klon) ! chaleur sensible et sa derivee
-
-c
-c Conditions aux limites
-c
-!
-      REAL :: day_since_equinox
-! Date de l'equinoxe de printemps
-      INTEGER, parameter :: mth_eq=3, day_eq=21
-      REAL :: jD_eq
-
-      LOGICAL, parameter :: new_orbit = .true.
-
-c
-      INTEGER lmt_pas
-      SAVE lmt_pas                ! frequence de mise a jour
-c$OMP THREADPRIVATE(lmt_pas) 
-      real zmasse(klon, llm),exner(klon, llm) 
-C     (column-density of mass of air in a cell, in kg m-2)
-      real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
-
-cIM sorties
-      REAL un_jour
-      PARAMETER(un_jour=86400.)
-c======================================================================
-c
-c Declaration des procedures appelees
-c
-      EXTERNAL angle     ! calculer angle zenithal du soleil
-      EXTERNAL alboc     ! calculer l'albedo sur ocean
-      EXTERNAL ajsec     ! ajustement sec
-      EXTERNAL conlmd    ! convection (schema LMD)
-cKE43
-      EXTERNAL conema3  ! convect4.3
-      EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
-cAA 
-      EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
-c                          ! stockage des coefficients necessaires au
-c                          ! lessivage OFF-LINE et ON-LINE
-      EXTERNAL hgardfou  ! verifier les temperatures
-      EXTERNAL nuage     ! calculer les proprietes radiatives
-CC      EXTERNAL o3cm      ! initialiser l'ozone
-      EXTERNAL orbite    ! calculer l'orbite terrestre
-      EXTERNAL phyetat0  ! lire l'etat initial de la physique
-      EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
-      EXTERNAL suphel    ! initialiser certaines constantes
-      EXTERNAL transp    ! transport total de l'eau et de l'energie
-      EXTERNAL ecribina  ! ecrire le fichier binaire global
-      EXTERNAL ecribins  ! ecrire le fichier binaire global
-      EXTERNAL ecrirega  ! ecrire le fichier binaire regional
-      EXTERNAL ecriregs  ! ecrire le fichier binaire regional
-cIM
-      EXTERNAL haut2bas  !variables de haut en bas
-      EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression
-      EXTERNAL undefSTD      !somme les valeurs definies d'1 var a 1 niveau de pression
-c     EXTERNAL moy_undefSTD  !moyenne d'1 var a 1 niveau de pression
-c     EXTERNAL moyglo_aire   !moyenne globale d'1 var ponderee par l'aire de la maille (moyglo_pondaire)
-c                            !par la masse/airetot (moyglo_pondaima) et la vraie masse (moyglo_pondmass)
-c
-c Variables locales
-c
-      REAL rhcl(klon,klev)    ! humiditi relative ciel clair
-      REAL dialiq(klon,klev)  ! eau liquide nuageuse
-      REAL diafra(klon,klev)  ! fraction nuageuse
-      REAL cldliq(klon,klev)  ! eau liquide nuageuse
-c
-CXXX PB 
-      REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
-c
-      REAL zxfluxt(klon, klev)
-      REAL zxfluxq(klon, klev)
-      REAL zxfluxu(klon, klev)
-      REAL zxfluxv(klon, klev)
-
-c Le rayonnement n'est pas calcule tous les pas, il faut donc
-c                      sauvegarder les sorties du rayonnement
-cym      SAVE  heat,cool,albpla,topsw,toplw,solsw,sollw,sollwdown
-cym      SAVE  sollwdownclr, toplwdown, toplwdownclr
-cym      SAVE  topsw0,toplw0,solsw0,sollw0, heat0, cool0
-c
-      INTEGER itaprad
-      SAVE itaprad
-c$OMP THREADPRIVATE(itaprad)
-c
-      REAL conv_q(klon,klev) ! convergence de l'humidite (kg/kg/s)
-      REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
-
-c
-      REAL zxsnow(klon)
-      REAL zxsnow_dummy(klon)
-c
-      REAL dist, rmu0(klon), fract(klon)
-      REAL zdtime, zlongi
-c
-      CHARACTER*2 str2
-      CHARACTER*2 iqn
-c
-      REAL qcheck
-      REAL z_avant(klon), z_apres(klon), z_factor(klon)
-      LOGICAL zx_ajustq
-c
-      REAL za, zb
-      REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp
-      real zqsat(klon,klev)
-      INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq, iff
-      REAL t_coup
-      PARAMETER (t_coup=234.0)
-
-cym A voir plus tard !!
-cym      REAL zx_relief(iim,jjmp1)
-cym      REAL zx_aire(iim,jjmp1)
-c
-c Grandeurs de sorties
-      REAL s_capCL(klon)
-      REAL s_oliqCL(klon), s_cteiCL(klon)
-      REAL s_trmb1(klon), s_trmb2(klon)
-      REAL s_trmb3(klon)
-cKE43
-c Variables locales pour la convection de K. Emanuel (sb):
-
-      REAL tvp(klon,klev)       ! virtual temp of lifted parcel
-      CHARACTER*40 capemaxcels  !max(CAPE)
-
-      REAL rflag(klon)          ! flag fonctionnement de convect
-      INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
-
-c -- convect43:
-      INTEGER ntra              ! nb traceurs pour convect4.3
-      REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
-      REAL dtma_con(klon),dtlcl_con(klon)
-      REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
-      REAL dplcldt(klon), dplcldr(klon)
-c?     .     condm_con(klon,klev),conda_con(klon,klev),
-c?     .     mr_con(klon,klev),ep_con(klon,klev)
-c?     .    ,sadiab(klon,klev),wadiab(klon,klev)
-c --
-c34EK
-c
-c Variables du changement
-c
-c con: convection
-c lsc: condensation a grande echelle (Large-Scale-Condensation)
-c ajs: ajustement sec
-c eva: evaporation de l'eau liquide nuageuse
-c vdf: couche limite (Vertical DiFfusion)
-
-! tendance nulles
-      REAL du0(klon,klev),dv0(klon,klev),dq0(klon,klev),dql0(klon,klev)
-
-c
-*********************************************************
-*     declarations
-      
-*********************************************************
-cIM 081204 END
-c
-      REAL pen_u(klon,klev), pen_d(klon,klev)
-      REAL pde_u(klon,klev), pde_d(klon,klev)
-      INTEGER kcbot(klon), kctop(klon), kdtop(klon)
-c
-      REAL ratqsc(klon,klev)
-      real ratqsbas,ratqshaut,tau_ratqs
-      save ratqsbas,ratqshaut,tau_ratqs
-c$OMP THREADPRIVATE(ratqsbas,ratqshaut,tau_ratqs)
-      real zpt_conv(klon,klev)
-
-c Parametres lies au nouveau schema de nuages (SB, PDF)
-      real fact_cldcon
-      real facttemps
-      logical ok_newmicro
-      save ok_newmicro
-c$OMP THREADPRIVATE(ok_newmicro)
-      save fact_cldcon,facttemps
-c$OMP THREADPRIVATE(fact_cldcon,facttemps)
-
-      integer iflag_cldcon
-      save iflag_cldcon
-c$OMP THREADPRIVATE(iflag_cldcon)
-      logical ptconv(klon,klev)
-cIM cf. AM 081204 BEG
-      logical ptconvth(klon,klev)
-cIM cf. AM 081204 END
-c
-c Variables liees a l'ecriture de la bande histoire physique
-c
-c======================================================================
-c
-cIM cf. AM 081204 BEG
-c   declarations pour sortir sur une sous-region
-      integer imin_ins,imax_ins,jmin_ins,jmax_ins
-      save imin_ins,imax_ins,jmin_ins,jmax_ins
-c$OMP THREADPRIVATE(imin_ins,imax_ins,jmin_ins,jmax_ins)
-c      real lonmin_ins,lonmax_ins,latmin_ins
-c     s  ,latmax_ins
-c     data lonmin_ins,lonmax_ins,latmin_ins
-c    s  ,latmax_ins/
-c valeurs initiales     s   -5.,20.,41.,55./   
-c    s   100.,130.,-20.,20./
-c    s   -180.,180.,-90.,90./
-c======================================================================
-cIM cf. AM 081204 END
-
-c
-      integer itau_w   ! pas de temps ecriture = itap + itau_phy
-c
-c
-c Variables locales pour effectuer les appels en serie
-c
-cIM RH a 2m (la surface)
-      REAL Lheat
-
-      INTEGER        length
-      PARAMETER    ( length = 100 )
-      REAL tabcntr0( length       )
-c
-      INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev)
-cIM
-      INTEGER ndex2d1(iwmax)
-c
-cIM AMIP2 BEG
-      REAL moyglo, mountor
-cIM 141004 BEG
-      REAL zustrdr(klon), zvstrdr(klon)
-      REAL zustrli(klon), zvstrli(klon)
-      REAL zustrph(klon), zvstrph(klon)
-      REAL zustrhi(klon), zvstrhi(klon)
-      REAL aam, torsfc
-cIM 141004 END
-cIM 190504 BEG
-      INTEGER ij, imp1jmp1
-      PARAMETER(imp1jmp1=(iim+1)*jjmp1)
-cym A voir plus tard
-      REAL zx_tmp(imp1jmp1), airedyn(iim+1,jjmp1)
-      REAL padyn(iim+1,jjmp1,klev+1)
-      REAL dudyn(iim+1,jjmp1,klev)
-      REAL rlatdyn(iim+1,jjmp1)
-cIM 190504 END
-      LOGICAL ok_msk
-      REAL msk(klon)
-cIM 
-      REAL airetot, pi
-cym A voir plus tard
-cym      REAL zm_wo(jjmp1, klev)
-cIM AMIP2 END
-c
-      REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
-      REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 
-      REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1)
-      REAL(KIND=8) zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D 
-      REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
-      REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
-c
-      INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
-      INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
-      SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
-      SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
-c$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
-c$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
-c$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
-c
-cIM 280405 BEG
-      INTEGER nid_bilKPins, nid_bilKPave
-      SAVE nid_bilKPins, nid_bilKPave
-c$OMP THREADPRIVATE(nid_bilKPins, nid_bilKPave)
-c
-      REAL ve_lay(klon,klev) ! transport meri. de l'energie a chaque niveau vert.
-      REAL vq_lay(klon,klev) ! transport meri. de l'eau a chaque niveau vert.
-      REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert.
-      REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert.
-c
-      INTEGER nhori, nvert, nvert1, nvert3
-      REAL zsto, zsto1, zsto2
-      REAL zstophy, zstorad, zstohf, zstoday, zstomth, zout
-      REAL zcals(napisccp), zcalh(napisccp), zoutj(napisccp)
-      REAL zout_isccp(napisccp)
-      SAVE zcals, zcalh, zoutj, zout_isccp
-c$OMP THREADPRIVATE(zcals, zcalh, zoutj, zout_isccp)
-
-      real zjulian
-      save zjulian
-c$OMP THREADPRIVATE(zjulian)
-
-      character*20 modname
-      character*80 abort_message
-      logical ok_sync
-      real date0
-      integer idayref
-
-C essai writephys
-      integer fid_day, fid_mth, fid_ins
-      parameter (fid_ins = 1, fid_day = 2, fid_mth = 3) 
-      integer prof2d_on, prof3d_on, prof2d_av, prof3d_av
-      parameter (prof2d_on = 1, prof3d_on = 2,
-     .           prof2d_av = 3, prof3d_av = 4)
-      character*30 nom_fichier
-      character*40 varname
-      character*40 vartitle
-      character*20 varunits
-C     Variables liees au bilan d'energie et d'enthalpi
-      REAL ztsol(klon)
-      REAL      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot
-     $        , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
-      SAVE      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot
-     $        , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
-c$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot,
-c$OMP+              h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
-      REAL      d_h_vcol, d_h_dair, 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
-c$OMP THREADPRIVATE(d_h_vcol_phy)
-      REAL      zero_v(klon)
-      CHARACTER*15 ztit
-      INTEGER   ip_ebil  ! PRINT level for energy conserv. diag.
-      SAVE      ip_ebil
-      DATA      ip_ebil/0/
-c$OMP THREADPRIVATE(ip_ebil)
-      INTEGER   if_ebil ! level for energy conserv. dignostics
-      SAVE      if_ebil
-c$OMP THREADPRIVATE(if_ebil)
-c+jld ec_conser
-      REAL ZRCPD
-c-jld ec_conser
-      REAL q2m(klon,nbsrf)  ! humidite a 2m
-
-cIM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
-      CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
-      CHARACTER*40 tinst, tave, typeval
-      REAL cldtaupi(klon,klev)  ! Cloud optical thickness for pre-industrial (pi) aerosols
-
-
-      REAL re_top(klon), fl_top(klon) ! CDR at top of liquid water clouds
-
-      ! Aerosol optical properties
-      CHARACTER*4, DIMENSION(naero_grp) :: rfname 
-      REAL, DIMENSION(klon)          :: aerindex     ! POLDER aerosol index
-      REAL, DIMENSION(klon,klev)     :: mass_solu_aero    ! total mass concentration for all soluble aerosols[ug/m3]
-      REAL, DIMENSION(klon,klev)     :: mass_solu_aero_pi ! - " - (pre-industrial value)
-      INTEGER :: naero ! aerosol species 
-
-      ! Parameters
-      LOGICAL ok_ade, ok_aie    ! Apply aerosol (in)direct effects or not
-      LOGICAL ok_cdnc          ! ok cloud droplet number concentration (O. Boucher 01-2013)
-      REAL bl95_b0, bl95_b1   ! Parameter in Boucher and Lohmann (1995)
-      SAVE ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1
-c$OMP THREADPRIVATE(ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1)
-      LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
-                                      ! false : lecture des aerosol dans un fichier
-c$OMP THREADPRIVATE(aerosol_couple)    
-      INTEGER, SAVE :: flag_aerosol 
-c$OMP THREADPRIVATE(flag_aerosol) 
-      LOGICAL, SAVE :: new_aod
-c$OMP THREADPRIVATE(new_aod) 
-c
-c--STRAT AEROSOL
-      LOGICAL, SAVE :: flag_aerosol_strat
-c$OMP THREADPRIVATE(flag_aerosol_strat)
-cc-fin STRAT AEROSOL
-c
-c Declaration des constantes et des fonctions thermodynamiques
-c
-      LOGICAL,SAVE :: first=.true.
-c$OMP THREADPRIVATE(first)
-
-      integer iunit
-
-      integer, save::  read_climoz ! read ozone climatology
-C     (let it keep the default OpenMP shared attribute)
-C     Allowed values are 0, 1 and 2
-C     0: do not read an ozone climatology
-C     1: read a single ozone climatology that will be used day and night
-C     2: read two ozone climatologies, the average day and night
-C     climatology and the daylight climatology
-
-      integer, save:: ncid_climoz ! NetCDF file containing ozone climatologies
-C     (let it keep the default OpenMP shared attribute)
-
-      real, pointer, save:: press_climoz(:)
-C     (let it keep the default OpenMP shared attribute)
-!     edges of pressure intervals for ozone climatologies, in Pa, in strictly
-!     ascending order
-
-      integer, save:: co3i = 0
-!     time index in NetCDF file of current ozone fields
-c$OMP THREADPRIVATE(co3i) 
-
-      integer ro3i
-!     required time index in NetCDF file for the ozone fields, between 1
-!     and 360
-
-      INTEGER ierr
-#include "YOMCST.h"
-#include "YOETHF.h"
-#include "FCTTRE.h"
-cIM 100106 BEG : pouvoir sortir les ctes de la physique
-#include "conema3.h"
-#include "fisrtilp.h"
-#include "nuage.h"
-#include "compbl.h"
-cIM 100106 END : pouvoir sortir les ctes de la physique
-c
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-c Declarations pour Simulateur COSP
-c============================================================
-      real :: mr_ozone(klon,klev)
-
-cIM sorties fichier 1D paramLMDZ_phy.nc
-      REAL :: zx_tmp_0d(1,1)
-      INTEGER, PARAMETER :: np=1
-      REAL,dimension(klon_glo)        :: rlat_glo
-      REAL,dimension(klon_glo)        :: rlon_glo
-      REAL gbils(1), gevap(1), gevapt(1), glat(1), gnet0(1), gnet(1)
-      REAL grain(1), gtsol(1), gt2m(1), gprw(1)
-
-cIM stations CFMIP
-      INTEGER, SAVE :: nCFMIP
-c$OMP THREADPRIVATE(nCFMIP)
-      INTEGER, PARAMETER :: npCFMIP=120
-      INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:)
-      REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:)
-c$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP) 
-      INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:)
-      REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:)
-c$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM)
-      INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:)
-c$OMP THREADPRIVATE(iGCM, jGCM)
-      logical, dimension(nfiles)            :: phys_out_filestations
-      logical, parameter :: lNMC=.FALSE.
-
-cIM betaCRF
-      REAL, SAVE :: pfree, beta_pbl, beta_free
-c$OMP THREADPRIVATE(pfree, beta_pbl, beta_free)
-      REAL, SAVE :: lon1_beta,  lon2_beta, lat1_beta, lat2_beta
-c$OMP THREADPRIVATE(lon1_beta,  lon2_beta, lat1_beta, lat2_beta)
-      LOGICAL, SAVE :: mskocean_beta
-c$OMP THREADPRIVATE(mskocean_beta)
-      REAL, dimension(klon, klev) :: beta         ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF
-      REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw pour tester "CRF off"
-      REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw pour tester "CRF off"
-      REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw pour tester "CRF off"
-      REAL, dimension(klon, klev) :: cldfrarad    ! fraction nuageuse
-
-      INTEGER :: nbtr_tmp ! Number of tracer inside concvl
-      REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
-      integer iostat
-
-c======================================================================
-! Gestion calendrier : mise a jour du module phys_cal_mod
-!
-      CALL phys_cal_update(jD_cur,jH_cur)
-
-c======================================================================
-! Ecriture eventuelle d'un profil verticale en entree de la physique.
-! Utilise notamment en 1D mais peut etre active egalement en 3D
-! en imposant la valeur de igout.
-c======================================================================d
-      if (prt_level.ge.1) then
-          igout=klon/2+1/klon
-         write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
-         write(lunout,*)
-     s 'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
-         write(lunout,*)
-     s  nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys 
-
-         write(lunout,*) 'paprs, play, phi, u, v, t'
-         do k=1,klev
-            write(lunout,*) paprs(igout,k),pplay(igout,k),pphi(igout,k),
-     s   u(igout,k),v(igout,k),t(igout,k)
-         enddo
-         write(lunout,*) 'ovap (g/kg),  oliq (g/kg)'
-         do k=1,klev
-            write(lunout,*) qx(igout,k,1)*1000,qx(igout,k,2)*1000.
-         enddo
-      endif
-
-c======================================================================
-
-      if (first) then 
-      
-cCR:nvelles variables convection/poches froides
-      
-      print*, '================================================='
-      print*, 'Allocation des variables locales et sauvegardees'
-      call phys_local_var_init
-c
-      pasphys=pdtphys
-c     appel a la lecture du run.def physique
-      call conf_phys(ok_journe, ok_mensuel,
-     .     ok_instan, ok_hf,
-     .     ok_LES,
-     .     callstats,
-     .     solarlong0,seuil_inversion,
-     .     fact_cldcon, facttemps,ok_newmicro,iflag_radia,
-     .     iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,
-     .     ok_ade, ok_aie, ok_cdnc, aerosol_couple, 
-     .     flag_aerosol, flag_aerosol_strat, new_aod,
-     .     bl95_b0, bl95_b1,
-c     nv flags pour la convection et les poches froides
-     .     read_climoz,
-     &     alp_offset)
-      call phys_state_var_init(read_climoz)
-      call phys_output_var_init
-      print*, '================================================='
-c
-          dnwd0=0.0
-          ftd=0.0
-          fqd=0.0
-          cin=0.
-cym Attention pbase pas initialise dans concvl !!!!
-          pbase=0
-cIM 180608
-
-        itau_con=0
-        first=.false.
-
-      endif  ! first
-
-cym => necessaire pour iflag_con != 2    
-      pmfd(:,:) = 0.
-      pen_u(:,:) = 0.
-      pen_d(:,:) = 0.
-      pde_d(:,:) = 0.
-      pde_u(:,:) = 0.
-      aam=0.
-
-      torsfc=0.
-      forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
-
-
-
-       modname = 'physiq'
-cIM
-      IF (ip_ebil_phy.ge.1) THEN
-        DO i=1,klon
-          zero_v(i)=0.
-        END DO 
-      END IF 
-      ok_sync=.TRUE.
-
-      IF (debut) THEN
-         CALL suphel ! initialiser constantes et parametres phys.
-      ENDIF
-
-      if(prt_level.ge.1) print*,'CONVERGENCE PHYSIQUE THERM 1 '
-
-
-c======================================================================
-! Gestion calendrier : mise a jour du module phys_cal_mod
-!
-c     CALL phys_cal_update(jD_cur,jH_cur)
-
-c
-c Si c'est le debut, il faut initialiser plusieurs choses
-c          ********
-c
-       IF (debut) THEN
-!rv
-cCRinitialisation de wght_th et lalim_conv pour la definition de la couche alimentation 
-cde la convection a partir des caracteristiques du thermique
-         wght_th(:,:)=1.
-         lalim_conv(:)=1 
-cRC
-         ustar(:,:)=0.
-         u10m(:,:)=0.
-         v10m(:,:)=0.
-         rain_con(:)=0.
-         snow_con(:)=0.
-         topswai(:)=0.
-         topswad(:)=0.
-         solswai(:)=0.
-         solswad(:)=0.
-
-         wmax_th(:)=0.
-         tau_overturning_th(:)=0.
-
-         IF (type_trac == 'inca') THEN
-            ! jg : initialisation jusqu'au ces variables sont dans restart
-            ccm(:,:,:) = 0.
-            tau_aero(:,:,:,:) = 0.
-            piz_aero(:,:,:,:) = 0.
-            cg_aero(:,:,:,:) = 0.
-         END IF
-
-         rnebcon0(:,:) = 0.0
-         clwcon0(:,:) = 0.0
-         rnebcon(:,:) = 0.0
-         clwcon(:,:) = 0.0
-
-cIM      
-         IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0.
-c
-      print*,'iflag_coupl,iflag_clos,iflag_wake',
-     .   iflag_coupl,iflag_clos,iflag_wake
-      print*,'CYCLE_DIURNE', cycle_diurne
-c
-      IF (iflag_con.EQ.2.AND.iflag_cldcon.GT.-1) THEN
-         abort_message = 'Tiedtke needs iflag_cldcon=-2 or -1'
-         CALL abort_gcm (modname,abort_message,1)
-      ENDIF
-c
-      IF(ok_isccp.AND.iflag_con.LE.2) THEN
-         abort_message = 'ISCCP-like outputs may be available for KE
-     .(iflag_con >= 3); for Tiedtke (iflag_con=-2) put ok_isccp=n'
-         CALL abort_gcm (modname,abort_message,1)
-      ENDIF
-c
-c Initialiser les compteurs:
-c
-         itap    = 0
-         itaprad = 0
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! Un petit travail \`a faire ici.
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-         if (iflag_pbl>1) then
-             PRINT*, "Using method MELLOR&YAMADA" 
-         endif
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! FH 2008/05/02 changement lie a la lecture de nbapp_rad dans phylmd plutot que
-! dyn3d
-! Attention : la version precedente n'etait pas tres propre.
-! Il se peut qu'il faille prendre une valeur differente de nbapp_rad
-! pour obtenir le meme resultat.
-         dtime=pdtphys
-         radpas = NINT( 86400./dtime/nbapp_rad)
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-         CALL phyetat0 ("startphy.nc",clesphy0,tabcntr0)
-         IF (klon_glo==1) THEN
-         coefh=0. ; coefm=0. ; pbl_tke=0.
-         coefh(:,2,:)=1.e-2 ; coefm(:,2,:)=1.e-2 ; pbl_tke(:,2,:)=1.e-2
-         PRINT*,'FH WARNING : lignes a supprimer'
-         ENDIF
-cIM begin
-          print*,'physiq: clwcon rnebcon ratqs',clwcon(1,1),rnebcon(1,1)
-     $,ratqs(1,1)
-cIM end
-
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-c
-C on remet le calendrier a zero
-c
-         IF (raz_date .eq. 1) THEN
-           itau_phy = 0
-         ENDIF
-
-cIM cf. AM 081204 BEG
-         PRINT*,'cycle_diurne3 =',cycle_diurne
-cIM cf. AM 081204 END
-c
-         CALL printflag( tabcntr0,radpas,ok_journe,
-     ,                    ok_instan, ok_region )
-c
-         IF (ABS(dtime-pdtphys).GT.0.001) THEN
-            WRITE(lunout,*) 'Pas physique n est pas correct',dtime,
-     .                        pdtphys
-            abort_message='Pas physique n est pas correct '
-!           call abort_gcm(modname,abort_message,1)
-            dtime=pdtphys
-         ENDIF
-         IF (nlon .NE. klon) THEN
-            WRITE(lunout,*)'nlon et klon ne sont pas coherents', nlon, 
-     .                      klon
-            abort_message='nlon et klon ne sont pas coherents'
-            call abort_gcm(modname,abort_message,1)
-         ENDIF
-         IF (nlev .NE. klev) THEN
-            WRITE(lunout,*)'nlev et klev ne sont pas coherents', nlev,
-     .                       klev
-            abort_message='nlev et klev ne sont pas coherents'
-            call abort_gcm(modname,abort_message,1)
-         ENDIF
-c
-         IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN 
-           WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant'
-           WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne"
-           abort_message='Nbre d appels au rayonnement insuffisant'
-           call abort_gcm(modname,abort_message,1)
-         ENDIF
-         WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
-         WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=",
-     .                   ok_cvl
-c
-cKE43
-c Initialisation pour la convection de K.E. (sb):
-         IF (iflag_con.GE.3) THEN
-
-         WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3  "
-         WRITE(lunout,*)
-     .      "On va utiliser le melange convectif des traceurs qui"
-         WRITE(lunout,*)"est calcule dans convect4.3"
-         WRITE(lunout,*)" !!! penser aux logical flags de phytrac"
-
-          DO i = 1, klon
-           ema_cbmf(i) = 0.
-           ema_pcb(i)  = 0.
-           ema_pct(i)  = 0.
-c          ema_workcbmf(i) = 0.
-          ENDDO
-cIM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG
-          DO i = 1, klon
-           ibas_con(i) = 1
-           itop_con(i) = 1
-          ENDDO
-cIM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>END
-c===============================================================================
-cCR:04.12.07: initialisations poches froides
-c Controle de ALE et ALP pour la fermeture convective (jyg)
-          if (iflag_wake>=1) then
-            CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr
-     s                  ,alp_bl_prescr, ale_bl_prescr)
-c 11/09/06 rajout initialisation ALE et ALP du wake et PBL(YU)
-c        print*,'apres ini_wake iflag_cldcon=', iflag_cldcon
-          endif
-
-        do i = 1,klon
-         Ale_bl(i)=0.
-         Alp_bl(i)=0.
-        enddo
-
-c================================================================================
-cIM stations CFMIP
-      nCFMIP=npCFMIP
-      OPEN(98,file='npCFMIP_param.data',status='old',
-     $          form='formatted',iostat=iostat)
-            if (iostat == 0) then
-      READ(98,*,end=998) nCFMIP
-998   CONTINUE
-      CLOSE(98)
-      CONTINUE
-      IF(nCFMIP.GT.npCFMIP) THEN
-       print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler'
-       CALL abort
-      else
-       print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP
-      ENDIF
-
-c
-      ALLOCATE(tabCFMIP(nCFMIP))
-      ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP))
-      ALLOCATE(tabijGCM(nCFMIP))
-      ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP))
-      ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP))
-c
-c lecture des nCFMIP stations CFMIP, de leur numero 
-c et des coordonnees geographiques lonCFMIP, latCFMIP
-c
-         CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP, 
-     $lonCFMIP, latCFMIP)
-c
-c identification des
-c 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ
-c 2) indices points tabijGCM de la grille physique 1d sur klon points
-c 3) indices iGCM, jGCM de la grille physique 2d
-c
-         CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP,
-     $tabijGCM, lonGCM, latGCM, iGCM, jGCM)
-c
-            else
-               ALLOCATE(tabijGCM(0))
-               ALLOCATE(lonGCM(0), latGCM(0))
-               ALLOCATE(iGCM(0), jGCM(0))
-            end if
-         else
-            ALLOCATE(tabijGCM(0))
-            ALLOCATE(lonGCM(0), latGCM(0))
-            ALLOCATE(iGCM(0), jGCM(0))
-         ENDIF
- 
-           DO i=1,klon
-             rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
-           ENDDO
-
-c34EK
-         IF (ok_orodr) THEN
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! FH sans doute a enlever de finitivement ou, si on le garde, l'activer
-! justement quand ok_orodr = false.
-! ce rugoro est utilise par la couche limite et fait double emploi
-! avec les param\'etrisations sp\'ecifiques de Francois Lott.
-!           DO i=1,klon
-!             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
-!           ENDDO
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-           IF (ok_strato) THEN
-             CALL SUGWD_strato(klon,klev,paprs,pplay)
-           ELSE
-             CALL SUGWD(klon,klev,paprs,pplay)
-           ENDIF
-           
-           DO i=1,klon
-             zuthe(i)=0.
-             zvthe(i)=0.
-             if(zstd(i).gt.10.)then
-               zuthe(i)=(1.-zgam(i))*cos(zthe(i))
-               zvthe(i)=(1.-zgam(i))*sin(zthe(i))
-             endif
-           ENDDO
-         ENDIF
-c
-c
-         lmt_pas = NINT(86400./dtime * 1.0)   ! tous les jours
-         WRITE(lunout,*)'La frequence de lecture surface est de ', 
-     .                   lmt_pas
-c
-      capemaxcels = 't_max(X)'
-      t2mincels = 't_min(X)'
-      t2maxcels = 't_max(X)'
-      tinst = 'inst(X)'
-      tave = 'ave(X)'
-cIM cf. AM 081204 BEG
-      write(lunout,*)'AVANT HIST IFLAG_CON=',iflag_con
-cIM cf. AM 081204 END
-c
-c=============================================================
-c   Initialisation des sorties
-c=============================================================
-
-#ifdef CPP_IOIPSL
-
-c$OMP MASTER
-       call phys_output_open(rlon,rlat,nCFMIP,tabijGCM,
-     &                       iGCM,jGCM,lonGCM,latGCM,
-     &                       jjmp1,nlevSTD,clevSTD,rlevSTD,
-     &                       nbteta, ctetaSTD, dtime,ok_veget,
-     &                       type_ocean,iflag_pbl,ok_mensuel,ok_journe,
-     &                       ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 
-     &                       read_climoz, phys_out_filestations,
-     &                       new_aod, aerosol_couple,
-     &                       flag_aerosol_strat, pdtphys, paprs, pphis, 
-     &                       pplay, lmax_th, ptconv, ptconvth, ivap, 
-     &                       d_t, qx, d_qx, zmasse, ok_sync)
-c$OMP END MASTER
-c$OMP BARRIER
-
-#undef histISCCP
-#ifdef histISCCP
-#include "ini_histISCCP.h"
-#endif
-
-#include "ini_histday_seri.h"
-
-#include "ini_paramLMDZ_phy.h"
-
-#endif
-         ecrit_reg = ecrit_reg * un_jour
-         ecrit_tra = ecrit_tra * un_jour
-       
-cXXXPB Positionner date0 pour initialisation de ORCHIDEE
-      date0 = jD_ref 
-      WRITE(*,*) 'physiq date0 : ',date0
-c
-c
-c
-c Prescrire l'ozone dans l'atmosphere
-c
-c
-cc         DO i = 1, klon
-cc         DO k = 1, klev
-cc            CALL o3cm (paprs(i,k)/100.,paprs(i,k+1)/100., wo(i,k),20)
-cc         ENDDO
-cc         ENDDO
-c
-      IF (type_trac == 'inca') THEN
-#ifdef INCA
-         CALL VTe(VTphysiq)
-         CALL VTb(VTinca)
-!         iii = MOD(NINT(xjour),360)
-!         calday = REAL(iii) + jH_cur
-         calday = REAL(days_elapsed) + jH_cur
-         WRITE(lunout,*) 'initial time chemini', days_elapsed, calday
-
-         CALL chemini( 
-     $                   rg,
-     $                   ra,
-     $                   airephy,
-     $                   rlat,
-     $                   rlon,
-     $                   presnivs,
-     $                   calday,
-     $                   klon,
-     $                   nqtot,
-     $                   pdtphys,
-     $                   annee_ref,
-     $                   day_ref, 
-     $                   itau_phy)
-
-         CALL VTe(VTinca)
-         CALL VTb(VTphysiq)
-#endif
-      END IF
-c
-c
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Nouvelle initialisation pour le rayonnement RRTM
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-      call iniradia(klon,klev,paprs(1,1:klev+1))
-
-C$omp single
-      if (read_climoz >= 1) then
-         call open_climoz(ncid_climoz, press_climoz)
-      END IF
-C$omp end single
-c
-cIM betaCRF
-      pfree=70000. !Pa
-      beta_pbl=1.
-      beta_free=1.
-      lon1_beta=-180.
-      lon2_beta=+180.
-      lat1_beta=90.
-      lat2_beta=-90.
-      mskocean_beta=.FALSE.
-
-      OPEN(99,file='beta_crf.data',status='old',
-     $          form='formatted',err=9999)
-      READ(99,*,end=9998) pfree
-      READ(99,*,end=9998) beta_pbl
-      READ(99,*,end=9998) beta_free
-      READ(99,*,end=9998) lon1_beta
-      READ(99,*,end=9998) lon2_beta
-      READ(99,*,end=9998) lat1_beta
-      READ(99,*,end=9998) lat2_beta
-      READ(99,*,end=9998) mskocean_beta
-9998  Continue
-      CLOSE(99)
-9999  Continue
-      WRITE(*,*)'pfree=',pfree
-      WRITE(*,*)'beta_pbl=',beta_pbl
-      WRITE(*,*)'beta_free=',beta_free
-      WRITE(*,*)'lon1_beta=',lon1_beta
-      WRITE(*,*)'lon2_beta=',lon2_beta
-      WRITE(*,*)'lat1_beta=',lat1_beta
-      WRITE(*,*)'lat2_beta=',lat2_beta
-      WRITE(*,*)'mskocean_beta=',mskocean_beta
-      ENDIF
-!
-!   ****************     Fin  de   IF ( debut  )   ***************
-!
-!
-! Incrementer le compteur de la physique
-!
-      itap   = itap + 1
-c
-!
-! Update fraction of the sub-surfaces (pctsrf) and 
-! initialize, where a new fraction has appeared, all variables depending 
-! on the surface fraction.
-!
-      CALL change_srf_frac(itap, dtime, days_elapsed+1, 
-     *     pctsrf, falb1, falb2, ftsol, ustar, u10m, v10m, pbl_tke)
-
-
-! Update time and other variables in Reprobus
-      IF (type_trac == 'repr') THEN
-#ifdef REPROBUS
-         CALL Init_chem_rep_xjour(jD_cur-jD_ref+day_ref)
-         print*,'xjour equivalent rjourvrai',jD_cur-jD_ref+day_ref
-         CALL Rtime(debut)
-#endif
-      END IF
-
-
-! Tendances bidons pour les processus qui n'affectent pas certaines
-! variables.
-      du0(:,:)=0.
-      dv0(:,:)=0.
-      dq0(:,:)=0.
-      dql0(:,:)=0.
-c
-c Mettre a zero des variables de sortie (pour securite)
-c
-      DO i = 1, klon
-         d_ps(i) = 0.0
-      ENDDO
-      DO k = 1, klev
-      DO i = 1, klon
-         d_t(i,k) = 0.0
-         d_u(i,k) = 0.0
-         d_v(i,k) = 0.0
-      ENDDO
-      ENDDO
-      DO iq = 1, nqtot
-      DO k = 1, klev
-      DO i = 1, klon
-         d_qx(i,k,iq) = 0.0
-      ENDDO
-      ENDDO
-      ENDDO
-      da(:,:)=0.
-      mp(:,:)=0.
-      phi(:,:,:)=0.
-! RomP >>>
-      phi2(:,:,:)=0.
-      beta_prec_fisrt(:,:)=0.
-      beta_prec(:,:)=0.
-      epmlmMm(:,:,:)=0.
-      eplaMm(:,:)=0.
-      d1a(:,:)=0.
-      dam(:,:)=0.
-          pmflxr=0.
-          pmflxs=0.
-! RomP <<<
-
-c
-c Ne pas affecter les valeurs entrees de u, v, h, et q
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         t_seri(i,k)  = t(i,k)
-         u_seri(i,k)  = u(i,k)
-         v_seri(i,k)  = v(i,k)
-         q_seri(i,k)  = qx(i,k,ivap)
-         ql_seri(i,k) = qx(i,k,iliq)
-         qs_seri(i,k) = 0.
-      ENDDO
-      ENDDO
-      tke0(:,:)=pbl_tke(:,:,is_ave)
-      IF (nqtot.GE.3) THEN
-      DO iq = 3, nqtot
-      DO  k = 1, klev
-      DO  i = 1, klon
-         tr_seri(i,k,iq-2) = qx(i,k,iq)
-      ENDDO
-      ENDDO
-      ENDDO
-      ELSE
-      DO k = 1, klev
-      DO i = 1, klon
-         tr_seri(i,k,1) = 0.0
-      ENDDO
-      ENDDO
-      ENDIF
-C
-      DO i = 1, klon
-        ztsol(i) = 0.
-      ENDDO
-      DO nsrf = 1, nbsrf
-        DO i = 1, klon
-          ztsol(i) = ztsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf)
-        ENDDO
-      ENDDO
-cIM
-      IF (ip_ebil_phy.ge.1) THEN 
-        ztit='after dynamic'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-C     Comme les tendances de la physique sont ajoute dans la dynamique,
-C     on devrait avoir que la variation d'entalpie par la dynamique
-C     est egale a la variation de la physique au pas de temps precedent.
-C     Donc la somme de ces 2 variations devrait etre nulle.
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol+d_h_vcol_phy, d_qt, 0.
-     s      , fs_bound, fq_bound )
-      END IF 
-
-c Diagnostiquer la tendance dynamique
-c
-      IF (ancien_ok) THEN
-         DO k = 1, klev
-         DO i = 1, klon
-            d_u_dyn(i,k) = (u_seri(i,k)-u_ancien(i,k))/dtime
-            d_v_dyn(i,k) = (v_seri(i,k)-v_ancien(i,k))/dtime
-            d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
-            d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
-         ENDDO
-         ENDDO
-!!! RomP >>>   td dyn traceur
-       IF (nqtot.GE.3) THEN
-          DO iq = 3, nqtot
-          DO k = 1, klev
-          DO i = 1, klon
-            d_tr_dyn(i,k,iq-2)=
-     $       (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime
-!         iiq=niadv(iq)
-!         print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-2),"tra:",iq,tname(iiq)
-          ENDDO
-          ENDDO
-          ENDDO
-       ENDIF
-!!! RomP <<<
-      ELSE
-         DO k = 1, klev
-         DO i = 1, klon
-            d_u_dyn(i,k) = 0.0
-            d_v_dyn(i,k) = 0.0
-            d_t_dyn(i,k) = 0.0
-            d_q_dyn(i,k) = 0.0
-         ENDDO
-         ENDDO
-!!! RomP >>>   td dyn traceur
-        IF (nqtot.GE.3) THEN
-          DO iq = 3, nqtot
-          DO k = 1, klev
-          DO i = 1, klon
-            d_tr_dyn(i,k,iq-2)= 0.0
-          ENDDO
-          ENDDO
-          ENDDO
-       ENDIF
-!!! RomP <<<
-         ancien_ok = .TRUE.
-      ENDIF
-c
-c Ajouter le geopotentiel du sol:
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         zphi(i,k) = pphi(i,k) + pphis(i)
-      ENDDO
-      ENDDO
-c
-c Verifier les temperatures
-c
-cIM BEG
-      IF (check) THEN
-       amn=MIN(ftsol(1,is_ter),1000.)
-       amx=MAX(ftsol(1,is_ter),-1000.)
-       DO i=2, klon
-        amn=MIN(ftsol(i,is_ter),amn)
-        amx=MAX(ftsol(i,is_ter),amx)
-       ENDDO
-c
-       PRINT*,' debut avant hgardfou min max ftsol',itap,amn,amx
-      ENDIF !(check) THEN
-cIM END
-c
-      CALL hgardfou(t_seri,ftsol,'debutphy')
-c
-cIM BEG
-      IF (check) THEN
-       amn=MIN(ftsol(1,is_ter),1000.)
-       amx=MAX(ftsol(1,is_ter),-1000.)
-       DO i=2, klon
-        amn=MIN(ftsol(i,is_ter),amn)
-        amx=MAX(ftsol(i,is_ter),amx)
-       ENDDO
-c
-       PRINT*,' debut apres hgardfou min max ftsol',itap,amn,amx
-      ENDIF !(check) THEN
-cIM END
-c
-c Mettre en action les conditions aux limites (albedo, sst, etc.).
-c Prescrire l'ozone et calculer l'albedo sur l'ocean.
-c
-      if (read_climoz >= 1) then
-C        Ozone from a file
-!        Update required ozone index:
-         ro3i = int((days_elapsed + jh_cur - jh_1jan)
-     $        / ioget_year_len(year_cur) * 360.) + 1
-         if (ro3i == 361) ro3i = 360
-C        (This should never occur, except perhaps because of roundup
-C        error. See documentation.)
-         if (ro3i /= co3i) then
-C           Update ozone field:
-            if (read_climoz == 1) then
-               call regr_pr_av(ncid_climoz, (/"tro3"/), julien=ro3i,
-     $              press_in_edg=press_climoz, paprs=paprs, v3=wo)
-            else
-C              read_climoz == 2
-               call regr_pr_av(ncid_climoz,
-     $              (/"tro3         ", "tro3_daylight"/),
-     $              julien=ro3i, press_in_edg=press_climoz, paprs=paprs,
-     $              v3=wo)
-            end if
-!           Convert from mole fraction of ozone to column density of ozone in a
-!           cell, in kDU:
-            forall (l = 1: read_climoz) wo(:, :, l) = wo(:, :, l)
-     $           * rmo3 / rmd * zmasse / dobson_u / 1e3
-C           (By regridding ozone values for LMDZ only once every 360th of
-C           year, we have already neglected the variation of pressure in one
-C           360th of year. So do not recompute "wo" at each time step even if
-C           "zmasse" changes a little.)
-            co3i = ro3i
-         end if
-      elseif (MOD(itap-1,lmt_pas) == 0) THEN
-C        Once per day, update ozone from Royer:
-         wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1))
-      ENDIF
-c
-c Re-evaporer l'eau liquide nuageuse
-c
-      DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
-      DO i = 1, klon
-         zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
-cjyg<
-c      Attention : Arnaud a propose des formules completement differentes
-c                  A verifier !!!
-         zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
-         IF (iflag_ice_thermo .EQ. 0) THEN
-           zlsdcp=zlvdcp
-         ENDIF 
-c>jyg
-
-         zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
-         zb = MAX(0.0,ql_seri(i,k))
-         za = - MAX(0.0,ql_seri(i,k))
-     .                  * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
-         t_seri(i,k) = t_seri(i,k) + za
-         q_seri(i,k) = q_seri(i,k) + zb
-         ql_seri(i,k) = 0.0
-         d_t_eva(i,k) = za
-         d_q_eva(i,k) = zb
-      ENDDO
-      ENDDO
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after reevap'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-         call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-C
-      END IF 
-
-c
-c=========================================================================
-! Calculs de l'orbite.
-! Necessaires pour le rayonnement et la surface (calcul de l'albedo).
-! doit donc etre plac\'e avant radlwsw et pbl_surface
-
-!!!   jyg 17 Sep 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      call ymds2ju(year_cur, mth_eq, day_eq,0., jD_eq)
-      day_since_equinox = (jD_cur + jH_cur) - jD_eq
-!
-!   choix entre calcul de la longitude solaire vraie ou valeur fixee a 
-!   solarlong0
-      if (solarlong0<-999.) then
-       if (new_orbit) then
-! calcul selon la routine utilisee pour les planetes
-        call solarlong(day_since_equinox, zlongi, dist)
-       else
-! calcul selon la routine utilisee pour l'AR4
-        CALL orbite(REAL(days_elapsed+1),zlongi,dist)
-       endif
-      else
-           zlongi=solarlong0  ! longitude solaire vraie
-           dist=1.            ! distance au soleil / moyenne 
-      endif
-      if(prt_level.ge.1)                                                &
-     &    write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Calcul de l'ensoleillement :
-! ============================
-! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
-! l'annee a partir d'une formule analytique.
-! Cet ensoleillement est sym\'etrique autour de l'\'equateur et
-! non nul aux poles.
-      IF (abs(solarlong0-1000.)<1.e-4) then
-         call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
-      ELSE
-!  Avec ou sans cycle diurne
-         IF (cycle_diurne) THEN
-           zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
-           CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
-         ELSE
-           CALL angle(zlongi, rlat, fract, rmu0)
-         ENDIF
-      ENDIF
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
-c Appel au pbl_surface : Planetary Boudary Layer et Surface
-c Cela implique tous les interactions des sous-surfaces et la partie diffusion 
-c turbulent du couche limit. 
-c 
-c Certains varibales de sorties de pbl_surface sont utiliser que pour 
-c ecriture des fihiers hist_XXXX.nc, ces sont :
-c   qsol,      zq2m,      s_pblh,  s_lcl,
-c   s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
-c   s_therm,   s_trmb1,   s_trmb2, s_trmb3,
-c   zxrugs,    zu10m,     zv10m,   fder,
-c   zxqsurf,   rh2m,      zxfluxu, zxfluxv,
-c   frugs,     agesno,    fsollw,  fsolsw,
-c   d_ts,      fevap,     fluxlat, t2m,
-c   wfbils,    wfbilo,    fluxt,   fluxu, fluxv,
-c
-c Certains ne sont pas utiliser du tout : 
-c   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
-c
-
-c Calcul de l'humidite de saturation au niveau du sol
-
-
-
-      if (iflag_pbl/=0) then
-
-      CALL pbl_surface( 
-     e     dtime,     date0,     itap,    days_elapsed+1,
-     e     debut,     lafin,
-     e     rlon,      rlat,      rugoro,  rmu0,     
-     e     rain_fall, snow_fall, solsw,   sollw,    
-     e     t_seri,    q_seri,    u_seri,  v_seri,   
-     e     pplay,     paprs,     pctsrf,            
-     +     ftsol,falb1,falb2,ustar,u10m,v10m,wstar,
-     s     sollwdown, cdragh,    cdragm,  u1,    v1,
-     s     albsol1,   albsol2,   sens,    evap,  
-     s     zxtsol,    zxfluxlat, zt2m,    qsat2m, 
-     s     d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss,
-     s     coefh,     coefm,     slab_wfbils,                
-     d     qsol,      zq2m,      s_pblh,  s_lcl,
-     d     s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
-     d     s_therm,   s_trmb1,   s_trmb2, s_trmb3,
-     d     zxrugs,    zustar, zu10m,     zv10m,   fder,
-     d     zxqsurf,   rh2m,      zxfluxu, zxfluxv,
-     d     frugs,     agesno,    fsollw,  fsolsw,
-     d     d_ts,      fevap,     fluxlat, t2m,
-     d     wfbils,    wfbilo,    fluxt,   fluxu,  fluxv,
-     -     dsens,     devap,     zxsnow,
-     -     zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
-
-
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de la diffusion turbulente
-      CALL add_phys_tend
-     s     (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
-!-----------------------------------------------------------------------------------------
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-         CALL evappot(klon,nbsrf,ftsol,pplay(:,1),cdragh,
-     e      t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),evap_pot)
-
-
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after surface_main'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-         call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, sens
-     e      , evap  , zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-
-      ENDIF
-c =================================================================== c
-c   Calcul de Qsat
-
-      DO k = 1, klev
-      DO i = 1, klon
-         zx_t = t_seri(i,k)
-         IF (thermcep) THEN
-            zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
-            zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
-            zx_qs  = MIN(0.5,zx_qs)
-            zcor   = 1./(1.-retv*zx_qs)
-            zx_qs  = zx_qs*zcor
-         ELSE
-           IF (zx_t.LT.t_coup) THEN
-              zx_qs = qsats(zx_t)/pplay(i,k)
-           ELSE
-              zx_qs = qsatl(zx_t)/pplay(i,k)
-           ENDIF
-         ENDIF
-         zqsat(i,k)=zx_qs
-      ENDDO
-      ENDDO
-
-      if (prt_level.ge.1) then
-      write(lunout,*) 'L   qsat (g/kg) avant clouds_gno'
-      write(lunout,'(i4,f15.4)') (k,1000.*zqsat(igout,k),k=1,klev)
-      endif
-c
-c Appeler la convection (au choix)
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         conv_q(i,k) = d_q_dyn(i,k) 
-     .               + d_q_vdf(i,k)/dtime
-         conv_t(i,k) = d_t_dyn(i,k) 
-     .               + d_t_vdf(i,k)/dtime
-      ENDDO
-      ENDDO
-      IF (check) THEN
-         za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
-         WRITE(lunout,*) "avantcon=", za
-      ENDIF
-      zx_ajustq = .FALSE.
-      IF (iflag_con.EQ.2) zx_ajustq=.TRUE.
-      IF (zx_ajustq) THEN
-         DO i = 1, klon
-            z_avant(i) = 0.0
-         ENDDO
-         DO k = 1, klev
-         DO i = 1, klon
-            z_avant(i) = z_avant(i) + (q_seri(i,k)+ql_seri(i,k))
-     .                        *(paprs(i,k)-paprs(i,k+1))/RG
-         ENDDO
-         ENDDO
-      ENDIF
-
-c Calcule de vitesse verticale a partir de flux de masse verticale
-      DO k = 1, klev
-         DO i = 1, klon
-            omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
-         END DO
-      END DO
-      if (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ',
-     $     omega(igout, :)
-
-      IF (iflag_con.EQ.1) THEN
-        abort_message ='reactiver le call conlmd dans physiq.F'
-        CALL abort_gcm (modname,abort_message,1)
-c     CALL conlmd (dtime, paprs, pplay, t_seri, q_seri, conv_q,
-c    .             d_t_con, d_q_con,
-c    .             rain_con, snow_con, ibas_con, itop_con)
-      ELSE IF (iflag_con.EQ.2) THEN
-      CALL conflx(dtime, paprs, pplay, t_seri, q_seri,
-     e            conv_t, conv_q, -evap, omega,
-     s            d_t_con, d_q_con, rain_con, snow_con,
-     s            pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
-     s            kcbot, kctop, kdtop, pmflxr, pmflxs)
-      d_u_con = 0.
-      d_v_con = 0.
-
-      WHERE (rain_con < 0.) rain_con = 0.
-      WHERE (snow_con < 0.) snow_con = 0.
-      DO i = 1, klon
-         ibas_con(i) = klev+1 - kcbot(i)
-         itop_con(i) = klev+1 - kctop(i)
-      ENDDO
-      ELSE IF (iflag_con.GE.3) THEN
-c nb of tracers for the KE convection:
-c MAF la partie traceurs est faite dans phytrac
-c on met ntra=1 pour limiter les appels mais on peut
-c supprimer les calculs / ftra.
-              ntra = 1
-
-c=====================================================================================
-cajout pour la parametrisation des poches froides: 
-ccalcul de t_wake et t_undi: si pas de poches froides, t_wake=t_undi=t_seri 
-      do k=1,klev
-            do i=1,klon
-             if (iflag_wake>=1) then
-             t_wake(i,k) = t_seri(i,k)
-     .           +(1-wake_s(i))*wake_deltat(i,k)
-             q_wake(i,k) = q_seri(i,k)
-     .           +(1-wake_s(i))*wake_deltaq(i,k)
-             t_undi(i,k) = t_seri(i,k)
-     .           -wake_s(i)*wake_deltat(i,k)
-             q_undi(i,k) = q_seri(i,k)
-     .           -wake_s(i)*wake_deltaq(i,k)
-             else
-             t_wake(i,k) = t_seri(i,k)
-             q_wake(i,k) = q_seri(i,k)
-             t_undi(i,k) = t_seri(i,k)
-             q_undi(i,k) = q_seri(i,k)
-             endif
-            enddo
-         enddo
-      
-cc--   Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2)
-cc--    pour le soulevement des particules dans le modele convectif
-c
-      do i = 1,klon
-        ALE(i) = 0.
-        ALP(i) = 0.
-      enddo
-c
-ccalcul de ale_wake et alp_wake
-       if (iflag_wake>=1) then
-         if (itap .le. it_wape_prescr) then
-          do i = 1,klon
-           ale_wake(i) = wape_prescr
-           alp_wake(i) = fip_prescr
-          enddo
-         else
-          do i = 1,klon
-cjyg  ALE=WAPE au lieu de ALE = 1/2 Cstar**2
-ccc           ale_wake(i) = 0.5*wake_cstar(i)**2
-           ale_wake(i) = wake_pe(i)
-           alp_wake(i) = wake_fip(i)
-          enddo
-         endif
-       else
-         do i = 1,klon
-           ale_wake(i) = 0.
-           alp_wake(i) = 0.
-         enddo
-       endif
-ccombinaison avec ale et alp de couche limite: constantes si pas de couplage, valeurs calculees
-cdans le thermique sinon
-       if (iflag_coupl.eq.0) then
-          if (debut.and.prt_level.gt.9)
-     $                     WRITE(lunout,*)'ALE et ALP imposes'
-          do i = 1,klon
-con ne couple que ale
-c           ALE(i) = max(ale_wake(i),Ale_bl(i))
-            ALE(i) = max(ale_wake(i),ale_bl_prescr)
-con ne couple que alp
-c           ALP(i) = alp_wake(i) + Alp_bl(i)
-            ALP(i) = alp_wake(i) + alp_bl_prescr
-          enddo
-       else
-         IF(prt_level>9)WRITE(lunout,*)'ALE et ALP couples au thermique'
-!         do i = 1,klon
-!             ALE(i) = max(ale_wake(i),Ale_bl(i))
-! avant        ALP(i) = alp_wake(i) + Alp_bl(i)
-!             ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
-!         write(20,*)'ALE',ALE(i),Ale_bl(i),ale_wake(i)
-!         write(21,*)'ALP',ALP(i),Alp_bl(i),alp_wake(i)
-!         enddo
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Modif FH 2010/04/27. Sans doute temporaire.
-! Deux options pour le alp_offset : constant si >?? 0 ou proportionnel ??a
-! w si <0
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-       do i = 1,klon
-          ALE(i) = max(ale_wake(i),Ale_bl(i))
-ccc nrlmd le 10/04/2012----------Stochastic triggering--------------
-          if (iflag_trig_bl.ge.1) then
-             ALE(i) = max(ale_wake(i),Ale_bl_trig(i))
-          endif
-ccc fin nrlmd le 10/04/2012
-          if (alp_offset>=0.) then
-            ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
-          else
-            ALP(i)=alp_wake(i)+Alp_bl(i)+alp_offset*min(omega(i,6),0.)
-            if (alp(i)<0.) then
-               print*,'ALP ',alp(i),alp_wake(i)
-     s         ,Alp_bl(i),alp_offset*min(omega(i,6),0.)
-            endif
-          endif
-       enddo
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-       endif
-       do i=1,klon
-          if (alp(i)>alp_max) then
-             IF(prt_level>9)WRITE(lunout,*)                             &
-     &       'WARNING SUPER ALP (seuil=',alp_max,
-     ,       '): i, alp, alp_wake,ale',i,alp(i),alp_wake(i),ale(i)
-             alp(i)=alp_max
-          endif
-          if (ale(i)>ale_max) then
-             IF(prt_level>9)WRITE(lunout,*)                             &
-     &       'WARNING SUPER ALE (seuil=',ale_max,
-     ,       '): i, alp, alp_wake,ale',i,ale(i),ale_wake(i),alp(i)
-             ale(i)=ale_max
-          endif
-       enddo
-
-cfin calcul ale et alp
-c=================================================================================================
-
-
-c sb, oct02:
-c Schema de convection modularise et vectorise:
-c (driver commun aux versions 3 et 4)
-c
-          IF (ok_cvl) THEN ! new driver for convectL
-
-             IF (type_trac == 'repr') THEN
-                nbtr_tmp=ntra
-             ELSE
-                nbtr_tmp=nbtr
-             END IF
-cjyg   iflag_con est dans clesphys
-cc          CALL concvl (iflag_con,iflag_clos,
-          CALL concvl (iflag_clos,
-     .        dtime,paprs,pplay,t_undi,q_undi,
-     .        t_wake,q_wake,wake_s,
-     .        u_seri,v_seri,tr_seri,nbtr_tmp,
-     .        ALE,ALP,
-     .        sig1,w01,
-     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
-     .        rain_con, snow_con, ibas_con, itop_con, sigd,
-     .        ema_cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwd0,
-     .        Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl,
-     .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd,
-! RomP >>>
-!!     .        pmflxr,pmflxs,da,phi,mp,
-!!     .        ftd,fqd,lalim_conv,wght_th)
-     .        pmflxr,pmflxs,da,phi,mp,phi2,d1a,dam,sij,clw,elij,
-     .        ftd,fqd,lalim_conv,wght_th,
-     .        ev, ep,epmlmMm,eplaMm,
-     .        wdtrainA,wdtrainM)
-! RomP <<<
-
-cIM begin
-c       print*,'physiq: cin pbase dnwd0 ftd fqd ',cin(1),pbase(1),
-c    .dnwd0(1,1),ftd(1,1),fqd(1,1)
-cIM end
-cIM cf. FH
-              clwcon0=qcondc
-              pmfu(:,:)=upwd(:,:)+dnwd(:,:)
-
-              do i = 1, klon
-                if (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1
-              enddo
-
-          ELSE ! ok_cvl
-
-c MAF conema3 ne contient pas les traceurs
-          CALL conema3 (dtime,
-     .        paprs,pplay,t_seri,q_seri,
-     .        u_seri,v_seri,tr_seri,ntra,
-     .        sig1,w01,
-     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
-     .        rain_con, snow_con, ibas_con, itop_con,
-     .        upwd,dnwd,dnwd0,bas,top,
-     .        Ma,cape,tvp,rflag,
-     .        pbase
-     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr
-     .        ,clwcon0)
-
-          ENDIF ! ok_cvl
-
-c
-c Correction precip
-          rain_con = rain_con * cvl_corr
-          snow_con = snow_con * cvl_corr
-c
-
-           IF (.NOT. ok_gust) THEN
-           do i = 1, klon
-            wd(i)=0.0
-           enddo
-           ENDIF
-
-c =================================================================== c
-c Calcul des proprietes des nuages convectifs
-c
-
-c   calcul des proprietes des nuages convectifs
-             clwcon0(:,:)=fact_cldcon*clwcon0(:,:)
-             call clouds_gno
-     s       (klon,klev,q_seri,zqsat,clwcon0,ptconv,ratqsc,rnebcon0)
-
-c =================================================================== c
-
-          DO i = 1, klon
-           itop_con(i) = min(max(itop_con(i),1),klev)
-           ibas_con(i) = min(max(ibas_con(i),1),itop_con(i))
-          ENDDO
-
-          DO i = 1, klon
-            ema_pcb(i)  = paprs(i,ibas_con(i))
-          ENDDO
-          DO i = 1, klon
-! L'idicage de itop_con peut cacher un pb potentiel
-! FH sous la dictee de JYG, CR
-            ema_pct(i)  = paprs(i,itop_con(i)+1)
-
-            if (itop_con(i).gt.klev-3) then
-              if(prt_level >= 9) then
-                write(lunout,*)'La convection monte trop haut '
-                write(lunout,*)'itop_con(,',i,',)=',itop_con(i)
-              endif
-            endif
-          ENDDO     
-      ELSE IF (iflag_con.eq.0) THEN
-          write(lunout,*) 'On n appelle pas la convection'
-          clwcon0=0.
-          rnebcon0=0.
-          d_t_con=0.
-          d_q_con=0.
-          d_u_con=0.
-          d_v_con=0.
-          rain_con=0.
-          snow_con=0.
-          bas=1
-          top=1
-      ELSE
-          WRITE(lunout,*) "iflag_con non-prevu", iflag_con
-          CALL abort
-      ENDIF
-
-c     CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri,
-c    .              d_u_con, d_v_con)
-
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de la diffusion turbulente
-      CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,'con')
-!-----------------------------------------------------------------------------------------
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after convect'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-         call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, rain_con, snow_con, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-C
-      IF (check) THEN
-          za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
-          WRITE(lunout,*)"aprescon=", za
-          zx_t = 0.0
-          za = 0.0
-          DO i = 1, klon
-            za = za + airephy(i)/REAL(klon)
-            zx_t = zx_t + (rain_con(i)+
-     .                   snow_con(i))*airephy(i)/REAL(klon)
-          ENDDO
-          zx_t = zx_t/za*dtime
-          WRITE(lunout,*)"Precip=", zx_t
-      ENDIF
-      IF (zx_ajustq) THEN
-          DO i = 1, klon
-            z_apres(i) = 0.0
-          ENDDO
-          DO k = 1, klev
-            DO i = 1, klon
-              z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k))
-     .            *(paprs(i,k)-paprs(i,k+1))/RG
-            ENDDO
-          ENDDO
-          DO i = 1, klon
-            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime)
-     .          /z_apres(i)
-          ENDDO
-          DO k = 1, klev
-            DO i = 1, klon
-              IF (z_factor(i).GT.(1.0+1.0E-08) .OR.
-     .            z_factor(i).LT.(1.0-1.0E-08)) THEN
-                  q_seri(i,k) = q_seri(i,k) * z_factor(i)
-              ENDIF
-            ENDDO
-          ENDDO
-      ENDIF
-      zx_ajustq=.FALSE.
-
-c
-c=============================================================================
-cRR:Evolution de la poche froide: on ne fait pas de separation wake/env 
-cpour la couche limite diffuse pour l instant
-c
-      if (iflag_wake>=1) then
-      DO k=1,klev
-        DO i=1,klon
-          dt_dwn(i,k)  = ftd(i,k) 
-          wdt_PBL(i,k) = 0.
-          dq_dwn(i,k)  = fqd(i,k) 
-          wdq_PBL(i,k) = 0.
-          M_dwn(i,k)   = dnwd0(i,k)
-          M_up(i,k)    = upwd(i,k)
-          dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k) 
-          udt_PBL(i,k) = 0.
-          dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
-          udq_PBL(i,k) = 0.
-        ENDDO
-      ENDDO
-
-      if (iflag_wake==2) then
-        ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
-        DO k = 1,klev
-         dt_dwn(:,k)= dt_dwn(:,k)+
-     :            ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
-         dq_dwn(:,k)= dq_dwn(:,k)+
-     :            ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
-        ENDDO
-      endif
-c
-ccalcul caracteristiques de la poche froide
-      call calWAKE (paprs,pplay,dtime
-     :               ,t_seri,q_seri,omega
-     :               ,dt_dwn,dq_dwn,M_dwn,M_up
-     :               ,dt_a,dq_a,sigd
-     :               ,wdt_PBL,wdq_PBL
-     :               ,udt_PBL,udq_PBL
-     o               ,wake_deltat,wake_deltaq,wake_dth
-     o               ,wake_h,wake_s,wake_dens
-     o               ,wake_pe,wake_fip,wake_gfl
-     o               ,dt_wake,dq_wake
-     o               ,wake_k, t_undi,q_undi
-     o               ,wake_omgbdth,wake_dp_omgb
-     o               ,wake_dtKE,wake_dqKE
-     o               ,wake_dtPBL,wake_dqPBL
-     o               ,wake_omg,wake_dp_deltomg
-     o               ,wake_spread,wake_Cstar,wake_d_deltat_gw
-     o               ,wake_ddeltat,wake_ddeltaq)
-c
-!-----------------------------------------------------------------------------------------
-! ajout des tendances des poches froides
-! Faire rapidement disparaitre l'ancien dt_wake pour garder un d_t_wake
-! coherent avec les autres d_t_...
-      d_t_wake(:,:)=dt_wake(:,:)*dtime
-      d_q_wake(:,:)=dq_wake(:,:)*dtime
-      CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,'wake')
-!-----------------------------------------------------------------------------------------
-
-      endif
-c
-c===================================================================
-cJYG
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after wake'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-
-c      print*,'apres callwake iflag_cldcon=', iflag_cldcon
-c
-c===================================================================
-c Convection seche (thermiques ou ajustement)
-c===================================================================
-c
-       call stratocu_if(klon,klev,pctsrf,paprs, pplay,t_seri
-     s ,seuil_inversion,weak_inversion,dthmin)
-
-
-
-      d_t_ajsb(:,:)=0.
-      d_q_ajsb(:,:)=0.
-      d_t_ajs(:,:)=0.
-      d_u_ajs(:,:)=0.
-      d_v_ajs(:,:)=0.
-      d_q_ajs(:,:)=0.
-      clwcon0th(:,:)=0.
-c
-c      fm_therm(:,:)=0.
-c      entr_therm(:,:)=0.
-c      detr_therm(:,:)=0.
-c
-      IF(prt_level>9)WRITE(lunout,*)
-     .    'AVANT LA CONVECTION SECHE , iflag_thermals='
-     s   ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
-      if(iflag_thermals.lt.0) then
-c  Rien
-c  ====
-         IF(prt_level>9)WRITE(lunout,*)'pas de convection'
-
-
-      else
-
-c  Thermiques
-c  ==========
-         IF(prt_level>9)WRITE(lunout,*)'JUSTE AVANT , iflag_thermals='
-     s   ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
-
-
-ccc nrlmd le 10/04/2012
-         DO k=1,klev+1
-           DO i=1,klon
-           pbl_tke_input(i,k,is_oce)=pbl_tke(i,k,is_oce)
-           pbl_tke_input(i,k,is_ter)=pbl_tke(i,k,is_ter)
-           pbl_tke_input(i,k,is_lic)=pbl_tke(i,k,is_lic)
-           pbl_tke_input(i,k,is_sic)=pbl_tke(i,k,is_sic)
-           ENDDO
-         ENDDO
-ccc fin nrlmd le 10/04/2012
-
-         if (iflag_thermals>=1) then
-         call calltherm(pdtphys
-     s      ,pplay,paprs,pphi,weak_inversion
-     s      ,u_seri,v_seri,t_seri,q_seri,zqsat,debut
-     s      ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs
-     s      ,fm_therm,entr_therm,detr_therm
-     s      ,zqasc,clwcon0th,lmax_th,ratqscth
-     s      ,ratqsdiff,zqsatth
-con rajoute ale et alp, et les caracteristiques de la couche alim
-     s      ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0, zw2,fraca
-     s      ,ztv,zpspsk,ztla,zthl
-ccc nrlmd le 10/04/2012
-     e      ,pbl_tke_input,pctsrf,omega,airephy
-     s      ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0
-     s      ,n2,s2,ale_bl_stat
-     s      ,therm_tke_max,env_tke_max
-     s      ,alp_bl_det,alp_bl_fluct_m,alp_bl_fluct_tke
-     s      ,alp_bl_conv,alp_bl_stat
-ccc fin nrlmd le 10/04/2012
-     s      ,zqla,ztva )
-
-ccc nrlmd le 10/04/2012
-c-----------Stochastic triggering-----------
-      if (iflag_trig_bl.ge.1) then
-c
-        IF (prt_level .GE. 10) THEN
-         print *,'cin, ale_bl_stat, alp_bl_stat ',
-     $            cin, ale_bl_stat, alp_bl_stat
-        ENDIF
-
-c----Initialisations
-      do i=1,klon
-      proba_notrig(i)=1.
-      random_notrig(i)=1e6*ale_bl_stat(i)-int(1e6*ale_bl_stat(i))
-        if ( ale_bl_trig(i) .lt. abs(cin(i))+1.e-10 ) then 
-        tau_trig(i)=tau_trig_shallow
-        else
-        tau_trig(i)=tau_trig_deep
-        endif
-      enddo
-c
-        IF (prt_level .GE. 10) THEN
-         print *,'random_notrig, tau_trig ',
-     $            random_notrig, tau_trig
-          print *,'s_trig,s2,n2 ',
-     $             s_trig,s2,n2
-        ENDIF
-
-c----Tirage al\'eatoire et calcul de ale_bl_trig
-      do i=1,klon
-        if ( (ale_bl_stat(i) .gt. abs(cin(i))+1.e-10) )  then
-        proba_notrig(i)=(1.-exp(-s_trig/s2(i)))**
-     $                  (n2(i)*dtime/tau_trig(i))
-c        print *, 'proba_notrig(i) ',proba_notrig(i)
-          if (random_notrig(i) .ge. proba_notrig(i)) then 
-          ale_bl_trig(i)=ale_bl_stat(i)
-          else
-          ale_bl_trig(i)=0.
-          endif
-        else
-        proba_notrig(i)=1.
-        random_notrig(i)=0.
-        ale_bl_trig(i)=0.
-        endif
-      enddo
-c
-        IF (prt_level .GE. 10) THEN
-         print *,'proba_notrig, ale_bl_trig ',
-     $            proba_notrig, ale_bl_trig
-        ENDIF
-
-      endif !(iflag_trig_bl)
-
-c-----------Statistical closure-----------
-      if (iflag_clos_bl.ge.1) then 
-
-        do i=1,klon
-        alp_bl(i)=alp_bl_stat(i)
-        enddo
-
-      else
-
-      alp_bl_stat(:)=0.
-
-      endif !(iflag_clos_bl)
-
-        IF (prt_level .GE. 10) THEN
-         print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
-        ENDIF
-
-ccc fin nrlmd le 10/04/2012
-
-! ----------------------------------------------------------------------
-! Transport de la TKE par les panaches thermiques.
-! FH : 2010/02/01
-!     if (iflag_pbl.eq.10) then
-!     call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
-!    s           rg,paprs,pbl_tke)
-!     endif
-! ----------------------------------------------------------------------
-!IM/FH: 2011/02/23 
-! Couplage Thermiques/Emanuel seulement si T<0
-      if (iflag_coupl==2) then
-        print*,'Couplage Thermiques/Emanuel seulement si T<0'
-        do i=1,klon
-           if (t_seri(i,lmax_th(i))>273.) then
-              Ale_bl(i)=0.
-           endif
-        enddo
-      endif
-
-      do i=1,klon
-         zmax_th(i)=pphi(i,lmax_th(i))/rg
-      enddo
-
-         endif
-
-
-c  Ajustement sec
-c  ==============
-
-! Dans le cas o\`u on active les thermiques, on fait partir l'ajustement
-! a partir du sommet des thermiques.
-! Dans le cas contraire, on demarre au niveau 1.
-
-         if (iflag_thermals.ge.13.or.iflag_thermals.eq.0) then
-
-         if(iflag_thermals.eq.0) then
-            IF(prt_level>9)WRITE(lunout,*)'ajsec'
-            limbas(:)=1
-         else
-            limbas(:)=lmax_th(:)
-         endif
-  
-! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
-! pour des test de convergence numerique.
-! Le nouveau ajsec est a priori mieux, meme pour le cas 
-! iflag_thermals = 0 (l'ancienne version peut faire des tendances
-! non nulles numeriquement pour des mailles non concernees.
-
-         if (iflag_thermals.eq.0) then
-            CALL ajsec_convV2(paprs, pplay, t_seri,q_seri
-     s      , d_t_ajsb, d_q_ajsb)
-         else
-            CALL ajsec(paprs, pplay, t_seri,q_seri,limbas
-     s      , d_t_ajsb, d_q_ajsb)
-         endif
-
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de l'ajustement sec ou des thermiques
-      CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,'ajsb')
-         d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
-         d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
-
-!-----------------------------------------------------------------------------------------
-
-         endif
-
-      endif
-c
-c===================================================================
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after dry_adjust'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-
-
-c-------------------------------------------------------------------------
-! Computation of ratqs, the width (normalized) of the subrid scale 
-! water distribution
-      CALL  calcratqs(klon,klev,prt_level,lunout,       
-     s     iflag_ratqs,iflag_con,iflag_cldcon,pdtphys, 
-     s     ratqsbas,ratqshaut,tau_ratqs,fact_cldcon,  
-     s     ptconv,ptconvth,clwcon0th, rnebcon0th,    
-     s     paprs,pplay,q_seri,zqsat,fm_therm,
-     s     ratqs,ratqsc)
-
-
-c
-c Appeler le processus de condensation a grande echelle
-c et le processus de precipitation
-c-------------------------------------------------------------------------
-      IF (prt_level .GE.10) THEN
-       print *,' ->fisrtilp '
-      ENDIF
-c-------------------------------------------------------------------------
-      CALL fisrtilp(dtime,paprs,pplay,
-     .           t_seri, q_seri,ptconv,ratqs,
-     .           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq,
-     .           rain_lsc, snow_lsc,
-     .           pfrac_impa, pfrac_nucl, pfrac_1nucl,
-     .           frac_impa, frac_nucl, beta_prec_fisrt,
-     .           prfl, psfl, rhcl, 
-     .           zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon,
-     .           iflag_ice_thermo)
-
-      WHERE (rain_lsc < 0) rain_lsc = 0.
-      WHERE (snow_lsc < 0) snow_lsc = 0.
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de la diffusion turbulente
-      CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,'lsc')
-!-----------------------------------------------------------------------------------------
-      DO k = 1, klev
-      DO i = 1, klon
-         cldfra(i,k) = rneb(i,k)
-         IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
-      ENDDO
-      ENDDO
-      IF (check) THEN
-         za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
-         WRITE(lunout,*)"apresilp=", za
-         zx_t = 0.0
-         za = 0.0
-         DO i = 1, klon
-            za = za + airephy(i)/REAL(klon)
-            zx_t = zx_t + (rain_lsc(i)
-     .                  + snow_lsc(i))*airephy(i)/REAL(klon)
-        ENDDO
-         zx_t = zx_t/za*dtime
-         WRITE(lunout,*)"Precip=", zx_t
-      ENDIF
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after fisrt'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, rain_lsc, snow_lsc, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-c
-c-------------------------------------------------------------------
-c  PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
-c-------------------------------------------------------------------
-
-c 1. NUAGES CONVECTIFS
-c
-cIM cf FH
-c     IF (iflag_cldcon.eq.-1) THEN ! seulement pour Tiedtke
-      IF (iflag_cldcon.le.-1) THEN ! seulement pour Tiedtke
-       snow_tiedtke=0.
-c     print*,'avant calcul de la pseudo precip '
-c     print*,'iflag_cldcon',iflag_cldcon
-       if (iflag_cldcon.eq.-1) then
-          rain_tiedtke=rain_con
-       else
-c       print*,'calcul de la pseudo precip '
-          rain_tiedtke=0.
-c         print*,'calcul de la pseudo precip 0'
-          do k=1,klev
-          do i=1,klon
-             if (d_q_con(i,k).lt.0.) then
-                rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i,k)/pdtphys
-     s         *(paprs(i,k)-paprs(i,k+1))/rg
-             endif
-          enddo
-          enddo
-       endif
-c
-c     call dump2d(iim,jjm,rain_tiedtke(2:klon-1),'PSEUDO PRECIP ')
-c
-
-c Nuages diagnostiques pour Tiedtke
-      CALL diagcld1(paprs,pplay,
-cIM cf FH  .             rain_con,snow_con,ibas_con,itop_con,
-     .             rain_tiedtke,snow_tiedtke,ibas_con,itop_con,
-     .             diafra,dialiq)
-      DO k = 1, klev
-      DO i = 1, klon
-      IF (diafra(i,k).GT.cldfra(i,k)) THEN
-         cldliq(i,k) = dialiq(i,k)
-         cldfra(i,k) = diafra(i,k)
-      ENDIF
-      ENDDO
-      ENDDO
-
-      ELSE IF (iflag_cldcon.ge.3) THEN
-c  On prend pour les nuages convectifs le max du calcul de la
-c  convection et du calcul du pas de temps precedent diminue d'un facteur
-c  facttemps
-      facteur = pdtphys *facttemps
-      do k=1,klev
-         do i=1,klon
-            rnebcon(i,k)=rnebcon(i,k)*facteur
-            if (rnebcon0(i,k)*clwcon0(i,k).gt.rnebcon(i,k)*clwcon(i,k))
-     s      then
-                rnebcon(i,k)=rnebcon0(i,k)
-                clwcon(i,k)=clwcon0(i,k)
-            endif
-         enddo
-      enddo
-
-c
-cjq - introduce the aerosol direct and first indirect radiative forcings
-cjq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
-      IF (flag_aerosol .gt. 0) THEN
-         IF (.NOT. aerosol_couple)
-     &        CALL readaerosol_optic(
-     &        debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref,
-     &        pdtphys, pplay, paprs, t_seri, rhcl, presnivs, 
-     &        mass_solu_aero, mass_solu_aero_pi, 
-     &        tau_aero, piz_aero, cg_aero, 
-     &        tausum_aero, tau3d_aero)
-      ELSE
-         tausum_aero(:,:,:) = 0.
-         tau_aero(:,:,:,:) = 0.
-         piz_aero(:,:,:,:) = 0.
-         cg_aero(:,:,:,:)  = 0.
-      ENDIF
-c
-c--STRAT AEROSOL
-c--updates tausum_aero,tau_aero,piz_aero,cg_aero
-      IF (flag_aerosol_strat) THEN
-         PRINT *,'appel a readaerosolstrat', mth_cur
-         CALL readaerosolstrato(debut)
-      ENDIF
-c--fin STRAT AEROSOL
-
-cIM calcul nuages par le simulateur ISCCP
-c
-#ifdef histISCCP
-      IF (ok_isccp) THEN
-c
-cIM lecture invtau, tautab des fichiers formattes
-c
-      IF (debut) THEN
-c$OMP MASTER
-c
-      open(99,file='tautab.formatted', FORM='FORMATTED')
-      read(99,'(f30.20)') tautab_omp
-      close(99)
-c
-      open(99,file='invtau.formatted',form='FORMATTED')
-      read(99,'(i10)') invtau_omp
-
-c     print*,'calcul_simulISCCP invtau_omp',invtau_omp
-c     write(6,'(a,8i10)') 'invtau_omp',(invtau_omp(i),i=1,100)
-
-      close(99)
-c$OMP END MASTER
-c$OMP BARRIER 
-      tautab=tautab_omp
-      invtau=invtau_omp
-c
-      ENDIF !debut
-c
-cIM appel simulateur toutes les  NINT(freq_ISCCP/dtime) heures
-       IF (MOD(itap,NINT(freq_ISCCP/dtime)).EQ.0) THEN
-#include "calcul_simulISCCP.h"
-       ENDIF !(MOD(itap,NINT(freq_ISCCP/dtime))
-      ENDIF !ok_isccp
-#endif
-
-c   On prend la somme des fractions nuageuses et des contenus en eau
-
-      if (iflag_cldcon>=5) then
-
-        do k=1,klev
-         ptconvth(:,k)=fm_therm(:,k+1)>0.
-        enddo
-
-       if (iflag_coupl==4) then
-
-! Dans le cas iflag_coupl==4, on prend la somme des convertures
-! convectives et lsc dans la partie des thermiques
-! Le controle par iflag_coupl est peut etre provisoire.
-         do k=1,klev
-            do i=1,klon
-               if (ptconv(i,k).and.ptconvth(i,k)) then
-                   cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
-                   cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
-               else if (ptconv(i,k)) then
-                   cldfra(i,k)=rnebcon(i,k)
-                   cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
-               endif
-            enddo
-         enddo
-
-         else if (iflag_coupl==5) then
-         do k=1,klev
-            do i=1,klon
-               cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
-               cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
-            enddo
-         enddo
-
-         else
-
-! Si on est sur un point touche par la convection profonde et pas
-! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse
-! de la convection profonde.
-
-!IM/FH: 2011/02/23 
-! definition des points sur lesquels ls thermiques sont actifs
-
-         do k=1,klev
-            do i=1,klon
-               if (ptconv(i,k).and. .not. ptconvth(i,k)) then
-                   cldfra(i,k)=rnebcon(i,k)
-                   cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
-               endif
-            enddo
-         enddo
-
-        endif
-
-      else
-
-! Ancienne version
-      cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
-      cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
-      endif
-
-      ENDIF
-
-!     plulsc(:)=0.
-!     do k=1,klev,-1
-!        do i=1,klon
-!              zzz=prfl(:,k)+psfl(:,k)
-!           if (.not.ptconvth.zzz.gt.0.)
-!        enddo prfl, psfl,
-!     enddo
-c
-c 2. NUAGES STARTIFORMES
-c
-      IF (ok_stratus) THEN
-      CALL diagcld2(paprs,pplay,t_seri,q_seri, diafra,dialiq)
-      DO k = 1, klev
-      DO i = 1, klon
-      IF (diafra(i,k).GT.cldfra(i,k)) THEN
-         cldliq(i,k) = dialiq(i,k)
-         cldfra(i,k) = diafra(i,k)
-      ENDIF
-      ENDDO
-      ENDDO
-      ENDIF
-c
-c Precipitation totale
-c
-      DO i = 1, klon
-         rain_fall(i) = rain_con(i) + rain_lsc(i)
-         snow_fall(i) = snow_con(i) + snow_lsc(i)
-      ENDDO
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit="after diagcld"
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-c
-c Calculer l'humidite relative pour diagnostique
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         zx_t = t_seri(i,k)
-         IF (thermcep) THEN
-            zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
-            zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
-            zx_qs  = MIN(0.5,zx_qs)
-            zcor   = 1./(1.-retv*zx_qs)
-            zx_qs  = zx_qs*zcor
-         ELSE
-           IF (zx_t.LT.t_coup) THEN
-              zx_qs = qsats(zx_t)/pplay(i,k)
-           ELSE
-              zx_qs = qsatl(zx_t)/pplay(i,k)
-           ENDIF
-         ENDIF
-         zx_rh(i,k) = q_seri(i,k)/zx_qs
-         zqsat(i,k)=zx_qs
-      ENDDO
-      ENDDO
-
-cIM Calcul temp.potentielle a 2m (tpot) et temp. potentielle 
-c   equivalente a 2m (tpote) pour diagnostique
-c
-      DO i = 1, klon
-       tpot(i)=zt2m(i)*(100000./paprs(i,1))**RKAPPA
-       IF (thermcep) THEN
-        IF(zt2m(i).LT.RTT) then
-         Lheat=RLSTT
-        ELSE
-         Lheat=RLVTT
-        ENDIF
-       ELSE
-        IF (zt2m(i).LT.RTT) THEN
-         Lheat=RLSTT
-        ELSE
-         Lheat=RLVTT
-        ENDIF
-       ENDIF
-       tpote(i) = tpot(i)*     
-     . EXP((Lheat *qsat2m(i))/(RCPD*zt2m(i)))
-      ENDDO
-
-      IF (type_trac == 'inca') THEN
-#ifdef INCA
-         CALL VTe(VTphysiq)
-         CALL VTb(VTinca)
-         calday = REAL(days_elapsed + 1) + jH_cur
-
-         call chemtime(itap+itau_phy-1, date0, dtime)
-         IF (config_inca == 'aero') THEN
-            CALL AEROSOL_METEO_CALC(
-     $           calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs,
-     $           prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
-         END IF
-
-         zxsnow_dummy(:) = 0.0
-
-         CALL chemhook_begin (calday,
-     $                          days_elapsed+1,
-     $                          jH_cur,
-     $                          pctsrf(1,1),
-     $                          rlat,
-     $                          rlon,
-     $                          airephy,
-     $                          paprs,
-     $                          pplay,
-     $                          coefh(:,:,is_ave),
-     $                          pphi,
-     $                          t_seri,
-     $                          u,
-     $                          v,
-     $                          wo(:, :, 1),
-     $                          q_seri,
-     $                          zxtsol,
-     $                          zxsnow_dummy,
-     $                          solsw,
-     $                          albsol1,
-     $                          rain_fall,
-     $                          snow_fall,
-     $                          itop_con,
-     $                          ibas_con,
-     $                          cldfra,
-     $                          iim,
-     $                          jjm,
-     $                          tr_seri,
-     $                          ftsol,
-     $                          paprs,
-     $                          cdragh,
-     $                          cdragm,
-     $                          pctsrf,
-     $                          pdtphys,
-     $                            itap)
-
-         CALL VTe(VTinca)
-         CALL VTb(VTphysiq)
-#endif 
-      END IF !type_trac = inca
-c     
-c Calculer les parametres optiques des nuages et quelques
-c parametres pour diagnostiques:
-c
-
-      IF (aerosol_couple) THEN 
-         mass_solu_aero(:,:)    = ccm(:,:,1) 
-         mass_solu_aero_pi(:,:) = ccm(:,:,2) 
-      END IF
-
-      if (ok_newmicro) then
-      CALL newmicro (ok_cdnc, bl95_b0, bl95_b1,
-     .              paprs, pplay, t_seri, cldliq, cldfra,
-     .              cldtau, cldemi, cldh, cldl, cldm, cldt, cldq,
-     e              flwp, fiwp, flwc, fiwc,
-     e              mass_solu_aero, mass_solu_aero_pi,
-     s              cldtaupi, re, fl, ref_liq, ref_ice) 
-      else
-      CALL nuage (paprs, pplay,
-     .            t_seri, cldliq, cldfra, cldtau, cldemi,
-     .            cldh, cldl, cldm, cldt, cldq,
-     e            ok_aie,
-     e            mass_solu_aero, mass_solu_aero_pi,
-     e            bl95_b0, bl95_b1,
-     s            cldtaupi, re, fl)
-      endif
-c
-cIM betaCRF
-c
-      cldtaurad   = cldtau
-      cldtaupirad = cldtaupi
-      cldemirad   = cldemi
-     
-c
-      if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND.
-     $lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN
-c
-c global
-c
-       DO k=1, klev
-       DO i=1, klon
-        if (pplay(i,k).GE.pfree) THEN
-         beta(i,k) = beta_pbl
-        else
-         beta(i,k) = beta_free
-        endif
-        if (mskocean_beta) THEN
-         beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
-        endif
-        cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
-        cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
-        cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
-        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
-       ENDDO
-       ENDDO 
-c
-      else
-c
-c regional
-c
-       DO k=1, klev
-       DO i=1,klon
-c
-        if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND.
-     $      rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN
-         if (pplay(i,k).GE.pfree) THEN
-          beta(i,k) = beta_pbl
-         else
-          beta(i,k) = beta_free
-         endif
-         if (mskocean_beta) THEN
-          beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
-         endif
-        cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
-        cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
-        cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
-        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
-        endif
-c
-       ENDDO
-       ENDDO
-c
-      endif
-c
-c Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
-c
-      IF (MOD(itaprad,radpas).EQ.0) THEN
-
-      DO i = 1, klon
-         albsol1(i) = falb1(i,is_oce) * pctsrf(i,is_oce)
-     .             + falb1(i,is_lic) * pctsrf(i,is_lic)
-     .             + falb1(i,is_ter) * pctsrf(i,is_ter)
-     .             + falb1(i,is_sic) * pctsrf(i,is_sic)
-         albsol2(i) = falb2(i,is_oce) * pctsrf(i,is_oce)
-     .               + falb2(i,is_lic) * pctsrf(i,is_lic)
-     .               + falb2(i,is_ter) * pctsrf(i,is_ter)
-     .               + falb2(i,is_sic) * pctsrf(i,is_sic)
-      ENDDO
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-       call writefield_phy('q_seri',q_seri,llm)
-      endif
-      
-      IF (aerosol_couple) THEN 
-#ifdef INCA
-         CALL radlwsw_inca 
-     e        (kdlon,kflev,dist, rmu0, fract, solaire,
-     e        paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri,
-     e        wo(:, :, 1),
-     e        cldfrarad, cldemirad, cldtaurad,
-     s        heat,heat0,cool,cool0,radsol,albpla,
-     s        topsw,toplw,solsw,sollw,
-     s        sollwdown,
-     s        topsw0,toplw0,solsw0,sollw0,
-     s        lwdn0, lwdn, lwup0, lwup, 
-     s        swdn0, swdn, swup0, swup,
-     e        ok_ade, ok_aie,
-     e        tau_aero, piz_aero, cg_aero,
-     s        topswad_aero, solswad_aero,
-     s        topswad0_aero, solswad0_aero,
-     s        topsw_aero, topsw0_aero,
-     s        solsw_aero, solsw0_aero,
-     e        cldtaupirad,
-     s        topswai_aero, solswai_aero)
-            
-#endif
-      ELSE
-c
-cIM calcul radiatif pour le cas actuel
-c
-       RCO2 = RCO2_act
-       RCH4 = RCH4_act
-       RN2O = RN2O_act
-       RCFC11 = RCFC11_act
-       RCFC12 = RCFC12_act
-c
-      IF (prt_level .GE.10) THEN
-       print *,' ->radlwsw, number 1 '
-      ENDIF
-c
-         CALL radlwsw
-     e        (dist, rmu0, fract, 
-     e        paprs, pplay,zxtsol,albsol1, albsol2, 
-     e        t_seri,q_seri,wo,
-     e        cldfrarad, cldemirad, cldtaurad,
-     e        ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol,
-     e        flag_aerosol_strat,
-     e        tau_aero, piz_aero, cg_aero,
-     e        cldtaupirad,new_aod,
-     e        zqsat, flwc, fiwc,
-     s        heat,heat0,cool,cool0,radsol,albpla,
-     s        topsw,toplw,solsw,sollw,
-     s        sollwdown,
-     s        topsw0,toplw0,solsw0,sollw0,
-     s        lwdn0, lwdn, lwup0, lwup, 
-     s        swdn0, swdn, swup0, swup,
-     s        topswad_aero, solswad_aero,
-     s        topswai_aero, solswai_aero,
-     o        topswad0_aero, solswad0_aero,
-     o        topsw_aero, topsw0_aero,
-     o        solsw_aero, solsw0_aero,
-     o        topswcf_aero, solswcf_aero)
-         
-c
-cIM 2eme calcul radiatif pour le cas perturbe ou au moins un
-cIM des taux doit etre different du taux actuel
-cIM Par defaut on a les taux perturbes egaux aux taux actuels
-c
-      if (ok_4xCO2atm) then
-       if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR.
-     $RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR.
-     $RCFC12_per.NE.RCFC12_act) THEN
-c
-       RCO2 = RCO2_per
-       RCH4 = RCH4_per
-       RN2O = RN2O_per
-       RCFC11 = RCFC11_per
-       RCFC12 = RCFC12_per
-c
-      IF (prt_level .GE.10) THEN
-       print *,' ->radlwsw, number 2 '
-      ENDIF
-c
-         CALL radlwsw
-     e        (dist, rmu0, fract, 
-     e        paprs, pplay,zxtsol,albsol1, albsol2, 
-     e        t_seri,q_seri,wo,
-     e        cldfra, cldemi, cldtau,
-     e        ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol,
-     e        flag_aerosol_strat,
-     e        tau_aero, piz_aero, cg_aero,
-     e        cldtaupi,new_aod,
-     e        zqsat, flwc, fiwc,
-     s        heatp,heat0p,coolp,cool0p,radsolp,albplap,
-     s        topswp,toplwp,solswp,sollwp,
-     s        sollwdownp,
-     s        topsw0p,toplw0p,solsw0p,sollw0p,
-     s        lwdn0p, lwdnp, lwup0p, lwupp, 
-     s        swdn0p, swdnp, swup0p, swupp,
-     s        topswad_aerop, solswad_aerop,
-     s        topswai_aerop, solswai_aerop,
-     o        topswad0_aerop, solswad0_aerop,
-     o        topsw_aerop, topsw0_aerop,
-     o        solsw_aerop, solsw0_aerop,
-     o        topswcf_aerop, solswcf_aerop)
-       endif
-      endif
-c
-      ENDIF ! aerosol_couple
-      itaprad = 0
-      ENDIF ! MOD(itaprad,radpas)
-      itaprad = itaprad + 1
-
-      IF (iflag_radia.eq.0) THEN
-         IF (prt_level.ge.9) THEN
-            PRINT *,'--------------------------------------------------'
-            PRINT *,'>>>> ATTENTION rayonnement desactive pour ce cas'
-            PRINT *,'>>>>           heat et cool mis a zero '
-            PRINT *,'--------------------------------------------------'
-         END IF
-         heat=0.
-         cool=0.
-         sollw=0.   ! MPL 01032011
-         solsw=0.
-         radsol=0.
-         swup=0.    ! MPL 27102011 pour les fichiers AMMA_profiles et AMMA_scalars
-         swup0=0.
-         swdn=0.
-         swdn0=0.
-         lwup=0.
-         lwup0=0.
-         lwdn=0.
-         lwdn0=0.
-      END IF
-
-c
-c Ajouter la tendance des rayonnements (tous les pas)
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         t_seri(i,k) = t_seri(i,k)
-     .               + (heat(i,k)-cool(i,k)) * dtime/RDAY
-      ENDDO
-      ENDDO
-c
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
- 
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after rad'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , topsw, toplw, solsw, sollw, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-c
-c
-c Calculer l'hydrologie de la surface
-c
-c      CALL hydrol(dtime,pctsrf,rain_fall, snow_fall, zxevap,
-c     .            agesno, ftsol,fqsurf,fsnow, ruis)
-c
-
-c
-c Calculer le bilan du sol et la derive de temperature (couplage)
-c
-      DO i = 1, klon
-c         bils(i) = radsol(i) - sens(i) - evap(i)*RLVTT
-c a la demande de JLD
-         bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
-      ENDDO
-c
-cmoddeblott(jan95)
-c Appeler le programme de parametrisation de l'orographie
-c a l'echelle sous-maille:
-c
-      IF (prt_level .GE.10) THEN
-       print *,' call orography ? ', ok_orodr
-      ENDIF
-c
-      IF (ok_orodr) THEN
-c
-c  selection des points pour lesquels le shema est actif:
-        igwd=0
-        DO i=1,klon
-        itest(i)=0
-c        IF ((zstd(i).gt.10.0)) THEN
-        IF (((zpic(i)-zmea(i)).GT.100.).AND.(zstd(i).GT.10.0)) THEN
-          itest(i)=1
-          igwd=igwd+1
-          idx(igwd)=i
-        ENDIF
-        ENDDO
-c        igwdim=MAX(1,igwd)
-c
-        IF (ok_strato) THEN
-        
-          CALL drag_noro_strato(klon,klev,dtime,paprs,pplay,
-     e                   zmea,zstd, zsig, zgam, zthe,zpic,zval,
-     e                   igwd,idx,itest,
-     e                   t_seri, u_seri, v_seri,
-     s                   zulow, zvlow, zustrdr, zvstrdr,
-     s                   d_t_oro, d_u_oro, d_v_oro)
-
-       ELSE
-        CALL drag_noro(klon,klev,dtime,paprs,pplay,
-     e                   zmea,zstd, zsig, zgam, zthe,zpic,zval,
-     e                   igwd,idx,itest,
-     e                   t_seri, u_seri, v_seri,
-     s                   zulow, zvlow, zustrdr, zvstrdr,
-     s                   d_t_oro, d_u_oro, d_v_oro)
-       ENDIF
-c
-c  ajout des tendances
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de la trainee de l'orographie
-      CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,'oro')
-!-----------------------------------------------------------------------------------------
-c
-      ENDIF ! fin de test sur ok_orodr
-c
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-      
-      IF (ok_orolf) THEN
-c
-c  selection des points pour lesquels le shema est actif:
-        igwd=0
-        DO i=1,klon
-        itest(i)=0
-        IF ((zpic(i)-zmea(i)).GT.100.) THEN
-          itest(i)=1
-          igwd=igwd+1
-          idx(igwd)=i
-        ENDIF
-        ENDDO
-c        igwdim=MAX(1,igwd)
-c
-        IF (ok_strato) THEN
-
-          CALL lift_noro_strato(klon,klev,dtime,paprs,pplay,
-     e                   rlat,zmea,zstd,zpic,zgam,zthe,zpic,zval,
-     e                   igwd,idx,itest,
-     e                   t_seri, u_seri, v_seri,
-     s                   zulow, zvlow, zustrli, zvstrli,
-     s                   d_t_lif, d_u_lif, d_v_lif               )
-        
-        ELSE
-          CALL lift_noro(klon,klev,dtime,paprs,pplay,
-     e                   rlat,zmea,zstd,zpic,
-     e                   itest,
-     e                   t_seri, u_seri, v_seri,
-     s                   zulow, zvlow, zustrli, zvstrli,
-     s                   d_t_lif, d_u_lif, d_v_lif)
-       ENDIF
-c   
-!-----------------------------------------------------------------------------------------
-! ajout des tendances de la portance de l'orographie
-      CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,'lif')
-!-----------------------------------------------------------------------------------------
-c
-      ENDIF ! fin de test sur ok_orolf
-C  HINES GWD PARAMETRIZATION
-
-       IF (ok_hines) then
-
-         CALL hines_gwd(klon,klev,dtime,paprs,pplay,
-     i                  rlat,t_seri,u_seri,v_seri,
-     o                  zustrhi,zvstrhi,
-     o                  d_t_hin, d_u_hin, d_v_hin)
-c
-c  ajout des tendances
-        CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin')
-
-      ENDIF
-c
-
-c
-cIM cf. FLott BEG
-C STRESS NECESSAIRES: TOUTE LA PHYSIQUE
-
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-	call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-      DO i = 1, klon
-        zustrph(i)=0.
-        zvstrph(i)=0.
-      ENDDO
-      DO k = 1, klev
-      DO i = 1, klon
-       zustrph(i)=zustrph(i)+(u_seri(i,k)-u(i,k))/dtime*
-     c            (paprs(i,k)-paprs(i,k+1))/rg
-       zvstrph(i)=zvstrph(i)+(v_seri(i,k)-v(i,k))/dtime*
-     c            (paprs(i,k)-paprs(i,k+1))/rg
-      ENDDO
-      ENDDO
-c
-cIM calcul composantes axiales du moment angulaire et couple des montagnes
-c
-      IF (is_sequential .and. ok_orodr) THEN 
-        CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur,
-     C                 ra,rg,romega,
-     C                 rlat,rlon,pphis,
-     C                 zustrdr,zustrli,zustrph,
-     C                 zvstrdr,zvstrli,zvstrph,
-     C                 paprs,u,v,
-     C                 aam, torsfc)
-       ENDIF
-cIM cf. FLott END
-cIM
-      IF (ip_ebil_phy.ge.2) THEN 
-        ztit='after orography'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-         call diagphy(airephy,ztit,ip_ebil_phy
-     e      , zero_v, zero_v, zero_v, zero_v, zero_v
-     e      , zero_v, zero_v, zero_v, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-      END IF 
-c
-c
-!====================================================================
-! Interface Simulateur COSP (Calipso, ISCCP, MISR, ..)
-!====================================================================
-! Abderrahmane 24.08.09
-
-      IF (ok_cosp) THEN
-! adeclarer 
-#ifdef CPP_COSP
-       IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
-
-       print*,'freq_cosp',freq_cosp
-          mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
-!       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
-!     s        ref_liq,ref_ice
-          call phys_cosp(itap,dtime,freq_cosp,
-     $                   ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP,
-     $                   ecrit_mth,ecrit_day,ecrit_hf,
-     $                   klon,klev,rlon,rlat,presnivs,overlap,
-     $                   ref_liq,ref_ice,
-     $                   pctsrf(:,is_ter)+pctsrf(:,is_lic),
-     $                   zu10m,zv10m,pphis,
-     $                   zphi,paprs(:,1:klev),pplay,zxtsol,t_seri,
-     $                   qx(:,:,ivap),zx_rh,cldfra,rnebcon,flwc,fiwc,
-     $                   prfl(:,1:klev),psfl(:,1:klev),
-     $                   pmflxr(:,1:klev),pmflxs(:,1:klev),
-     $                   mr_ozone,cldtau, cldemi)
-
-!     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
-!     L          cfaddbze,clcalipso2,dbze,cltlidarradar,
-!     M          clMISR,
-!     R          clisccp2,boxtauisccp,boxptopisccp,tclisccp,ctpisccp,
-!     I          tauisccp,albisccp,meantbisccp,meantbclrisccp)
-
-         ENDIF
-
-#endif
-       ENDIF  !ok_cosp
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-cAA
-cAA Installation de l'interface online-offline pour traceurs
-cAA
-c====================================================================
-c   Calcul  des tendances traceurs
-c====================================================================
-C
-
-       IF (type_trac=='repr') THEN
-          sh_in(:,:) = q_seri(:,:)
-       ELSE
-          sh_in(:,:) = qx(:,:,ivap)
-       END IF
-
-      call phytrac (
-     I     itap,     days_elapsed+1,    jH_cur,   debut,
-     I     lafin,    dtime,     u, v,     t,
-     I     paprs,    pplay,     pmfu,     pmfd,
-     I     pen_u,    pde_u,     pen_d,    pde_d,
-     I     cdragh,   coefh(:,:,is_ave),   fm_therm, entr_therm,
-     I     u1,       v1,        ftsol,    pctsrf,
-     I     zustar,   zu10m,     zv10m,
-     I     wstar(:,is_ave),    ale_bl,         ale_wake,
-     I     rlat,     rlon,
-     I     frac_impa,frac_nucl, beta_prec_fisrt,beta_prec,
-     I     presnivs, pphis,     pphi,     albsol1,
-     I     sh_in,    rhcl,      cldfra,   rneb,
-     I     diafra,   cldliq,    itop_con, ibas_con,
-     I     pmflxr,   pmflxs,    prfl,     psfl,
-     I     da,       phi,       mp,       upwd,
-     I     phi2,     d1a,       dam,      sij,         !<<RomP
-     I     wdtrainA, wdtrainM,  sigd,     clw,elij,    !<<RomP
-     I     ev,       ep,        epmlmMm,  eplaMm,      !<<RomP
-     I     dnwd,     aerosol_couple,      flxmass_w,
-     I     tau_aero, piz_aero,  cg_aero,  ccm,
-     I     rfname,
-     I     d_tr_dyn,                                   !<<RomP
-     O     tr_seri)
-
-      IF (offline) THEN
-
-       IF (prt_level.ge.9)
-     $    print*,'Attention on met a 0 les thermiques pour phystoke'
-	 call phystokenc (
-     I                   nlon,klev,pdtphys,rlon,rlat,
-     I                   t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
-     I                   fm_therm,entr_therm,
-     I                   cdragh,coefh(:,:,is_ave),u1,v1,ftsol,pctsrf,
-     I                   frac_impa, frac_nucl,
-     I                   pphis,airephy,dtime,itap,
-     I                   qx(:,:,ivap),da,phi,mp,upwd,dnwd)
-
-
-      ENDIF
-
-c
-c Calculer le transport de l'eau et de l'energie (diagnostique)
-c
-      CALL transp (paprs,zxtsol,
-     e                   t_seri, q_seri, u_seri, v_seri, zphi,
-     s                   ve, vq, ue, uq)
-c
-cIM global posePB BEG
-      IF(1.EQ.0) THEN
-c
-      CALL transp_lay (paprs,zxtsol,
-     e                   t_seri, q_seri, u_seri, v_seri, zphi,
-     s                   ve_lay, vq_lay, ue_lay, uq_lay)
-c
-      ENDIF !(1.EQ.0) THEN
-cIM global posePB END
-c Accumuler les variables a stocker dans les fichiers histoire:
-c
-
-!================================================================
-! Conversion of kinetic and potential energy into heat, for
-! parameterisation of subgrid-scale motions
-!================================================================
-
-      d_t_ec(:,:)=0.
-      forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
-      CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap),
-     s        u_seri,v_seri,t_seri,q_seri,pbl_tke(:,:,is_ave)-tke0(:,:),
-     s        zmasse,exner,d_t_ec)
-      t_seri(:,:)=t_seri(:,:)+d_t_ec(:,:)
-
-cIM
-      IF (ip_ebil_phy.ge.1) THEN 
-        ztit='after physic'
-        CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime
-     e      , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay
-     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
-C     Comme les tendances de la physique sont ajoute dans la dynamique,
-C     on devrait avoir que la variation d'entalpie par la dynamique
-C     est egale a la variation de la physique au pas de temps precedent.
-C     Donc la somme de ces 2 variations devrait etre nulle.
-
-        call diagphy(airephy,ztit,ip_ebil_phy
-     e      , topsw, toplw, solsw, sollw, sens
-     e      , evap, rain_fall, snow_fall, ztsol
-     e      , d_h_vcol, d_qt, d_ec
-     s      , fs_bound, fq_bound )
-C
-      d_h_vcol_phy=d_h_vcol
-C
-      END IF 
-C
-c=======================================================================
-c   SORTIES
-c=======================================================================
-
-cIM Interpolation sur les niveaux de pression du NMC
-c   -------------------------------------------------
-c
-#include "calcul_STDlev.h"
-c
-c slp sea level pressure
-      slp(:) = paprs(:,1)*exp(pphis(:)/(RD*t_seri(:,1)))
-c
-ccc prw = eau precipitable
-      DO i = 1, klon
-       prw(i) = 0.
-       DO k = 1, klev
-        prw(i) = prw(i) +
-     .           q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
-       ENDDO
-      ENDDO
-c
-cIM initialisation + calculs divers diag AMIP2
-c
-#include "calcul_divers.h"
-c
-      IF (type_trac == 'inca') THEN
-#ifdef INCA
-         CALL VTe(VTphysiq)
-         CALL VTb(VTinca)
-
-         CALL chemhook_end (
-     $                        dtime,
-     $                        pplay,
-     $                        t_seri,
-     $                        tr_seri,
-     $                        nbtr,
-     $                        paprs,
-     $                        q_seri,
-     $                        airephy,
-     $                        pphi,
-     $                        pphis,
-     $                        zx_rh)
-
-         CALL VTe(VTinca)
-         CALL VTb(VTphysiq)
-#endif
-      END IF
-
-
-c
-c Convertir les incrementations en tendances
-c
-      IF (prt_level .GE.10) THEN
-        print *,'Convertir les incrementations en tendances '
-      ENDIF
-c
-      if (mydebug) then
-        call writefield_phy('u_seri',u_seri,llm)
-        call writefield_phy('v_seri',v_seri,llm)
-        call writefield_phy('t_seri',t_seri,llm)
-        call writefield_phy('q_seri',q_seri,llm)
-      endif
-
-      DO k = 1, klev
-      DO i = 1, klon
-         d_u(i,k) = ( u_seri(i,k) - u(i,k) ) / dtime
-         d_v(i,k) = ( v_seri(i,k) - v(i,k) ) / dtime
-         d_t(i,k) = ( t_seri(i,k)-t(i,k) ) / dtime
-         d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime
-         d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime
-      ENDDO
-      ENDDO
-c
-      IF (nqtot.GE.3) THEN
-      DO iq = 3, nqtot
-      DO  k = 1, klev
-      DO  i = 1, klon
-         d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime
-      ENDDO
-      ENDDO
-      ENDDO
-      ENDIF
-c
-cIM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano
-cIM global posePB#include "write_bilKP_ins.h"
-cIM global posePB#include "write_bilKP_ave.h"
-c
-
-c Sauvegarder les valeurs de t et q a la fin de la physique:
-c
-      DO k = 1, klev
-      DO i = 1, klon
-         u_ancien(i,k) = u_seri(i,k)
-         v_ancien(i,k) = v_seri(i,k)
-         t_ancien(i,k) = t_seri(i,k)
-         q_ancien(i,k) = q_seri(i,k)
-      ENDDO
-      ENDDO
-
-!!! RomP >>>
-      IF (nqtot.GE.3) THEN
-        DO iq = 3, nqtot
-        DO k = 1, klev
-        DO i = 1, klon
-           tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
-        ENDDO
-        ENDDO
-        ENDDO
-      ENDIF
-!!! RomP <<<
-!==========================================================================
-! Sorties des tendances pour un point particulier
-! a utiliser en 1D, avec igout=1 ou en 3D sur un point particulier
-! pour le debug
-! La valeur de igout est attribuee plus haut dans le programme
-!==========================================================================
-
-      if (prt_level.ge.1) then
-      write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
-      write(lunout,*)
-     s 'nlon,klev,nqtot,debut,lafin,jD_cur, jH_cur, pdtphys pct tlos'
-      write(lunout,*)
-     s  nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur ,pdtphys,
-     s  pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce),
-     s  pctsrf(igout,is_sic)
-      write(lunout,*) 'd_t_dyn,d_t_con,d_t_lsc,d_t_ajsb,d_t_ajs,d_t_eva'
-      do k=1,klev
-         write(lunout,*) d_t_dyn(igout,k),d_t_con(igout,k),
-     s   d_t_lsc(igout,k),d_t_ajsb(igout,k),d_t_ajs(igout,k),
-     s   d_t_eva(igout,k)
-      enddo
-      write(lunout,*) 'cool,heat'
-      do k=1,klev
-         write(lunout,*) cool(igout,k),heat(igout,k)
-      enddo
-
-      write(lunout,*) 'd_t_oli,d_t_vdf,d_t_oro,d_t_lif,d_t_ec'
-      do k=1,klev
-         write(lunout,*) d_t_oli(igout,k),d_t_vdf(igout,k),
-     s d_t_oro(igout,k),d_t_lif(igout,k),d_t_ec(igout,k)
-      enddo
-
-      write(lunout,*) 'd_ps ',d_ps(igout)
-      write(lunout,*) 'd_u, d_v, d_t, d_qx1, d_qx2 '
-      do k=1,klev
-         write(lunout,*) d_u(igout,k),d_v(igout,k),d_t(igout,k),
-     s  d_qx(igout,k,1),d_qx(igout,k,2)
-      enddo
-      endif
-
-!==========================================================================
-
-c============================================================
-c   Calcul de la temperature potentielle
-c============================================================
-      DO k = 1, klev
-      DO i = 1, klon
-cJYG/IM theta en debut du pas de temps
-cJYG/IM       theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
-cJYG/IM theta en fin de pas de temps de physique
-        theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD)
-c thetal: 2 lignes suivantes a decommenter si vous avez les fichiers     MPL 20130625
-c fth_fonctions.F90 et parkind1.F90
-c sinon thetal=theta
-c       thetal(i,k)=fth_thetal(pplay(i,k),t_seri(i,k),q_seri(i,k),
-c    :         ql_seri(i,k))
-        thetal(i,k)=theta(i,k)
-      ENDDO
-      ENDDO
-c
-
-c 22.03.04 BEG
-c=============================================================
-c   Ecriture des sorties
-c=============================================================
-#ifdef CPP_IOIPSL
- 
-c Recupere des varibles calcule dans differents modules
-c pour ecriture dans histxxx.nc 
-
-      ! Get some variables from module fonte_neige_mod
-      CALL fonte_neige_get_vars(pctsrf, 
-     .     zxfqcalving, zxfqfonte, zxffonte)
-
-
-
-
-c=============================================================
-! Separation entre thermiques et non thermiques dans les sorties
-! de fisrtilp
-c=============================================================
-
-      if (iflag_thermals>=1) then
-      d_t_lscth=0.
-      d_t_lscst=0.
-      d_q_lscth=0.
-      d_q_lscst=0.
-      do k=1,klev
-         do i=1,klon
-            if (ptconvth(i,k)) then
-                d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
-                d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
-            else
-                d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
-                d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
-            endif
-         enddo
-      enddo
-
-      do i=1,klon
-      plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1)
-      plul_th(i)=prfl(i,1)+psfl(i,1)
-      enddo
-      endif
-
-
-!On effectue les sorties:
-
-      CALL phys_output_write(itap, pdtphys, paprs, pphis,               &
-     &                  pplay, lmax_th, aerosol_couple,                 &
-     &                  ok_ade, ok_aie, ivap, new_aod, ok_sync,         &
-     &                  ptconv, read_climoz, clevSTD, freq_moyNMC,      &
-     &                  ptconvth, d_t, qx, d_qx, zmasse,                &
-     &                  flag_aerosol_strat)
-
-
-
-
-#ifdef histISCCP
-#include "write_histISCCP.h"
-#endif
-
-#include "write_histday_seri.h"
-
-#include "write_paramLMDZ_phy.h"
-
-#endif
-
-c 22.03.04 END
-c
-c====================================================================
-c Si c'est la fin, il faut conserver l'etat de redemarrage
-c====================================================================
-c
-
-c        -----------------------------------------------------------------
-c        WSTATS: Saving statistics
-c        -----------------------------------------------------------------
-c        ("stats" stores and accumulates 8 key variables in file "stats.nc"
-c        which can later be used to make the statistic files of the run:
-c        "stats")          only possible in 3D runs !
-
-         
-         IF (callstats) THEN
-
-           call wstats(klon,o_psol%name,"Surface pressure","Pa"
-     &                 ,2,paprs(:,1))
-           call wstats(klon,o_tsol%name,"Surface temperature","K",
-     &                 2,zxtsol)
-           zx_tmp_fi2d(:) = rain_fall(:) + snow_fall(:)
-           call wstats(klon,o_precip%name,"Precip Totale liq+sol",
-     &                 "kg/(s*m2)",2,zx_tmp_fi2d)
-           zx_tmp_fi2d(:) = rain_lsc(:) + snow_lsc(:)
-           call wstats(klon,o_plul%name,"Large-scale Precip",
-     &                 "kg/(s*m2)",2,zx_tmp_fi2d)
-           zx_tmp_fi2d(:) = rain_con(:) + snow_con(:)
-           call wstats(klon,o_pluc%name,"Convective Precip",
-     &                 "kg/(s*m2)",2,zx_tmp_fi2d)
-           call wstats(klon,o_sols%name,"Solar rad. at surf.",
-     &                 "W/m2",2,solsw)
-           call wstats(klon,o_soll%name,"IR rad. at surf.",
-     &                 "W/m2",2,sollw)
-          zx_tmp_fi2d(:) = topsw(:)-toplw(:)
-          call wstats(klon,o_nettop%name,"Net dn radiatif flux at TOA",
-     &                 "W/m2",2,zx_tmp_fi2d)
-
-
-
-           call wstats(klon,o_temp%name,"Air temperature","K",
-     &                 3,t_seri)
-           call wstats(klon,o_vitu%name,"Zonal wind","m.s-1",
-     &                 3,u_seri)
-           call wstats(klon,o_vitv%name,"Meridional wind",
-     &                "m.s-1",3,v_seri)
-           call wstats(klon,o_vitw%name,"Vertical wind",
-     &                "m.s-1",3,omega)
-           call wstats(klon,o_ovap%name,"Specific humidity", "kg/kg",
-     &                 3,q_seri)
- 
-
-
-           IF(lafin) THEN
-             write (*,*) "Writing stats..."
-             call mkstats(ierr)
-           ENDIF
-
-         ENDIF !if callstats
-     
-      IF (lafin) THEN
-         itau_phy = itau_phy + itap
-         CALL phyredem ("restartphy.nc")
-!         open(97,form="unformatted",file="finbin")
-!         write(97) u_seri,v_seri,t_seri,q_seri
-!         close(97)
-C$OMP MASTER
-         if (read_climoz >= 1) then
-            if (is_mpi_root) then
-               call nf95_close(ncid_climoz)
-            end if
-            deallocate(press_climoz) ! pointer
-         end if
-C$OMP END MASTER
-      ENDIF
-      
-!      first=.false.
-
-      RETURN
-      END
-      FUNCTION qcheck(klon,klev,paprs,q,ql,aire)
-      IMPLICIT none
-c
-c Calculer et imprimer l'eau totale. A utiliser pour verifier
-c la conservation de l'eau
-c
-#include "YOMCST.h"
-      INTEGER klon,klev
-      REAL paprs(klon,klev+1), q(klon,klev), ql(klon,klev)
-      REAL aire(klon)
-      REAL qtotal, zx, qcheck
-      INTEGER i, k
-c
-      zx = 0.0
-      DO i = 1, klon
-         zx = zx + aire(i)
-      ENDDO
-      qtotal = 0.0
-      DO k = 1, klev
-      DO i = 1, klon
-         qtotal = qtotal + (q(i,k)+ql(i,k)) * aire(i)
-     .                     *(paprs(i,k)-paprs(i,k+1))/RG
-      ENDDO
-      ENDDO
-c
-      qcheck = qtotal/zx
-c
-      RETURN
-      END
-      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
-      IMPLICIT none
-c
-c Tranformer une variable de la grille physique a
-c la grille d'ecriture
-c
-      INTEGER nfield,nlon,iim,jjmp1, jjm
-      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
-c
-      INTEGER i, n, ig
-c
-      jjm = jjmp1 - 1
-      DO n = 1, nfield
-         DO i=1,iim
-            ecrit(i,n) = fi(1,n)
-            ecrit(i+jjm*iim,n) = fi(nlon,n)
-         ENDDO
-         DO ig = 1, nlon - 2
-           ecrit(iim+ig,n) = fi(1+ig,n)
-         ENDDO
-      ENDDO
-      RETURN
-      END
Index: LMDZ5/trunk/libf/phylmd/physiq.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 1862)
+++ LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 1862)
@@ -0,0 +1,4108 @@
+! $Id$
+!#define IO_DEBUG
+
+      SUBROUTINE physiq (nlon,nlev, &
+                  debut,lafin,jD_cur, jH_cur,pdtphys, &
+                  paprs,pplay,pphi,pphis,presnivs,clesphy0, &
+                  u,v,t,qx, &
+                  flxmass_w, &
+                  d_u, d_v, d_t, d_qx, d_ps &
+                  , dudyn &
+                  , PVteta)
+
+      USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
+           histwrite, ju2ymds, ymds2ju, ioget_year_len
+      USE comgeomphy
+      USE phys_cal_mod
+      USE write_field_phy
+      USE dimphy
+      USE infotrac
+      USE mod_grid_phy_lmdz
+      USE mod_phys_lmdz_para
+      USE iophy
+      USE misc_mod, mydebug=>debug
+      USE vampir
+      USE pbl_surface_mod, ONLY : pbl_surface
+      USE change_srf_frac_mod
+      USE surface_data,     ONLY : type_ocean, ok_veget
+      USE phys_local_var_mod ! Variables internes non sauvegardees de la physique
+      USE phys_state_var_mod ! Variables sauvegardees de la physique
+      USE phys_output_var_mod ! Variables pour les ecritures des sorties
+      USE phys_output_write_mod
+      USE fonte_neige_mod, ONLY  : fonte_neige_get_vars
+      USE phys_output_mod
+      USE phys_output_ctrlout_mod
+      USE iophy
+      use open_climoz_m, only: open_climoz ! ozone climatology from a file
+      use regr_pr_av_m, only: regr_pr_av
+      use netcdf95, only: nf95_close
+!IM for NMC files
+!     use netcdf, only: nf90_fill_real
+      use netcdf
+      use mod_phys_lmdz_mpi_data, only: is_mpi_root
+      USE aero_mod
+      use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer
+      use conf_phys_m, only: conf_phys
+      use radlwsw_m, only: radlwsw
+      use phyaqua_mod, only: zenang_an
+      USE control_mod
+#ifdef REPROBUS
+      USE CHEM_REP, ONLY : Init_chem_rep_xjour
+#endif
+      USE indice_sol_mod
+      USE phytrac_mod, ONLY : phytrac
+
+!IM stations CFMIP
+      USE CFMIP_point_locations
+      IMPLICIT none
+!>======================================================================
+!!
+!! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
+!!
+!! Objet: Moniteur general de la physique du modele
+!!AA      Modifications quant aux traceurs :
+!!AA                  -  uniformisation des parametrisations ds phytrac
+!!AA                  -  stockage des moyennes des champs necessaires
+!!AA                     en mode traceur off-line 
+!!======================================================================
+!!   CLEFS CPP POUR LES IO
+!!   =====================
+#define histNMC
+!#define histISCCP
+!!======================================================================
+!!    modif   ( P. Le Van ,  12/10/98 )
+!!
+!!  Arguments:
+!!
+!! nlon----input-I-nombre de points horizontaux
+!! nlev----input-I-nombre de couches verticales, doit etre egale a klev
+!! debut---input-L-variable logique indiquant le premier passage
+!! lafin---input-L-variable logique indiquant le dernier passage
+!! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
+!! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
+!! pdtphys-input-R-pas d'integration pour la physique (seconde)
+!! paprs---input-R-pression pour chaque inter-couche (en Pa)
+!! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
+!! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
+!! pphis---input-R-geopotentiel du sol
+!! presnivs-input_R_pressions approximat. des milieux couches ( en PA)
+!! u-------input-R-vitesse dans la direction X (de O a E) en m/s
+!! v-------input-R-vitesse Y (de S a N) en m/s
+!! t-------input-R-temperature (K)
+!! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
+!! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
+!! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
+!! flxmass_w -input-R- flux de masse verticale
+!! d_u-----output-R-tendance physique de "u" (m/s/s)
+!! d_v-----output-R-tendance physique de "v" (m/s/s)
+!! d_t-----output-R-tendance physique de "t" (K/s)
+!! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
+!! d_ps----output-R-tendance physique de la pression au sol
+!!IM
+!! PVteta--output-R-vorticite potentielle a des thetas constantes
+!!======================================================================
+#include "dimensions.h"
+      integer jjmp1
+      parameter (jjmp1=jjm+1-1/jjm)
+      integer iip1
+      parameter (iip1=iim+1)
+
+#include "regdim.h"
+#include "dimsoil.h"
+#include "clesphys.h"
+#include "temps.h"
+#include "iniprint.h"
+#include "thermcell.h"
+!======================================================================
+      LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
+      PARAMETER (ok_cvl=.TRUE.)
+      LOGICAL ok_gust ! pour activer l'effet des gust sur flux surface
+      PARAMETER (ok_gust=.FALSE.)
+      integer iflag_radia     ! active ou non le rayonnement (MPL)
+      save iflag_radia
+!$OMP THREADPRIVATE(iflag_radia)
+!======================================================================
+      LOGICAL check ! Verifier la conservation du modele en eau
+      PARAMETER (check=.FALSE.)
+      LOGICAL ok_stratus ! Ajouter artificiellement les stratus
+      PARAMETER (ok_stratus=.FALSE.)
+!======================================================================
+      REAL amn, amx
+      INTEGER igout
+!======================================================================
+! Clef controlant l'activation du cycle diurne:
+!cc      LOGICAL cycle_diurne
+!cc      PARAMETER (cycle_diurne=.FALSE.)
+!======================================================================
+! Modele thermique du sol, a activer pour le cycle diurne:
+!cc      LOGICAL soil_model
+!cc      PARAMETER (soil_model=.FALSE.)
+!======================================================================
+! Dans les versions precedentes, l'eau liquide nuageuse utilisee dans
+! le calcul du rayonnement est celle apres la precipitation des nuages.
+! Si cette cle new_oliq est activee, ce sera une valeur moyenne entre
+! la condensation et la precipitation. Cette cle augmente les impacts
+! radiatifs des nuages.
+!cc      LOGICAL new_oliq
+!cc      PARAMETER (new_oliq=.FALSE.)
+!======================================================================
+! Clefs controlant deux parametrisations de l'orographie:
+!c      LOGICAL ok_orodr
+!cc      PARAMETER (ok_orodr=.FALSE.)
+!cc      LOGICAL ok_orolf
+!cc      PARAMETER (ok_orolf=.FALSE.)
+!======================================================================
+      LOGICAL ok_journe ! sortir le fichier journalier
+      save ok_journe
+!$OMP THREADPRIVATE(ok_journe)
+!
+      LOGICAL ok_mensuel ! sortir le fichier mensuel
+      save ok_mensuel
+!$OMP THREADPRIVATE(ok_mensuel)
+!
+      LOGICAL ok_instan ! sortir le fichier instantane
+      save ok_instan
+!$OMP THREADPRIVATE(ok_instan)
+!
+      LOGICAL ok_LES ! sortir le fichier LES 
+      save ok_LES                            
+!$OMP THREADPRIVATE(ok_LES)                  
+!
+      LOGICAL callstats ! sortir le fichier stats 
+      save callstats                            
+!$OMP THREADPRIVATE(callstats)                  
+!
+      LOGICAL ok_region ! sortir le fichier regional
+      PARAMETER (ok_region=.FALSE.)
+!======================================================================
+      real seuil_inversion
+      save seuil_inversion
+!$OMP THREADPRIVATE(seuil_inversion)
+      integer iflag_ratqs
+      save iflag_ratqs
+!$OMP THREADPRIVATE(iflag_ratqs)
+      real facteur
+
+      REAL zz,znum,zden
+      REAL wmax_th(klon)
+      REAL tau_overturning_th(klon)
+
+      integer lmax_th(klon)
+      integer limbas(klon)
+      real ratqscth(klon,klev)
+      real ratqsdiff(klon,klev)
+      real zqsatth(klon,klev)
+
+!======================================================================
+!
+      INTEGER ivap          ! indice de traceurs pour vapeur d'eau
+      PARAMETER (ivap=1)
+      INTEGER iliq          ! indice de traceurs pour eau liquide
+      PARAMETER (iliq=2)
+
+!
+!
+! Variables argument:
+!
+      INTEGER nlon
+      INTEGER nlev
+      REAL, intent(in):: jD_cur, jH_cur
+
+      REAL pdtphys
+      LOGICAL debut, lafin
+      REAL paprs(klon,klev+1)
+      REAL pplay(klon,klev)
+      REAL pphi(klon,klev)
+      REAL pphis(klon)
+      REAL presnivs(klev)
+      REAL znivsig(klev)
+      real pir
+
+      REAL u(klon,klev)
+      REAL v(klon,klev)
+      REAL t(klon,klev),thetal(klon,klev)
+! thetal: ligne suivante a decommenter si vous avez les fichiers     MPL 20130625
+! fth_fonctions.F90 et parkind1.F90
+! sinon thetal=theta
+!     REAL fth_thetae,fth_thetav,fth_thetal
+      REAL qx(klon,klev,nqtot)
+      REAL flxmass_w(klon,klev)
+      REAL d_u(klon,klev)
+      REAL d_v(klon,klev)
+      REAL d_t(klon,klev)
+      REAL d_qx(klon,klev,nqtot)
+      REAL d_ps(klon)
+! Variables pour le transport convectif
+      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
+! Variables pour le lessivage convectif
+! RomP >>> 
+      real phi2(klon,klev,klev)
+      real d1a(klon,klev),dam(klon,klev)
+      real ev(klon,klev),ep(klon,klev)
+      real clw(klon,klev),elij(klon,klev,klev)
+      real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
+! RomP <<<
+!IM definition dynamique o_trac dans phys_output_open
+!      type(ctrl_out) :: o_trac(nqtot)
+!
+!IM Amip2 PV a theta constante 
+!
+      INTEGER nbteta
+      PARAMETER(nbteta=3)
+      CHARACTER*3 ctetaSTD(nbteta)
+      DATA ctetaSTD/'350','380','405'/
+      SAVE ctetaSTD
+!$OMP THREADPRIVATE(ctetaSTD)
+      REAL rtetaSTD(nbteta)
+      DATA rtetaSTD/350., 380., 405./
+      SAVE rtetaSTD
+!$OMP THREADPRIVATE(rtetaSTD)     
+!
+      REAL PVteta(klon,nbteta)
+      REAL zx_tmp_3dte(iim,jjmp1,nbteta)
+!
+!MI Amip2 PV a theta constante
+
+!ym      INTEGER klevp1, klevm1
+!ym      PARAMETER(klevp1=klev+1,klevm1=klev-1)
+!ym#include "raddim.h"
+!
+!
+!IM Amip2
+! variables a une pression donnee
+!
+#include "declare_STDlev.h"
+!
+      CHARACTER*4 bb2
+      CHARACTER*2 bb3
+!
+#include "radopt.h"
+!
+!
+
+      REAL convliq(klon,klev)  ! eau liquide nuageuse convective
+      REAL convfra(klon,klev)  ! fraction nuageuse convective
+
+      REAL cldl_c(klon),cldm_c(klon),cldh_c(klon) !nuages bas, moyen et haut
+      REAL cldt_c(klon),cldq_c(klon) !nuage total, eau liquide integree
+      REAL cldl_s(klon),cldm_s(klon),cldh_s(klon) !nuages bas, moyen et haut
+      REAL cldt_s(klon),cldq_s(klon) !nuage total, eau liquide integree
+
+      INTEGER linv, kp1
+! flwp, fiwp = Liquid Water Path & Ice Water Path (kg/m2)
+! flwc, fiwc = Liquid Water Content & Ice Water Content (kg/kg)
+      REAL flwp_c(klon), fiwp_c(klon)
+      REAL flwc_c(klon,klev), fiwc_c(klon,klev)
+      REAL flwp_s(klon), fiwp_s(klon)
+      REAL flwc_s(klon,klev), fiwc_s(klon,klev)
+
+
+!IM ISCCP simulator v3.4
+! dans clesphys.h top_height, overlap
+!v3.4
+      INTEGER debug, debugcol
+!ym      INTEGER npoints
+!ym      PARAMETER(npoints=klon) 
+!
+      INTEGER sunlit(klon) !sunlit=1 if day; sunlit=0 if night
+      INTEGER nregISCtot
+      PARAMETER(nregISCtot=1) 
+!
+! imin_debut, nbpti, jmin_debut, nbptj : parametres pour sorties sur 1 region rectangulaire
+! y compris pour 1 point
+! imin_debut : indice minimum de i; nbpti : nombre de points en direction i (longitude)
+! jmin_debut : indice minimum de j; nbptj : nombre de points en direction j (latitude)
+      INTEGER imin_debut, nbpti
+      INTEGER jmin_debut, nbptj 
+!IM parametres ISCCP BEG
+      INTEGER nbapp_isccp
+!     INTEGER nbapp_isccp,isccppas
+!     PARAMETER(isccppas=6) !appel du simulateurs tous les 6pas de temps de la physique
+!                           !i.e. toutes les 3 heures 
+      INTEGER n
+      INTEGER ifreq_isccp(napisccp), freqin_pdt(napisccp)
+      DATA ifreq_isccp/3/
+      SAVE ifreq_isccp
+!$OMP THREADPRIVATE(ifreq_isccp)
+      CHARACTER*5 typinout(napisccp)
+      DATA typinout/'i3od'/
+      SAVE typinout
+!$OMP THREADPRIVATE(typinout)
+!IM verif boxptop BEG
+      CHARACTER*1 verticaxe(napisccp)
+      DATA verticaxe/'1'/ 
+      SAVE verticaxe
+!$OMP THREADPRIVATE(verticaxe)
+!IM verif boxptop END
+      INTEGER nvlev(napisccp)
+!     INTEGER nvlev
+      REAL t1, aa
+      REAL seed_re(klon,napisccp)
+!ym !!!! A voir plus tard 
+!ym      INTEGER iphy(iim,jjmp1)
+!IM parametres ISCCP END
+!
+! ncol = nb. de sous-colonnes pour chaque maille du GCM 
+! ncolmx = No. max. de sous-colonnes pour chaque maille du GCM 
+!      INTEGER ncol(napisccp), ncolmx, seed(klon,napisccp)
+      INTEGER,SAVE :: ncol(napisccp)
+!$OMP THREADPRIVATE(ncol)
+      INTEGER ncolmx, seed(klon,napisccp)
+      REAL nbsunlit(nregISCtot,klon,napisccp)  !nbsunlit : moyenne de sunlit
+!     PARAMETER(ncolmx=1500)
+      PARAMETER(ncolmx=300)
+!
+!IM verif boxptop BEG
+      REAL vertlev(ncolmx,napisccp)
+!IM verif boxptop END
+!
+      REAL,SAVE :: tautab_omp(0:255),tautab(0:255)
+      INTEGER,SAVE :: invtau_omp(-20:45000),invtau(-20:45000)
+!$OMP THREADPRIVATE(tautab,invtau)
+      REAL emsfc_lw
+      PARAMETER(emsfc_lw=0.99)
+!     REAL    ran0                      ! type for random number fuction
+!
+      REAL cldtot(klon,klev)
+! variables de haut en bas pour le simulateur ISCCP
+      REAL dtau_s(klon,klev) !tau nuages startiformes
+      REAL dtau_c(klon,klev) !tau nuages convectifs
+      REAL dem_s(klon,klev)  !emissivite nuages startiformes 
+      REAL dem_c(klon,klev)  !emissivite nuages convectifs
+!
+! variables de haut en bas pour le simulateur ISCCP
+      REAL pfull(klon,klev)
+      REAL phalf(klon,klev+1)
+      REAL qv(klon,klev)
+      REAL cc(klon,klev)
+      REAL conv(klon,klev)
+      REAL dtau_sH2B(klon,klev)
+      REAL dtau_cH2B(klon,klev)
+      REAL at(klon,klev)
+      REAL dem_sH2B(klon,klev)
+      REAL dem_cH2B(klon,klev)
+!
+      INTEGER kmax, lmax, lmax3
+      PARAMETER(kmax=8, lmax=8, lmax3=3)
+      INTEGER kmaxm1, lmaxm1
+      PARAMETER(kmaxm1=kmax-1, lmaxm1=lmax-1)
+      INTEGER iimx7, jjmx7, jjmp1x7
+      PARAMETER(iimx7=iim*kmaxm1, jjmx7=jjm*lmaxm1,  &
+      jjmp1x7=jjmp1*lmaxm1)
+!
+! output from ISCCP simulator
+      REAL fq_isccp(klon,kmaxm1,lmaxm1,napisccp)
+      REAL fq_is_true(klon,kmaxm1,lmaxm1,napisccp)
+      REAL totalcldarea(klon,napisccp) 
+      REAL meanptop(klon,napisccp)
+      REAL meantaucld(klon,napisccp)
+      REAL boxtau(klon,ncolmx,napisccp)
+      REAL boxptop(klon,ncolmx,napisccp) 
+      REAL zx_tmp_fi3d_bx(klon,ncolmx)
+      REAL zx_tmp_3d_bx(iim,jjmp1,ncolmx)
+!
+      REAL cld_fi3d(klon,lmax3)
+      REAL cld_3d(iim,jjmp1,lmax3)
+!
+      INTEGER iw, iwmax
+      REAL wmin, pas_w
+!     PARAMETER(wmin=-100.,pas_w=10.,iwmax=30)
+!IM 051005     PARAMETER(wmin=-200.,pas_w=10.,iwmax=40)
+      PARAMETER(wmin=-100.,pas_w=10.,iwmax=20)
+      REAL o500(klon)
+!
+
+! sorties ISCCP
+
+      integer nid_isccp
+      save nid_isccp        
+!$OMP THREADPRIVATE(nid_isccp)
+
+      REAL zx_tau(kmaxm1), zx_pc(lmaxm1), zx_o500(iwmax)
+      DATA zx_tau/0.0, 0.3, 1.3, 3.6, 9.4, 23., 60./
+      SAVE zx_tau
+      DATA zx_pc/180., 310., 440., 560., 680., 800., 1000./
+      SAVE zx_pc
+!$OMP THREADPRIVATE(zx_tau,zx_pc)
+! cldtopres pression au sommet des nuages
+      REAL cldtopres(lmaxm1), cldtopres3(lmax3)
+      DATA cldtopres/180., 310., 440., 560., 680., 800., 1000./
+      DATA cldtopres3/440., 680., 1000./
+      SAVE cldtopres,cldtopres3
+!$OMP THREADPRIVATE(cldtopres,cldtopres3)
+!IM 051005 BEG
+      INTEGER komega, nhoriRD 
+
+! taulev: numero du niveau de tau dans les sorties ISCCP
+      CHARACTER *4 taulev(kmaxm1)
+!     DATA taulev/'tau1','tau2','tau3','tau4','tau5','tau6','tau7'/
+      DATA taulev/'tau0','tau1','tau2','tau3','tau4','tau5','tau6'/
+      CHARACTER *3 pclev(lmaxm1)
+      DATA pclev/'pc1','pc2','pc3','pc4','pc5','pc6','pc7'/
+      SAVE taulev,pclev
+!$OMP THREADPRIVATE(taulev,pclev)
+!
+! cnameisccp
+      CHARACTER *29 cnameisccp(lmaxm1,kmaxm1)
+!IM bad 151205     DATA cnameisccp/'pc< 50hPa, tau< 0.3', 
+      DATA cnameisccp/'pc= 50-180hPa, tau< 0.3', &
+                      'pc= 180-310hPa, tau< 0.3', &
+                      'pc= 310-440hPa, tau< 0.3', &
+                      'pc= 440-560hPa, tau< 0.3', &
+                      'pc= 560-680hPa, tau< 0.3', &
+                      'pc= 680-800hPa, tau< 0.3', &
+                      'pc= 800-1000hPa, tau< 0.3', &
+                      'pc= 50-180hPa, tau= 0.3-1.3', &
+                      'pc= 180-310hPa, tau= 0.3-1.3', &
+                      'pc= 310-440hPa, tau= 0.3-1.3', &
+                      'pc= 440-560hPa, tau= 0.3-1.3', &
+                      'pc= 560-680hPa, tau= 0.3-1.3', &
+                      'pc= 680-800hPa, tau= 0.3-1.3', &
+                      'pc= 800-1000hPa, tau= 0.3-1.3', &
+                      'pc= 50-180hPa, tau= 1.3-3.6', &
+                      'pc= 180-310hPa, tau= 1.3-3.6', &
+                      'pc= 310-440hPa, tau= 1.3-3.6', &
+                      'pc= 440-560hPa, tau= 1.3-3.6', &
+                      'pc= 560-680hPa, tau= 1.3-3.6', &
+                      'pc= 680-800hPa, tau= 1.3-3.6', &
+                      'pc= 800-1000hPa, tau= 1.3-3.6', &
+                      'pc= 50-180hPa, tau= 3.6-9.4', &
+                      'pc= 180-310hPa, tau= 3.6-9.4', &
+                      'pc= 310-440hPa, tau= 3.6-9.4', &
+                      'pc= 440-560hPa, tau= 3.6-9.4', &
+                      'pc= 560-680hPa, tau= 3.6-9.4', &
+                      'pc= 680-800hPa, tau= 3.6-9.4', &
+                      'pc= 800-1000hPa, tau= 3.6-9.4', &
+                      'pc= 50-180hPa, tau= 9.4-23', &
+                      'pc= 180-310hPa, tau= 9.4-23', &
+                      'pc= 310-440hPa, tau= 9.4-23', &
+                      'pc= 440-560hPa, tau= 9.4-23', &
+                      'pc= 560-680hPa, tau= 9.4-23', &
+                      'pc= 680-800hPa, tau= 9.4-23', &
+                      'pc= 800-1000hPa, tau= 9.4-23', &
+                      'pc= 50-180hPa, tau= 23-60', &
+                      'pc= 180-310hPa, tau= 23-60', &
+                      'pc= 310-440hPa, tau= 23-60', &
+                      'pc= 440-560hPa, tau= 23-60', &
+                      'pc= 560-680hPa, tau= 23-60', &
+                      'pc= 680-800hPa, tau= 23-60', &
+                      'pc= 800-1000hPa, tau= 23-60', &
+                      'pc= 50-180hPa, tau> 60.', &
+                      'pc= 180-310hPa, tau> 60.', &
+                      'pc= 310-440hPa, tau> 60.', &
+                      'pc= 440-560hPa, tau> 60.', &
+                      'pc= 560-680hPa, tau> 60.', &
+                      'pc= 680-800hPa, tau> 60.', &
+                      'pc= 800-1000hPa, tau> 60.'/
+       SAVE cnameisccp
+!$OMP THREADPRIVATE(cnameisccp)
+!
+!     REAL zx_lonx7(iimx7), zx_latx7(jjmp1x7)
+!     INTEGER nhorix7
+!IM: region='3d' <==> sorties en global
+      CHARACTER*3 region
+      PARAMETER(region='3d')
+!
+!IM ISCCP simulator v3.4
+!
+      logical ok_hf
+!
+      integer nid_hf, nid_hf3d
+      save ok_hf, nid_hf, nid_hf3d
+!$OMP THREADPRIVATE(ok_hf, nid_hf, nid_hf3d)
+!  QUESTION : noms de variables ?
+
+      INTEGER        longcles
+      PARAMETER    ( longcles = 20 )
+      REAL clesphy0( longcles      )
+!
+! Variables propres a la physique
+      INTEGER itap
+      SAVE itap                   ! compteur pour la physique
+!$OMP THREADPRIVATE(itap)
+!
+      REAL,save ::  solarlong0
+!$OMP THREADPRIVATE(solarlong0)
+
+!
+!  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
+!
+!IM 141004     REAL zulow(klon),zvlow(klon),zustr(klon), zvstr(klon)
+      REAL zulow(klon),zvlow(klon)
+!
+      INTEGER igwd,idx(klon),itest(klon)
+!
+!      REAL,allocatable,save :: run_off_lic_0(:)
+!!$OMP THREADPRIVATE(run_off_lic_0)
+!ym      SAVE run_off_lic_0
+!KE43
+! Variables liees a la convection de K. Emanuel (sb):
+!
+      REAL bas, top             ! cloud base and top levels
+      SAVE bas
+      SAVE top
+!$OMP THREADPRIVATE(bas, top)
+
+      REAL wdn(klon), tdn(klon), qdn(klon)
+!
+!=================================================================================================
+!CR04.12.07: on ajoute les nouvelles variables du nouveau schema de convection avec poches froides
+! Variables li\'ees \`a la poche froide (jyg)
+
+      REAL mip(klon,klev)  ! mass flux shed by the adiab ascent at each level
+!
+      REAL wape_prescr, fip_prescr
+      INTEGER it_wape_prescr
+      SAVE wape_prescr, fip_prescr, it_wape_prescr
+!$OMP THREADPRIVATE(wape_prescr, fip_prescr, it_wape_prescr)
+!
+! variables supplementaires de concvl
+      REAL Tconv(klon,klev)
+      REAL ment(klon,klev,klev),sij(klon,klev,klev)
+      REAL dd_t(klon,klev),dd_q(klon,klev)
+
+      real, save :: alp_bl_prescr=0.
+      real, save :: ale_bl_prescr=0.
+
+      real, save :: ale_max=1000.
+      real, save :: alp_max=2.
+
+      real, save :: wake_s_min_lsp=0.1
+
+!$OMP THREADPRIVATE(alp_bl_prescr,ale_bl_prescr)
+!$OMP THREADPRIVATE(ale_max,alp_max)
+!$OMP THREADPRIVATE(wake_s_min_lsp)
+
+
+      real ok_wk_lsp(klon)
+
+!RC
+! Variables li\'ees \`a la poche froide (jyg et rr)
+! Version diagnostique pour l'instant : pas de r\'etroaction sur la convection
+
+      REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection
+
+      REAL wake_dth(klon,klev)        ! wake : temp pot difference
+
+      REAL wake_d_deltat_gw(klon,klev)! wake : delta T tendency due to Gravity Wave (/s)
+      REAL wake_omgbdth(klon,klev)    ! Wake : flux of Delta_Theta transported by LS omega
+      REAL wake_dp_omgb(klon,klev)    ! Wake : vertical gradient of large scale omega
+      REAL wake_dtKE(klon,klev)       ! Wake : differential heating (wake - unpertubed) CONV
+      REAL wake_dqKE(klon,klev)       ! Wake : differential moistening (wake - unpertubed) CONV
+      REAL wake_dtPBL(klon,klev)      ! Wake : differential heating (wake - unpertubed) PBL
+      REAL wake_dqPBL(klon,klev)      ! Wake : differential moistening (wake - unpertubed) PBL
+      REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)
+      REAL wake_dp_deltomg(klon,klev) ! Wake : gradient vertical de wake_omg
+      REAL wake_spread(klon,klev)     ! spreading term in wake_delt
+!
+!pourquoi y'a pas de save??
+!
+      INTEGER wake_k(klon)            ! Wake sommet
+!
+      REAL t_undi(klon,klev)               ! temperature moyenne dans la zone non perturbee
+      REAL q_undi(klon,klev)               ! humidite moyenne dans la zone non perturbee
+!
+!jyg
+!cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE 
+
+      REAL wake_gfl(klon)             ! Gust Front Length
+      REAL wake_dens(klon)
+!
+!
+      REAL dt_dwn(klon,klev)
+      REAL dq_dwn(klon,klev)
+      REAL wdt_PBL(klon,klev)
+      REAL udt_PBL(klon,klev)
+      REAL wdq_PBL(klon,klev)
+      REAL udq_PBL(klon,klev)
+      REAL M_dwn(klon,klev)
+      REAL M_up(klon,klev)
+      REAL dt_a(klon,klev)
+      REAL dq_a(klon,klev)
+      REAL, SAVE :: alp_offset
+!$OMP THREADPRIVATE(alp_offset)
+
+!
+!RR:fin declarations poches froides
+!=======================================================================================================
+        
+      REAL ztv(klon,klev),ztva(klon,klev)
+      REAL zpspsk(klon,klev)
+      REAL ztla(klon,klev),zqla(klon,klev) 
+      REAL zthl(klon,klev)
+
+!cc nrlmd le 10/04/2012
+
+!--------Stochastic Boundary Layer Triggering: ALE_BL--------
+!---Propri\'et\'es du thermiques au LCL 
+      real zlcl_th(klon)                                     ! Altitude du LCL calcul\'e continument (pcon dans thermcell_main.F90)
+      real fraca0(klon)                                      ! Fraction des thermiques au LCL
+      real w0(klon)                                          ! Vitesse des thermiques au LCL
+      real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
+      real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
+      real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL 
+      real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL 
+
+!---D\'eclenchement stochastique
+      integer :: tau_trig(klon)
+
+!--------Statistical Boundary Layer Closure: ALP_BL--------
+!---Profils de TKE dans et hors du thermique
+      real pbl_tke_input(klon,klev+1,nbsrf)
+      real therm_tke_max(klon,klev)                          ! Profil de TKE dans les thermiques
+      real env_tke_max(klon,klev)                            ! Profil de TKE dans l'environnement
+
+
+!cc fin nrlmd le 10/04/2012
+
+! Variables locales pour la couche limite (al1):
+!
+!Al1      REAL pblh(klon)           ! Hauteur de couche limite
+!Al1      SAVE pblh
+!34EK
+!
+! Variables locales:
+!
+!AA
+!AA  Pour phytrac 
+      REAL u1(klon)             ! vents dans la premiere couche U
+      REAL v1(klon)             ! vents dans la premiere couche V
+
+!@$$      LOGICAL offline           ! Controle du stockage ds "physique"
+!@$$      PARAMETER (offline=.false.)
+!@$$      INTEGER physid
+      REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
+      REAL frac_nucl(klon,klev) ! idem (nucleation)
+! RomP >>> 
+      REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
+! RomP <<<
+      INTEGER       :: iii
+      REAL          :: calday
+
+!IM cf FH pour Tiedtke 080604
+      REAL rain_tiedtke(klon),snow_tiedtke(klon)
+!
+!IM 050204 END
+      REAL devap(klon) ! evaporation et sa derivee
+      REAL dsens(klon) ! chaleur sensible et sa derivee
+
+!
+! Conditions aux limites
+!
+!
+      REAL :: day_since_equinox
+! Date de l'equinoxe de printemps
+      INTEGER, parameter :: mth_eq=3, day_eq=21
+      REAL :: jD_eq
+
+      LOGICAL, parameter :: new_orbit = .true.
+
+!
+      INTEGER lmt_pas
+      SAVE lmt_pas                ! frequence de mise a jour
+!$OMP THREADPRIVATE(lmt_pas) 
+      real zmasse(klon, llm),exner(klon, llm) 
+!     (column-density of mass of air in a cell, in kg m-2)
+      real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
+
+!IM sorties
+      REAL un_jour
+      PARAMETER(un_jour=86400.)
+!======================================================================
+!
+! Declaration des procedures appelees
+!
+      EXTERNAL angle     ! calculer angle zenithal du soleil
+      EXTERNAL alboc     ! calculer l'albedo sur ocean
+      EXTERNAL ajsec     ! ajustement sec
+      EXTERNAL conlmd    ! convection (schema LMD)
+!KE43
+      EXTERNAL conema3  ! convect4.3
+      EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
+!AA 
+      EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
+!                          ! stockage des coefficients necessaires au
+!                          ! lessivage OFF-LINE et ON-LINE
+      EXTERNAL hgardfou  ! verifier les temperatures
+      EXTERNAL nuage     ! calculer les proprietes radiatives
+!C      EXTERNAL o3cm      ! initialiser l'ozone
+      EXTERNAL orbite    ! calculer l'orbite terrestre
+      EXTERNAL phyetat0  ! lire l'etat initial de la physique
+      EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
+      EXTERNAL suphel    ! initialiser certaines constantes
+      EXTERNAL transp    ! transport total de l'eau et de l'energie
+      EXTERNAL ecribina  ! ecrire le fichier binaire global
+      EXTERNAL ecribins  ! ecrire le fichier binaire global
+      EXTERNAL ecrirega  ! ecrire le fichier binaire regional
+      EXTERNAL ecriregs  ! ecrire le fichier binaire regional
+!IM
+      EXTERNAL haut2bas  !variables de haut en bas
+      EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression
+      EXTERNAL undefSTD      !somme les valeurs definies d'1 var a 1 niveau de pression
+!     EXTERNAL moy_undefSTD  !moyenne d'1 var a 1 niveau de pression
+!     EXTERNAL moyglo_aire   !moyenne globale d'1 var ponderee par l'aire de la maille (moyglo_pondaire)
+!                            !par la masse/airetot (moyglo_pondaima) et la vraie masse (moyglo_pondmass)
+!
+! Variables locales
+!
+      REAL rhcl(klon,klev)    ! humiditi relative ciel clair
+      REAL dialiq(klon,klev)  ! eau liquide nuageuse
+      REAL diafra(klon,klev)  ! fraction nuageuse
+      REAL cldliq(klon,klev)  ! eau liquide nuageuse
+!
+!XXX PB 
+      REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
+!
+      REAL zxfluxt(klon, klev)
+      REAL zxfluxq(klon, klev)
+      REAL zxfluxu(klon, klev)
+      REAL zxfluxv(klon, klev)
+
+! Le rayonnement n'est pas calcule tous les pas, il faut donc
+!                      sauvegarder les sorties du rayonnement
+!ym      SAVE  heat,cool,albpla,topsw,toplw,solsw,sollw,sollwdown
+!ym      SAVE  sollwdownclr, toplwdown, toplwdownclr
+!ym      SAVE  topsw0,toplw0,solsw0,sollw0, heat0, cool0
+!
+      INTEGER itaprad
+      SAVE itaprad
+!$OMP THREADPRIVATE(itaprad)
+!
+      REAL conv_q(klon,klev) ! convergence de l'humidite (kg/kg/s)
+      REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
+
+!
+      REAL zxsnow(klon)
+      REAL zxsnow_dummy(klon)
+!
+      REAL dist, rmu0(klon), fract(klon)
+      REAL zdtime, zlongi
+!
+      CHARACTER*2 str2
+      CHARACTER*2 iqn
+!
+      REAL qcheck
+      REAL z_avant(klon), z_apres(klon), z_factor(klon)
+      LOGICAL zx_ajustq
+!
+      REAL za, zb
+      REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp
+      real zqsat(klon,klev)
+      INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq, iff
+      REAL t_coup
+      PARAMETER (t_coup=234.0)
+
+!ym A voir plus tard !!
+!ym      REAL zx_relief(iim,jjmp1)
+!ym      REAL zx_aire(iim,jjmp1)
+!
+! Grandeurs de sorties
+      REAL s_capCL(klon)
+      REAL s_oliqCL(klon), s_cteiCL(klon)
+      REAL s_trmb1(klon), s_trmb2(klon)
+      REAL s_trmb3(klon)
+!KE43
+! Variables locales pour la convection de K. Emanuel (sb):
+
+      REAL tvp(klon,klev)       ! virtual temp of lifted parcel
+      CHARACTER*40 capemaxcels  !max(CAPE)
+
+      REAL rflag(klon)          ! flag fonctionnement de convect
+      INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
+
+! -- convect43:
+      INTEGER ntra              ! nb traceurs pour convect4.3
+      REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
+      REAL dtma_con(klon),dtlcl_con(klon)
+      REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
+      REAL dplcldt(klon), dplcldr(klon)
+!?     .     condm_con(klon,klev),conda_con(klon,klev),
+!?     .     mr_con(klon,klev),ep_con(klon,klev)
+!?     .    ,sadiab(klon,klev),wadiab(klon,klev)
+! --
+!34EK
+!
+! Variables du changement
+!
+! con: convection
+! lsc: condensation a grande echelle (Large-Scale-Condensation)
+! ajs: ajustement sec
+! eva: evaporation de l'eau liquide nuageuse
+! vdf: couche limite (Vertical DiFfusion)
+
+! tendance nulles
+      REAL du0(klon,klev),dv0(klon,klev),dq0(klon,klev),dql0(klon,klev)
+
+!
+!********************************************************
+!     declarations
+      
+!********************************************************
+!IM 081204 END
+!
+      REAL pen_u(klon,klev), pen_d(klon,klev)
+      REAL pde_u(klon,klev), pde_d(klon,klev)
+      INTEGER kcbot(klon), kctop(klon), kdtop(klon)
+!
+      REAL ratqsc(klon,klev)
+      real ratqsbas,ratqshaut,tau_ratqs
+      save ratqsbas,ratqshaut,tau_ratqs
+!$OMP THREADPRIVATE(ratqsbas,ratqshaut,tau_ratqs)
+      real zpt_conv(klon,klev)
+
+! Parametres lies au nouveau schema de nuages (SB, PDF)
+      real fact_cldcon
+      real facttemps
+      logical ok_newmicro
+      save ok_newmicro
+!$OMP THREADPRIVATE(ok_newmicro)
+      save fact_cldcon,facttemps
+!$OMP THREADPRIVATE(fact_cldcon,facttemps)
+
+      integer iflag_cldcon
+      save iflag_cldcon
+!$OMP THREADPRIVATE(iflag_cldcon)
+      logical ptconv(klon,klev)
+!IM cf. AM 081204 BEG
+      logical ptconvth(klon,klev)
+!IM cf. AM 081204 END
+!
+! Variables liees a l'ecriture de la bande histoire physique
+!
+!======================================================================
+!
+!IM cf. AM 081204 BEG
+!   declarations pour sortir sur une sous-region
+      integer imin_ins,imax_ins,jmin_ins,jmax_ins
+      save imin_ins,imax_ins,jmin_ins,jmax_ins
+!$OMP THREADPRIVATE(imin_ins,imax_ins,jmin_ins,jmax_ins)
+!      real lonmin_ins,lonmax_ins,latmin_ins
+!     s  ,latmax_ins
+!     data lonmin_ins,lonmax_ins,latmin_ins
+!    s  ,latmax_ins/
+! valeurs initiales     s   -5.,20.,41.,55./   
+!    s   100.,130.,-20.,20./
+!    s   -180.,180.,-90.,90./
+!======================================================================
+!IM cf. AM 081204 END
+
+!
+      integer itau_w   ! pas de temps ecriture = itap + itau_phy
+!
+!
+! Variables locales pour effectuer les appels en serie
+!
+!IM RH a 2m (la surface)
+      REAL Lheat
+
+      INTEGER        length
+      PARAMETER    ( length = 100 )
+      REAL tabcntr0( length       )
+!
+      INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev)
+!IM
+      INTEGER ndex2d1(iwmax)
+!
+!IM AMIP2 BEG
+      REAL moyglo, mountor
+!IM 141004 BEG
+      REAL zustrdr(klon), zvstrdr(klon)
+      REAL zustrli(klon), zvstrli(klon)
+      REAL zustrph(klon), zvstrph(klon)
+      REAL zustrhi(klon), zvstrhi(klon)
+      REAL aam, torsfc
+!IM 141004 END
+!IM 190504 BEG
+      INTEGER ij, imp1jmp1
+      PARAMETER(imp1jmp1=(iim+1)*jjmp1)
+!ym A voir plus tard
+      REAL zx_tmp(imp1jmp1), airedyn(iim+1,jjmp1)
+      REAL padyn(iim+1,jjmp1,klev+1)
+      REAL dudyn(iim+1,jjmp1,klev)
+      REAL rlatdyn(iim+1,jjmp1)
+!IM 190504 END
+      LOGICAL ok_msk
+      REAL msk(klon)
+!IM 
+      REAL airetot, pi
+!ym A voir plus tard
+!ym      REAL zm_wo(jjmp1, klev)
+!IM AMIP2 END
+!
+      REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
+      REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 
+      REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1)
+      REAL(KIND=8) zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D 
+      REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
+      REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
+!
+      INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
+      INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
+      SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
+      SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
+!$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
+!$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
+!$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
+!
+!IM 280405 BEG
+      INTEGER nid_bilKPins, nid_bilKPave
+      SAVE nid_bilKPins, nid_bilKPave
+!$OMP THREADPRIVATE(nid_bilKPins, nid_bilKPave)
+!
+      REAL ve_lay(klon,klev) ! transport meri. de l'energie a chaque niveau vert.
+      REAL vq_lay(klon,klev) ! transport meri. de l'eau a chaque niveau vert.
+      REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert.
+      REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert.
+!
+      INTEGER nhori, nvert, nvert1, nvert3
+      REAL zsto, zsto1, zsto2
+      REAL zstophy, zstorad, zstohf, zstoday, zstomth, zout
+      REAL zcals(napisccp), zcalh(napisccp), zoutj(napisccp)
+      REAL zout_isccp(napisccp)
+      SAVE zcals, zcalh, zoutj, zout_isccp
+!$OMP THREADPRIVATE(zcals, zcalh, zoutj, zout_isccp)
+
+      real zjulian
+      save zjulian
+!$OMP THREADPRIVATE(zjulian)
+
+      character*20 modname
+      character*80 abort_message
+      logical ok_sync
+      real date0
+      integer idayref
+
+! essai writephys
+      integer fid_day, fid_mth, fid_ins
+      parameter (fid_ins = 1, fid_day = 2, fid_mth = 3) 
+      integer prof2d_on, prof3d_on, prof2d_av, prof3d_av
+      parameter (prof2d_on = 1, prof3d_on = 2, &
+                 prof2d_av = 3, prof3d_av = 4)
+      character*30 nom_fichier
+      character*40 varname
+      character*40 vartitle
+      character*20 varunits
+!     Variables liees au bilan d'energie et d'enthalpi
+      REAL ztsol(klon)
+      REAL      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
+              , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
+      SAVE      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
+              , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
+!$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
+!$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
+      REAL      d_h_vcol, d_h_dair, 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*15 ztit
+      INTEGER   ip_ebil  ! PRINT level for energy conserv. diag.
+      SAVE      ip_ebil
+      DATA      ip_ebil/0/
+!$OMP THREADPRIVATE(ip_ebil)
+      INTEGER   if_ebil ! level for energy conserv. dignostics
+      SAVE      if_ebil
+!$OMP THREADPRIVATE(if_ebil)
+!+jld ec_conser
+      REAL ZRCPD
+!-jld ec_conser
+      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
+      REAL cldtaupi(klon,klev)  ! Cloud optical thickness for pre-industrial (pi) aerosols
+
+
+      REAL re_top(klon), fl_top(klon) ! CDR at top of liquid water clouds
+
+      ! Aerosol optical properties
+      CHARACTER*4, DIMENSION(naero_grp) :: rfname 
+      REAL, DIMENSION(klon)          :: aerindex     ! POLDER aerosol index
+      REAL, DIMENSION(klon,klev)     :: mass_solu_aero    ! total mass concentration for all soluble aerosols[ug/m3]
+      REAL, DIMENSION(klon,klev)     :: mass_solu_aero_pi ! - " - (pre-industrial value)
+      INTEGER :: naero ! aerosol species 
+
+      ! Parameters
+      LOGICAL ok_ade, ok_aie    ! Apply aerosol (in)direct effects or not
+      LOGICAL ok_cdnc          ! ok cloud droplet number concentration (O. Boucher 01-2013)
+      REAL bl95_b0, bl95_b1   ! Parameter in Boucher and Lohmann (1995)
+      SAVE ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1
+!$OMP THREADPRIVATE(ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1)
+      LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
+                                      ! false : lecture des aerosol dans un fichier
+!$OMP THREADPRIVATE(aerosol_couple)    
+      INTEGER, SAVE :: flag_aerosol 
+!$OMP THREADPRIVATE(flag_aerosol) 
+      LOGICAL, SAVE :: new_aod
+!$OMP THREADPRIVATE(new_aod) 
+!
+!--STRAT AEROSOL
+      LOGICAL, SAVE :: flag_aerosol_strat
+!$OMP THREADPRIVATE(flag_aerosol_strat)
+!c-fin STRAT AEROSOL
+!
+! Declaration des constantes et des fonctions thermodynamiques
+!
+      LOGICAL,SAVE :: first=.true.
+!$OMP THREADPRIVATE(first)
+
+      integer iunit
+
+      integer, save::  read_climoz ! read ozone climatology
+!     (let it keep the default OpenMP shared attribute)
+!     Allowed values are 0, 1 and 2
+!     0: do not read an ozone climatology
+!     1: read a single ozone climatology that will be used day and night
+!     2: read two ozone climatologies, the average day and night
+!     climatology and the daylight climatology
+
+      integer, save:: ncid_climoz ! NetCDF file containing ozone climatologies
+!     (let it keep the default OpenMP shared attribute)
+
+      real, pointer, save:: press_climoz(:)
+!     (let it keep the default OpenMP shared attribute)
+!     edges of pressure intervals for ozone climatologies, in Pa, in strictly
+!     ascending order
+
+      integer, save:: co3i = 0
+!     time index in NetCDF file of current ozone fields
+!$OMP THREADPRIVATE(co3i) 
+
+      integer ro3i
+!     required time index in NetCDF file for the ozone fields, between 1
+!     and 360
+
+      INTEGER ierr
+#include "YOMCST.h"
+#include "YOETHF.h"
+#include "FCTTRE.h"
+!IM 100106 BEG : pouvoir sortir les ctes de la physique
+#include "conema3.h"
+#include "fisrtilp.h"
+#include "nuage.h"
+#include "compbl.h"
+!IM 100106 END : pouvoir sortir les ctes de la physique
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Declarations pour Simulateur COSP
+!============================================================
+      real :: mr_ozone(klon,klev)
+
+!IM sorties fichier 1D paramLMDZ_phy.nc
+      REAL :: zx_tmp_0d(1,1)
+      INTEGER, PARAMETER :: np=1
+      REAL,dimension(klon_glo)        :: rlat_glo
+      REAL,dimension(klon_glo)        :: rlon_glo
+      REAL gbils(1), gevap(1), gevapt(1), glat(1), gnet0(1), gnet(1)
+      REAL grain(1), gtsol(1), gt2m(1), gprw(1)
+
+!IM stations CFMIP
+      INTEGER, SAVE :: nCFMIP
+!$OMP THREADPRIVATE(nCFMIP)
+      INTEGER, PARAMETER :: npCFMIP=120
+      INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:)
+      REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:)
+!$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP) 
+      INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:)
+      REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:)
+!$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM)
+      INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:)
+!$OMP THREADPRIVATE(iGCM, jGCM)
+      logical, dimension(nfiles)            :: phys_out_filestations
+      logical, parameter :: lNMC=.FALSE.
+
+!IM betaCRF
+      REAL, SAVE :: pfree, beta_pbl, beta_free
+!$OMP THREADPRIVATE(pfree, beta_pbl, beta_free)
+      REAL, SAVE :: lon1_beta,  lon2_beta, lat1_beta, lat2_beta
+!$OMP THREADPRIVATE(lon1_beta,  lon2_beta, lat1_beta, lat2_beta)
+      LOGICAL, SAVE :: mskocean_beta
+!$OMP THREADPRIVATE(mskocean_beta)
+      REAL, dimension(klon, klev) :: beta         ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF
+      REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldfrarad    ! fraction nuageuse
+
+      INTEGER :: nbtr_tmp ! Number of tracer inside concvl
+      REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
+      integer iostat
+
+!======================================================================
+! Gestion calendrier : mise a jour du module phys_cal_mod
+!
+      CALL phys_cal_update(jD_cur,jH_cur)
+
+!======================================================================
+! Ecriture eventuelle d'un profil verticale en entree de la physique.
+! Utilise notamment en 1D mais peut etre active egalement en 3D
+! en imposant la valeur de igout.
+!======================================================================d
+      if (prt_level.ge.1) then
+          igout=klon/2+1/klon
+         write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
+         write(lunout,*) &
+       'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
+         write(lunout,*) &
+        nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys 
+
+         write(lunout,*) 'paprs, play, phi, u, v, t'
+         do k=1,klev
+            write(lunout,*) paprs(igout,k),pplay(igout,k),pphi(igout,k), &
+         u(igout,k),v(igout,k),t(igout,k)
+         enddo
+         write(lunout,*) 'ovap (g/kg),  oliq (g/kg)'
+         do k=1,klev
+            write(lunout,*) qx(igout,k,1)*1000,qx(igout,k,2)*1000.
+         enddo
+      endif
+
+!======================================================================
+
+      if (first) then 
+      
+!CR:nvelles variables convection/poches froides
+      
+      print*, '================================================='
+      print*, 'Allocation des variables locales et sauvegardees'
+      call phys_local_var_init
+!
+      pasphys=pdtphys
+!     appel a la lecture du run.def physique
+      call conf_phys(ok_journe, ok_mensuel, &
+           ok_instan, ok_hf, &
+           ok_LES, &
+           callstats, &
+           solarlong0,seuil_inversion, &
+           fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
+           iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
+           ok_ade, ok_aie, ok_cdnc, aerosol_couple,  &
+           flag_aerosol, flag_aerosol_strat, new_aod, &
+           bl95_b0, bl95_b1, &
+!     nv flags pour la convection et les poches froides
+           read_climoz, &
+           alp_offset)
+      call phys_state_var_init(read_climoz)
+      call phys_output_var_init
+      print*, '================================================='
+!
+          dnwd0=0.0
+          ftd=0.0
+          fqd=0.0
+          cin=0.
+!ym Attention pbase pas initialise dans concvl !!!!
+          pbase=0
+!IM 180608
+
+        itau_con=0
+        first=.false.
+
+      endif  ! first
+
+!ym => necessaire pour iflag_con != 2    
+      pmfd(:,:) = 0.
+      pen_u(:,:) = 0.
+      pen_d(:,:) = 0.
+      pde_d(:,:) = 0.
+      pde_u(:,:) = 0.
+      aam=0.
+
+      torsfc=0.
+      forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
+
+
+
+       modname = 'physiq'
+!IM
+      IF (ip_ebil_phy.ge.1) THEN
+        DO i=1,klon
+          zero_v(i)=0.
+        END DO 
+      END IF 
+      ok_sync=.TRUE.
+
+      IF (debut) THEN
+         CALL suphel ! initialiser constantes et parametres phys.
+      ENDIF
+
+      if(prt_level.ge.1) print*,'CONVERGENCE PHYSIQUE THERM 1 '
+
+
+!======================================================================
+! Gestion calendrier : mise a jour du module phys_cal_mod
+!
+!     CALL phys_cal_update(jD_cur,jH_cur)
+
+!
+! Si c'est le debut, il faut initialiser plusieurs choses
+!          ********
+!
+       IF (debut) THEN
+!rv
+!CRinitialisation de wght_th et lalim_conv pour la definition de la couche alimentation 
+!de la convection a partir des caracteristiques du thermique
+         wght_th(:,:)=1.
+         lalim_conv(:)=1 
+!RC
+         ustar(:,:)=0.
+         u10m(:,:)=0.
+         v10m(:,:)=0.
+         rain_con(:)=0.
+         snow_con(:)=0.
+         topswai(:)=0.
+         topswad(:)=0.
+         solswai(:)=0.
+         solswad(:)=0.
+
+         wmax_th(:)=0.
+         tau_overturning_th(:)=0.
+
+         IF (type_trac == 'inca') THEN
+            ! jg : initialisation jusqu'au ces variables sont dans restart
+            ccm(:,:,:) = 0.
+            tau_aero(:,:,:,:) = 0.
+            piz_aero(:,:,:,:) = 0.
+            cg_aero(:,:,:,:) = 0.
+         END IF
+
+         rnebcon0(:,:) = 0.0
+         clwcon0(:,:) = 0.0
+         rnebcon(:,:) = 0.0
+         clwcon(:,:) = 0.0
+
+!IM      
+         IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0.
+!
+      print*,'iflag_coupl,iflag_clos,iflag_wake', &
+         iflag_coupl,iflag_clos,iflag_wake
+      print*,'CYCLE_DIURNE', cycle_diurne
+!
+      IF (iflag_con.EQ.2.AND.iflag_cldcon.GT.-1) THEN
+         abort_message = 'Tiedtke needs iflag_cldcon=-2 or -1'
+         CALL abort_gcm (modname,abort_message,1)
+      ENDIF
+!
+      IF(ok_isccp.AND.iflag_con.LE.2) THEN
+         abort_message = 'ISCCP-like outputs may be available for KE' // &
+     '(iflag_con >= 3); for Tiedtke (iflag_con=-2) put ok_isccp=n'
+         CALL abort_gcm (modname,abort_message,1)
+      ENDIF
+!
+! Initialiser les compteurs:
+!
+         itap    = 0
+         itaprad = 0
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! Un petit travail \`a faire ici.
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+         if (iflag_pbl>1) then
+             PRINT*, "Using method MELLOR&YAMADA" 
+         endif
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! FH 2008/05/02 changement lie a la lecture de nbapp_rad dans phylmd plutot que
+! dyn3d
+! Attention : la version precedente n'etait pas tres propre.
+! Il se peut qu'il faille prendre une valeur differente de nbapp_rad
+! pour obtenir le meme resultat.
+         dtime=pdtphys
+         radpas = NINT( 86400./dtime/nbapp_rad)
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+         CALL phyetat0 ("startphy.nc",clesphy0,tabcntr0)
+         IF (klon_glo==1) THEN
+         coefh=0. ; coefm=0. ; pbl_tke=0.
+         coefh(:,2,:)=1.e-2 ; coefm(:,2,:)=1.e-2 ; pbl_tke(:,2,:)=1.e-2
+         PRINT*,'FH WARNING : lignes a supprimer'
+         ENDIF
+!IM begin
+          print*,'physiq: clwcon rnebcon ratqs',clwcon(1,1),rnebcon(1,1) &
+      ,ratqs(1,1)
+!IM end
+
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! on remet le calendrier a zero
+!
+         IF (raz_date .eq. 1) THEN
+           itau_phy = 0
+         ENDIF
+
+!IM cf. AM 081204 BEG
+         PRINT*,'cycle_diurne3 =',cycle_diurne
+!IM cf. AM 081204 END
+!
+         CALL printflag( tabcntr0,radpas,ok_journe, &
+                          ok_instan, ok_region )
+!
+         IF (ABS(dtime-pdtphys).GT.0.001) THEN
+            WRITE(lunout,*) 'Pas physique n est pas correct',dtime, &
+                              pdtphys
+            abort_message='Pas physique n est pas correct '
+!           call abort_gcm(modname,abort_message,1)
+            dtime=pdtphys
+         ENDIF
+         IF (nlon .NE. klon) THEN
+            WRITE(lunout,*)'nlon et klon ne sont pas coherents', nlon,  &
+                            klon
+            abort_message='nlon et klon ne sont pas coherents'
+            call abort_gcm(modname,abort_message,1)
+         ENDIF
+         IF (nlev .NE. klev) THEN
+            WRITE(lunout,*)'nlev et klev ne sont pas coherents', nlev, &
+                             klev
+            abort_message='nlev et klev ne sont pas coherents'
+            call abort_gcm(modname,abort_message,1)
+         ENDIF
+!
+         IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN 
+           WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant'
+           WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne"
+           abort_message='Nbre d appels au rayonnement insuffisant'
+           call abort_gcm(modname,abort_message,1)
+         ENDIF
+         WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
+         WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
+                         ok_cvl
+!
+!KE43
+! Initialisation pour la convection de K.E. (sb):
+         IF (iflag_con.GE.3) THEN
+
+         WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3  "
+         WRITE(lunout,*) &
+            "On va utiliser le melange convectif des traceurs qui"
+         WRITE(lunout,*)"est calcule dans convect4.3"
+         WRITE(lunout,*)" !!! penser aux logical flags de phytrac"
+
+          DO i = 1, klon
+           ema_cbmf(i) = 0.
+           ema_pcb(i)  = 0.
+           ema_pct(i)  = 0.
+!          ema_workcbmf(i) = 0.
+          ENDDO
+!IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG
+          DO i = 1, klon
+           ibas_con(i) = 1
+           itop_con(i) = 1
+          ENDDO
+!IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>END
+!===============================================================================
+!CR:04.12.07: initialisations poches froides
+! Controle de ALE et ALP pour la fermeture convective (jyg)
+          if (iflag_wake>=1) then
+            CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr &
+                        ,alp_bl_prescr, ale_bl_prescr)
+! 11/09/06 rajout initialisation ALE et ALP du wake et PBL(YU)
+!        print*,'apres ini_wake iflag_cldcon=', iflag_cldcon
+          endif
+
+        do i = 1,klon
+         Ale_bl(i)=0.
+         Alp_bl(i)=0.
+        enddo
+
+!================================================================================
+!IM stations CFMIP
+      nCFMIP=npCFMIP
+      OPEN(98,file='npCFMIP_param.data',status='old', &
+                form='formatted',iostat=iostat)
+            if (iostat == 0) then
+      READ(98,*,end=998) nCFMIP
+998   CONTINUE
+      CLOSE(98)
+      CONTINUE
+      IF(nCFMIP.GT.npCFMIP) THEN
+       print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler'
+       CALL abort
+      else
+       print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP
+      ENDIF
+
+!
+      ALLOCATE(tabCFMIP(nCFMIP))
+      ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP))
+      ALLOCATE(tabijGCM(nCFMIP))
+      ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP))
+      ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP))
+!
+! lecture des nCFMIP stations CFMIP, de leur numero 
+! et des coordonnees geographiques lonCFMIP, latCFMIP
+!
+         CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP,  &
+      lonCFMIP, latCFMIP)
+!
+! identification des
+! 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ
+! 2) indices points tabijGCM de la grille physique 1d sur klon points
+! 3) indices iGCM, jGCM de la grille physique 2d
+!
+         CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP, &
+      tabijGCM, lonGCM, latGCM, iGCM, jGCM)
+!
+            else
+               ALLOCATE(tabijGCM(0))
+               ALLOCATE(lonGCM(0), latGCM(0))
+               ALLOCATE(iGCM(0), jGCM(0))
+            end if
+         else
+            ALLOCATE(tabijGCM(0))
+            ALLOCATE(lonGCM(0), latGCM(0))
+            ALLOCATE(iGCM(0), jGCM(0))
+         ENDIF
+ 
+           DO i=1,klon
+             rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
+           ENDDO
+
+!34EK
+         IF (ok_orodr) THEN
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! FH sans doute a enlever de finitivement ou, si on le garde, l'activer
+! justement quand ok_orodr = false.
+! ce rugoro est utilise par la couche limite et fait double emploi
+! avec les param\'etrisations sp\'ecifiques de Francois Lott.
+!           DO i=1,klon
+!             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
+!           ENDDO
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+           IF (ok_strato) THEN
+             CALL SUGWD_strato(klon,klev,paprs,pplay)
+           ELSE
+             CALL SUGWD(klon,klev,paprs,pplay)
+           ENDIF
+           
+           DO i=1,klon
+             zuthe(i)=0.
+             zvthe(i)=0.
+             if(zstd(i).gt.10.)then
+               zuthe(i)=(1.-zgam(i))*cos(zthe(i))
+               zvthe(i)=(1.-zgam(i))*sin(zthe(i))
+             endif
+           ENDDO
+         ENDIF
+!
+!
+         lmt_pas = NINT(86400./dtime * 1.0)   ! tous les jours
+         WRITE(lunout,*)'La frequence de lecture surface est de ',  &
+                         lmt_pas
+!
+      capemaxcels = 't_max(X)'
+      t2mincels = 't_min(X)'
+      t2maxcels = 't_max(X)'
+      tinst = 'inst(X)'
+      tave = 'ave(X)'
+!IM cf. AM 081204 BEG
+      write(lunout,*)'AVANT HIST IFLAG_CON=',iflag_con
+!IM cf. AM 081204 END
+!
+!=============================================================
+!   Initialisation des sorties
+!=============================================================
+
+#ifdef CPP_IOIPSL
+
+!$OMP MASTER
+       call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, &
+                             iGCM,jGCM,lonGCM,latGCM, &
+                             jjmp1,nlevSTD,clevSTD,rlevSTD, &
+                             nbteta, ctetaSTD, dtime,ok_veget, &
+                             type_ocean,iflag_pbl,ok_mensuel,ok_journe, &
+                             ok_hf,ok_instan,ok_LES,ok_ade,ok_aie,  &
+                             read_climoz, phys_out_filestations, &
+                             new_aod, aerosol_couple, &
+                             flag_aerosol_strat, pdtphys, paprs, pphis,  &
+                             pplay, lmax_th, ptconv, ptconvth, ivap,  &
+                             d_t, qx, d_qx, zmasse, ok_sync)
+!$OMP END MASTER
+!$OMP BARRIER
+
+#undef histISCCP
+#ifdef histISCCP
+#include "ini_histISCCP.h"
+#endif
+
+#include "ini_histday_seri.h"
+
+#include "ini_paramLMDZ_phy.h"
+
+#endif
+         ecrit_reg = ecrit_reg * un_jour
+         ecrit_tra = ecrit_tra * un_jour
+       
+!XXXPB Positionner date0 pour initialisation de ORCHIDEE
+      date0 = jD_ref 
+      WRITE(*,*) 'physiq date0 : ',date0
+!
+!
+!
+! Prescrire l'ozone dans l'atmosphere
+!
+!
+!c         DO i = 1, klon
+!c         DO k = 1, klev
+!c            CALL o3cm (paprs(i,k)/100.,paprs(i,k+1)/100., wo(i,k),20)
+!c         ENDDO
+!c         ENDDO
+!
+      IF (type_trac == 'inca') THEN
+#ifdef INCA
+         CALL VTe(VTphysiq)
+         CALL VTb(VTinca)
+!         iii = MOD(NINT(xjour),360)
+!         calday = REAL(iii) + jH_cur
+         calday = REAL(days_elapsed) + jH_cur
+         WRITE(lunout,*) 'initial time chemini', days_elapsed, calday
+
+         CALL chemini(  &
+                         rg, &
+                         ra, &
+                         airephy, &
+                         rlat, &
+                         rlon, &
+                         presnivs, &
+                         calday, &
+                         klon, &
+                         nqtot, &
+                         pdtphys, &
+                         annee_ref, &
+                         day_ref,  &
+                         itau_phy)
+
+         CALL VTe(VTinca)
+         CALL VTb(VTphysiq)
+#endif
+      END IF
+!
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Nouvelle initialisation pour le rayonnement RRTM
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+      call iniradia(klon,klev,paprs(1,1:klev+1))
+
+!$omp single
+      if (read_climoz >= 1) then
+         call open_climoz(ncid_climoz, press_climoz)
+      END IF
+!$omp end single
+!
+!IM betaCRF
+      pfree=70000. !Pa
+      beta_pbl=1.
+      beta_free=1.
+      lon1_beta=-180.
+      lon2_beta=+180.
+      lat1_beta=90.
+      lat2_beta=-90.
+      mskocean_beta=.FALSE.
+
+      OPEN(99,file='beta_crf.data',status='old', &
+                form='formatted',err=9999)
+      READ(99,*,end=9998) pfree
+      READ(99,*,end=9998) beta_pbl
+      READ(99,*,end=9998) beta_free
+      READ(99,*,end=9998) lon1_beta
+      READ(99,*,end=9998) lon2_beta
+      READ(99,*,end=9998) lat1_beta
+      READ(99,*,end=9998) lat2_beta
+      READ(99,*,end=9998) mskocean_beta
+9998  Continue
+      CLOSE(99)
+9999  Continue
+      WRITE(*,*)'pfree=',pfree
+      WRITE(*,*)'beta_pbl=',beta_pbl
+      WRITE(*,*)'beta_free=',beta_free
+      WRITE(*,*)'lon1_beta=',lon1_beta
+      WRITE(*,*)'lon2_beta=',lon2_beta
+      WRITE(*,*)'lat1_beta=',lat1_beta
+      WRITE(*,*)'lat2_beta=',lat2_beta
+      WRITE(*,*)'mskocean_beta=',mskocean_beta
+      ENDIF
+!
+!   ****************     Fin  de   IF ( debut  )   ***************
+!
+!
+! Incrementer le compteur de la physique
+!
+      itap   = itap + 1
+!
+!
+! Update fraction of the sub-surfaces (pctsrf) and 
+! initialize, where a new fraction has appeared, all variables depending 
+! on the surface fraction.
+!
+      CALL change_srf_frac(itap, dtime, days_elapsed+1,  &
+           pctsrf, falb1, falb2, ftsol, ustar, u10m, v10m, pbl_tke)
+
+
+! Update time and other variables in Reprobus
+      IF (type_trac == 'repr') THEN
+#ifdef REPROBUS
+         CALL Init_chem_rep_xjour(jD_cur-jD_ref+day_ref)
+         print*,'xjour equivalent rjourvrai',jD_cur-jD_ref+day_ref
+         CALL Rtime(debut)
+#endif
+      END IF
+
+
+! Tendances bidons pour les processus qui n'affectent pas certaines
+! variables.
+      du0(:,:)=0.
+      dv0(:,:)=0.
+      dq0(:,:)=0.
+      dql0(:,:)=0.
+!
+! Mettre a zero des variables de sortie (pour securite)
+!
+      DO i = 1, klon
+         d_ps(i) = 0.0
+      ENDDO
+      DO k = 1, klev
+      DO i = 1, klon
+         d_t(i,k) = 0.0
+         d_u(i,k) = 0.0
+         d_v(i,k) = 0.0
+      ENDDO
+      ENDDO
+      DO iq = 1, nqtot
+      DO k = 1, klev
+      DO i = 1, klon
+         d_qx(i,k,iq) = 0.0
+      ENDDO
+      ENDDO
+      ENDDO
+      da(:,:)=0.
+      mp(:,:)=0.
+      phi(:,:,:)=0.
+! RomP >>>
+      phi2(:,:,:)=0.
+      beta_prec_fisrt(:,:)=0.
+      beta_prec(:,:)=0.
+      epmlmMm(:,:,:)=0.
+      eplaMm(:,:)=0.
+      d1a(:,:)=0.
+      dam(:,:)=0.
+          pmflxr=0.
+          pmflxs=0.
+! RomP <<<
+
+!
+! Ne pas affecter les valeurs entrees de u, v, h, et q
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         t_seri(i,k)  = t(i,k)
+         u_seri(i,k)  = u(i,k)
+         v_seri(i,k)  = v(i,k)
+         q_seri(i,k)  = qx(i,k,ivap)
+         ql_seri(i,k) = qx(i,k,iliq)
+         qs_seri(i,k) = 0.
+      ENDDO
+      ENDDO
+      tke0(:,:)=pbl_tke(:,:,is_ave)
+      IF (nqtot.GE.3) THEN
+      DO iq = 3, nqtot
+      DO  k = 1, klev
+      DO  i = 1, klon
+         tr_seri(i,k,iq-2) = qx(i,k,iq)
+      ENDDO
+      ENDDO
+      ENDDO
+      ELSE
+      DO k = 1, klev
+      DO i = 1, klon
+         tr_seri(i,k,1) = 0.0
+      ENDDO
+      ENDDO
+      ENDIF
+!
+      DO i = 1, klon
+        ztsol(i) = 0.
+      ENDDO
+      DO nsrf = 1, nbsrf
+        DO i = 1, klon
+          ztsol(i) = ztsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf)
+        ENDDO
+      ENDDO
+!IM
+      IF (ip_ebil_phy.ge.1) THEN 
+        ztit='after dynamic'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+!     Comme les tendances de la physique sont ajoute dans la dynamique,
+!     on devrait avoir que la variation d'entalpie par la dynamique
+!     est egale a la variation de la physique au pas de temps precedent.
+!     Donc la somme de ces 2 variations devrait etre nulle.
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol+d_h_vcol_phy, d_qt, 0. &
+            , fs_bound, fq_bound )
+      END IF 
+
+! Diagnostiquer la tendance dynamique
+!
+      IF (ancien_ok) THEN
+         DO k = 1, klev
+         DO i = 1, klon
+            d_u_dyn(i,k) = (u_seri(i,k)-u_ancien(i,k))/dtime
+            d_v_dyn(i,k) = (v_seri(i,k)-v_ancien(i,k))/dtime
+            d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
+            d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
+         ENDDO
+         ENDDO
+!!! RomP >>>   td dyn traceur
+       IF (nqtot.GE.3) THEN
+          DO iq = 3, nqtot
+          DO k = 1, klev
+          DO i = 1, klon
+            d_tr_dyn(i,k,iq-2)= &
+             (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime
+!         iiq=niadv(iq)
+!         print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-2),"tra:",iq,tname(iiq)
+          ENDDO
+          ENDDO
+          ENDDO
+       ENDIF
+!!! RomP <<<
+      ELSE
+         DO k = 1, klev
+         DO i = 1, klon
+            d_u_dyn(i,k) = 0.0
+            d_v_dyn(i,k) = 0.0
+            d_t_dyn(i,k) = 0.0
+            d_q_dyn(i,k) = 0.0
+         ENDDO
+         ENDDO
+!!! RomP >>>   td dyn traceur
+        IF (nqtot.GE.3) THEN
+          DO iq = 3, nqtot
+          DO k = 1, klev
+          DO i = 1, klon
+            d_tr_dyn(i,k,iq-2)= 0.0
+          ENDDO
+          ENDDO
+          ENDDO
+       ENDIF
+!!! RomP <<<
+         ancien_ok = .TRUE.
+      ENDIF
+!
+! Ajouter le geopotentiel du sol:
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         zphi(i,k) = pphi(i,k) + pphis(i)
+      ENDDO
+      ENDDO
+!
+! Verifier les temperatures
+!
+!IM BEG
+      IF (check) THEN
+       amn=MIN(ftsol(1,is_ter),1000.)
+       amx=MAX(ftsol(1,is_ter),-1000.)
+       DO i=2, klon
+        amn=MIN(ftsol(i,is_ter),amn)
+        amx=MAX(ftsol(i,is_ter),amx)
+       ENDDO
+!
+       PRINT*,' debut avant hgardfou min max ftsol',itap,amn,amx
+      ENDIF !(check) THEN
+!IM END
+!
+      CALL hgardfou(t_seri,ftsol,'debutphy')
+!
+!IM BEG
+      IF (check) THEN
+       amn=MIN(ftsol(1,is_ter),1000.)
+       amx=MAX(ftsol(1,is_ter),-1000.)
+       DO i=2, klon
+        amn=MIN(ftsol(i,is_ter),amn)
+        amx=MAX(ftsol(i,is_ter),amx)
+       ENDDO
+!
+       PRINT*,' debut apres hgardfou min max ftsol',itap,amn,amx
+      ENDIF !(check) THEN
+!IM END
+!
+! Mettre en action les conditions aux limites (albedo, sst, etc.).
+! Prescrire l'ozone et calculer l'albedo sur l'ocean.
+!
+      if (read_climoz >= 1) then
+!        Ozone from a file
+!        Update required ozone index:
+         ro3i = int((days_elapsed + jh_cur - jh_1jan) &
+              / ioget_year_len(year_cur) * 360.) + 1
+         if (ro3i == 361) ro3i = 360
+!        (This should never occur, except perhaps because of roundup
+!        error. See documentation.)
+         if (ro3i /= co3i) then
+!           Update ozone field:
+            if (read_climoz == 1) then
+               call regr_pr_av(ncid_climoz, (/"tro3"/), julien=ro3i, &
+                    press_in_edg=press_climoz, paprs=paprs, v3=wo)
+            else
+!              read_climoz == 2
+               call regr_pr_av(ncid_climoz, &
+                    (/"tro3         ", "tro3_daylight"/), &
+                    julien=ro3i, press_in_edg=press_climoz, paprs=paprs, &
+                    v3=wo)
+            end if
+!           Convert from mole fraction of ozone to column density of ozone in a
+!           cell, in kDU:
+            forall (l = 1: read_climoz) wo(:, :, l) = wo(:, :, l) &
+                 * rmo3 / rmd * zmasse / dobson_u / 1e3
+!           (By regridding ozone values for LMDZ only once every 360th of
+!           year, we have already neglected the variation of pressure in one
+!           360th of year. So do not recompute "wo" at each time step even if
+!           "zmasse" changes a little.)
+            co3i = ro3i
+         end if
+      elseif (MOD(itap-1,lmt_pas) == 0) THEN
+!        Once per day, update ozone from Royer:
+         wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1))
+      ENDIF
+!
+! Re-evaporer l'eau liquide nuageuse
+!
+      DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
+      DO i = 1, klon
+         zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
+!jyg<
+!      Attention : Arnaud a propose des formules completement differentes
+!                  A verifier !!!
+         zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
+         IF (iflag_ice_thermo .EQ. 0) THEN
+           zlsdcp=zlvdcp
+         ENDIF 
+!>jyg
+
+         zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
+         zb = MAX(0.0,ql_seri(i,k))
+         za = - MAX(0.0,ql_seri(i,k)) &
+                        * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
+         t_seri(i,k) = t_seri(i,k) + za
+         q_seri(i,k) = q_seri(i,k) + zb
+         ql_seri(i,k) = 0.0
+         d_t_eva(i,k) = za
+         d_q_eva(i,k) = zb
+      ENDDO
+      ENDDO
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after reevap'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+         call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+!
+      END IF 
+
+!
+!=========================================================================
+! Calculs de l'orbite.
+! Necessaires pour le rayonnement et la surface (calcul de l'albedo).
+! doit donc etre plac\'e avant radlwsw et pbl_surface
+
+!!!   jyg 17 Sep 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      call ymds2ju(year_cur, mth_eq, day_eq,0., jD_eq)
+      day_since_equinox = (jD_cur + jH_cur) - jD_eq
+!
+!   choix entre calcul de la longitude solaire vraie ou valeur fixee a 
+!   solarlong0
+      if (solarlong0<-999.) then
+       if (new_orbit) then
+! calcul selon la routine utilisee pour les planetes
+        call solarlong(day_since_equinox, zlongi, dist)
+       else
+! calcul selon la routine utilisee pour l'AR4
+        CALL orbite(REAL(days_elapsed+1),zlongi,dist)
+       endif
+      else
+           zlongi=solarlong0  ! longitude solaire vraie
+           dist=1.            ! distance au soleil / moyenne 
+      endif
+      if(prt_level.ge.1)                                                &
+         write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Calcul de l'ensoleillement :
+! ============================
+! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
+! l'annee a partir d'une formule analytique.
+! Cet ensoleillement est sym\'etrique autour de l'\'equateur et
+! non nul aux poles.
+      IF (abs(solarlong0-1000.)<1.e-4) then
+         call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
+      ELSE
+!  Avec ou sans cycle diurne
+         IF (cycle_diurne) THEN
+           zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
+           CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
+         ELSE
+           CALL angle(zlongi, rlat, fract, rmu0)
+         ENDIF
+      ENDIF
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+! Appel au pbl_surface : Planetary Boudary Layer et Surface
+! Cela implique tous les interactions des sous-surfaces et la partie diffusion 
+! turbulent du couche limit. 
+! 
+! Certains varibales de sorties de pbl_surface sont utiliser que pour 
+! ecriture des fihiers hist_XXXX.nc, ces sont :
+!   qsol,      zq2m,      s_pblh,  s_lcl,
+!   s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
+!   s_therm,   s_trmb1,   s_trmb2, s_trmb3,
+!   zxrugs,    zu10m,     zv10m,   fder,
+!   zxqsurf,   rh2m,      zxfluxu, zxfluxv,
+!   frugs,     agesno,    fsollw,  fsolsw,
+!   d_ts,      fevap,     fluxlat, t2m,
+!   wfbils,    wfbilo,    fluxt,   fluxu, fluxv,
+!
+! Certains ne sont pas utiliser du tout : 
+!   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
+!
+
+! Calcul de l'humidite de saturation au niveau du sol
+
+
+
+      if (iflag_pbl/=0) then
+
+      CALL pbl_surface(  &
+           dtime,     date0,     itap,    days_elapsed+1, &
+           debut,     lafin, &
+           rlon,      rlat,      rugoro,  rmu0,      &
+           rain_fall, snow_fall, solsw,   sollw,     &
+           t_seri,    q_seri,    u_seri,  v_seri,    &
+           pplay,     paprs,     pctsrf,             &
+           ftsol,falb1,falb2,ustar,u10m,v10m,wstar, &
+           sollwdown, cdragh,    cdragm,  u1,    v1, &
+           albsol1,   albsol2,   sens,    evap,   &
+           zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
+           d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
+           coefh,     coefm,     slab_wfbils,                 &
+           qsol,      zq2m,      s_pblh,  s_lcl, &
+           s_capCL,   s_oliqCL,  s_cteiCL,s_pblT, &
+           s_therm,   s_trmb1,   s_trmb2, s_trmb3, &
+           zxrugs,    zustar, zu10m,     zv10m,   fder, &
+           zxqsurf,   rh2m,      zxfluxu, zxfluxv, &
+           frugs,     agesno,    fsollw,  fsolsw, &
+           d_ts,      fevap,     fluxlat, t2m, &
+           wfbils,    wfbilo,    fluxt,   fluxu,  fluxv, &
+           dsens,     devap,     zxsnow, &
+           zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
+
+
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de la diffusion turbulente
+      CALL add_phys_tend &
+           (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
+!-----------------------------------------------------------------------------------------
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+         CALL evappot(klon,nbsrf,ftsol,pplay(:,1),cdragh, &
+            t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),evap_pot)
+
+
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after surface_main'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+         call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, sens &
+            , evap  , zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+
+      ENDIF
+! =================================================================== c
+!   Calcul de Qsat
+
+      DO k = 1, klev
+      DO i = 1, klon
+         zx_t = t_seri(i,k)
+         IF (thermcep) THEN
+            zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
+            zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
+            zx_qs  = MIN(0.5,zx_qs)
+            zcor   = 1./(1.-retv*zx_qs)
+            zx_qs  = zx_qs*zcor
+         ELSE
+           IF (zx_t.LT.t_coup) THEN
+              zx_qs = qsats(zx_t)/pplay(i,k)
+           ELSE
+              zx_qs = qsatl(zx_t)/pplay(i,k)
+           ENDIF
+         ENDIF
+         zqsat(i,k)=zx_qs
+      ENDDO
+      ENDDO
+
+      if (prt_level.ge.1) then
+      write(lunout,*) 'L   qsat (g/kg) avant clouds_gno'
+      write(lunout,'(i4,f15.4)') (k,1000.*zqsat(igout,k),k=1,klev)
+      endif
+!
+! Appeler la convection (au choix)
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         conv_q(i,k) = d_q_dyn(i,k)  &
+                     + d_q_vdf(i,k)/dtime
+         conv_t(i,k) = d_t_dyn(i,k)  &
+                     + d_t_vdf(i,k)/dtime
+      ENDDO
+      ENDDO
+      IF (check) THEN
+         za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
+         WRITE(lunout,*) "avantcon=", za
+      ENDIF
+      zx_ajustq = .FALSE.
+      IF (iflag_con.EQ.2) zx_ajustq=.TRUE.
+      IF (zx_ajustq) THEN
+         DO i = 1, klon
+            z_avant(i) = 0.0
+         ENDDO
+         DO k = 1, klev
+         DO i = 1, klon
+            z_avant(i) = z_avant(i) + (q_seri(i,k)+ql_seri(i,k)) &
+                              *(paprs(i,k)-paprs(i,k+1))/RG
+         ENDDO
+         ENDDO
+      ENDIF
+
+! Calcule de vitesse verticale a partir de flux de masse verticale
+      DO k = 1, klev
+         DO i = 1, klon
+            omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
+         END DO
+      END DO
+      if (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ', &
+           omega(igout, :)
+
+      IF (iflag_con.EQ.1) THEN
+        abort_message ='reactiver le call conlmd dans physiq.F'
+        CALL abort_gcm (modname,abort_message,1)
+!     CALL conlmd (dtime, paprs, pplay, t_seri, q_seri, conv_q,
+!    .             d_t_con, d_q_con,
+!    .             rain_con, snow_con, ibas_con, itop_con)
+      ELSE IF (iflag_con.EQ.2) THEN
+      CALL conflx(dtime, paprs, pplay, t_seri, q_seri, &
+                  conv_t, conv_q, -evap, omega, &
+                  d_t_con, d_q_con, rain_con, snow_con, &
+                  pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
+                  kcbot, kctop, kdtop, pmflxr, pmflxs)
+      d_u_con = 0.
+      d_v_con = 0.
+
+      WHERE (rain_con < 0.) rain_con = 0.
+      WHERE (snow_con < 0.) snow_con = 0.
+      DO i = 1, klon
+         ibas_con(i) = klev+1 - kcbot(i)
+         itop_con(i) = klev+1 - kctop(i)
+      ENDDO
+      ELSE IF (iflag_con.GE.3) THEN
+! nb of tracers for the KE convection:
+! MAF la partie traceurs est faite dans phytrac
+! on met ntra=1 pour limiter les appels mais on peut
+! supprimer les calculs / ftra.
+              ntra = 1
+
+!=====================================================================================
+!ajout pour la parametrisation des poches froides: 
+!calcul de t_wake et t_undi: si pas de poches froides, t_wake=t_undi=t_seri 
+      do k=1,klev
+            do i=1,klon
+             if (iflag_wake>=1) then
+             t_wake(i,k) = t_seri(i,k) &
+                 +(1-wake_s(i))*wake_deltat(i,k)
+             q_wake(i,k) = q_seri(i,k) &
+                 +(1-wake_s(i))*wake_deltaq(i,k)
+             t_undi(i,k) = t_seri(i,k) &
+                 -wake_s(i)*wake_deltat(i,k)
+             q_undi(i,k) = q_seri(i,k) &
+                 -wake_s(i)*wake_deltaq(i,k)
+             else
+             t_wake(i,k) = t_seri(i,k)
+             q_wake(i,k) = q_seri(i,k)
+             t_undi(i,k) = t_seri(i,k)
+             q_undi(i,k) = q_seri(i,k)
+             endif
+            enddo
+         enddo
+      
+!c--   Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2)
+!c--    pour le soulevement des particules dans le modele convectif
+!
+      do i = 1,klon
+        ALE(i) = 0.
+        ALP(i) = 0.
+      enddo
+!
+!calcul de ale_wake et alp_wake
+       if (iflag_wake>=1) then
+         if (itap .le. it_wape_prescr) then
+          do i = 1,klon
+           ale_wake(i) = wape_prescr
+           alp_wake(i) = fip_prescr
+          enddo
+         else
+          do i = 1,klon
+!jyg  ALE=WAPE au lieu de ALE = 1/2 Cstar**2
+!cc           ale_wake(i) = 0.5*wake_cstar(i)**2
+           ale_wake(i) = wake_pe(i)
+           alp_wake(i) = wake_fip(i)
+          enddo
+         endif
+       else
+         do i = 1,klon
+           ale_wake(i) = 0.
+           alp_wake(i) = 0.
+         enddo
+       endif
+!combinaison avec ale et alp de couche limite: constantes si pas de couplage, valeurs calculees
+!dans le thermique sinon
+       if (iflag_coupl.eq.0) then
+          if (debut.and.prt_level.gt.9) &
+                           WRITE(lunout,*)'ALE et ALP imposes'
+          do i = 1,klon
+!on ne couple que ale
+!           ALE(i) = max(ale_wake(i),Ale_bl(i))
+            ALE(i) = max(ale_wake(i),ale_bl_prescr)
+!on ne couple que alp
+!           ALP(i) = alp_wake(i) + Alp_bl(i)
+            ALP(i) = alp_wake(i) + alp_bl_prescr
+          enddo
+       else
+         IF(prt_level>9)WRITE(lunout,*)'ALE et ALP couples au thermique'
+!         do i = 1,klon
+!             ALE(i) = max(ale_wake(i),Ale_bl(i))
+! avant        ALP(i) = alp_wake(i) + Alp_bl(i)
+!             ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
+!         write(20,*)'ALE',ALE(i),Ale_bl(i),ale_wake(i)
+!         write(21,*)'ALP',ALP(i),Alp_bl(i),alp_wake(i)
+!         enddo
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Modif FH 2010/04/27. Sans doute temporaire.
+! Deux options pour le alp_offset : constant si >?? 0 ou proportionnel ??a
+! w si <0
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+       do i = 1,klon
+          ALE(i) = max(ale_wake(i),Ale_bl(i))
+!cc nrlmd le 10/04/2012----------Stochastic triggering--------------
+          if (iflag_trig_bl.ge.1) then
+             ALE(i) = max(ale_wake(i),Ale_bl_trig(i))
+          endif
+!cc fin nrlmd le 10/04/2012
+          if (alp_offset>=0.) then
+            ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
+          else
+            ALP(i)=alp_wake(i)+Alp_bl(i)+alp_offset*min(omega(i,6),0.)
+            if (alp(i)<0.) then
+               print*,'ALP ',alp(i),alp_wake(i) &
+               ,Alp_bl(i),alp_offset*min(omega(i,6),0.)
+            endif
+          endif
+       enddo
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+       endif
+       do i=1,klon
+          if (alp(i)>alp_max) then
+             IF(prt_level>9)WRITE(lunout,*)                             &
+            'WARNING SUPER ALP (seuil=',alp_max, &
+             '): i, alp, alp_wake,ale',i,alp(i),alp_wake(i),ale(i)
+             alp(i)=alp_max
+          endif
+          if (ale(i)>ale_max) then
+             IF(prt_level>9)WRITE(lunout,*)                             &
+            'WARNING SUPER ALE (seuil=',ale_max, &
+             '): i, alp, alp_wake,ale',i,ale(i),ale_wake(i),alp(i)
+             ale(i)=ale_max
+          endif
+       enddo
+
+!fin calcul ale et alp
+!=================================================================================================
+
+
+! sb, oct02:
+! Schema de convection modularise et vectorise:
+! (driver commun aux versions 3 et 4)
+!
+          IF (ok_cvl) THEN ! new driver for convectL
+
+             IF (type_trac == 'repr') THEN
+                nbtr_tmp=ntra
+             ELSE
+                nbtr_tmp=nbtr
+             END IF
+!jyg   iflag_con est dans clesphys
+!c          CALL concvl (iflag_con,iflag_clos,
+          CALL concvl (iflag_clos, &
+              dtime,paprs,pplay,t_undi,q_undi, &
+              t_wake,q_wake,wake_s, &
+              u_seri,v_seri,tr_seri,nbtr_tmp, &
+              ALE,ALP, &
+              sig1,w01, &
+              d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
+              rain_con, snow_con, ibas_con, itop_con, sigd, &
+              ema_cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwd0, &
+              Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl, &
+              pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd, &
+! RomP >>>
+!!     .        pmflxr,pmflxs,da,phi,mp,
+!!     .        ftd,fqd,lalim_conv,wght_th)
+              pmflxr,pmflxs,da,phi,mp,phi2,d1a,dam,sij,clw,elij, &
+              ftd,fqd,lalim_conv,wght_th, &
+              ev, ep,epmlmMm,eplaMm, &
+              wdtrainA,wdtrainM)
+! RomP <<<
+
+!IM begin
+!       print*,'physiq: cin pbase dnwd0 ftd fqd ',cin(1),pbase(1),
+!    .dnwd0(1,1),ftd(1,1),fqd(1,1)
+!IM end
+!IM cf. FH
+              clwcon0=qcondc
+              pmfu(:,:)=upwd(:,:)+dnwd(:,:)
+
+              do i = 1, klon
+                if (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1
+              enddo
+
+          ELSE ! ok_cvl
+
+! MAF conema3 ne contient pas les traceurs
+          CALL conema3 (dtime, &
+              paprs,pplay,t_seri,q_seri, &
+              u_seri,v_seri,tr_seri,ntra, &
+              sig1,w01, &
+              d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
+              rain_con, snow_con, ibas_con, itop_con, &
+              upwd,dnwd,dnwd0,bas,top, &
+              Ma,cape,tvp,rflag, &
+              pbase &
+              ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr &
+              ,clwcon0)
+
+          ENDIF ! ok_cvl
+
+!
+! Correction precip
+          rain_con = rain_con * cvl_corr
+          snow_con = snow_con * cvl_corr
+!
+
+           IF (.NOT. ok_gust) THEN
+           do i = 1, klon
+            wd(i)=0.0
+           enddo
+           ENDIF
+
+! =================================================================== c
+! Calcul des proprietes des nuages convectifs
+!
+
+!   calcul des proprietes des nuages convectifs
+             clwcon0(:,:)=fact_cldcon*clwcon0(:,:)
+             call clouds_gno &
+             (klon,klev,q_seri,zqsat,clwcon0,ptconv,ratqsc,rnebcon0)
+
+! =================================================================== c
+
+          DO i = 1, klon
+           itop_con(i) = min(max(itop_con(i),1),klev)
+           ibas_con(i) = min(max(ibas_con(i),1),itop_con(i))
+          ENDDO
+
+          DO i = 1, klon
+            ema_pcb(i)  = paprs(i,ibas_con(i))
+          ENDDO
+          DO i = 1, klon
+! L'idicage de itop_con peut cacher un pb potentiel
+! FH sous la dictee de JYG, CR
+            ema_pct(i)  = paprs(i,itop_con(i)+1)
+
+            if (itop_con(i).gt.klev-3) then
+              if(prt_level >= 9) then
+                write(lunout,*)'La convection monte trop haut '
+                write(lunout,*)'itop_con(,',i,',)=',itop_con(i)
+              endif
+            endif
+          ENDDO     
+      ELSE IF (iflag_con.eq.0) THEN
+          write(lunout,*) 'On n appelle pas la convection'
+          clwcon0=0.
+          rnebcon0=0.
+          d_t_con=0.
+          d_q_con=0.
+          d_u_con=0.
+          d_v_con=0.
+          rain_con=0.
+          snow_con=0.
+          bas=1
+          top=1
+      ELSE
+          WRITE(lunout,*) "iflag_con non-prevu", iflag_con
+          CALL abort
+      ENDIF
+
+!     CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri,
+!    .              d_u_con, d_v_con)
+
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de la diffusion turbulente
+      CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,'con')
+!-----------------------------------------------------------------------------------------
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after convect'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+         call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, rain_con, snow_con, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+!
+      IF (check) THEN
+          za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
+          WRITE(lunout,*)"aprescon=", za
+          zx_t = 0.0
+          za = 0.0
+          DO i = 1, klon
+            za = za + airephy(i)/REAL(klon)
+            zx_t = zx_t + (rain_con(i)+ &
+                         snow_con(i))*airephy(i)/REAL(klon)
+          ENDDO
+          zx_t = zx_t/za*dtime
+          WRITE(lunout,*)"Precip=", zx_t
+      ENDIF
+      IF (zx_ajustq) THEN
+          DO i = 1, klon
+            z_apres(i) = 0.0
+          ENDDO
+          DO k = 1, klev
+            DO i = 1, klon
+              z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k)) &
+                  *(paprs(i,k)-paprs(i,k+1))/RG
+            ENDDO
+          ENDDO
+          DO i = 1, klon
+            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime) &
+                /z_apres(i)
+          ENDDO
+          DO k = 1, klev
+            DO i = 1, klon
+              IF (z_factor(i).GT.(1.0+1.0E-08) .OR. &
+                  z_factor(i).LT.(1.0-1.0E-08)) THEN
+                  q_seri(i,k) = q_seri(i,k) * z_factor(i)
+              ENDIF
+            ENDDO
+          ENDDO
+      ENDIF
+      zx_ajustq=.FALSE.
+
+!
+!=============================================================================
+!RR:Evolution de la poche froide: on ne fait pas de separation wake/env 
+!pour la couche limite diffuse pour l instant
+!
+      if (iflag_wake>=1) then
+      DO k=1,klev
+        DO i=1,klon
+          dt_dwn(i,k)  = ftd(i,k) 
+          wdt_PBL(i,k) = 0.
+          dq_dwn(i,k)  = fqd(i,k) 
+          wdq_PBL(i,k) = 0.
+          M_dwn(i,k)   = dnwd0(i,k)
+          M_up(i,k)    = upwd(i,k)
+          dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k) 
+          udt_PBL(i,k) = 0.
+          dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
+          udq_PBL(i,k) = 0.
+        ENDDO
+      ENDDO
+
+      if (iflag_wake==2) then
+        ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
+        DO k = 1,klev
+         dt_dwn(:,k)= dt_dwn(:,k)+ &
+                  ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
+         dq_dwn(:,k)= dq_dwn(:,k)+ &
+                  ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
+        ENDDO
+      endif
+!
+!calcul caracteristiques de la poche froide
+      call calWAKE (paprs,pplay,dtime &
+                     ,t_seri,q_seri,omega &
+                     ,dt_dwn,dq_dwn,M_dwn,M_up &
+                     ,dt_a,dq_a,sigd &
+                     ,wdt_PBL,wdq_PBL &
+                     ,udt_PBL,udq_PBL &
+                     ,wake_deltat,wake_deltaq,wake_dth &
+                     ,wake_h,wake_s,wake_dens &
+                     ,wake_pe,wake_fip,wake_gfl &
+                     ,dt_wake,dq_wake &
+                     ,wake_k, t_undi,q_undi &
+                     ,wake_omgbdth,wake_dp_omgb &
+                     ,wake_dtKE,wake_dqKE &
+                     ,wake_dtPBL,wake_dqPBL &
+                     ,wake_omg,wake_dp_deltomg &
+                     ,wake_spread,wake_Cstar,wake_d_deltat_gw &
+                     ,wake_ddeltat,wake_ddeltaq)
+!
+!-----------------------------------------------------------------------------------------
+! ajout des tendances des poches froides
+! Faire rapidement disparaitre l'ancien dt_wake pour garder un d_t_wake
+! coherent avec les autres d_t_...
+      d_t_wake(:,:)=dt_wake(:,:)*dtime
+      d_q_wake(:,:)=dq_wake(:,:)*dtime
+      CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,'wake')
+!-----------------------------------------------------------------------------------------
+
+      endif
+!
+!===================================================================
+!JYG
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after wake'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+
+!      print*,'apres callwake iflag_cldcon=', iflag_cldcon
+!
+!===================================================================
+! Convection seche (thermiques ou ajustement)
+!===================================================================
+!
+       call stratocu_if(klon,klev,pctsrf,paprs, pplay,t_seri &
+       ,seuil_inversion,weak_inversion,dthmin)
+
+
+
+      d_t_ajsb(:,:)=0.
+      d_q_ajsb(:,:)=0.
+      d_t_ajs(:,:)=0.
+      d_u_ajs(:,:)=0.
+      d_v_ajs(:,:)=0.
+      d_q_ajs(:,:)=0.
+      clwcon0th(:,:)=0.
+!
+!      fm_therm(:,:)=0.
+!      entr_therm(:,:)=0.
+!      detr_therm(:,:)=0.
+!
+      IF(prt_level>9)WRITE(lunout,*) &
+          'AVANT LA CONVECTION SECHE , iflag_thermals=' &
+         ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
+      if(iflag_thermals.lt.0) then
+!  Rien
+!  ====
+         IF(prt_level>9)WRITE(lunout,*)'pas de convection'
+
+
+      else
+
+!  Thermiques
+!  ==========
+         IF(prt_level>9)WRITE(lunout,*)'JUSTE AVANT , iflag_thermals=' &
+         ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
+
+
+!cc nrlmd le 10/04/2012
+         DO k=1,klev+1
+           DO i=1,klon
+           pbl_tke_input(i,k,is_oce)=pbl_tke(i,k,is_oce)
+           pbl_tke_input(i,k,is_ter)=pbl_tke(i,k,is_ter)
+           pbl_tke_input(i,k,is_lic)=pbl_tke(i,k,is_lic)
+           pbl_tke_input(i,k,is_sic)=pbl_tke(i,k,is_sic)
+           ENDDO
+         ENDDO
+!cc fin nrlmd le 10/04/2012
+
+         if (iflag_thermals>=1) then
+         call calltherm(pdtphys &
+            ,pplay,paprs,pphi,weak_inversion &
+            ,u_seri,v_seri,t_seri,q_seri,zqsat,debut &
+            ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs &
+            ,fm_therm,entr_therm,detr_therm &
+            ,zqasc,clwcon0th,lmax_th,ratqscth &
+            ,ratqsdiff,zqsatth &
+!on rajoute ale et alp, et les caracteristiques de la couche alim
+            ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0, zw2,fraca &
+            ,ztv,zpspsk,ztla,zthl &
+!cc nrlmd le 10/04/2012
+            ,pbl_tke_input,pctsrf,omega,airephy &
+            ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0 &
+            ,n2,s2,ale_bl_stat &
+            ,therm_tke_max,env_tke_max &
+            ,alp_bl_det,alp_bl_fluct_m,alp_bl_fluct_tke &
+            ,alp_bl_conv,alp_bl_stat &
+!cc fin nrlmd le 10/04/2012
+            ,zqla,ztva )
+
+!cc nrlmd le 10/04/2012
+!-----------Stochastic triggering-----------
+      if (iflag_trig_bl.ge.1) then
+!
+        IF (prt_level .GE. 10) THEN
+         print *,'cin, ale_bl_stat, alp_bl_stat ', &
+                  cin, ale_bl_stat, alp_bl_stat
+        ENDIF
+
+!----Initialisations
+      do i=1,klon
+      proba_notrig(i)=1.
+      random_notrig(i)=1e6*ale_bl_stat(i)-int(1e6*ale_bl_stat(i))
+        if ( ale_bl_trig(i) .lt. abs(cin(i))+1.e-10 ) then 
+        tau_trig(i)=tau_trig_shallow
+        else
+        tau_trig(i)=tau_trig_deep
+        endif
+      enddo
+!
+        IF (prt_level .GE. 10) THEN
+         print *,'random_notrig, tau_trig ', &
+                  random_notrig, tau_trig
+          print *,'s_trig,s2,n2 ', &
+                   s_trig,s2,n2
+        ENDIF
+
+!----Tirage al\'eatoire et calcul de ale_bl_trig
+      do i=1,klon
+        if ( (ale_bl_stat(i) .gt. abs(cin(i))+1.e-10) )  then
+        proba_notrig(i)=(1.-exp(-s_trig/s2(i)))** &
+                        (n2(i)*dtime/tau_trig(i))
+!        print *, 'proba_notrig(i) ',proba_notrig(i)
+          if (random_notrig(i) .ge. proba_notrig(i)) then 
+          ale_bl_trig(i)=ale_bl_stat(i)
+          else
+          ale_bl_trig(i)=0.
+          endif
+        else
+        proba_notrig(i)=1.
+        random_notrig(i)=0.
+        ale_bl_trig(i)=0.
+        endif
+      enddo
+!
+        IF (prt_level .GE. 10) THEN
+         print *,'proba_notrig, ale_bl_trig ', &
+                  proba_notrig, ale_bl_trig
+        ENDIF
+
+      endif !(iflag_trig_bl)
+
+!-----------Statistical closure-----------
+      if (iflag_clos_bl.ge.1) then 
+
+        do i=1,klon
+        alp_bl(i)=alp_bl_stat(i)
+        enddo
+
+      else
+
+      alp_bl_stat(:)=0.
+
+      endif !(iflag_clos_bl)
+
+        IF (prt_level .GE. 10) THEN
+         print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
+        ENDIF
+
+!cc fin nrlmd le 10/04/2012
+
+! ----------------------------------------------------------------------
+! Transport de la TKE par les panaches thermiques.
+! FH : 2010/02/01
+!     if (iflag_pbl.eq.10) then
+!     call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
+!    s           rg,paprs,pbl_tke)
+!     endif
+! ----------------------------------------------------------------------
+!IM/FH: 2011/02/23 
+! Couplage Thermiques/Emanuel seulement si T<0
+      if (iflag_coupl==2) then
+        print*,'Couplage Thermiques/Emanuel seulement si T<0'
+        do i=1,klon
+           if (t_seri(i,lmax_th(i))>273.) then
+              Ale_bl(i)=0.
+           endif
+        enddo
+      endif
+
+      do i=1,klon
+         zmax_th(i)=pphi(i,lmax_th(i))/rg
+      enddo
+
+         endif
+
+
+!  Ajustement sec
+!  ==============
+
+! Dans le cas o\`u on active les thermiques, on fait partir l'ajustement
+! a partir du sommet des thermiques.
+! Dans le cas contraire, on demarre au niveau 1.
+
+         if (iflag_thermals.ge.13.or.iflag_thermals.eq.0) then
+
+         if(iflag_thermals.eq.0) then
+            IF(prt_level>9)WRITE(lunout,*)'ajsec'
+            limbas(:)=1
+         else
+            limbas(:)=lmax_th(:)
+         endif
+  
+! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
+! pour des test de convergence numerique.
+! Le nouveau ajsec est a priori mieux, meme pour le cas 
+! iflag_thermals = 0 (l'ancienne version peut faire des tendances
+! non nulles numeriquement pour des mailles non concernees.
+
+         if (iflag_thermals.eq.0) then
+            CALL ajsec_convV2(paprs, pplay, t_seri,q_seri &
+            , d_t_ajsb, d_q_ajsb)
+         else
+            CALL ajsec(paprs, pplay, t_seri,q_seri,limbas &
+            , d_t_ajsb, d_q_ajsb)
+         endif
+
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de l'ajustement sec ou des thermiques
+      CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,'ajsb')
+         d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
+         d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
+
+!-----------------------------------------------------------------------------------------
+
+         endif
+
+      endif
+!
+!===================================================================
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after dry_adjust'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+
+
+!-------------------------------------------------------------------------
+! Computation of ratqs, the width (normalized) of the subrid scale 
+! water distribution
+      CALL  calcratqs(klon,klev,prt_level,lunout,        &
+           iflag_ratqs,iflag_con,iflag_cldcon,pdtphys,  &
+           ratqsbas,ratqshaut,tau_ratqs,fact_cldcon,   &
+           ptconv,ptconvth,clwcon0th, rnebcon0th,     &
+           paprs,pplay,q_seri,zqsat,fm_therm, &
+           ratqs,ratqsc)
+
+
+!
+! Appeler le processus de condensation a grande echelle
+! et le processus de precipitation
+!-------------------------------------------------------------------------
+      IF (prt_level .GE.10) THEN
+       print *,' ->fisrtilp '
+      ENDIF
+!-------------------------------------------------------------------------
+      CALL fisrtilp(dtime,paprs,pplay, &
+                 t_seri, q_seri,ptconv,ratqs, &
+                 d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &
+                 rain_lsc, snow_lsc, &
+                 pfrac_impa, pfrac_nucl, pfrac_1nucl, &
+                 frac_impa, frac_nucl, beta_prec_fisrt, &
+                 prfl, psfl, rhcl,  &
+                 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon, &
+                 iflag_ice_thermo)
+
+      WHERE (rain_lsc < 0) rain_lsc = 0.
+      WHERE (snow_lsc < 0) snow_lsc = 0.
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de la diffusion turbulente
+      CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,'lsc')
+!-----------------------------------------------------------------------------------------
+      DO k = 1, klev
+      DO i = 1, klon
+         cldfra(i,k) = rneb(i,k)
+         IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
+      ENDDO
+      ENDDO
+      IF (check) THEN
+         za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
+         WRITE(lunout,*)"apresilp=", za
+         zx_t = 0.0
+         za = 0.0
+         DO i = 1, klon
+            za = za + airephy(i)/REAL(klon)
+            zx_t = zx_t + (rain_lsc(i) &
+                        + snow_lsc(i))*airephy(i)/REAL(klon)
+        ENDDO
+         zx_t = zx_t/za*dtime
+         WRITE(lunout,*)"Precip=", zx_t
+      ENDIF
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after fisrt'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, rain_lsc, snow_lsc, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+!
+!-------------------------------------------------------------------
+!  PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
+!-------------------------------------------------------------------
+
+! 1. NUAGES CONVECTIFS
+!
+!IM cf FH
+!     IF (iflag_cldcon.eq.-1) THEN ! seulement pour Tiedtke
+      IF (iflag_cldcon.le.-1) THEN ! seulement pour Tiedtke
+       snow_tiedtke=0.
+!     print*,'avant calcul de la pseudo precip '
+!     print*,'iflag_cldcon',iflag_cldcon
+       if (iflag_cldcon.eq.-1) then
+          rain_tiedtke=rain_con
+       else
+!       print*,'calcul de la pseudo precip '
+          rain_tiedtke=0.
+!         print*,'calcul de la pseudo precip 0'
+          do k=1,klev
+          do i=1,klon
+             if (d_q_con(i,k).lt.0.) then
+                rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i,k)/pdtphys &
+               *(paprs(i,k)-paprs(i,k+1))/rg
+             endif
+          enddo
+          enddo
+       endif
+!
+!     call dump2d(iim,jjm,rain_tiedtke(2:klon-1),'PSEUDO PRECIP ')
+!
+
+! Nuages diagnostiques pour Tiedtke
+      CALL diagcld1(paprs,pplay, &
+!IM cf FH  .             rain_con,snow_con,ibas_con,itop_con,
+                   rain_tiedtke,snow_tiedtke,ibas_con,itop_con, &
+                   diafra,dialiq)
+      DO k = 1, klev
+      DO i = 1, klon
+      IF (diafra(i,k).GT.cldfra(i,k)) THEN
+         cldliq(i,k) = dialiq(i,k)
+         cldfra(i,k) = diafra(i,k)
+      ENDIF
+      ENDDO
+      ENDDO
+
+      ELSE IF (iflag_cldcon.ge.3) THEN
+!  On prend pour les nuages convectifs le max du calcul de la
+!  convection et du calcul du pas de temps precedent diminue d'un facteur
+!  facttemps
+      facteur = pdtphys *facttemps
+      do k=1,klev
+         do i=1,klon
+            rnebcon(i,k)=rnebcon(i,k)*facteur
+            if (rnebcon0(i,k)*clwcon0(i,k).gt.rnebcon(i,k)*clwcon(i,k)) &
+            then
+                rnebcon(i,k)=rnebcon0(i,k)
+                clwcon(i,k)=clwcon0(i,k)
+            endif
+         enddo
+      enddo
+
+!
+!jq - introduce the aerosol direct and first indirect radiative forcings
+!jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
+      IF (flag_aerosol .gt. 0) THEN
+         IF (.NOT. aerosol_couple) &
+              CALL readaerosol_optic( &
+              debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
+              pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
+              mass_solu_aero, mass_solu_aero_pi,  &
+              tau_aero, piz_aero, cg_aero,  &
+              tausum_aero, tau3d_aero)
+      ELSE
+         tausum_aero(:,:,:) = 0.
+         tau_aero(:,:,:,:) = 0.
+         piz_aero(:,:,:,:) = 0.
+         cg_aero(:,:,:,:)  = 0.
+      ENDIF
+!
+!--STRAT AEROSOL
+!--updates tausum_aero,tau_aero,piz_aero,cg_aero
+      IF (flag_aerosol_strat) THEN
+         PRINT *,'appel a readaerosolstrat', mth_cur
+         CALL readaerosolstrato(debut)
+      ENDIF
+!--fin STRAT AEROSOL
+
+!IM calcul nuages par le simulateur ISCCP
+!
+#ifdef histISCCP
+      IF (ok_isccp) THEN
+!
+!IM lecture invtau, tautab des fichiers formattes
+!
+      IF (debut) THEN
+!$OMP MASTER
+!
+      open(99,file='tautab.formatted', FORM='FORMATTED')
+      read(99,'(f30.20)') tautab_omp
+      close(99)
+!
+      open(99,file='invtau.formatted',form='FORMATTED')
+      read(99,'(i10)') invtau_omp
+
+!     print*,'calcul_simulISCCP invtau_omp',invtau_omp
+!     write(6,'(a,8i10)') 'invtau_omp',(invtau_omp(i),i=1,100)
+
+      close(99)
+!$OMP END MASTER
+!$OMP BARRIER 
+      tautab=tautab_omp
+      invtau=invtau_omp
+!
+      ENDIF !debut
+!
+!IM appel simulateur toutes les  NINT(freq_ISCCP/dtime) heures
+       IF (MOD(itap,NINT(freq_ISCCP/dtime)).EQ.0) THEN
+#include "calcul_simulISCCP.h"
+       ENDIF !(MOD(itap,NINT(freq_ISCCP/dtime))
+      ENDIF !ok_isccp
+#endif
+
+!   On prend la somme des fractions nuageuses et des contenus en eau
+
+      if (iflag_cldcon>=5) then
+
+        do k=1,klev
+         ptconvth(:,k)=fm_therm(:,k+1)>0.
+        enddo
+
+       if (iflag_coupl==4) then
+
+! Dans le cas iflag_coupl==4, on prend la somme des convertures
+! convectives et lsc dans la partie des thermiques
+! Le controle par iflag_coupl est peut etre provisoire.
+         do k=1,klev
+            do i=1,klon
+               if (ptconv(i,k).and.ptconvth(i,k)) then
+                   cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
+                   cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
+               else if (ptconv(i,k)) then
+                   cldfra(i,k)=rnebcon(i,k)
+                   cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
+               endif
+            enddo
+         enddo
+
+         else if (iflag_coupl==5) then
+         do k=1,klev
+            do i=1,klon
+               cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
+               cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
+            enddo
+         enddo
+
+         else
+
+! Si on est sur un point touche par la convection profonde et pas
+! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse
+! de la convection profonde.
+
+!IM/FH: 2011/02/23 
+! definition des points sur lesquels ls thermiques sont actifs
+
+         do k=1,klev
+            do i=1,klon
+               if (ptconv(i,k).and. .not. ptconvth(i,k)) then
+                   cldfra(i,k)=rnebcon(i,k)
+                   cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
+               endif
+            enddo
+         enddo
+
+        endif
+
+      else
+
+! Ancienne version
+      cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
+      cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
+      endif
+
+      ENDIF
+
+!     plulsc(:)=0.
+!     do k=1,klev,-1
+!        do i=1,klon
+!              zzz=prfl(:,k)+psfl(:,k)
+!           if (.not.ptconvth.zzz.gt.0.)
+!        enddo prfl, psfl,
+!     enddo
+!
+! 2. NUAGES STARTIFORMES
+!
+      IF (ok_stratus) THEN
+      CALL diagcld2(paprs,pplay,t_seri,q_seri, diafra,dialiq)
+      DO k = 1, klev
+      DO i = 1, klon
+      IF (diafra(i,k).GT.cldfra(i,k)) THEN
+         cldliq(i,k) = dialiq(i,k)
+         cldfra(i,k) = diafra(i,k)
+      ENDIF
+      ENDDO
+      ENDDO
+      ENDIF
+!
+! Precipitation totale
+!
+      DO i = 1, klon
+         rain_fall(i) = rain_con(i) + rain_lsc(i)
+         snow_fall(i) = snow_con(i) + snow_lsc(i)
+      ENDDO
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit="after diagcld"
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+!
+! Calculer l'humidite relative pour diagnostique
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         zx_t = t_seri(i,k)
+         IF (thermcep) THEN
+            zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
+            zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
+            zx_qs  = MIN(0.5,zx_qs)
+            zcor   = 1./(1.-retv*zx_qs)
+            zx_qs  = zx_qs*zcor
+         ELSE
+           IF (zx_t.LT.t_coup) THEN
+              zx_qs = qsats(zx_t)/pplay(i,k)
+           ELSE
+              zx_qs = qsatl(zx_t)/pplay(i,k)
+           ENDIF
+         ENDIF
+         zx_rh(i,k) = q_seri(i,k)/zx_qs
+         zqsat(i,k)=zx_qs
+      ENDDO
+      ENDDO
+
+!IM Calcul temp.potentielle a 2m (tpot) et temp. potentielle 
+!   equivalente a 2m (tpote) pour diagnostique
+!
+      DO i = 1, klon
+       tpot(i)=zt2m(i)*(100000./paprs(i,1))**RKAPPA
+       IF (thermcep) THEN
+        IF(zt2m(i).LT.RTT) then
+         Lheat=RLSTT
+        ELSE
+         Lheat=RLVTT
+        ENDIF
+       ELSE
+        IF (zt2m(i).LT.RTT) THEN
+         Lheat=RLSTT
+        ELSE
+         Lheat=RLVTT
+        ENDIF
+       ENDIF
+       tpote(i) = tpot(i)*      &
+       EXP((Lheat *qsat2m(i))/(RCPD*zt2m(i)))
+      ENDDO
+
+      IF (type_trac == 'inca') THEN
+#ifdef INCA
+         CALL VTe(VTphysiq)
+         CALL VTb(VTinca)
+         calday = REAL(days_elapsed + 1) + jH_cur
+
+         call chemtime(itap+itau_phy-1, date0, dtime)
+         IF (config_inca == 'aero') THEN
+            CALL AEROSOL_METEO_CALC( &
+                 calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
+                 prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
+         END IF
+
+         zxsnow_dummy(:) = 0.0
+
+         CALL chemhook_begin (calday, &
+                                days_elapsed+1, &
+                                jH_cur, &
+                                pctsrf(1,1), &
+                                rlat, &
+                                rlon, &
+                                airephy, &
+                                paprs, &
+                                pplay, &
+                                coefh(:,:,is_ave), &
+                                pphi, &
+                                t_seri, &
+                                u, &
+                                v, &
+                                wo(:, :, 1), &
+                                q_seri, &
+                                zxtsol, &
+                                zxsnow_dummy, &
+                                solsw, &
+                                albsol1, &
+                                rain_fall, &
+                                snow_fall, &
+                                itop_con, &
+                                ibas_con, &
+                                cldfra, &
+                                iim, &
+                                jjm, &
+                                tr_seri, &
+                                ftsol, &
+                                paprs, &
+                                cdragh, &
+                                cdragm, &
+                                pctsrf, &
+                                pdtphys, &
+                                  itap)
+
+         CALL VTe(VTinca)
+         CALL VTb(VTphysiq)
+#endif 
+      END IF !type_trac = inca
+!     
+! Calculer les parametres optiques des nuages et quelques
+! parametres pour diagnostiques:
+!
+
+      IF (aerosol_couple) THEN 
+         mass_solu_aero(:,:)    = ccm(:,:,1) 
+         mass_solu_aero_pi(:,:) = ccm(:,:,2) 
+      END IF
+
+      if (ok_newmicro) then
+      CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
+                    paprs, pplay, t_seri, cldliq, cldfra, &
+                    cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
+                    flwp, fiwp, flwc, fiwc, &
+                    mass_solu_aero, mass_solu_aero_pi, &
+                    cldtaupi, re, fl, ref_liq, ref_ice) 
+      else
+      CALL nuage (paprs, pplay, &
+                  t_seri, cldliq, cldfra, cldtau, cldemi, &
+                  cldh, cldl, cldm, cldt, cldq, &
+                  ok_aie, &
+                  mass_solu_aero, mass_solu_aero_pi, &
+                  bl95_b0, bl95_b1, &
+                  cldtaupi, re, fl)
+      endif
+!
+!IM betaCRF
+!
+      cldtaurad   = cldtau
+      cldtaupirad = cldtaupi
+      cldemirad   = cldemi
+     
+!
+      if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. &
+      lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN
+!
+! global
+!
+       DO k=1, klev
+       DO i=1, klon
+        if (pplay(i,k).GE.pfree) THEN
+         beta(i,k) = beta_pbl
+        else
+         beta(i,k) = beta_free
+        endif
+        if (mskocean_beta) THEN
+         beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
+        endif
+        cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
+        cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
+        cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
+        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
+       ENDDO
+       ENDDO 
+!
+      else
+!
+! regional
+!
+       DO k=1, klev
+       DO i=1,klon
+!
+        if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. &
+            rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN
+         if (pplay(i,k).GE.pfree) THEN
+          beta(i,k) = beta_pbl
+         else
+          beta(i,k) = beta_free
+         endif
+         if (mskocean_beta) THEN
+          beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
+         endif
+        cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
+        cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
+        cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
+        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
+        endif
+!
+       ENDDO
+       ENDDO
+!
+      endif
+!
+! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
+!
+      IF (MOD(itaprad,radpas).EQ.0) THEN
+
+      DO i = 1, klon
+         albsol1(i) = falb1(i,is_oce) * pctsrf(i,is_oce) &
+                   + falb1(i,is_lic) * pctsrf(i,is_lic) &
+                   + falb1(i,is_ter) * pctsrf(i,is_ter) &
+                   + falb1(i,is_sic) * pctsrf(i,is_sic)
+         albsol2(i) = falb2(i,is_oce) * pctsrf(i,is_oce) &
+                     + falb2(i,is_lic) * pctsrf(i,is_lic) &
+                     + falb2(i,is_ter) * pctsrf(i,is_ter) &
+                     + falb2(i,is_sic) * pctsrf(i,is_sic)
+      ENDDO
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+       call writefield_phy('q_seri',q_seri,llm)
+      endif
+      
+      IF (aerosol_couple) THEN 
+#ifdef INCA
+         CALL radlwsw_inca  &
+              (kdlon,kflev,dist, rmu0, fract, solaire, &
+              paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, &
+              wo(:, :, 1), &
+              cldfrarad, cldemirad, cldtaurad, &
+              heat,heat0,cool,cool0,radsol,albpla, &
+              topsw,toplw,solsw,sollw, &
+              sollwdown, &
+              topsw0,toplw0,solsw0,sollw0, &
+              lwdn0, lwdn, lwup0, lwup,  &
+              swdn0, swdn, swup0, swup, &
+              ok_ade, ok_aie, &
+              tau_aero, piz_aero, cg_aero, &
+              topswad_aero, solswad_aero, &
+              topswad0_aero, solswad0_aero, &
+              topsw_aero, topsw0_aero, &
+              solsw_aero, solsw0_aero, &
+              cldtaupirad, &
+              topswai_aero, solswai_aero)
+            
+#endif
+      ELSE
+!
+!IM calcul radiatif pour le cas actuel
+!
+       RCO2 = RCO2_act
+       RCH4 = RCH4_act
+       RN2O = RN2O_act
+       RCFC11 = RCFC11_act
+       RCFC12 = RCFC12_act
+!
+      IF (prt_level .GE.10) THEN
+       print *,' ->radlwsw, number 1 '
+      ENDIF
+!
+         CALL radlwsw &
+              (dist, rmu0, fract,  &
+              paprs, pplay,zxtsol,albsol1, albsol2,  &
+              t_seri,q_seri,wo, &
+              cldfrarad, cldemirad, cldtaurad, &
+              ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
+              flag_aerosol_strat, &
+              tau_aero, piz_aero, cg_aero, &
+              cldtaupirad,new_aod, &
+              zqsat, flwc, fiwc, &
+              heat,heat0,cool,cool0,radsol,albpla, &
+              topsw,toplw,solsw,sollw, &
+              sollwdown, &
+              topsw0,toplw0,solsw0,sollw0, &
+              lwdn0, lwdn, lwup0, lwup,  &
+              swdn0, swdn, swup0, swup, &
+              topswad_aero, solswad_aero, &
+              topswai_aero, solswai_aero, &
+              topswad0_aero, solswad0_aero, &
+              topsw_aero, topsw0_aero, &
+              solsw_aero, solsw0_aero, &
+              topswcf_aero, solswcf_aero)
+         
+!
+!IM 2eme calcul radiatif pour le cas perturbe ou au moins un
+!IM des taux doit etre different du taux actuel
+!IM Par defaut on a les taux perturbes egaux aux taux actuels
+!
+      if (ok_4xCO2atm) then
+       if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR. &
+      RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR. &
+      RCFC12_per.NE.RCFC12_act) THEN
+!
+       RCO2 = RCO2_per
+       RCH4 = RCH4_per
+       RN2O = RN2O_per
+       RCFC11 = RCFC11_per
+       RCFC12 = RCFC12_per
+!
+      IF (prt_level .GE.10) THEN
+       print *,' ->radlwsw, number 2 '
+      ENDIF
+!
+         CALL radlwsw &
+              (dist, rmu0, fract,  &
+              paprs, pplay,zxtsol,albsol1, albsol2,  &
+              t_seri,q_seri,wo, &
+              cldfra, cldemi, cldtau, &
+              ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
+              flag_aerosol_strat, &
+              tau_aero, piz_aero, cg_aero, &
+              cldtaupi,new_aod, &
+              zqsat, flwc, fiwc, &
+              heatp,heat0p,coolp,cool0p,radsolp,albplap, &
+              topswp,toplwp,solswp,sollwp, &
+              sollwdownp, &
+              topsw0p,toplw0p,solsw0p,sollw0p, &
+              lwdn0p, lwdnp, lwup0p, lwupp,  &
+              swdn0p, swdnp, swup0p, swupp, &
+              topswad_aerop, solswad_aerop, &
+              topswai_aerop, solswai_aerop, &
+              topswad0_aerop, solswad0_aerop, &
+              topsw_aerop, topsw0_aerop, &
+              solsw_aerop, solsw0_aerop, &
+              topswcf_aerop, solswcf_aerop)
+       endif
+      endif
+!
+      ENDIF ! aerosol_couple
+      itaprad = 0
+      ENDIF ! MOD(itaprad,radpas)
+      itaprad = itaprad + 1
+
+      IF (iflag_radia.eq.0) THEN
+         IF (prt_level.ge.9) THEN
+            PRINT *,'--------------------------------------------------'
+            PRINT *,'>>>> ATTENTION rayonnement desactive pour ce cas'
+            PRINT *,'>>>>           heat et cool mis a zero '
+            PRINT *,'--------------------------------------------------'
+         END IF
+         heat=0.
+         cool=0.
+         sollw=0.   ! MPL 01032011
+         solsw=0.
+         radsol=0.
+         swup=0.    ! MPL 27102011 pour les fichiers AMMA_profiles et AMMA_scalars
+         swup0=0.
+         swdn=0.
+         swdn0=0.
+         lwup=0.
+         lwup0=0.
+         lwdn=0.
+         lwdn0=0.
+      END IF
+
+!
+! Ajouter la tendance des rayonnements (tous les pas)
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         t_seri(i,k) = t_seri(i,k) &
+                     + (heat(i,k)-cool(i,k)) * dtime/RDAY
+      ENDDO
+      ENDDO
+!
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+ 
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after rad'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , topsw, toplw, solsw, sollw, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+!
+!
+! Calculer l'hydrologie de la surface
+!
+!      CALL hydrol(dtime,pctsrf,rain_fall, snow_fall, zxevap,
+!     .            agesno, ftsol,fqsurf,fsnow, ruis)
+!
+
+!
+! Calculer le bilan du sol et la derive de temperature (couplage)
+!
+      DO i = 1, klon
+!         bils(i) = radsol(i) - sens(i) - evap(i)*RLVTT
+! a la demande de JLD
+         bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
+      ENDDO
+!
+!moddeblott(jan95)
+! Appeler le programme de parametrisation de l'orographie
+! a l'echelle sous-maille:
+!
+      IF (prt_level .GE.10) THEN
+       print *,' call orography ? ', ok_orodr
+      ENDIF
+!
+      IF (ok_orodr) THEN
+!
+!  selection des points pour lesquels le shema est actif:
+        igwd=0
+        DO i=1,klon
+        itest(i)=0
+!        IF ((zstd(i).gt.10.0)) THEN
+        IF (((zpic(i)-zmea(i)).GT.100.).AND.(zstd(i).GT.10.0)) THEN
+          itest(i)=1
+          igwd=igwd+1
+          idx(igwd)=i
+        ENDIF
+        ENDDO
+!        igwdim=MAX(1,igwd)
+!
+        IF (ok_strato) THEN
+        
+          CALL drag_noro_strato(klon,klev,dtime,paprs,pplay, &
+                         zmea,zstd, zsig, zgam, zthe,zpic,zval, &
+                         igwd,idx,itest, &
+                         t_seri, u_seri, v_seri, &
+                         zulow, zvlow, zustrdr, zvstrdr, &
+                         d_t_oro, d_u_oro, d_v_oro)
+
+       ELSE
+        CALL drag_noro(klon,klev,dtime,paprs,pplay, &
+                         zmea,zstd, zsig, zgam, zthe,zpic,zval, &
+                         igwd,idx,itest, &
+                         t_seri, u_seri, v_seri, &
+                         zulow, zvlow, zustrdr, zvstrdr, &
+                         d_t_oro, d_u_oro, d_v_oro)
+       ENDIF
+!
+!  ajout des tendances
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de la trainee de l'orographie
+      CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,'oro')
+!-----------------------------------------------------------------------------------------
+!
+      ENDIF ! fin de test sur ok_orodr
+!
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+      
+      IF (ok_orolf) THEN
+!
+!  selection des points pour lesquels le shema est actif:
+        igwd=0
+        DO i=1,klon
+        itest(i)=0
+        IF ((zpic(i)-zmea(i)).GT.100.) THEN
+          itest(i)=1
+          igwd=igwd+1
+          idx(igwd)=i
+        ENDIF
+        ENDDO
+!        igwdim=MAX(1,igwd)
+!
+        IF (ok_strato) THEN
+
+          CALL lift_noro_strato(klon,klev,dtime,paprs,pplay, &
+                         rlat,zmea,zstd,zpic,zgam,zthe,zpic,zval, &
+                         igwd,idx,itest, &
+                         t_seri, u_seri, v_seri, &
+                         zulow, zvlow, zustrli, zvstrli, &
+                         d_t_lif, d_u_lif, d_v_lif               )
+        
+        ELSE
+          CALL lift_noro(klon,klev,dtime,paprs,pplay, &
+                         rlat,zmea,zstd,zpic, &
+                         itest, &
+                         t_seri, u_seri, v_seri, &
+                         zulow, zvlow, zustrli, zvstrli, &
+                         d_t_lif, d_u_lif, d_v_lif)
+       ENDIF
+!   
+!-----------------------------------------------------------------------------------------
+! ajout des tendances de la portance de l'orographie
+      CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,'lif')
+!-----------------------------------------------------------------------------------------
+!
+      ENDIF ! fin de test sur ok_orolf
+!  HINES GWD PARAMETRIZATION
+
+       IF (ok_hines) then
+
+         CALL hines_gwd(klon,klev,dtime,paprs,pplay, &
+                        rlat,t_seri,u_seri,v_seri, &
+                        zustrhi,zvstrhi, &
+                        d_t_hin, d_u_hin, d_v_hin)
+!
+!  ajout des tendances
+        CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin')
+
+      ENDIF
+!
+
+!
+!IM cf. FLott BEG
+! STRESS NECESSAIRES: TOUTE LA PHYSIQUE
+
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+	call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+      DO i = 1, klon
+        zustrph(i)=0.
+        zvstrph(i)=0.
+      ENDDO
+      DO k = 1, klev
+      DO i = 1, klon
+       zustrph(i)=zustrph(i)+(u_seri(i,k)-u(i,k))/dtime* &
+                  (paprs(i,k)-paprs(i,k+1))/rg
+       zvstrph(i)=zvstrph(i)+(v_seri(i,k)-v(i,k))/dtime* &
+                  (paprs(i,k)-paprs(i,k+1))/rg
+      ENDDO
+      ENDDO
+!
+!IM calcul composantes axiales du moment angulaire et couple des montagnes
+!
+      IF (is_sequential .and. ok_orodr) THEN 
+        CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, &
+                       ra,rg,romega, &
+                       rlat,rlon,pphis, &
+                       zustrdr,zustrli,zustrph, &
+                       zvstrdr,zvstrli,zvstrph, &
+                       paprs,u,v, &
+                       aam, torsfc)
+       ENDIF
+!IM cf. FLott END
+!IM
+      IF (ip_ebil_phy.ge.2) THEN 
+        ztit='after orography'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+         call diagphy(airephy,ztit,ip_ebil_phy &
+            , zero_v, zero_v, zero_v, zero_v, zero_v &
+            , zero_v, zero_v, zero_v, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+      END IF 
+!
+!
+!====================================================================
+! Interface Simulateur COSP (Calipso, ISCCP, MISR, ..)
+!====================================================================
+! Abderrahmane 24.08.09
+
+      IF (ok_cosp) THEN
+! adeclarer 
+#ifdef CPP_COSP
+       IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
+
+       print*,'freq_cosp',freq_cosp
+          mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
+!       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
+!     s        ref_liq,ref_ice
+          call phys_cosp(itap,dtime,freq_cosp, &
+                         ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
+                         ecrit_mth,ecrit_day,ecrit_hf, &
+                         klon,klev,rlon,rlat,presnivs,overlap, &
+                         ref_liq,ref_ice, &
+                         pctsrf(:,is_ter)+pctsrf(:,is_lic), &
+                         zu10m,zv10m,pphis, &
+                         zphi,paprs(:,1:klev),pplay,zxtsol,t_seri, &
+                         qx(:,:,ivap),zx_rh,cldfra,rnebcon,flwc,fiwc, &
+                         prfl(:,1:klev),psfl(:,1:klev), &
+                         pmflxr(:,1:klev),pmflxs(:,1:klev), &
+                         mr_ozone,cldtau, cldemi)
+
+!     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
+!     L          cfaddbze,clcalipso2,dbze,cltlidarradar,
+!     M          clMISR,
+!     R          clisccp2,boxtauisccp,boxptopisccp,tclisccp,ctpisccp,
+!     I          tauisccp,albisccp,meantbisccp,meantbclrisccp)
+
+         ENDIF
+
+#endif
+       ENDIF  !ok_cosp
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!AA
+!AA Installation de l'interface online-offline pour traceurs
+!AA
+!====================================================================
+!   Calcul  des tendances traceurs
+!====================================================================
+!
+
+       IF (type_trac=='repr') THEN
+          sh_in(:,:) = q_seri(:,:)
+       ELSE
+          sh_in(:,:) = qx(:,:,ivap)
+       END IF
+
+      call phytrac ( &
+           itap,     days_elapsed+1,    jH_cur,   debut, &
+           lafin,    dtime,     u, v,     t, &
+           paprs,    pplay,     pmfu,     pmfd, &
+           pen_u,    pde_u,     pen_d,    pde_d, &
+           cdragh,   coefh(:,:,is_ave),   fm_therm, entr_therm, &
+           u1,       v1,        ftsol,    pctsrf, &
+           zustar,   zu10m,     zv10m, &
+           wstar(:,is_ave),    ale_bl,         ale_wake, &
+           rlat,     rlon, &
+           frac_impa,frac_nucl, beta_prec_fisrt,beta_prec, &
+           presnivs, pphis,     pphi,     albsol1, &
+           sh_in,    rhcl,      cldfra,   rneb, &
+           diafra,   cldliq,    itop_con, ibas_con, &
+           pmflxr,   pmflxs,    prfl,     psfl, &
+           da,       phi,       mp,       upwd, &
+           phi2,     d1a,       dam,      sij, &        !<<RomP
+           wdtrainA, wdtrainM,  sigd,     clw,elij, &   !<<RomP
+           ev,       ep,        epmlmMm,  eplaMm, &     !<<RomP
+           dnwd,     aerosol_couple,      flxmass_w, &
+           tau_aero, piz_aero,  cg_aero,  ccm, &
+           rfname, &
+           d_tr_dyn, &                                 !<<RomP
+           tr_seri)
+
+      IF (offline) THEN
+
+       IF (prt_level.ge.9) &
+          print*,'Attention on met a 0 les thermiques pour phystoke'
+	 call phystokenc ( &
+                         nlon,klev,pdtphys,rlon,rlat, &
+                         t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
+                         fm_therm,entr_therm, &
+                         cdragh,coefh(:,:,is_ave),u1,v1,ftsol,pctsrf, &
+                         frac_impa, frac_nucl, &
+                         pphis,airephy,dtime,itap, &
+                         qx(:,:,ivap),da,phi,mp,upwd,dnwd)
+
+
+      ENDIF
+
+!
+! Calculer le transport de l'eau et de l'energie (diagnostique)
+!
+      CALL transp (paprs,zxtsol, &
+                         t_seri, q_seri, u_seri, v_seri, zphi, &
+                         ve, vq, ue, uq)
+!
+!IM global posePB BEG
+      IF(1.EQ.0) THEN
+!
+      CALL transp_lay (paprs,zxtsol, &
+                         t_seri, q_seri, u_seri, v_seri, zphi, &
+                         ve_lay, vq_lay, ue_lay, uq_lay)
+!
+      ENDIF !(1.EQ.0) THEN
+!IM global posePB END
+! Accumuler les variables a stocker dans les fichiers histoire:
+!
+
+!================================================================
+! Conversion of kinetic and potential energy into heat, for
+! parameterisation of subgrid-scale motions
+!================================================================
+
+      d_t_ec(:,:)=0.
+      forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
+      CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap), &
+              u_seri,v_seri,t_seri,q_seri,pbl_tke(:,:,is_ave)-tke0(:,:), &
+              zmasse,exner,d_t_ec)
+      t_seri(:,:)=t_seri(:,:)+d_t_ec(:,:)
+
+!IM
+      IF (ip_ebil_phy.ge.1) THEN 
+        ztit='after physic'
+        CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
+            , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
+            , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
+!     Comme les tendances de la physique sont ajoute dans la dynamique,
+!     on devrait avoir que la variation d'entalpie par la dynamique
+!     est egale a la variation de la physique au pas de temps precedent.
+!     Donc la somme de ces 2 variations devrait etre nulle.
+
+        call diagphy(airephy,ztit,ip_ebil_phy &
+            , topsw, toplw, solsw, sollw, sens &
+            , evap, rain_fall, snow_fall, ztsol &
+            , d_h_vcol, d_qt, d_ec &
+            , fs_bound, fq_bound )
+!
+      d_h_vcol_phy=d_h_vcol
+!
+      END IF 
+!
+!=======================================================================
+!   SORTIES
+!=======================================================================
+
+!IM Interpolation sur les niveaux de pression du NMC
+!   -------------------------------------------------
+!
+#include "calcul_STDlev.h"
+!
+! slp sea level pressure
+      slp(:) = paprs(:,1)*exp(pphis(:)/(RD*t_seri(:,1)))
+!
+!cc prw = eau precipitable
+      DO i = 1, klon
+       prw(i) = 0.
+       DO k = 1, klev
+        prw(i) = prw(i) + &
+                 q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
+       ENDDO
+      ENDDO
+!
+!IM initialisation + calculs divers diag AMIP2
+!
+#include "calcul_divers.h"
+!
+      IF (type_trac == 'inca') THEN
+#ifdef INCA
+         CALL VTe(VTphysiq)
+         CALL VTb(VTinca)
+
+         CALL chemhook_end ( &
+                              dtime, &
+                              pplay, &
+                              t_seri, &
+                              tr_seri, &
+                              nbtr, &
+                              paprs, &
+                              q_seri, &
+                              airephy, &
+                              pphi, &
+                              pphis, &
+                              zx_rh)
+
+         CALL VTe(VTinca)
+         CALL VTb(VTphysiq)
+#endif
+      END IF
+
+
+!
+! Convertir les incrementations en tendances
+!
+      IF (prt_level .GE.10) THEN
+        print *,'Convertir les incrementations en tendances '
+      ENDIF
+!
+      if (mydebug) then
+        call writefield_phy('u_seri',u_seri,llm)
+        call writefield_phy('v_seri',v_seri,llm)
+        call writefield_phy('t_seri',t_seri,llm)
+        call writefield_phy('q_seri',q_seri,llm)
+      endif
+
+      DO k = 1, klev
+      DO i = 1, klon
+         d_u(i,k) = ( u_seri(i,k) - u(i,k) ) / dtime
+         d_v(i,k) = ( v_seri(i,k) - v(i,k) ) / dtime
+         d_t(i,k) = ( t_seri(i,k)-t(i,k) ) / dtime
+         d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime
+         d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime
+      ENDDO
+      ENDDO
+!
+      IF (nqtot.GE.3) THEN
+      DO iq = 3, nqtot
+      DO  k = 1, klev
+      DO  i = 1, klon
+         d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime
+      ENDDO
+      ENDDO
+      ENDDO
+      ENDIF
+!
+!IM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano
+!IM global posePB#include "write_bilKP_ins.h"
+!IM global posePB#include "write_bilKP_ave.h"
+!
+
+! Sauvegarder les valeurs de t et q a la fin de la physique:
+!
+      DO k = 1, klev
+      DO i = 1, klon
+         u_ancien(i,k) = u_seri(i,k)
+         v_ancien(i,k) = v_seri(i,k)
+         t_ancien(i,k) = t_seri(i,k)
+         q_ancien(i,k) = q_seri(i,k)
+      ENDDO
+      ENDDO
+
+!!! RomP >>>
+      IF (nqtot.GE.3) THEN
+        DO iq = 3, nqtot
+        DO k = 1, klev
+        DO i = 1, klon
+           tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
+        ENDDO
+        ENDDO
+        ENDDO
+      ENDIF
+!!! RomP <<<
+!==========================================================================
+! Sorties des tendances pour un point particulier
+! a utiliser en 1D, avec igout=1 ou en 3D sur un point particulier
+! pour le debug
+! La valeur de igout est attribuee plus haut dans le programme
+!==========================================================================
+
+      if (prt_level.ge.1) then
+      write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
+      write(lunout,*) &
+       'nlon,klev,nqtot,debut,lafin,jD_cur, jH_cur, pdtphys pct tlos'
+      write(lunout,*) &
+        nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur ,pdtphys, &
+        pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce), &
+        pctsrf(igout,is_sic)
+      write(lunout,*) 'd_t_dyn,d_t_con,d_t_lsc,d_t_ajsb,d_t_ajs,d_t_eva'
+      do k=1,klev
+         write(lunout,*) d_t_dyn(igout,k),d_t_con(igout,k), &
+         d_t_lsc(igout,k),d_t_ajsb(igout,k),d_t_ajs(igout,k), &
+         d_t_eva(igout,k)
+      enddo
+      write(lunout,*) 'cool,heat'
+      do k=1,klev
+         write(lunout,*) cool(igout,k),heat(igout,k)
+      enddo
+
+      write(lunout,*) 'd_t_oli,d_t_vdf,d_t_oro,d_t_lif,d_t_ec'
+      do k=1,klev
+         write(lunout,*) d_t_oli(igout,k),d_t_vdf(igout,k), &
+       d_t_oro(igout,k),d_t_lif(igout,k),d_t_ec(igout,k)
+      enddo
+
+      write(lunout,*) 'd_ps ',d_ps(igout)
+      write(lunout,*) 'd_u, d_v, d_t, d_qx1, d_qx2 '
+      do k=1,klev
+         write(lunout,*) d_u(igout,k),d_v(igout,k),d_t(igout,k), &
+        d_qx(igout,k,1),d_qx(igout,k,2)
+      enddo
+      endif
+
+!==========================================================================
+
+!============================================================
+!   Calcul de la temperature potentielle
+!============================================================
+      DO k = 1, klev
+      DO i = 1, klon
+!JYG/IM theta en debut du pas de temps
+!JYG/IM       theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
+!JYG/IM theta en fin de pas de temps de physique
+        theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD)
+! thetal: 2 lignes suivantes a decommenter si vous avez les fichiers     MPL 20130625
+! fth_fonctions.F90 et parkind1.F90
+! sinon thetal=theta
+!       thetal(i,k)=fth_thetal(pplay(i,k),t_seri(i,k),q_seri(i,k),
+!    :         ql_seri(i,k))
+        thetal(i,k)=theta(i,k)
+      ENDDO
+      ENDDO
+!
+
+! 22.03.04 BEG
+!=============================================================
+!   Ecriture des sorties
+!=============================================================
+#ifdef CPP_IOIPSL
+ 
+! Recupere des varibles calcule dans differents modules
+! pour ecriture dans histxxx.nc 
+
+      ! Get some variables from module fonte_neige_mod
+      CALL fonte_neige_get_vars(pctsrf,  &
+           zxfqcalving, zxfqfonte, zxffonte)
+
+
+
+
+!=============================================================
+! Separation entre thermiques et non thermiques dans les sorties
+! de fisrtilp
+!=============================================================
+
+      if (iflag_thermals>=1) then
+      d_t_lscth=0.
+      d_t_lscst=0.
+      d_q_lscth=0.
+      d_q_lscst=0.
+      do k=1,klev
+         do i=1,klon
+            if (ptconvth(i,k)) then
+                d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
+                d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
+            else
+                d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
+                d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
+            endif
+         enddo
+      enddo
+
+      do i=1,klon
+      plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1)
+      plul_th(i)=prfl(i,1)+psfl(i,1)
+      enddo
+      endif
+
+
+!On effectue les sorties:
+
+      CALL phys_output_write(itap, pdtphys, paprs, pphis,               &
+                        pplay, lmax_th, aerosol_couple,                 &
+                        ok_ade, ok_aie, ivap, new_aod, ok_sync,         &
+                        ptconv, read_climoz, clevSTD, freq_moyNMC,      &
+                        ptconvth, d_t, qx, d_qx, zmasse,                &
+                        flag_aerosol_strat)
+
+
+
+
+#ifdef histISCCP
+#include "write_histISCCP.h"
+#endif
+
+#include "write_histday_seri.h"
+
+#include "write_paramLMDZ_phy.h"
+
+#endif
+
+! 22.03.04 END
+!
+!====================================================================
+! Si c'est la fin, il faut conserver l'etat de redemarrage
+!====================================================================
+!
+
+!        -----------------------------------------------------------------
+!        WSTATS: Saving statistics
+!        -----------------------------------------------------------------
+!        ("stats" stores and accumulates 8 key variables in file "stats.nc"
+!        which can later be used to make the statistic files of the run:
+!        "stats")          only possible in 3D runs !
+
+         
+         IF (callstats) THEN
+
+           call wstats(klon,o_psol%name,"Surface pressure","Pa" &
+                       ,2,paprs(:,1))
+           call wstats(klon,o_tsol%name,"Surface temperature","K", &
+                       2,zxtsol)
+           zx_tmp_fi2d(:) = rain_fall(:) + snow_fall(:)
+           call wstats(klon,o_precip%name,"Precip Totale liq+sol", &
+                       "kg/(s*m2)",2,zx_tmp_fi2d)
+           zx_tmp_fi2d(:) = rain_lsc(:) + snow_lsc(:)
+           call wstats(klon,o_plul%name,"Large-scale Precip", &
+                       "kg/(s*m2)",2,zx_tmp_fi2d)
+           zx_tmp_fi2d(:) = rain_con(:) + snow_con(:)
+           call wstats(klon,o_pluc%name,"Convective Precip", &
+                       "kg/(s*m2)",2,zx_tmp_fi2d)
+           call wstats(klon,o_sols%name,"Solar rad. at surf.", &
+                       "W/m2",2,solsw)
+           call wstats(klon,o_soll%name,"IR rad. at surf.", &
+                       "W/m2",2,sollw)
+          zx_tmp_fi2d(:) = topsw(:)-toplw(:)
+          call wstats(klon,o_nettop%name,"Net dn radiatif flux at TOA", &
+                       "W/m2",2,zx_tmp_fi2d)
+
+
+
+           call wstats(klon,o_temp%name,"Air temperature","K", &
+                       3,t_seri)
+           call wstats(klon,o_vitu%name,"Zonal wind","m.s-1", &
+                       3,u_seri)
+           call wstats(klon,o_vitv%name,"Meridional wind", &
+                      "m.s-1",3,v_seri)
+           call wstats(klon,o_vitw%name,"Vertical wind", &
+                      "m.s-1",3,omega)
+           call wstats(klon,o_ovap%name,"Specific humidity", "kg/kg", &
+                       3,q_seri)
+ 
+
+
+           IF(lafin) THEN
+             write (*,*) "Writing stats..."
+             call mkstats(ierr)
+           ENDIF
+
+         ENDIF !if callstats
+     
+      IF (lafin) THEN
+         itau_phy = itau_phy + itap
+         CALL phyredem ("restartphy.nc")
+!         open(97,form="unformatted",file="finbin")
+!         write(97) u_seri,v_seri,t_seri,q_seri
+!         close(97)
+!$OMP MASTER
+         if (read_climoz >= 1) then
+            if (is_mpi_root) then
+               call nf95_close(ncid_climoz)
+            end if
+            deallocate(press_climoz) ! pointer
+         end if
+!$OMP END MASTER
+      ENDIF
+      
+!      first=.false.
+
+      RETURN
+      END
+      FUNCTION qcheck(klon,klev,paprs,q,ql,aire)
+      IMPLICIT none
+!
+! Calculer et imprimer l'eau totale. A utiliser pour verifier
+! la conservation de l'eau
+!
+#include "YOMCST.h"
+      INTEGER klon,klev
+      REAL paprs(klon,klev+1), q(klon,klev), ql(klon,klev)
+      REAL aire(klon)
+      REAL qtotal, zx, qcheck
+      INTEGER i, k
+!
+      zx = 0.0
+      DO i = 1, klon
+         zx = zx + aire(i)
+      ENDDO
+      qtotal = 0.0
+      DO k = 1, klev
+      DO i = 1, klon
+         qtotal = qtotal + (q(i,k)+ql(i,k)) * aire(i) &
+                           *(paprs(i,k)-paprs(i,k+1))/RG
+      ENDDO
+      ENDDO
+!
+      qcheck = qtotal/zx
+!
+      RETURN
+      END
+      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
+      IMPLICIT none
+!
+! Tranformer une variable de la grille physique a
+! la grille d'ecriture
+!
+      INTEGER nfield,nlon,iim,jjmp1, jjm
+      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
+!
+      INTEGER i, n, ig
+!
+      jjm = jjmp1 - 1
+      DO n = 1, nfield
+         DO i=1,iim
+            ecrit(i,n) = fi(1,n)
+            ecrit(i+jjm*iim,n) = fi(nlon,n)
+         ENDDO
+         DO ig = 1, nlon - 2
+           ecrit(iim+ig,n) = fi(1+ig,n)
+         ENDDO
+      ENDDO
+      RETURN
+      END
Index: LMDZ5/trunk/libf/phylmd/regdim.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/regdim.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/regdim.h	(revision 1862)
@@ -2,15 +2,16 @@
 ! $Header$
 !
+!     Valid and equivalent for either free source form or fixed source form
       INTEGER i1_deb, i1_fin
       INTEGER i2_deb, i2_fin
-ccc      PARAMETER (i1_deb=21, i1_fin=40)
-ccc      PARAMETER (i2_deb=41, i2_fin=44)
-cccc      PARAMETER (i1_deb=47, i1_fin=77)
-cccc      PARAMETER (i2_deb=78, i2_fin=79)
+!cc      PARAMETER (i1_deb=21, i1_fin=40)
+!cc      PARAMETER (i2_deb=41, i2_fin=44)
+!ccc      PARAMETER (i1_deb=47, i1_fin=77)
+!ccc      PARAMETER (i2_deb=78, i2_fin=79)
       PARAMETER (i1_deb=16, i1_fin=30)
       PARAMETER (i2_deb=31, i2_fin=33)
-c
+!
       INTEGER j_deb, j_fin
-ccc      PARAMETER (j_deb=29, j_fin=61)
-cccc      PARAMETER (j_deb=21, j_fin=51)
+!cc      PARAMETER (j_deb=29, j_fin=61)
+!ccc      PARAMETER (j_deb=21, j_fin=51)
       PARAMETER (j_deb=18, j_fin=39)
Index: LMDZ5/trunk/libf/phylmd/write_histday_seri.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/write_histday_seri.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/write_histday_seri.h	(revision 1862)
@@ -1,58 +1,58 @@
-c
-c $Header$
-c
+!
+! $Header$
+!
       IF (is_sequential) THEN
       
       IF (type_run.EQ."AMIP") THEN
-c
+!
       ndex2d = 0
       itau_w = itau_phy + itap + start_time * day_step / iphysiq
-c
-c Champs 2D:
-c
+!
+! Champs 2D:
+!
       pi = ACOS(-1.)
       pir = 4.0*ATAN(1.0) / 180.0
-c
+!
       DO i=1, klon
        zx_tmp_fi2d(i)=(topsw(i)-toplw(i))
       ENDDO
-c
+!
       ok_msk=.FALSE.
       msk(1:klon)=pctsrf(1:klon,is_ter)
-      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"bilTOA",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
-      ok_msk=.FALSE.
-      CALL moyglo_pondaire(klon, bils, airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"bils",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
+      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"bilTOA",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d)
+!
+      ok_msk=.FALSE.
+      CALL moyglo_pondaire(klon, bils, airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"bils",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d)
+!
       DO k=1, klev
       DO i=1, klon
-cIM 080904    zx_tmp_fi3d(i,k)=u(i,k)**2+v(i,k)**2
+!IM 080904    zx_tmp_fi3d(i,k)=u(i,k)**2+v(i,k)**2
        zx_tmp_fi3d(i,k)=(u(i,k)**2+v(i,k)**2)/2.
       ENDDO
       ENDDO
-c
-      CALL moyglo_pondaima(klon, klev, zx_tmp_fi3d, 
-     .     airephy, paprs, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"ecin",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d) 
-c
-cIM 151004 BEG
+!
+      CALL moyglo_pondaima(klon, klev, zx_tmp_fi3d,  &
+           airephy, paprs, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"ecin",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d) 
+!
+!IM 151004 BEG
       IF(1.EQ.0) THEN
-c
+!
       DO k=1, klev
       DO i=1, klon
@@ -60,31 +60,31 @@
       ENDDO
       ENDDO
-c
-      CALL moyglo_pondaima(klon, klev, zx_tmp_fi3d, 
-     .     airephy, paprs, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"momang",itau_w,zx_tmp_2d,
-     .               iim*jjmp1,ndex2d)
-c
-c friction torque
-c
+!
+      CALL moyglo_pondaima(klon, klev, zx_tmp_fi3d,  &
+           airephy, paprs, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"momang",itau_w,zx_tmp_2d, &
+                     iim*jjmp1,ndex2d)
+!
+! friction torque
+!
       DO i=1, klon
        zx_tmp_fi2d(i)=zxfluxu(i,1)*RA* cos(pir* rlat(i))
       ENDDO
-c
-      ok_msk=.FALSE.
-      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"frictor",itau_w,zx_tmp_2d,
-     .               iim*jjmp1,ndex2d)
-c
-c mountain torque
-c
-cIM 190504 BEG
+!
+      ok_msk=.FALSE.
+      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"frictor",itau_w,zx_tmp_2d, &
+                     iim*jjmp1,ndex2d)
+!
+! mountain torque
+!
+!IM 190504 BEG
       CALL gr_fi_dyn(1,klon,iim+1,jjm+1,airephy,airedyn)
       CALL gr_fi_dyn(klev+1,klon,iim+1,jjm+1,paprs,padyn)
@@ -97,45 +97,45 @@
         zx_tmp(ij)=0.
         DO k = 1, klev
-         zx_tmp(ij)=zx_tmp(ij)+dudyn(i,j,k)*airedyn(i,j)*
-     $              (padyn(i,j,k+1)-padyn(i,j,k))/RG
+         zx_tmp(ij)=zx_tmp(ij)+dudyn(i,j,k)*airedyn(i,j)* &
+                    (padyn(i,j,k+1)-padyn(i,j,k))/RG
          airetot=airetot+airedyn(i,j)
         ENDDO
-cIM 190504 mountor=mountor+zx_tmp(ij)*airedyn(i,j)*RA*
-        mountor=mountor+zx_tmp(ij)*RA*
-     $           cos(pir* rlatdyn(i,j))
+!IM 190504 mountor=mountor+zx_tmp(ij)*airedyn(i,j)*RA*
+        mountor=mountor+zx_tmp(ij)*RA* &
+                 cos(pir* rlatdyn(i,j))
        ENDDO
       ENDDO
-cIM 151004 BEG
+!IM 151004 BEG
       IF(itap.EQ.1) PRINT*,'airetot=',airetot,airetot/klev
-cIM 151004 END
-cIM 190504      mountor=mountor/(airetot*airetot)
+!IM 151004 END
+!IM 190504      mountor=mountor/(airetot*airetot)
       mountor=mountor/airetot
-c
-cIM 190504 END
+!
+!IM 190504 END
       zx_tmp_2d(1:iim,1:jjmp1)=mountor
-      CALL histwrite(nid_day_seri,"mountor",itau_w,zx_tmp_2d,
-     .               iim*jjmp1,ndex2d)
-c
+      CALL histwrite(nid_day_seri,"mountor",itau_w,zx_tmp_2d, &
+                     iim*jjmp1,ndex2d)
+!
       ENDIF !(1.EQ.0) THEN
-c
-c
+!
+!
       CALL gr_fi_dyn(1,klon,iim+1,jjm+1,airephy,airedyn)
       CALL gr_fi_ecrit(1,klon,iim,jjmp1,airephy,zx_tmp_2d)
       airetot=0.
-c     DO j = 1, jjmp1
-c      DO i = 1, iim+1
-c       ij=i+(iim+1)*(j-1)
-c       DO k = 1, klev
-c        airetot=airetot+airedyn(i,j)
-c        airetot=airetot+airedyn(i,j)
-c       ENDDO !k
-c      ENDDO !i
-c     ENDDO !j
-c
+!     DO j = 1, jjmp1
+!      DO i = 1, iim+1
+!       ij=i+(iim+1)*(j-1)
+!       DO k = 1, klev
+!        airetot=airetot+airedyn(i,j)
+!        airetot=airetot+airedyn(i,j)
+!       ENDDO !k
+!      ENDDO !i
+!     ENDDO !j
+!
       DO i=1, klon
        airetot=airetot+airephy(i)
       ENDDO
-c     IF(itap.EQ.1) PRINT*,'airetotphy=',airetot
-c
+!     IF(itap.EQ.1) PRINT*,'airetotphy=',airetot
+!
       airetot=0.
       DO j=1, jjmp1
@@ -144,98 +144,98 @@
        ENDDO
       ENDDO
-c
-c     IF(itap.EQ.1) PRINT*,'airetotij=',airetot,
-c    $ '4piR2',4.*pi*RA*RA
-c
+!
+!     IF(itap.EQ.1) PRINT*,'airetotij=',airetot,
+!    $ '4piR2',4.*pi*RA*RA
+!
       zx_tmp_fi2d(1:klon)=aam/airetot
       CALL gr_fi_ecrit(1,klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"momang",itau_w,zx_tmp_2d,
-     .               iim*jjmp1,ndex2d)
-c
+      CALL histwrite(nid_day_seri,"momang",itau_w,zx_tmp_2d, &
+                     iim*jjmp1,ndex2d)
+!
       zx_tmp_fi2d(1:klon)=torsfc/airetot
       CALL gr_fi_ecrit(1,klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"torsfc",itau_w,zx_tmp_2d,
-     .               iim*jjmp1,ndex2d)
-c
-cIM 151004 END
-c
-      CALL moyglo_pondmass(klon, klev, t_seri,
-     .     airephy, paprs, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
+      CALL histwrite(nid_day_seri,"torsfc",itau_w,zx_tmp_2d, &
+                     iim*jjmp1,ndex2d)
+!
+!IM 151004 END
+!
+      CALL moyglo_pondmass(klon, klev, t_seri, &
+           airephy, paprs, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
       CALL gr_fi_ecrit(1,klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"tamv",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
-      ok_msk=.FALSE.
-      CALL moyglo_pondaire(klon, paprs(:,1), airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"psol",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
-      ok_msk=.FALSE.
-      CALL moyglo_pondaire(klon, evap, airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
-      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"evap",itau_w,
-     .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
-c     DO i=1, klon
-c      zx_tmp_fi2d(i)=SnowFrac(i,is_ter)
-c     ENDDO
-c
-c     ok_msk=.TRUE.
-c     msk(1:klon)=pctsrf(1:klon,is_ter)
-c     CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
-c    .                     ok_msk, msk, moyglo)
-c     zx_tmp_fi2d(1:klon)=moyglo
-c
-c     CALL gr_fi_ecrit(1, klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
-c     CALL histwrite(nid_day_seri,"SnowFrac",
-c    .               itau_w,zx_tmp_2d,iim*jjmp1,ndex2d) 
-c
-c     DO i=1, klon
-cIM 080904    zx_tmp_fi2d(i)=zsnow_mass(i)/330.*rowl
-c      zx_tmp_fi2d(i)=zsnow_mass(i)
-c     ENDDO
-c
-cIM 140904   ok_msk=.FALSE.
-c     ok_msk=.TRUE.
-c     msk(1:klon)=pctsrf(1:klon,is_ter)
-c     CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
-c    .     ok_msk, msk, moyglo)
-c     zx_tmp_fi2d(1:klon)=moyglo
-c
-c     CALL gr_fi_ecrit(1, klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
-c     CALL histwrite(nid_day_seri,"snow_depth",itau_w,
-c    .               zx_tmp_2d,iim*jjmp1,ndex2d)
-c
+      CALL histwrite(nid_day_seri,"tamv",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d)
+!
+      ok_msk=.FALSE.
+      CALL moyglo_pondaire(klon, paprs(:,1), airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"psol",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d)
+!
+      ok_msk=.FALSE.
+      CALL moyglo_pondaire(klon, evap, airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
+      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d,zx_tmp_2d)
+      CALL histwrite(nid_day_seri,"evap",itau_w, &
+                     zx_tmp_2d,iim*jjmp1,ndex2d)
+!
+!     DO i=1, klon
+!      zx_tmp_fi2d(i)=SnowFrac(i,is_ter)
+!     ENDDO
+!
+!     ok_msk=.TRUE.
+!     msk(1:klon)=pctsrf(1:klon,is_ter)
+!     CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
+!    .                     ok_msk, msk, moyglo)
+!     zx_tmp_fi2d(1:klon)=moyglo
+!
+!     CALL gr_fi_ecrit(1, klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
+!     CALL histwrite(nid_day_seri,"SnowFrac",
+!    .               itau_w,zx_tmp_2d,iim*jjmp1,ndex2d) 
+!
+!     DO i=1, klon
+!IM 080904    zx_tmp_fi2d(i)=zsnow_mass(i)/330.*rowl
+!      zx_tmp_fi2d(i)=zsnow_mass(i)
+!     ENDDO
+!
+!IM 140904   ok_msk=.FALSE.
+!     ok_msk=.TRUE.
+!     msk(1:klon)=pctsrf(1:klon,is_ter)
+!     CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
+!    .     ok_msk, msk, moyglo)
+!     zx_tmp_fi2d(1:klon)=moyglo
+!
+!     CALL gr_fi_ecrit(1, klon,iim,jjmp1,zx_tmp_fi2d,zx_tmp_2d)
+!     CALL histwrite(nid_day_seri,"snow_depth",itau_w,
+!    .               zx_tmp_2d,iim*jjmp1,ndex2d)
+!
       DO i=1, klon
        zx_tmp_fi2d(i)=ftsol(i,is_oce)
       ENDDO
-c
+!
       ok_msk=.TRUE.
       msk(1:klon)=pctsrf(1:klon,is_oce)
-      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy, 
-     .     ok_msk, msk, moyglo)
-      zx_tmp_fi2d(1:klon)=moyglo
-c
+      CALL moyglo_pondaire(klon, zx_tmp_fi2d, airephy,  &
+           ok_msk, msk, moyglo)
+      zx_tmp_fi2d(1:klon)=moyglo
+!
       CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d, zx_tmp_2d)
-      CALL histwrite(nid_day_seri,"tsol_"//clnsurf(is_oce),
-     $               itau_w,zx_tmp_2d,iim*jjmp1,ndex2d) 
-c
-c=================================================================
-c=================================================================
-c=================================================================
-c
+      CALL histwrite(nid_day_seri,"tsol_"//clnsurf(is_oce), &
+                     itau_w,zx_tmp_2d,iim*jjmp1,ndex2d) 
+!
+!=================================================================
+!=================================================================
+!=================================================================
+!
       if (ok_sync) then
         call histsync(nid_day_seri)
       endif
-c
+!
       ENDIF !fin test sur type_run.EQ."AMIP"
       
Index: LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h	(revision 1861)
+++ LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h	(revision 1862)
@@ -1,5 +1,5 @@
-c
-c calcul moyennes globales
-c
+!
+! calcul moyennes globales
+!
        zx_tmp_fi2d=bils*airephy
        CALL global_mean(zx_tmp_fi2d,airephy,.TRUE.,gbils)
@@ -22,78 +22,78 @@
        zx_tmp_fi2d=prw*airephy
        CALL global_mean(zx_tmp_fi2d,airephy,.TRUE.,gprw)
-c
-c$OMP MASTER
+!
+!$OMP MASTER
       if (is_mpi_root) then      
-c
+!
       ndex2d = 0
       itau_w = itau_phy + itap + start_time * day_step / iphysiq
-c
-c Variables globales
-c
+!
+! Variables globales
+!
       zx_tmp_0d=R_ecc
-      CALL histwrite(nid_ctesGCM,"R_ecc",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"R_ecc",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=R_peri
-      CALL histwrite(nid_ctesGCM,"R_peri",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"R_peri",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=R_incl
-      CALL histwrite(nid_ctesGCM,"R_incl",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"R_incl",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=solaire
-      CALL histwrite(nid_ctesGCM,"solaire",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"solaire",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=co2_ppm
-      CALL histwrite(nid_ctesGCM,"co2_ppm",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"co2_ppm",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=CH4_ppb
-      CALL histwrite(nid_ctesGCM,"CH4_ppb",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"CH4_ppb",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=N2O_ppb
-      CALL histwrite(nid_ctesGCM,"N2O_ppb",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"N2O_ppb",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=CFC11_ppt
-      CALL histwrite(nid_ctesGCM,"CFC11_ppt",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
+      CALL histwrite(nid_ctesGCM,"CFC11_ppt",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
       zx_tmp_0d=CFC12_ppt
-      CALL histwrite(nid_ctesGCM,"CFC12_ppt",itau_w,
-     .               zx_tmp_0d,np,ndex2d)
-c
-c=================================================================
-c moyennes globales
-c
-      CALL histwrite(nid_ctesGCM,"bils",itau_w,
-     .               gbils,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"evap",itau_w,
-     .               gevap,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"evap_land",itau_w,
-     .               gevapt,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"flat",itau_w,
-     .               glat,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"nettop0",itau_w,
-     .               gnet0,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"nettop",itau_w,
-     .               gnet,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"precip",itau_w,
-     .               grain,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"tsol",itau_w,
-     .               gtsol,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"t2m",itau_w,
-     .               gt2m,np,ndex2d)
-      CALL histwrite(nid_ctesGCM,"prw",itau_w,
-     .               gprw,np,ndex2d)
-c=================================================================
-c
+      CALL histwrite(nid_ctesGCM,"CFC12_ppt",itau_w, &
+                     zx_tmp_0d,np,ndex2d)
+!
+!=================================================================
+! moyennes globales
+!
+      CALL histwrite(nid_ctesGCM,"bils",itau_w, &
+                     gbils,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"evap",itau_w, &
+                     gevap,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"evap_land",itau_w, &
+                     gevapt,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"flat",itau_w, &
+                     glat,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"nettop0",itau_w, &
+                     gnet0,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"nettop",itau_w, &
+                     gnet,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"precip",itau_w, &
+                     grain,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"tsol",itau_w, &
+                     gtsol,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"t2m",itau_w, &
+                     gt2m,np,ndex2d)
+      CALL histwrite(nid_ctesGCM,"prw",itau_w, &
+                     gprw,np,ndex2d)
+!=================================================================
+!
       if (ok_sync) then
         call histsync(nid_ctesGCM)
       endif
-c
+!
       endif !(is_mpi_root) then      
-c$OMP END MASTER
+!$OMP END MASTER
