Index: LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90	(revision 2234)
+++ LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90	(revision 2235)
@@ -1,3 +1,3 @@
-SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text)
+SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy)
   ! ======================================================================
   ! Ajoute les tendances de couche limite, soit determinees par la
@@ -20,4 +20,5 @@
   REAL hqturb_gcssold(llm)
   REAL dtime_frcg
+  INTEGER abortphy
   LOGICAL turb_fcg_gcssold
   COMMON /turb_forcing/dtime_frcg, hthturb_gcssold, hqturb_gcssold, &
@@ -46,7 +47,7 @@
     PRINT *, ' add_pbl_tend, zzdt ', zzdt
     PRINT *, ' add_pbl_tend, zzdq ', zzdq
-    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text)
+    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy)
   ELSE
-    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text)
+    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy)
   END IF
 
Index: LMDZ5/trunk/libf/phylmd/add_phys_tend.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/add_phys_tend.F90	(revision 2234)
+++ LMDZ5/trunk/libf/phylmd/add_phys_tend.F90	(revision 2235)
@@ -2,5 +2,5 @@
 ! $Id$
 !
-SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text)
+SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text,abortphy)
 !======================================================================
 ! Ajoute les tendances des variables physiques aux variables 
@@ -28,4 +28,5 @@
 REAL paprs(klon,klev+1)
 CHARACTER*(*) text
+INTEGER abortphy
 
 ! Local :
@@ -52,5 +53,8 @@
 ! Initialisations
 
-debug_level=10
+      IF (abortphy==1) RETURN ! on n ajoute pas les tendance si le modele
+                              ! a deja plante.
+
+     debug_level=10
      if (first) then
         itap=0
@@ -230,5 +234,23 @@
 ENDIF
 
-      CALL hgardfou(t_seri,ftsol,text)
+
+!======================================================================
+! Contrôle des min/max pour arrêt du modèle
+! Si le modele est en mode abortphy, on retire les tendances qu'on
+! vient d'ajouter. Pas exactement parce qu'on ne tient pas compte des
+! seuils.
+!======================================================================
+
+      CALL hgardfou(t_seri,ftsol,text,abortphy) 
+      IF (abortphy==1) THEN
+        Print*,'ERROR ABORT hgardfou dans ',text
+        u_seri(:,:)=u_seri(:,:)-zdu(:,:)
+        v_seri(:,:)=v_seri(:,:)-zdv(:,:)
+        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
+        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
+      ENDIF
+
+
+
       RETURN
       END
Index: LMDZ5/trunk/libf/phylmd/hgardfou.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/hgardfou.F90	(revision 2234)
+++ LMDZ5/trunk/libf/phylmd/hgardfou.F90	(revision 2235)
@@ -1,5 +1,5 @@
 
 ! $Id$
-SUBROUTINE hgardfou(t, tsol, text)
+SUBROUTINE hgardfou(t, tsol, text,abortphy)
   USE dimphy
   USE phys_state_var_mod
@@ -15,4 +15,5 @@
   CHARACTER(len=*), intent(in):: text
   CHARACTER (LEN=20) :: modname = 'hgardfou'
+  INTEGER abortphy
 
   INTEGER i, k, nsrf
@@ -128,5 +129,6 @@
   END DO
 
-  IF (.NOT. ok) CALL abort_gcm(modname, text, 1)
+!  IF (.NOT. ok) CALL abort_gcm(modname, text, 1)
+  IF (.NOT. ok) abortphy=1
 
 END SUBROUTINE hgardfou
Index: LMDZ5/trunk/libf/phylmd/physiq.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 2234)
+++ LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 2235)
@@ -291,4 +291,7 @@
   SAVE itap                   ! compteur pour la physique
   !$OMP THREADPRIVATE(itap)
+
+  INTEGER, SAVE :: abortphy=0   ! Reprere si on doit arreter en fin de phys
+  !$OMP THREADPRIVATE(abortphy)
   !
   REAL,save ::  solarlong0
@@ -1603,5 +1606,7 @@
   !IM END
   !
-  CALL hgardfou(t_seri,ftsol,'debutphy')
+  CALL hgardfou(t_seri,ftsol,'debutphy',abortphy)
+  IF (abortphy==1) Print*,'ERROR ABORT hgardfou debutphy'
+
   !
   !IM BEG
@@ -1908,8 +1913,8 @@
      IF (klon_glo==1) THEN
         CALL add_pbl_tend &
-             (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf')
+        (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf',abortphy)
      ELSE
         CALL add_phys_tend &
-             (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf')
+        (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf',abortphy)
      ENDIF
      !--------------------------------------------------------------------
@@ -2345,5 +2350,6 @@
 
   CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
-       'convection')
+       'convection',abortphy)
+
   !----------------------------------------------------------------------------
 
@@ -2514,5 +2520,5 @@
      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,dqi0,paprs,'wake')
+     CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake',abortphy)
      !------------------------------------------------------------------------
 
@@ -2825,5 +2831,5 @@
         !-----------------------------------------------------------------------
         ! ajout des tendances de l'ajustement sec ou des thermiques
-        CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs,'ajsb')
+        CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs,'ajsb',abortphy)
         d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
         d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
@@ -2882,5 +2888,5 @@
   WHERE (snow_lsc < 0) snow_lsc = 0.
 
-  CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs,'lsc')
+  CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs,'lsc',abortphy)
   !---------------------------------------------------------------------------
   DO k = 1, klev
@@ -3561,6 +3567,6 @@
   d_t_sw0(:,:)=heat0(:,:)*dtime/RDAY
   d_t_lw0(:,:)=-cool0(:,:)*dtime/RDAY
-  CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW')
-  CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW')
+  CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy)
+  CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy)
 
   !
@@ -3645,5 +3651,5 @@
      !-----------------------------------------------------------------------------------------
      ! ajout des tendances de la trainee de l'orographie
-     CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro')
+     CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro',abortphy)
      !-----------------------------------------------------------------------------------------
      !
@@ -3691,5 +3697,5 @@
      !-----------------------------------------------------------------------------------------
      ! ajout des tendances de la portance de l'orographie
-     CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,dqi0,paprs,'lif')
+     CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,dqi0,paprs,'lif',abortphy)
      !-----------------------------------------------------------------------------------------
      !
@@ -3705,5 +3711,5 @@
      !
      !  ajout des tendances
-     CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,dqi0,paprs,'hin')
+     CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,dqi0,paprs,'hin',abortphy)
 
   ENDIF
@@ -3714,5 +3720,5 @@
           du_gwd_rando, dv_gwd_rando)
      CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0,dqi0,paprs, &
-          'flott_gwd_rando')
+          'flott_gwd_rando',abortphy)
   end if
 
@@ -3768,5 +3774,5 @@
      CALL METHOX(1,klon,klon,klev,q_seri,d_q_ch4,pplay)
   ! ajout de la tendance d'humidite due au methane
-     CALL add_phys_tend(du0,dv0,dt0,d_q_ch4*dtime,dql0,'q_ch4')
+     CALL add_phys_tend(du0,dv0,dt0,d_q_ch4*dtime,dql0,'q_ch4',abortphy)
   END IF
   !
@@ -4149,5 +4155,5 @@
   !On effectue les sorties:
 
-  CALL phys_output_write(itap, pdtphys, paprs, pphis,               &
+  CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
        pplay, lmax_th, aerosol_couple,                 &
        ok_ade, ok_aie, ivap, new_aod, ok_sync,         &
@@ -4158,5 +4164,4 @@
 
 
-
   include "write_histday_seri.h"
 
@@ -4164,4 +4169,16 @@
 
 #endif
+
+
+!====================================================================
+! Arret du modele apres hgardfou en cas de detection d'un
+! plantage par hgardfou
+!====================================================================
+
+    IF (abortphy==1) THEN
+       abort_message ='Plantage hgardfou'
+       CALL abort_gcm (modname,abort_message,1)
+    ENDIF
+
 
   ! 22.03.04 END
