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 11949 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/trcrst.F90 – NEMO

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (5 years ago)
Author:
acc
Message:

Merge in changes from 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. This just creates a fresh copy of this branch to use as the merge base. See ticket #2341

Location:
NEMO/branches/2019/dev_r11943_MERGE_2019/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src

    • Property svn:mergeinfo deleted
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/trcrst.F90

    r11536 r11949  
    7676 
    7777      ! to get better performances with NetCDF format: 
    78       ! we open and define the tracer restart file one tracer time step before writing the data (-> at nitrst - 2*nn_dttrc + 1) 
    79       ! except if we write tracer restart files every tracer time step or if a tracer restart file was writen at nitend - 2*nn_dttrc + 1 
    80       IF( kt == nitrst - 2*nn_dttrc .OR. nn_stock == nn_dttrc .OR. ( kt == nitend - nn_dttrc .AND. .NOT. lrst_trc ) ) THEN 
     78      ! we open and define the tracer restart file one tracer time step before writing the data (-> at nitrst - 1) 
     79      ! except if we write tracer restart files every tracer time step or if a tracer restart file was writen at nitend - 1 
     80      IF( kt == nitrst - 1 .OR. nn_stock == 1 .OR. ( kt == nitend - 1 .AND. .NOT. lrst_trc ) ) THEN 
    8181         ! beware of the format used to write kt (default is i8.8, that should be large enough) 
    8282         IF( nitrst > 1.0e9 ) THEN   ;   WRITE(clkt,*       ) nitrst 
     
    9696   END SUBROUTINE trc_rst_opn 
    9797 
    98    SUBROUTINE trc_rst_read 
     98   SUBROUTINE trc_rst_read( Kbb, Kmm ) 
    9999      !!---------------------------------------------------------------------- 
    100100      !!                    ***  trc_rst_opn  *** 
     
    102102      !! ** purpose  :   read passive tracer fields in restart files 
    103103      !!---------------------------------------------------------------------- 
     104      INTEGER, INTENT( in ) ::   Kbb, Kmm  ! time level indices 
    104105      INTEGER  ::  jn      
    105106 
     
    112113      ! READ prognostic variables and computes diagnostic variable 
    113114      DO jn = 1, jptra 
    114          CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
    115       END DO 
    116  
    117       DO jn = 1, jptra 
    118          CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
     115         CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) 
     116      END DO 
     117 
     118      DO jn = 1, jptra 
     119         CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) 
    119120      END DO 
    120121      ! 
     
    123124   END SUBROUTINE trc_rst_read 
    124125 
    125    SUBROUTINE trc_rst_wri( kt ) 
     126   SUBROUTINE trc_rst_wri( kt, Kbb, Kmm, Krhs ) 
    126127      !!---------------------------------------------------------------------- 
    127128      !!                    ***  trc_rst_wri  *** 
     
    129130      !! ** purpose  :   write passive tracer fields in restart files 
    130131      !!---------------------------------------------------------------------- 
    131       INTEGER, INTENT( in ) ::   kt    ! ocean time-step index 
     132      INTEGER, INTENT( in ) ::   kt              ! ocean time-step index 
     133      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! time level indices 
    132134      !! 
    133135      INTEGER  :: jn 
     
    138140      ! --------------------  
    139141      DO jn = 1, jptra 
    140          CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
    141       END DO 
    142  
    143       DO jn = 1, jptra 
    144          CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
     142         CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) 
     143      END DO 
     144 
     145      DO jn = 1, jptra 
     146         CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) 
    145147      END DO 
    146148      ! 
     
    148150     
    149151      IF( kt == nitrst ) THEN 
    150           CALL trc_rst_stat            ! statistics 
     152          CALL trc_rst_stat( Kmm, Krhs )             ! statistics 
    151153          CALL iom_close( numrtw )     ! close the restart file (only at last time step) 
    152154#if ! defined key_trdmxl_trc 
     
    219221            ENDIF 
    220222            ! Control of date  
    221             IF( nittrc000  - NINT( zkt ) /= nn_dttrc .AND.  nn_rsttr /= 0 )                                  & 
     223            IF( nittrc000  - NINT( zkt ) /= 1 .AND.  nn_rsttr /= 0 )                                  & 
    222224               &   CALL ctl_stop( ' ===>>>> : problem with nittrc000 for the restart',                 & 
    223225               &                  ' verify the restart file or rerun with nn_rsttr = 0 (namelist)' ) 
     
    299301 
    300302 
    301    SUBROUTINE trc_rst_stat 
     303   SUBROUTINE trc_rst_stat( Kmm, Krhs ) 
    302304      !!---------------------------------------------------------------------- 
    303305      !!                    ***  trc_rst_stat  *** 
     
    305307      !! ** purpose  :   Compute tracers statistics 
    306308      !!---------------------------------------------------------------------- 
     309      INTEGER, INTENT( in ) ::   Kmm, Krhs  ! time level indices 
    307310      INTEGER  :: jk, jn 
    308311      REAL(wp) :: ztraf, zmin, zmax, zmean, zdrift 
     
    317320      ! 
    318321      DO jk = 1, jpk 
    319          zvol(:,:,jk) = e1e2t(:,:) * e3t_a(:,:,jk) * tmask(:,:,jk) 
    320       END DO 
    321       ! 
    322       DO jn = 1, jptra 
    323          ztraf = glob_sum( 'trcrst', trn(:,:,:,jn) * zvol(:,:,:) ) 
    324          zmin  = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    325          zmax  = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     322         zvol(:,:,jk) = e1e2t(:,:) * e3t(:,:,jk,Krhs) * tmask(:,:,jk) 
     323      END DO 
     324      ! 
     325      DO jn = 1, jptra 
     326         ztraf = glob_sum( 'trcrst', tr(:,:,:,jn,Kmm) * zvol(:,:,:) ) 
     327         zmin  = MINVAL( tr(:,:,:,jn,Kmm), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     328         zmax  = MAXVAL( tr(:,:,:,jn,Kmm), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    326329         IF( lk_mpp ) THEN 
    327330            CALL mpp_min( 'trcrst', zmin )      ! min over the global domain 
     
    343346   !!---------------------------------------------------------------------- 
    344347CONTAINS 
    345    SUBROUTINE trc_rst_read                      ! Empty routines 
     348   SUBROUTINE trc_rst_read( Kbb, Kmm)                      ! Empty routines 
     349      INTEGER, INTENT( in ) :: Kbb, Kmm  ! time level indices 
    346350   END SUBROUTINE trc_rst_read 
    347    SUBROUTINE trc_rst_wri( kt ) 
    348       INTEGER, INTENT ( in ) :: kt 
     351   SUBROUTINE trc_rst_wri( kt, Kbb, Kmm, Krhs ) 
     352      INTEGER, INTENT( in ) :: kt 
     353      INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs  ! time level indices 
    349354      WRITE(*,*) 'trc_rst_wri: You should not have seen this print! error?', kt 
    350355   END SUBROUTINE trc_rst_wri    
Note: See TracChangeset for help on using the changeset viewer.