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 2957)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90	(revision 2959)
@@ -145,5 +145,5 @@
 
       REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum
-      REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
       !!---------------------------------------------------------------------
 
@@ -156,7 +156,9 @@
          !                                                    ! --------------------------- !
          ! set total alkalinity, phosphate, nitrate & silicate
-         ALLOCATE( zvolume(ji,jj,jk) )
+         ALLOCATE( zvolume(jpi,jpj,jpk) )
          !                                                              ! masked grid volume
-         zvolume(:,:,:) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
+         DO jk = 1, jpk
+            zvolume(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
+         ENDDO 
 #if defined key_degrad
          zvolume(:,:,:) = zvolume(:,:,:) * facvol(:,:,:)
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 2957)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcini.F90	(revision 2959)
@@ -69,5 +69,5 @@
       CALL top_alloc()              ! allocate TOP arrays
 
-      ALLOCATE( zvolume(ji,jj,jk) )
+      ALLOCATE( zvolume(jpi,jpj,jpk) )
 
       CALL trc_nam                  ! read passive tracers namelists
@@ -140,5 +140,7 @@
 
       !                                                              ! masked grid volume
-      zvolume(:,:,:) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
+      DO jk = 1, jpk
+         zvolume(:,:,jk) = e1e2t(:,:)  * fse3t(:,:,jk) * tmask(:,:,jk)   
+      ENDDO
 #if defined key_degrad
       zvolume(:,:,:) = zvolume(:,:,:) * facvol(:,:,:)
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 2957)
+++ branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/trcrst.F90	(revision 2959)
@@ -286,5 +286,6 @@
       INTEGER  :: jn
       REAL(wp) :: zdiag_var, zdiag_varmin, zdiag_varmax, zdiag_tot
-      REAL(wp) :: zder
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zvolume     ! volume of ocean
+      REAL(wp) :: zareatot, zder
       !!----------------------------------------------------------------------
 
@@ -295,12 +296,17 @@
          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
-#  if defined key_degrad
-         zdiag_var = glob_sum( trn(:,:,:,jn) * e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:) * facvol(:,:,:) )
-#  else
-         zdiag_var = glob_sum( trn(:,:,:,jn) * e1e2t(:,:) * fse3t(:,:,:) * tmask(:,:,:)   )
-#  endif
+         zdiag_var    = glob_sum( trn(:,:,:,jn) * zvolume(:,:,:)   )
          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.)) )
@@ -310,5 +316,5 @@
          END IF
          zdiag_tot = zdiag_tot + zdiag_var
-         zdiag_var = zdiag_var / areatot
+         zdiag_var = zdiag_var / zareatot
          IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   &
             &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax
