Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90	(revision 2830)
@@ -32,4 +32,7 @@
    USE trc_oce         ! share passive tracers/Ocean variables
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -131,9 +134,13 @@
       !!----------------------------------------------------------------------
 
-      IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1,2) ) THEN
+      IF( wrk_in_use(2, 35) .OR. wrk_in_use(3, 14,15) ) THEN
          CALL ctl_stop('tra_adv_cen2: requested workspace arrays unavailable')   ;   RETURN
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv_cen2 : 2nd order centered advection scheme on ', cdtype
@@ -141,6 +148,9 @@
          IF(lwp) WRITE(numout,*)
          !
-         ALLOCATE( upsmsk(jpi,jpj), STAT=ierr )
-         IF( ierr /= 0 )   CALL ctl_stop('STOP', 'tra_adv_cen2: unable to allocate array')
+         IF (.not. ALLOCATED(upsmsk))THEN
+             ALLOCATE( upsmsk(jpi,jpj), STAT=ierr )
+             IF( ierr /= 0 )   CALL ctl_stop('STOP', 'tra_adv_cen2: unable to allocate array')
+         ENDIF
+
          !
          upsmsk(:,:) = 0._wp                             ! not upstream by default
@@ -275,6 +285,6 @@
       ENDIF
       !
-      IF( wrk_not_released(2, 1)   .OR.   &
-          wrk_not_released(3, 1,2) )   CALL ctl_stop('tra_adv_cen2: failed to release workspace arrays')
+      IF( wrk_not_released(2, 35)   .OR.   &
+          wrk_not_released(3, 14,15) )   CALL ctl_stop('tra_adv_cen2: failed to release workspace arrays')
       !
    END SUBROUTINE tra_adv_cen2
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90	(revision 2830)
@@ -25,4 +25,7 @@
    USE diaptr          ! poleward transport diagnostics
    USE trc_oce         ! share passive tracers/Ocean variables
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
 
@@ -83,5 +86,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv : MUSCL advection scheme on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90	(revision 2830)
@@ -23,4 +23,7 @@
    USE diaptr          ! poleward transport diagnostics
    USE trc_oce         ! share passive tracers/Ocean variables
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
 
@@ -81,5 +84,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv_muscl2 : MUSCL2 advection scheme on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90	(revision 2830)
@@ -26,4 +26,7 @@
    USE diaptr          ! poleward transport diagnostics
    USE trc_oce         ! share passive tracers/Ocean variables
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -90,5 +93,9 @@
       !!----------------------------------------------------------------------
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv_qck : 3rd order quickest advection scheme on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90	(revision 2830)
@@ -32,4 +32,7 @@
    USE diaptr          ! poleward transport diagnostics
    USE trc_oce         ! share passive tracers/Ocean variables
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
 
@@ -89,5 +92,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv_tvd : TVD advection scheme on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90	(revision 2830)
@@ -22,4 +22,7 @@
    USE dynspg_oce      ! choice/control of key cpp for surface pressure gradient
    USE trc_oce         ! share passive tracers/Ocean variables
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -97,5 +100,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_adv_ubs :  horizontal UBS advection scheme on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90	(revision 2830)
@@ -34,4 +34,7 @@
    USE lbclnk         ! ocean lateral boundary conditions
    USE prtctl         ! Print control
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -389,5 +392,9 @@
       ENDIF
      
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp)  WRITE(numout,*)
          IF(lwp)  WRITE(numout,*) 'trabbl:bbl : Compute bbl velocities and diffusive coefficients in ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90	(revision 2830)
@@ -29,4 +29,7 @@
    USE trc_oce         ! share passive tracers/Ocean variables
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -93,5 +96,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_ldf_bilap : iso-level biharmonic operator on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90	(revision 2830)
@@ -25,4 +25,7 @@
    USE trc_oce         ! share passive tracers/Ocean variables
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -82,5 +85,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_ldf_bilapg : horizontal biharmonic operator in s-coordinate on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90	(revision 2830)
@@ -32,4 +32,7 @@
    USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
 #endif
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -121,4 +124,11 @@
          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
       ENDIF
