- Timestamp:
- 2016-10-03T09:52:43+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r6204 r6971 33 33 REAL(wp) :: rdt_sampl 34 34 INTEGER :: nb_rec_per_day 35 INTEGER :: isecfst, iseclast35 REAL(wp) :: rsecfst, rseclast 36 36 LOGICAL :: llnew 37 37 … … 59 59 REAL(wp) :: ztrai 60 60 CHARACTER (len=25) :: charout 61 62 61 !!------------------------------------------------------------------- 63 62 ! … … 94 93 CALL trc_sms ( kt ) ! tracers: sinks and sources 95 94 CALL trc_trp ( kt ) ! transport of passive tracers 95 96 96 IF( kt == nittrc000 ) THEN 97 97 CALL iom_close( numrtr ) ! close input tracer restart file … … 105 105 ENDIF 106 106 ! 107 107 108 ztrai = 0._wp ! content of all tracers 108 109 DO jn = 1, jptra … … 110 111 END DO 111 112 IF( lwp ) WRITE(numstr,9300) kt, ztrai / areatot 112 9300 FORMAT(i10, e18.10)113 9300 FORMAT(i10,D23.16) 113 114 ! 114 115 IF( nn_timing == 1 ) CALL timing_stop('trc_stp') … … 130 131 INTEGER, INTENT(in) :: kt 131 132 INTEGER :: jn 133 REAL(wp) :: zkt 134 CHARACTER(len=1) :: cl1 ! 1 character 135 CHARACTER(len=2) :: cl2 ! 2 characters 132 136 133 137 IF( kt == nittrc000 ) THEN 134 138 IF( ln_cpl ) THEN 135 rdt_sampl = 86400./ ncpl_qsr_freq139 rdt_sampl = rday / ncpl_qsr_freq 136 140 nb_rec_per_day = ncpl_qsr_freq 137 141 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 ) 140 144 ENDIF 141 145 ! … … 146 150 ENDIF 147 151 ! 152 ALLOCATE( qsr_arr(jpi,jpj,nb_rec_per_day ) ) 153 ! 148 154 ! !* 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 ' 151 161 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 152 171 ELSE !* no restart: set from nit000 values 153 172 IF(lwp) WRITE(numout,*) 'trc_qsr_mean: qsr_mean set to nit000 values' 173 rsecfst = kt * rdttrc(1) 174 ! 154 175 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 170 187 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 = iseclast188 & ' time = ', rseclast/3600.,'hours ' 189 rsecfst = rseclast 173 190 DO jn = 1, nb_rec_per_day - 1 174 191 qsr_arr(:,:,jn) = qsr_arr(:,:,jn+1) … … 182 199 IF(lwp) WRITE(numout,*) 'trc_mean_qsr : write qsr_mean in restart file kt =', kt 183 200 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 184 212 CALL iom_rstput( kt, nitrst, numrtw, 'qsr_mean', qsr_mean(:,:) ) 185 213 ENDIF 186 !214 ! 187 215 END SUBROUTINE trc_mean_qsr 188 216
Note: See TracChangeset
for help on using the changeset viewer.