Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90	(revision 2963)
@@ -394,9 +394,5 @@
 
      ! Total primary production per year
-#if defined key_degrad
-     tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:) * facvol(:,:,:) )
-#else
-     tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:)  )
-#endif
+     tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) )
 
      IF( kt == nitend .AND. jnt == nrdttrc .AND. lwp ) THEN
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90	(revision 2963)
@@ -250,6 +250,5 @@
       ! -------------------------------------------------------------
 
-      zdenitot = glob_sum(  ( denitr(:,:,:) * rdenit + denitnh4(:,:,:) * rdenita ) *  &
-         &                   e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:) * xnegtr(:,:,:) )
+      zdenitot = glob_sum(  ( denitr(:,:,:) * rdenit + denitnh4(:,:,:) * rdenita ) * cvol(:,:,:) ) 
 
       ! Potential nitrogen fixation dependant on temperature and iron
@@ -276,5 +275,5 @@
       END DO
 
-      znitrpottot = glob_sum( znitrpot(:,:,:) * e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:) )
+      znitrpottot = glob_sum( znitrpot(:,:,:) * cvol(:,:,:) )
 
       ! Nitrogen change due to nitrogen fixation
@@ -356,5 +355,5 @@
             DO jj = 1, jpj
                DO ji = 1, jpi
-                  zcoef = ryyss * e1e2t(ji,jj) * fse3t(ji,jj,1) * tmask(ji,jj,1) 
+                  zcoef = ryyss * cvol(ji,jj,1) 
                   cotdep(ji,jj) =   sf_riverdic(1)%fnow(ji,jj,1)                                  * 1E9 / ( 12. * zcoef + rtrn )
                   rivinp(ji,jj) = ( sf_riverdic(1)%fnow(ji,jj,1) + sf_riverdoc(1)%fnow(ji,jj,1) ) * 1E9 / ( 31.6* zcoef + rtrn )
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90	(revision 2963)
@@ -144,7 +144,5 @@
       REAL(wp) ::  silmean = 91.51     ! mean value of silicate
       !
-      INTEGER  :: jk
       REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
       !!---------------------------------------------------------------------
 
@@ -157,18 +155,10 @@
          !                                                    ! --------------------------- !
          ! set total alkalinity, phosphate, nitrate & silicate
-         ALLOCATE( zvolume(jpi,jpj,jpk) )
-         !                                                              ! masked grid volume
-         DO jk = 1, jpk
-            zvolume(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
-         ENDDO 
-#if defined key_degrad
-         zvolume(:,:,:) = zvolume(:,:,:) * facvol(:,:,:)
-#endif
-         zarea          = 1._wp / glob_sum( zvolume(:,:,:) ) * 1e6              
-
-         zalksum = glob_sum( trn(:,:,:,jptal) * zvolume(:,:,:)  ) * zarea
-         zpo4sum = glob_sum( trn(:,:,:,jppo4) * zvolume(:,:,:)  ) * zarea / 122.
-         zno3sum = glob_sum( trn(:,:,:,jpno3) * zvolume(:,:,:)  ) * zarea / 7.6
-         zsilsum = glob_sum( trn(:,:,:,jpsil) * zvolume(:,:,:)  ) * zarea
+         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6              
+
+         zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea
+         zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea / 122.
+         zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea / 7.6
+         zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea
  
          IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90	(revision 2963)
@@ -104,6 +104,6 @@
       
       ! Local declarations
-      INTEGER  ::  ji, jj, jk, jn     ! dummy loop indices
-      REAL(wp) :: zvolk, ztrcorb, ztrmasb   ! temporary scalars
+      INTEGER  :: ji, jj, jk, jn     ! dummy loop indices
+      REAL(wp) :: ztrcorb, ztrmasb   ! temporary scalars
       REAL(wp) :: zcoef, ztrcorn, ztrmasn   !    "         "
       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrtrdb  ! workspace arrays
@@ -137,16 +137,12 @@
                DO jj = 1, jpj
                   DO ji = 1, jpi
-                     zvolk  = e1e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk)
-# if defined key_degrad
-                     zvolk  = zvolk * facvol(ji,jj,jk)
-# endif
-                     ztrcorb = ztrcorb + MIN( 0., ptrb(ji,jj,jk,jn) ) * zvolk
-                     ztrcorn = ztrcorn + MIN( 0., ptrn(ji,jj,jk,jn) ) * zvolk
+                     ztrcorb = ztrcorb + MIN( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk)
+                     ztrcorn = ztrcorn + MIN( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk)
 
                      ptrb(ji,jj,jk,jn) = MAX( 0., ptrb(ji,jj,jk,jn) )
                      ptrn(ji,jj,jk,jn) = MAX( 0., ptrn(ji,jj,jk,jn) )
 
