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 6971 for branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/trcstp.F90 – NEMO

Ignore:
Timestamp:
2016-10-03T09:52:43+02:00 (8 years ago)
Author:
clem
Message:

update from 3.6 stable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/trcstp.F90

    r6204 r6971  
    3333   REAL(wp) :: rdt_sampl 
    3434   INTEGER  :: nb_rec_per_day 
    35    INTEGER  :: isecfst, iseclast 
     35   REAL(wp) :: rsecfst, rseclast 
    3636   LOGICAL  :: llnew 
    3737 
     
    5959      REAL(wp)              ::  ztrai 
    6060      CHARACTER (len=25)    ::  charout  
    61  
    6261      !!------------------------------------------------------------------- 
    6362      ! 
     
    9493                                   CALL trc_sms      ( kt )       ! tracers: sinks and sources 
    9594                                   CALL trc_trp      ( kt )       ! transport of passive tracers 
     95 
    9696         IF( kt == nittrc000 ) THEN 
    9797            CALL iom_close( numrtr )       ! close input tracer restart file 
     
    105105      ENDIF 
    106106      ! 
     107 
    107108      ztrai = 0._wp                                                   !  content of all tracers 
    108109      DO jn = 1, jptra 
     
    110111      END DO 
    111112      IF( lwp ) WRITE(numstr,9300) kt,  ztrai / areatot 
    112 9300  FORMAT(i10,e18.10) 
     1139300  FORMAT(i10,D23.16) 
    113114      ! 
    114115      IF( nn_timing == 1 )   CALL timing_stop('trc_stp') 
     
    130131      INTEGER, INTENT(in) ::   kt 
    131132      INTEGER  :: jn 
     133      REAL(wp) :: zkt 
     134      CHARACTER(len=1)               ::   cl1                      ! 1 character 
     135      CHARACTER(len=2)               ::   cl2                      ! 2 characters 
    132136 
    133137      IF( kt == nittrc000 ) THEN 
    134138         IF( ln_cpl )  THEN   
    135             rdt_sampl = 86400. / ncpl_qsr_freq 
     139            rdt_sampl = rday / ncpl_qsr_freq 
    136140            nb_rec_per_day = ncpl_qsr_freq 
    137141         ELSE   
    138             rdt_sampl = MAX( 3600., rdt * nn_dttrc ) 
    139             nb_rec_per_day = INT( 86400 / rdt_sampl ) 
     142            rdt_sampl = MAX( 3600., rdttrc(1) ) 
     143            nb_rec_per_day = INT( rday / rdt_sampl ) 
    140144         ENDIF 
    141145         ! 
     
    146150         ENDIF 
    147151         ! 
     152         ALLOCATE( qsr_arr(jpi,jpj,nb_rec_per_day ) ) 
     153         ! 
    148154         !                                            !* Restart: read in restart file 
    149          IF( ln_rsttr .AND. iom_varid( numrtr, 'qsr_mean', ldstop = .FALSE. ) > 0 ) THEN  
    150             IF(lwp) WRITE(numout,*) 'trc_qsr_mean:   qsr_mean read in the restart file' 
     155         IF( ln_rsttr .AND. iom_varid( numrtr, 'qsr_mean' , ldstop = .FALSE. ) > 0 .AND. & 
     156                            iom_varid( numrtr, 'qsr_arr_1', ldstop = .FALSE. ) > 0 .AND. & 
     157                            iom_varid( numrtr, 'ktdcy'    , ldstop = .FALSE. ) > 0 ) THEN  
     158            CALL iom_get( numrtr, 'ktdcy', zkt )   !  A mean of qsr 
     159            rsecfst = INT( zkt ) * rdttrc(1) 
     160            IF(lwp) WRITE(numout,*) 'trc_qsr_mean:   qsr_mean read in the restart file at time-step rsecfst =', rsecfst, ' s ' 
    151161            CALL iom_get( numrtr, jpdom_autoglo, 'qsr_mean', qsr_mean )   !  A mean of qsr 
     162            DO jn = 1, nb_rec_per_day  
     163             IF( jn <= 9 )  THEN 
     164               WRITE(cl1,'(i1)') jn 
     165               CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl1, qsr_arr(:,:,jn) )   !  A mean of qsr 
     166             ELSE 
     167               WRITE(cl2,'(i2.2)') jn 
     168               CALL iom_get( numrtr, jpdom_autoglo, 'qsr_arr_'//cl2, qsr_arr(:,:,jn) )   !  A mean of qsr 
     169             ENDIF 
     170           ENDDO 
    152171         ELSE                                         !* no restart: set from nit000 values 
    153172            IF(lwp) WRITE(numout,*) 'trc_qsr_mean:   qsr_mean set to nit000 values' 
     173            rsecfst  = kt * rdttrc(1) 
     174            ! 
    154175            qsr_mean(:,:) = qsr(:,:) 
    155          ENDIF 
    156          ! 
    157          ALLOCATE( qsr_arr(jpi,jpj,nb_rec_per_day ) ) 
    158          DO jn = 1, nb_rec_per_day 
    159              qsr_arr(:,:,jn) = qsr_mean(:,:) 
    160          ENDDO 
    161          ! 
    162          isecfst  = nsec_year + nsec1jan000   !   number of seconds between Jan. 1st 00h of nit000 year and the middle of time step 
    163          iseclast = isecfst 
    164          ! 
    165       ENDIF 
    166       ! 
    167       iseclast = nsec_year + nsec1jan000 
    168       llnew   = ( iseclast - isecfst )  > INT( rdt_sampl )   !   new shortwave to store 
    169       IF( kt /= nittrc000 .AND. llnew ) THEN 
     176            DO jn = 1, nb_rec_per_day 
     177               qsr_arr(:,:,jn) = qsr_mean(:,:) 
     178            ENDDO 
     179         ENDIF 
     180         ! 
     181      ENDIF 
     182      ! 
     183      rseclast = kt * rdttrc(1) 
     184      ! 
     185      llnew   = ( rseclast - rsecfst ) .ge.  rdt_sampl    !   new shortwave to store 
     186      IF( llnew ) THEN 
    170187          IF( lwp ) WRITE(numout,*) ' New shortwave to sample for TOP at time kt = ', kt, & 
    171              &                      ' time = ', (iseclast+rdt*nn_dttrc/2.)/3600.,'hours ' 
    172           isecfst = iseclast 
     188             &                      ' time = ', rseclast/3600.,'hours ' 
     189          rsecfst = rseclast 
    173190          DO jn = 1, nb_rec_per_day - 1 
    174191             qsr_arr(:,:,jn) = qsr_arr(:,:,jn+1) 
     
    182199         IF(lwp) WRITE(numout,*) 'trc_mean_qsr : write qsr_mean in restart file  kt =', kt 
    183200         IF(lwp) WRITE(numout,*) '~~~~~~~' 
     201         zkt = REAL( kt, wp ) 
     202         CALL iom_rstput( kt, nitrst, numrtw, 'ktdcy', zkt ) 
     203          DO jn = 1, nb_rec_per_day  
     204             IF( jn <= 9 )  THEN 
     205               WRITE(cl1,'(i1)') jn 
     206               CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl1, qsr_arr(:,:,jn) ) 
     207             ELSE 
     208               WRITE(cl2,'(i2.2)') jn 
     209               CALL iom_rstput( kt, nitrst, numrtw, 'qsr_arr_'//cl2, qsr_arr(:,:,jn) ) 
     210             ENDIF 
     211         ENDDO 
    184212         CALL iom_rstput( kt, nitrst, numrtw, 'qsr_mean', qsr_mean(:,:) ) 
    185213      ENDIF 
    186      ! 
     214      ! 
    187215   END SUBROUTINE trc_mean_qsr 
    188216 
Note: See TracChangeset for help on using the changeset viewer.