Changeset 1100 for trunk/NEMO/TOP_SRC/trcrst.F90
- Timestamp:
- 2008-06-09T13:01:16+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/TOP_SRC/trcrst.F90
r1077 r1100 63 63 !!---------------------------------------------------------------------- 64 64 ! 65 IF( kt == nit000 ) THEN 66 lrst_trc = .FALSE. 65 IF( kt == nit000 ) lrst_trc = .FALSE. 67 66 # 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 70 71 ENDIF 72 #endif 71 73 72 74 IF( kt == nitrst - ndttrc .OR. nitend - nit000 + 1 < 2 * ndttrc ) THEN … … 308 310 !!---------------------------------------------------------------------- 309 311 310 IF( MOD( kt, nstock ) == 0 .OR. kt == nitend ) THEN 311 312 ! 0. initialisations 313 ! ------------------ 312 IF( kt == nitrst ) THEN 314 313 IF(lwp) WRITE(numout,*) 315 314 IF(lwp) WRITE(numout,*) 'trc_wri : write the TOP restart file (NetCDF) at it= ', kt, ' date= ', ndastp 316 315 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 326 324 327 325 328 326 ! prognostic variables 329 327 ! -------------------- 330 331 332 333 334 335 336 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 337 335 338 336 #if defined key_lobster 339 340 337 CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 338 CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 341 339 #endif 342 340 343 341 #if defined key_pisces 344 345 342 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 343 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 346 344 #endif 347 345 348 346 #if defined key_cfc 349 350 351 352 353 #endif 354 355 356 IF(lwp) WRITE(numout,*) '----TRACER STAT----'357 358 zdiag_tot = 0.e0359 DO jn = 1, jptra360 zdiag_var = 0.e0361 zdiag_varmin = 0.e0362 zdiag_varmax = 0.e0363 DO ji = 1, jpi364 DO jj = 1, jpj365 DO jk = 1,jpk366 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) & 367 365 #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 398 393 ! 399 394 END SUBROUTINE trc_rst_wri
Note: See TracChangeset
for help on using the changeset viewer.