-                     ztrmasb = ztrmasb + ptrb(ji,jj,jk,jn) * zvolk
-                     ztrmasn = ztrmasn + ptrn(ji,jj,jk,jn) * zvolk
+                     ztrmasb = ztrmasb + ptrb(ji,jj,jk,jn) * cvol(ji,jj,jk)
+                     ztrmasn = ztrmasn + ptrn(ji,jj,jk,jn) * cvol(ji,jj,jk)
                   END DO
                END DO
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trc.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trc.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trc.F90	(revision 2963)
@@ -36,6 +36,7 @@
    !! passive tracers fields (before,now,after)
    !! --------------------------------------------------
-   REAL(wp), PUBLIC ::   trai                          !: initial total tracer
-   REAL(wp), PUBLIC ::   areatot                       !: total volume 
+   REAL(wp), PUBLIC ::   trai                                           !: initial total tracer
+   REAL(wp), PUBLIC ::   areatot                                        !: total volume 
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) ::   cvol   !: ocean volume
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) ::   trn    !: traceur concentration for now time step
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) ::   tra    !: traceur concentration for next time step
@@ -115,4 +116,5 @@
          &      tra (jpi,jpj,jpk,jptra) ,                           &
          &      trb (jpi,jpj,jpk,jptra) ,                           &
+         &      cvol(jpi,jpj,jpk      ) ,                           &
          &      gtru(jpi,jpj    ,jptra) , gtrv(jpi,jpj,jptra) ,     &
 # if defined key_diatrc && ! defined key_iomput
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcini.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcini.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcini.F90	(revision 2963)
@@ -58,6 +58,4 @@
       !
       INTEGER                                       ::   jk, jn    ! dummy loop indices
-      REAL(wp)                                      :: zareatot
-      REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
       CHARACTER (len=25)                            :: charout
       !!---------------------------------------------------------------------
@@ -68,6 +66,4 @@
 
       CALL top_alloc()              ! allocate TOP arrays
-
-      ALLOCATE( zvolume(jpi,jpj,jpk) )
 
       CALL trc_nam                  ! read passive tracers namelists
@@ -141,14 +137,14 @@
       !                                                              ! masked grid volume
       DO jk = 1, jpk