+#if defined key_top
+      IF( kt == nittrc000 .AND. cdtype == 'TRC' )  THEN
+         IF(lwp) WRITE(numout,*)
+         IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype
+         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
+      ENDIF
+#endif
       !
       !                                                          ! ===========
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90	(revision 2830)
@@ -26,4 +26,7 @@
    USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -127,16 +130,24 @@
       !zdkt(1:jpi,1:jpj,0:1) => wrk_3d_9(:,:,1:2)
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_ldf_iso_grif : rotated laplacian diffusion operator on ', cdtype
          IF(lwp) WRITE(numout,*) '                   WARNING: STILL UNDER TEST, NOT RECOMMENDED. USE AT YOUR OWN PERIL'
          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
-         ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr )
+         IF (.not. ALLOCATED(ah_wslp2))THEN
+             ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr )
+         ENDIF
          IF( lk_mpp   )   CALL mpp_sum ( ierr )
          IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate arrays')
          IF( ln_traldf_gdia ) THEN
-            ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr )
-            IF( lk_mpp   )   CALL mpp_sum ( ierr )
-            IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics')
+            IF (.not. ALLOCATED(psix_eiv))THEN
+                ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr )
+                IF( lk_mpp   )   CALL mpp_sum ( ierr )
+                IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics')
+            ENDIF
          ENDIF
       ENDIF
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90	(revision 2830)
@@ -48,4 +48,7 @@
    USE agrif_opa_interp
 #endif
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -214,7 +217,11 @@
       !!----------------------------------------------------------------------
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) 'tra_nxt_fix : time stepping'
+         IF(lwp) WRITE(numout,*) 'tra_nxt_fix : time stepping', cdtype
          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
       ENDIF
@@ -282,7 +289,11 @@
       !!----------------------------------------------------------------------
 
-      IF( kt == nit000 ) THEN
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
+      IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) 'tra_nxt_vvl : time stepping'
+         IF(lwp) WRITE(numout,*) 'tra_nxt_vvl : time stepping', cdtype
          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
       ENDIF
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90	(revision 2830)
@@ -31,4 +31,7 @@
    USE in_out_manager  ! I/O manager
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -93,5 +96,9 @@
       ENDIF
 
+#if defined key_top
+      IF( kt == nit000 .OR. (kt == nittrc000 .AND. cdtype == 'TRC'))  THEN
+#else
       IF( kt == nit000 )  THEN
+#endif
          IF(lwp) WRITE(numout,*)
          IF(lwp) WRITE(numout,*) 'tra_zdf_exp : explicit vertical mixing on ', cdtype
Index: branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
===================================================================
--- branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90	(revision 2829)
+++ branches/2011/dev_r2802_TOP_substepping/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90	(revision 2830)
@@ -35,4 +35,7 @@
    USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
    USE lib_mpp         ! MPP library
+#if defined key_top
+   USE trc, ONLY: nittrc000  !get first time step for passive tracers
+#endif
 
    IMPLICIT NONE
@@ -102,4 +105,15 @@
          ENDIF
       ENDIF
+#if defined key_top
+      IF( kt == nittrc000 .AND. cdtype == 'TRC' )  THEN
+         IF(lwp)WRITE(numout,*)
+         IF(lwp)WRITE(numout,*) 'tra_zdf_imp : implicit vertical mixing on ', cdtype
+         IF(lwp)WRITE(numout,*) '~~~~~~~~~~~ '
+         !
+         IF( lk_vvl ) THEN   ;    r_vvl = 1._wp       ! Variable volume indicator
+         ELSE                ;    r_vvl = 0._wp       
+         ENDIF
+      ENDIF
+#endif
       !
       !                                               ! ============= !
