Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90	(revision 2240)
@@ -120,8 +120,4 @@
    LOGICAL, PUBLIC ::   ln_zps     =  .FALSE.   !: z-coordinate - partial step
    LOGICAL, PUBLIC ::   ln_sco     =  .FALSE.   !: s-coordinate or hybrid z-s coordinate
-#if defined key_zco
-   LOGICAL, PUBLIC, PARAMETER ::   lk_zco = .TRUE.    !: z-coordinate flag (1D arrays)
-#else
-   LOGICAL, PUBLIC, PARAMETER ::   lk_zco = .FALSE.   !: z-coordinate flag (3D arrays)
 
    !! All coordinates
@@ -133,5 +129,4 @@
    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3vw            !: analytical vertical scale factors at  VW--
    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3w   , e3uw    !:                                        W--UW  points (m)
-#endif
 #if defined key_vvl
    LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .TRUE.    !: variable grid flag
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90	(revision 2240)
@@ -62,5 +62,4 @@
       ENDIF
 
-      IF( lk_zco )   CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl')
 
       fsdept(:,:,:) = gdept (:,:,:)
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domwri.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domwri.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domwri.F90	(revision 2240)
@@ -168,5 +168,4 @@
       CALL iom_rstput( 0, 0, inum4, 'mbathy', zprt, ktype = jp_i2 )
             
-#if ! defined key_zco
       IF( ln_sco ) THEN                                         ! s-coordinate
          CALL iom_rstput( 0, 0, inum4, 'hbatt', hbatt )         !    ! depth
@@ -235,5 +234,4 @@
       ENDIF
       
-#endif
       
       IF( ln_zco ) THEN
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr.F90	(revision 2240)
@@ -74,5 +74,5 @@
       !!              - vertical coordinate (gdep., e3.) depending on the 
       !!                coordinate chosen :
-      !!                   ln_zco=T   z-coordinate   (forced if lk_zco)
+      !!                   ln_zco=T   z-coordinate   
       !!                   ln_zps=T   z-coordinate with partial steps
       !!                   ln_zco=T   s-coordinate 
@@ -103,8 +103,4 @@
       IF( ln_sco ) ioptio = ioptio + 1
       IF ( ioptio /= 1 )   CALL ctl_stop( ' none or several vertical coordinate options used' )
-      IF( lk_zco ) THEN
-          IF(lwp) WRITE(numout,*) '          z-coordinate with reduced incore memory requirement'
-          IF( ln_zps .OR. ln_sco )   CALL ctl_stop( ' reduced memory with zps or sco option is impossible' )
-      ENDIF
 
       ! Build the vertical coordinate system
@@ -679,36 +675,24 @@
       !! ** Purpose :   define the z-coordinate system
       !!
-      !! ** Method  :   set 3D coord. arrays to reference 1D array if lk_zco=T
+      !! ** Method  :   set 3D coord. arrays to reference 1D array 
       !!----------------------------------------------------------------------
       INTEGER  ::   jk
       !!----------------------------------------------------------------------
       !
-      IF( .NOT.lk_zco ) THEN
-         DO jk = 1, jpk
-            fsdept(:,:,jk) = gdept_0(jk)
-            fsdepw(:,:,jk) = gdepw_0(jk)
-            fsde3w(:,:,jk) = gdepw_0(jk)
-            fse3t (:,:,jk) = e3t_0(jk)
-            fse3u (:,:,jk) = e3t_0(jk)
-            fse3v (:,:,jk) = e3t_0(jk)
-            fse3f (:,:,jk) = e3t_0(jk)
-            fse3w (:,:,jk) = e3w_0(jk)
-            fse3uw(:,:,jk) = e3w_0(jk)
-            fse3vw(:,:,jk) = e3w_0(jk)
-         END DO
-      ENDIF
+      DO jk = 1, jpk
+         fsdept(:,:,jk) = gdept_0(jk)
+         fsdepw(:,:,jk) = gdepw_0(jk)
+         fsde3w(:,:,jk) = gdepw_0(jk)
+         fse3t (:,:,jk) = e3t_0(jk)
+         fse3u (:,:,jk) = e3t_0(jk)
+         fse3v (:,:,jk) = e3t_0(jk)
+         fse3f (:,:,jk) = e3t_0(jk)
+         fse3w (:,:,jk) = e3w_0(jk)
+         fse3uw(:,:,jk) = e3w_0(jk)
+         fse3vw(:,:,jk) = e3w_0(jk)
+      END DO
       !
    END SUBROUTINE zgr_zco
 
-#if defined key_zco
-   !!----------------------------------------------------------------------
-   !!   'key_zco' :                                              "pure" zco (gdep & e3 are 1D arrays)
-   !!----------------------------------------------------------------------
-   SUBROUTINE zgr_zps      ! Empty routine
-   END SUBROUTINE zgr_zps
-   SUBROUTINE zgr_sco      ! Empty routine
-   END SUBROUTINE zgr_sco
-
-#else
    !!----------------------------------------------------------------------
    !!   Default option :                      zco, zps and/or sco available (gedp & e3 are 3D arrays)
@@ -1558,5 +1542,4 @@
    END SUBROUTINE zgr_sco
 
-#endif
 
    !!======================================================================
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90	(revision 2240)
@@ -8,17 +8,4 @@
    !!            3.1  !  2009-02  (G. Madec, M. Leclair)  pure z* coordinate
    !!----------------------------------------------------------------------
-#if defined key_zco
-! reference for pure z-coordinate (1D - no i,j and time dependency)
-#   define  fsdept_0(i,j,k)  gdept_0(k)
-#   define  fsdepw_0(i,j,k)  gdepw_0(k)
-#   define  fsde3w_0(i,j,k)  gdepw_0(k)
-#   define  fse3t_0(i,j,k)   e3t_0(k)
-#   define  fse3u_0(i,j,k)   e3t_0(k)
-#   define  fse3v_0(i,j,k)   e3t_0(k)
-#   define  fse3f_0(i,j,k)   e3t_0(k)
-#   define  fse3w_0(i,j,k)   e3w_0(k)
-#   define  fse3uw_0(i,j,k)  e3w_0(k)
-#   define  fse3vw_0(i,j,k)  e3w_0(k)
-#else
 ! reference for s- or zps-coordinate (3D no time dependency)
 #   define  fsdept_0(i,j,k)  gdept(i,j,k)
@@ -32,5 +19,4 @@
 #   define  fse3uw_0(i,j,k)  e3uw(i,j,k)
 #   define  fse3vw_0(i,j,k)  e3vw(i,j,k)
-#endif
 #if defined key_vvl
 ! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._1)
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/divcur.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/divcur.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/divcur.F90	(revision 2240)
@@ -54,5 +54,4 @@
       !!         - compute the now divergence given by :
       !!         hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] )
-      !!      Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the
       !!      above expression
       !!         - apply lateral boundary conditions on hdivn 
@@ -112,14 +111,8 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
-#if defined key_zco
-               hdivn(ji,jj,jk) = (  e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj  ) * un(ji-1,jj  ,jk)      &
-                  &               + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji  ,jj-1) * vn(ji  ,jj-1,jk)  )   &
-                  &            / ( e1t(ji,jj) * e2t(ji,jj) )
-#else
                hdivn(ji,jj,jk) =   &
                   (  e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj  )*fse3u(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)       &
                    + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji  ,jj-1)*fse3v(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)  )    &
                   / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
-#endif
             END DO
          END DO
@@ -266,5 +259,4 @@
       !!      - compute the now divergence given by :
       !!         hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] )
-      !!      Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the 
       !!      above expression
       !!      - apply lateral boundary conditions on hdivn 
@@ -319,14 +311,8 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
-#if defined key_zco
-               hdivn(ji,jj,jk) = (  e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj  ) * un(ji-1,jj  ,jk)      &
-                  &               + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji  ,jj-1) * vn(ji  ,jj-1,jk)  )   & 
-                  / ( e1t(ji,jj) * e2t(ji,jj) )
-#else
                hdivn(ji,jj,jk) =   &
                   (  e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj  )*fse3u(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)       &
                    + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji  ,jj-1)*fse3v(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)  )    &
                   / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
-#endif
             END DO  
          END DO  
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_bilap.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_bilap.F90	(revision 2240)
@@ -162,9 +162,5 @@
                zuf(ji,jj,jk) = fmask(ji,jj,jk) * (  zcv(ji+1,jj  ) - zcv(ji,jj)      &
                   &                            - zcu(ji  ,jj+1) + zcu(ji,jj)  )   &
-#if defined key_zco
-                  &                         / ( e1f(ji,jj)*e2f(ji,jj) )
-#else
                   &       * fse3f(ji,jj,jk) / ( e1f(ji,jj)*e2f(ji,jj) )
-#endif
             END DO  
          END DO  
@@ -173,11 +169,6 @@
          DO jj = 1, jpjm1
             DO ji = 1, fs_jpim1   ! vector opt.
-#if defined key_zco
-               zlu(ji,jj,jk) = e2u(ji,jj) * zlu(ji,jj,jk)
-               zlv(ji,jj,jk) = e1v(ji,jj) * zlv(ji,jj,jk)
-#else
                zlu(ji,jj,jk) = e2u(ji,jj) * fse3u(ji,jj,jk) * zlu(ji,jj,jk)
                zlv(ji,jj,jk) = e1v(ji,jj) * fse3v(ji,jj,jk) * zlv(ji,jj,jk)
-#endif
             END DO
          END DO
@@ -186,9 +177,5 @@
          DO jj = 2, jpj
             DO ji = fs_2, jpi   ! vector opt.
-#if defined key_zco
-               zbt = e1t(ji,jj) * e2t(ji,jj)
-#else
                zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
-#endif
                zut(ji,jj,jk) = (  zlu(ji,jj,jk) - zlu(ji-1,jj  ,jk)   &
                   &             + zlv(ji,jj,jk) - zlv(ji  ,jj-1,jk) ) / zbt
@@ -210,11 +197,6 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
-#if defined key_zco
-               ze2u = e2u(ji,jj)
-               ze2v = e1v(ji,jj)
-#else
                ze2u = e2u(ji,jj) * fse3u(ji,jj,jk)
                ze2v = e1v(ji,jj) * fse3v(ji,jj,jk)
-#endif
                ! horizontal biharmonic diffusive trends
                zua = - ( zuf(ji  ,jj,jk) - zuf(ji,jj-1,jk) ) / ze2u   &
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90	(revision 2240)
@@ -50,5 +50,4 @@
       !!         difu = 1/e1u di[ahmt hdivb] - 1/(e2u*e3u) dj-1[e3f ahmf rotb]
       !!         difv = 1/e2v dj[ahmt hdivb] + 1/(e1v*e3v) di-1[e3f ahmf rotb]
-      !!      If lk_zco=T, e3f=e3u=e3v, the vertical scale factor are simplified
       !!      in the rotational part of the diffusion.
       !!      Add this before trend to the general trend (ua,va):
@@ -87,14 +86,4 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
-#if defined key_zco
-               ! horizontal diffusive trends
-               ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)
-               ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk)
-               zua = - ( ze2u - rotb (ji,jj-1,jk)*fsahmf(ji,jj-1,jk)                   ) / e2u(ji,jj)   &
-                     + ( hdivb(ji+1,jj,jk)*fsahmt(ji+1,jj,jk) - ze1v                   ) / e1u(ji,jj)
-
-               zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk)                   ) / e1v(ji,jj)   &
-                     + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v                   ) / e2v(ji,jj)
-#else
                ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)*fse3f(ji,jj,jk)
                ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk)
@@ -105,5 +94,4 @@
                zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk)*fse3f(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   &
                      + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v                   ) / e2v(ji,jj)
-#endif
 
                ! add it to the general momentum trends
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90	(revision 2240)
@@ -148,9 +148,5 @@
             END DO
          ELSE                            ! partial steps or s-ccordinate
-# if defined key_zco
-            zc = gdept_0(jpkm1)
-# else
             zc = MAXVAL( fsdept(:,:,jpkm1) )
-# endif
             IF( lk_mpp )   CALL mpp_max( zc )   ! max over the global domain
 
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl.F90	(revision 2240)
@@ -180,13 +180,4 @@
          !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes)
          IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN  
-            IF( lk_zco ) THEN
-               DO jk = 1, jpkm1
-                  DO jj = 2, jpjm1
-                     DO ji = fs_2, fs_jpim1   ! vector opt.
-                       zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)                 
-                     END DO
-                  END DO
-               END DO
-            ENDIF
             IF( jn == jp_tem )  pht_adv(:) = ptr_vj( zwy(:,:,:) )
             IF( jn == jp_sal )  pst_adv(:) = ptr_vj( zwy(:,:,:) )
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl2.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl2.F90	(revision 2240)
@@ -202,13 +202,4 @@
          !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes)
          IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN
-            IF( lk_zco ) THEN
-               DO jk = 1, jpkm1
-                  DO jj = 2, jpjm1
-                     DO ji = fs_2, fs_jpim1   ! vector opt.
-                       zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)
-                     END DO
-                  END DO
-               END DO
-            ENDIF
             IF( jn == jp_tem )  pht_adv(:) = ptr_vj( zwy(:,:,:) )
             IF( jn == jp_sal )  pst_adv(:) = ptr_vj( zwy(:,:,:) )
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_ubs.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_ubs.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_ubs.F90	(revision 2240)
@@ -184,13 +184,4 @@
          !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes)
          IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN  
