New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1100 for trunk/NEMO/TOP_SRC/trcrst.F90 – NEMO

Ignore:
Timestamp:
2008-06-09T13:01:16+02:00 (16 years ago)
Author:
cetlod
Message:

Call to write restart in TOP not properly done,see ticket:43

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/trcrst.F90

    r1077 r1100  
    6363      !!---------------------------------------------------------------------- 
    6464      ! 
    65       IF( kt == nit000 )  THEN 
    66          lrst_trc = .FALSE. 
     65      IF( kt == nit000 ) lrst_trc = .FALSE.  
    6766# if defined key_off_tra 
    68          nitrst = nitend  ! in online version, already done in rst_opn routine defined in restart.F90 module 
    69 # endif 
     67      IF( MOD( kt - 1, nstock ) == 0 ) THEN 
     68         ! we use kt - 1 and not kt - nit000 to keep the same periodicity from the beginning of the experiment 
     69         nitrst = kt + nstock - 1                  ! define the next value of nitrst for restart writing 
     70         IF( nitrst > nitend )   nitrst = nitend   ! make sure we write a restart at the end of the run 
    7071      ENDIF 
     72#endif 
    7173       
    7274      IF( kt == nitrst - ndttrc .OR. nitend - nit000 + 1 < 2 * ndttrc ) THEN 
     
    308310      !!---------------------------------------------------------------------- 
    309311 
    310       IF( MOD( kt, nstock ) == 0 .OR. kt == nitend ) THEN 
    311  
    312          ! 0. initialisations 
    313          ! ------------------ 
     312      IF(  kt == nitrst ) THEN 
    314313         IF(lwp) WRITE(numout,*) 
    315314         IF(lwp) WRITE(numout,*) 'trc_wri : write the TOP restart file (NetCDF) at it= ', kt, ' date= ', ndastp 
    316315         IF(lwp) WRITE(numout,*) '~~~~~~~' 
    317  
    318  
    319          CALL iom_rstput( kt, nitrst, numrtw, 'kt'   ,  REAL( kt, wp )  ) 
    320  
    321          IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN 
    322             CALL iom_rstput( kt, nitrst, numrtw, 'arak0', 1. ) 
    323          ELSE 
    324             CALL iom_rstput( kt, nitrst, numrtw, 'arak0', 0. ) 
    325          ENDIF 
     316      ENDIF 
     317 
     318      CALL iom_rstput( kt, nitrst, numrtw, 'kt'   ,  REAL( kt, wp )  ) 
     319      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN 
     320         CALL iom_rstput( kt, nitrst, numrtw, 'arak0', 1. ) 
     321      ELSE 
     322         CALL iom_rstput( kt, nitrst, numrtw, 'arak0', 0. ) 
     323      ENDIF 
    326324 
    327325 
    328326         ! prognostic variables 
    329327         ! -------------------- 
    330          DO jn = 1, jptra 
    331             CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
    332          END DO 
    333  
    334          DO jn = 1, jptra 
    335             CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
    336          END DO 
     328      DO jn = 1, jptra 
     329         CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
     330      END DO 
     331 
     332      DO jn = 1, jptra 
     333         CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
     334      END DO 
    337335 
    338336#if defined key_lobster 
    339          CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 
    340          CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 
     337      CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 
     338      CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 
    341339#endif 
    342340 
    343341#if defined key_pisces 
    344          CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
    345          CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
     342      CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
     343      CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
    346344#endif 
    347345 
    348346#if defined key_cfc 
    349          DO jn = jp_cfc0, jp_cfc1 
    350             CALL iom_rstput( kt, nitrst, numrtw, 'qint'//ctrcnm(jn), qint(:,:,jn) ) 
    351             CALL iom_rstput( kt, nitrst, numrtw, 'qtr'//ctrcnm(jn) , qtr (:,:,jn) ) 
    352          END DO 
    353 #endif 
    354  
    355  
    356          IF(lwp) WRITE(numout,*) '----TRACER STAT----' 
    357  
    358          zdiag_tot = 0.e0 
    359          DO jn = 1, jptra 
    360             zdiag_var    = 0.e0 
    361             zdiag_varmin = 0.e0 
    362             zdiag_varmax = 0.e0 
    363             DO ji = 1, jpi 
    364                DO jj = 1, jpj 
    365                   DO jk = 1,jpk 
    366                      zdiag_var = zdiag_var + trn(ji,jj,jk,jn) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
     347      DO jn = jp_cfc0, jp_cfc1 
     348         CALL iom_rstput( kt, nitrst, numrtw, 'qint'//ctrcnm(jn), qint(:,:,jn) ) 
     349         CALL iom_rstput( kt, nitrst, numrtw, 'qtr'//ctrcnm(jn) , qtr (:,:,jn) ) 
     350      END DO 
     351#endif 
     352 
     353       IF( kt == nitrst ) THEN 
     354          IF(lwp) WRITE(numout,*) '----TRACER STAT----' 
     355 
     356          zdiag_tot = 0.e0 
     357          DO jn = 1, jptra 
     358             zdiag_var    = 0.e0 
     359             zdiag_varmin = 0.e0 
     360             zdiag_varmax = 0.e0 
     361             DO ji = 1, jpi 
     362                DO jj = 1, jpj 
     363                   DO jk = 1,jpk 
     364                      zdiag_var = zdiag_var + trn(ji,jj,jk,jn) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
    367365#if defined key_off_degrad 
    368                         &   * facvol(ji,jj,jk)   & 
    369 #endif 
    370                         &   * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    371                   END DO 
    372                END DO 
    373             END DO 
    374  
    375             zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    376             zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    377  
    378             IF( lk_mpp ) THEN 
    379                CALL mpp_min( zdiag_varmin )      ! min over the global domain 
    380                CALL mpp_max( zdiag_varmax )      ! max over the global domain 
    381                CALL mpp_sum( zdiag_var    )      ! sum over the global domain 
    382             END IF 
    383  
    384             zdiag_tot = zdiag_tot + zdiag_var 
    385             zdiag_var = zdiag_var / areatot 
    386  
    387             IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   & 
    388                &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax 
    389          END DO 
    390  
    391          zder = ( ( zdiag_tot - trai ) / ( trai + 1.e-12 )  ) * 100._wp 
    392          IF(lwp) WRITE(numout,*) '   Integral of all tracers over the full domain  = ', zdiag_tot 
    393          IF(lwp) WRITE(numout,*) '   Drift of the sum of all tracers =', zder, ' %' 
    394  
    395          CALL iom_close(numrtw) 
    396          ! 
    397       ENDIF 
     366                         &   * facvol(ji,jj,jk)   & 
     367#endif 
     368                         &   * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     369                   END DO 
     370                END DO 
     371             END DO 
     372              
     373             zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     374             zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     375             IF( lk_mpp ) THEN 
     376                CALL mpp_min( zdiag_varmin )      ! min over the global domain 
     377                CALL mpp_max( zdiag_varmax )      ! max over the global domain 
     378                CALL mpp_sum( zdiag_var    )      ! sum over the global domain 
     379             END IF 
     380             zdiag_tot = zdiag_tot + zdiag_var 
     381             zdiag_var = zdiag_var / areatot 
     382             IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   & 
     383                &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax 
     384          END DO 
     385           
     386          zder = ( ( zdiag_tot - trai ) / ( trai + 1.e-12 )  ) * 100._wp 
     387          IF(lwp) WRITE(numout,*) '   Integral of all tracers over the full domain  = ', zdiag_tot 
     388          IF(lwp) WRITE(numout,*) '   Drift of the sum of all tracers =', zder, ' %' 
     389           
     390          CALL iom_close( numrtw )     ! close the restart file (only at last time step) 
     391          lrst_trc = .FALSE. 
     392       ENDIF 
    398393      ! 
    399394   END SUBROUTINE trc_rst_wri 
Note: See TracChangeset for help on using the changeset viewer.