Index: LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3149)
+++ LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3150)
@@ -16,10 +16,12 @@
       INTEGER, PARAMETER :: nout=3
       INTEGER, PARAMETER :: napisccp=1
-      INTEGER, SAVE :: radpas
-      INTEGER, SAVE :: cvpas
-      INTEGER, SAVE :: wkpas
+      INTEGER, SAVE :: radpas  ! radiation is called every "radpas" step
+      INTEGER, SAVE :: cvpas   ! convection is called every "cvpas" step
+      INTEGER, SAVE :: cvpas_0 ! reference value for cvpas
+      INTEGER, SAVE :: wkpas   ! wake scheme is called every "wkpas" step
       REAL, PARAMETER :: missing_val_nf90=nf90_fill_real
 !$OMP THREADPRIVATE(radpas)
 !$OMP THREADPRIVATE(cvpas)
+!$OMP THREADPRIVATE(cvpas_0)
 !$OMP THREADPRIVATE(wkpas)
       REAL, SAVE :: dtime, solaire_etat0
Index: LMDZ6/trunk/libf/phylmd/physiq_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3149)
+++ LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3150)
@@ -634,4 +634,9 @@
     REAL, SAVE :: alp_offset
     !$OMP THREADPRIVATE(alp_offset)
+    REAL, SAVE :: dtcon_multistep_max=1.e6
+    !$OMP THREADPRIVATE(dtcon_multistep_max)
+    REAL, SAVE :: dqcon_multistep_max=1.e6
+    !$OMP THREADPRIVATE(dqcon_multistep_max)
+
   
     !
@@ -1260,4 +1265,6 @@
                       ! 2 => convective adjustment and state variables are changed
        CALL getin_p('iflag_adjwk',iflag_adjwk)
+       CALL getin_p('dtcon_multistep_max',dtcon_multistep_max)
+       CALL getin_p('dqcon_multistep_max',dqcon_multistep_max)
        CALL getin_p('oliqmax',oliqmax)
        CALL getin_p('oicemax',oicemax)
@@ -1397,5 +1404,6 @@
        print *,'physiq, nbapp_cv, nbapp_wk ',nbapp_cv,nbapp_wk
        IF (MOD(NINT(86400./dtime),nbapp_cv).EQ.0) THEN
-          cvpas = NINT( 86400./dtime)/nbapp_cv
+          cvpas_0 = NINT( 86400./dtime)/nbapp_cv
+          cvpas = cvpas_0
        print *,'physiq, cvpas ',cvpas
        ELSE 
@@ -2486,5 +2494,8 @@
     ! Appel de la convection tous les "cvpas"
     !
-    IF (MOD(itapcv,cvpas).EQ.0) THEN
+!!jyg    IF (MOD(itapcv,cvpas).EQ.0) THEN
+    print *,' physiq : itapcv, cvpas, itap-1, cvpas_0 ', &
+                       itapcv, cvpas, itap-1, cvpas_0
+    IF (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itap-1,cvpas_0).EQ.0) THEN
 
     !
@@ -2660,5 +2671,24 @@
           clwcon0=qcondc
           pmfu(:,:)=upwd(:,:)+dnwd(:,:)
-
+          !
+          !jyg<
+          ! If convective tendencies are too large, then call convection 
+          !  every time step
+          cvpas = cvpas_0
+          DO k=1,k_upper_cv
+             DO i=1,klon
+!!               IF (abs(d_t_con(i,k)) > 0.24 .OR. &
+!!                   abs(d_q_con(i,k)) > 2.e-2) THEN
+               IF (abs(d_t_con(i,k)) > dtcon_multistep_max .OR. &
+                   abs(d_q_con(i,k)) > dqcon_multistep_max) THEN
+                 cvpas = 1
+!!                 print *,'physiq1, i,k,d_t_con(i,k),d_q_con(i,k) ', &
+!!                                   i,k,d_t_con(i,k),d_q_con(i,k)
+               ENDIF
+             ENDDO
+          ENDDO
+          call bcast(cvpas)
+          !>jyg
+          !
           DO i = 1, klon
              IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+cvpas
@@ -2770,5 +2800,5 @@
     proba_notrig(:) = 1.
     itapcv = 0
-    ENDIF !  (MOD(itapcv,cvpas).EQ.0)
+    ENDIF !  (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itapcv,cvpas_0).EQ.0)
 !
     itapcv = itapcv+1