-            IF( lk_zco ) THEN
-               DO jk = 1, jpkm1
-                  DO jj = 2, jpjm1
-                     DO ji = fs_2, fs_jpim1   ! vector opt.
-                       zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)                 
-                     END DO
-                  END DO
-               END DO
-            ENDIF
             IF( jn == jp_tem )  pht_adv(:) = ptr_vj( zwy(:,:,:) )
             IF( jn == jp_sal )  pst_adv(:) = ptr_vj( zwy(:,:,:) )
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traldf_lap.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traldf_lap.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traldf_lap.F90	(revision 2240)
@@ -57,7 +57,4 @@
       !!          difft = 1/(e1t*e2t*e3t) {  di-1[ aht e2u*e3u/e1u di(tb) ]
       !!                                   + dj-1[ aht e1v*e3v/e2v dj(tb) ] }
-      !!     Note: key_zco defined, the e3t=e3u=e3v, the trend becomes:  
-      !!          difft = 1/(e1t*e2t) {  di-1[ aht e2u/e1u di(tb) ]
-      !!                               + dj-1[ aht e1v/e2v dj(tb) ] }
       !!      Add this trend to the general tracer trend pta :
       !!          pta = pta + difft
Index: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/tranxt.F90
===================================================================
--- branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/tranxt.F90	(revision 2239)
+++ branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/tranxt.F90	(revision 2240)
@@ -143,5 +143,5 @@
       ! Leap-Frog + Asselin filter time stepping
       IF( lk_vvl )   THEN   ;   CALL tra_nxt_vvl( kt, 'TRA', tsb, tsn, tsa, jpts )  ! variable volume level (vvl)     
-      ELSE                  ;   CALL tra_nxt_fix( kt,        tsb, tsn, tsa, jpts )  ! fixed    volume level 
+      ELSE                  ;   CALL tra_nxt_fix( kt, 'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level 
       ENDIF
 
@@ -172,5 +172,5 @@
 
 
-   SUBROUTINE tra_nxt_fix( kt, ptb, ptn, pta, kjpt )
+   SUBROUTINE tra_nxt_fix( kt, cdtype, ptb, ptn, pta, kjpt )
       !!----------------------------------------------------------------------
       !!                   ***  ROUTINE tra_nxt_fix  ***
@@ -195,10 +195,10 @@
       !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T)
       !!----------------------------------------------------------------------
-      INTEGER , INTENT(in   )                               ::  kt       ! ocean time-step index
-      INTEGER , INTENT(in   )                               ::  kjpt     ! number of tracers
-      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptb      ! before tracer fields
-      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptn      ! now tracer fields
-      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  pta      ! tracer trend
-      !!
+      INTEGER         , INTENT(in   )                               ::  kt       ! ocean time-step index
+      CHARACTER(len=3), INTENT(in   )                               ::  cdtype   ! =TRA or TRC (tracer indicator)
+      INTEGER         , INTENT(in   )                               ::  kjpt     ! number of tracers
+      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptb      ! before tracer fields
+      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptn      ! now tracer fields
+      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  pta      ! tracer trend
       INTEGER  :: ji, jj, jk, jn   ! dummy loop indices
       REAL(wp) :: ztd, ztm         ! temporary scalars
@@ -222,7 +222,7 @@
       ELSE                                           ! general case (Leapfrog + Asselin filter
          !
-         !                                           ! ----------------------- !
-         IF( ln_dynhpg_imp ) THEN                    ! semi-implicite hpg case !
-            !                                        ! ----------------------- !
+         !                                                     ! ----------------------- !
+         IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN        ! semi-implicite hpg case !
+            !                                                  ! ----------------------- !
             DO jn = 1, kjpt
                DO jk = 1, jpkm1
@@ -317,7 +317,7 @@
       ELSE                                           ! general case (Leapfrog + Asselin filter)
          !
-         !                                           ! ----------------------- !
-         IF( ln_dynhpg_imp ) THEN                    ! semi-implicite hpg case !
-            !                                        ! ----------------------- !
+         !                                                     ! ----------------------- !
+         IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN        ! semi-implicite hpg case !
+            !                                                  ! ----------------------- !
             DO jn = 1, kjpt                          
                DO jk = 1, jpkm1