-         zvolume(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
+         cvol(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
       ENDDO
 #if defined key_degrad
-      zvolume(:,:,:) = zvolume(:,:,:) * facvol(:,:,:)
-#endif
-      zareatot       = glob_sum( zvolume(:,:,:) )                    ! total volume of ocean
+      cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)
+#endif
+      areatot     = glob_sum( cvol(:,:,:) )                    ! total volume of ocean
 
       trai = 0._wp                                                   ! initial content of all tracers
       DO jn = 1, jptra
-         trai = trai + glob_sum( trn(:,:,:,jn) * zvolume(:,:,:)   )
+         trai = trai + glob_sum( trn(:,:,:,jn) * cvol(:,:,:)   )
       END DO      
 
@@ -157,5 +153,5 @@
          WRITE(numout,*)
          WRITE(numout,*) '          *** Total number of passive tracer jptra = ', jptra
-         WRITE(numout,*) '          *** Total volume of ocean                = ', zareatot
+         WRITE(numout,*) '          *** Total volume of ocean                = ', areatot
          WRITE(numout,*) '          *** Total inital content of all tracers  = ', trai
          WRITE(numout,*)
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcrst.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcrst.F90	(revision 2963)
@@ -285,6 +285,5 @@
       INTEGER  :: jk, jn
       REAL(wp) :: zdiag_var, zdiag_varmin, zdiag_varmax, zdiag_tot
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
-      REAL(wp) :: zareatot, zder
+      REAL(wp) :: zder
       !!----------------------------------------------------------------------
 
@@ -294,17 +293,8 @@
          WRITE(numout,*) 
       ENDIF
-      !                                                              ! masked grid volume
-      ALLOCATE( zvolume(jpi,jpj,jpk) )
-      DO jk = 1, jpk
-         zvolume(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)
-      ENDDO 
-#if defined key_degrad
-      zvolume(:,:,:) = zvolume(:,:,:) * facvol(:,:,:)
-#endif
-      zareatot       = glob_sum( zvolume(:,:,:) )                    ! total volume of ocean
       !
       zdiag_tot = 0.e0
       DO jn = 1, jptra
-         zdiag_var    = glob_sum( trn(:,:,:,jn) * zvolume(:,:,:)   )
+         zdiag_var    = glob_sum( trn(:,:,:,jn) * cvol(:,:,:)   )
          zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) )
          zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) )
@@ -314,5 +304,5 @@
          END IF
          zdiag_tot = zdiag_tot + zdiag_var
-         zdiag_var = zdiag_var / zareatot
+         zdiag_var = zdiag_var / areatot
          IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   &
             &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax
Index: branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
===================================================================
--- branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcstp.F90	(revision 2960)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcstp.F90	(revision 2963)
@@ -27,5 +27,7 @@
 
    PUBLIC   trc_stp    ! called by step
-   
+
+   !! * Substitutions
+#  include "domzgr_substitute.h90"
    !!----------------------------------------------------------------------
    !! NEMO/TOP 3.3 , NEMO Consortium (2010)
@@ -46,6 +48,23 @@
       !!-------------------------------------------------------------------
       INTEGER, INTENT( in ) ::  kt  ! ocean time-step index
+      INTEGER               ::  jk  !
       CHARACTER (len=25)    ::  charout
       !!-------------------------------------------------------------------
+      !
+      IF( kt == nit000 ) THEN
+                               CALL iom_close( numrtr )     ! close input  passive tracers restart file
+         IF( lk_trdmld_trc  )  CALL trd_mld_trc_init        ! trends: Mixed-layer
+      ENDIF
+      !
+      IF( lk_vvl ) THEN                              ! update ocean volume due to ssh temporal evolution
+         DO jk = 1, jpk
+            cvol(:,:,jk) = e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk)
+         END DO
+#if defined key_off_degrad
+         cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)      ! degrad option: reduction by facvol
+#endif
+         areatot     = glob_sum( cvol(:,:,:) )
+      ENDIF
+      !    
 
       IF( MOD( kt - 1 , nn_dttrc ) == 0 ) THEN      ! only every nn_dttrc time step
@@ -58,6 +77,4 @@
          tra(:,:,:,:) = 0.e0
          !
-         IF( kt == nit000 .AND. lk_trdmld_trc  )  &
-            &                      CALL trd_mld_trc_init        ! trends: Mixed-layer
                                    CALL trc_rst_opn( kt )       ! Open tracer restart file 
          IF( lk_iomput ) THEN  ;   CALL trc_wri( kt )           ! output of passive tracers
@@ -66,5 +83,4 @@
                                    CALL trc_sms( kt )           ! tracers: sink and source
                                    CALL trc_trp( kt )           ! transport of passive tracers
-         IF( kt == nit000 )     CALL iom_close( numrtr )     ! close input  passive tracers restart file
          IF( lrst_trc )            CALL trc_rst_wri( kt )       ! write tracer restart file
          IF( lk_trdmld_trc  )      CALL trd_mld_trc( kt )       ! trends: Mixed-layer
