Changeset 2038 for branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcdia.F90
- Timestamp:
- 2010-08-02T12:57:40+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/trcdia.F90
r1970 r2038 17 17 !! trc_dia : main routine of output passive tracer 18 18 !! trcdit_wr : outputs of concentration fields 19 !! trcdid_wr : outputs of dvection-diffusion trends20 19 !! trcdii_wr : outputs of additional 2D/3D diagnostics 21 20 !! trcdib_wr : outputs of biological fields … … 24 23 USE oce_trc 25 24 USE trc 26 USE trp_trc27 25 USE par_trc 28 USE trdmld_trc_oce, ONLY : luttrd29 26 USE dianam ! build name of file (routine) 30 27 USE in_out_manager ! I/O manager … … 45 42 INTEGER , DIMENSION (jpij*jpk) :: ndext50 !: integer arrays for ocean 3D index 46 43 INTEGER , DIMENSION (jpij) :: ndext51 !: integer arrays for ocean surface index 47 # if defined key_ trc_diaadd44 # if defined key_diatrc 48 45 INTEGER :: nitd !: id for additional array output file 49 46 INTEGER :: ndepitd !: id for depth mesh 50 47 INTEGER :: nhoritd !: id for horizontal mesh 51 48 # endif 52 # if defined key_trc_diatrd 53 INTEGER , DIMENSION (jptra) :: nit6 !: id for additional array output file 54 INTEGER , DIMENSION (jptra) :: ndepit6 !: id for depth mesh 55 INTEGER , DIMENSION (jptra) :: nhorit6 !: id for horizontal mesh 56 # endif 57 # if defined key_trc_diabio 49 # if defined key_diabio 58 50 INTEGER :: nitb !: id. for additional array output file 59 51 INTEGER :: ndepitb !: id for depth mesh … … 82 74 83 75 CALL trcdit_wr( kt, kindic ) ! outputs for tracer concentration 84 CALL trcdid_wr( kt, kindic ) ! outputs for dynamical trends85 76 CALL trcdii_wr( kt, kindic ) ! outputs for additional arrays 86 77 CALL trcdib_wr( kt, kindic ) ! outputs for biological trends … … 111 102 LOGICAL :: ll_print = .FALSE. 112 103 CHARACTER (len=40) :: clhstnam, clop 113 #if defined key_off _tra104 #if defined key_offline 114 105 INTEGER :: inum = 11 ! temporary logical unit 115 106 #endif … … 133 124 ENDIF 134 125 # if defined key_diainstant 135 zsto = n writetrc * rdt126 zsto = nn_writetrc * rdt 136 127 clop = "inst("//TRIM(clop)//")" 137 128 # else … … 139 130 clop = "ave("//TRIM(clop)//")" 140 131 # endif 141 zout = n writetrc * zdt132 zout = nn_writetrc * zdt 142 133 143 134 ! Define indices of the horizontal output zoom and vertical limit storage … … 168 159 & ' limit storage in depth = ', ipk 169 160 170 #if defined key_off _tra161 #if defined key_offline 171 162 ! WRITE root name in date.file for use by postpro 172 163 IF(lwp) THEN 173 CALL dia_nam( clhstnam, n writetrc,' ' )164 CALL dia_nam( clhstnam, nn_writetrc,' ' ) 174 165 CALL ctlopn( inum, 'date.file', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', 1, numout, lwp, narea ) 175 166 WRITE(inum,*) clhstnam … … 179 170 180 171 ! Define the NETCDF files for passive tracer concentration 181 CALL dia_nam( clhstnam, n writetrc, 'ptrc_T' )172 CALL dia_nam( clhstnam, nn_writetrc, 'ptrc_T' ) 182 173 IF(lwp)WRITE(numout,*)" Name of NETCDF file ", clhstnam 183 174 … … 216 207 ! --------------------------------------- 217 208 218 IF( lwp .AND. MOD( itmod, n writetrc ) == 0 ) THEN209 IF( lwp .AND. MOD( itmod, nn_writetrc ) == 0 ) THEN 219 210 WRITE(numout,*) 'trcdit_wr : write NetCDF passive tracer concentrations at ', kt, 'time-step' 220 211 WRITE(numout,*) '~~~~~~~~~ ' … … 233 224 END SUBROUTINE trcdit_wr 234 225 235 # if defined key_trc_diatrd 236 237 SUBROUTINE trcdid_wr( kt, kindic ) 238 !!---------------------------------------------------------------------- 239 !! *** ROUTINE trcdid_wr *** 240 !! 241 !! ** Purpose : output of passive tracer : advection-diffusion trends 242 !! 243 !! ** Method : At the beginning of the first time step (nit000), define all 244 !! the NETCDF files and fields for concentration of passive tracer 245 !! 246 !! At each time step call histdef to compute the mean if necessary 247 !! Each nwritetrd time step, output the instantaneous or mean fields 248 !! 249 !! IF kindic <0, output of fields before the model interruption. 250 !! IF kindic =0, time step loop 251 !! IF kindic >0, output of fields before the time step loop 252 !!---------------------------------------------------------------------- 253 INTEGER, INTENT( in ) :: kt ! ocean time-step 254 INTEGER, INTENT( in ) :: kindic ! indicator of abnormal termination 255 !! 256 LOGICAL :: ll_print = .FALSE. 257 CHARACTER (len=40) :: clhstnam, clop 258 CHARACTER (len=20) :: cltra, cltrau 259 CHARACTER (len=80) :: cltral 260 CHARACTER (len=10) :: csuff 261 INTEGER :: jn, jl, ikn 262 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod 263 REAL(wp) :: zsto, zout, zdt 264 !!---------------------------------------------------------------------- 265 266 ! 0. Initialisation 267 ! ----------------- 268 269 270 ! local variable for debugging 271 ll_print = .FALSE. 272 ll_print = ll_print .AND. lwp 273 ! 274 ! Define frequency of output and means 275 zdt = rdt 276 IF( ln_mskland ) THEN ; clop = "only(x)" ! put 1.e+20 on land (very expensive!!) 277 ELSE ; clop = "x" ! no use of the mask value (require less cpu time) 278 ENDIF 279 # if defined key_diainstant 280 zsto = nwritetrd * rdt 281 clop = "inst("//TRIM(clop)//")" 282 # else 283 zsto = zdt 284 clop = "ave("//TRIM(clop)//")" 285 # endif 286 zout = nwritetrd * zdt 287 288 ! Define indices of the horizontal output zoom and vertical limit storage 289 iimi = 1 ; iima = jpi 290 ijmi = 1 ; ijma = jpj 291 ipk = jpk 292 293 ! define time axis 294 itmod = kt - nittrc000 + 1 295 it = kt 296 297 ! Define the NETCDF files (one per tracer) 298 IF( ll_print ) WRITE(numout,*) 'trcdid kt=', kt, ' kindic ', kindic 299 300 301 IF( kt == nittrc000 ) THEN 302 303 DO jn = 1, jptra 304 ! 305 IF( luttrd(jn) ) THEN ! Define the file for dynamical trends - one per each tracer IF required 306 307 IF(lwp)WRITE(numout,*) ' indexes of zoom = ', iimi, iima, ijmi, ijma, & 308 & ' limit storage in depth = ', ipk 309 csuff='DY_'//ctrcnm(jn) 310 CALL dia_nam( clhstnam, nwritetrd, csuff ) 311 IF(lwp)WRITE(numout,*) " Name of NETCDF file for dynamical trends", & 312 & " of tracer number : ",clhstnam 313 314 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 315 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 316 & nittrc000-ndttrc, zjulian, zdt, nhorit6(jn), & 317 & nit6(jn) , domain_id=nidom ) 318 319 ! Vertical grid for tracer trend - one per each tracer IF needed 320 CALL histvert( nit6(jn), 'deptht', 'Vertical T levels', 'm', ipk, gdept_0, ndepit6(jn) ) 321 END IF 322 END DO 323 324 ! Declare all the output fields as NETCDF variables 325 DO jn = 1, jptra 326 IF( luttrd(jn) ) THEN 327 DO jl = 1, jpdiatrc 328 IF( jl == jptrc_xad ) THEN 329 ! short and long title for x advection for tracer 330 WRITE (cltra,'("XAD_",16a)') ctrcnm(jn) 331 WRITE (cltral,'("X advective trend for ",58a)') ctrcnl(jn)(1:58) 332 END IF 333 IF( jl == jptrc_yad ) THEN 334 ! short and long title for y advection for tracer 335 WRITE (cltra,'("YAD_",16a)') ctrcnm(jn) 336 WRITE (cltral,'("Y advective trend for ",58a)') ctrcnl(jn)(1:58) 337 END IF 338 IF( jl == jptrc_zad ) THEN 339 ! short and long title for Z advection for tracer 340 WRITE (cltra,'("ZAD_",16a)') ctrcnm(jn) 341 WRITE (cltral,'("Z advective trend for ",58a)') ctrcnl(jn)(1:58) 342 END IF 343 IF( jl == jptrc_xdf ) THEN 344 ! short and long title for X diffusion for tracer 345 WRITE (cltra,'("XDF_",16a)') ctrcnm(jn) 346 WRITE (cltral,'("X diffusion trend for ",58a)') ctrcnl(jn)(1:58) 347 END IF 348 IF( jl == jptrc_ydf ) THEN 349 ! short and long title for Y diffusion for tracer 350 WRITE (cltra,'("YDF_",16a)') ctrcnm(jn) 351 WRITE (cltral,'("Y diffusion trend for ",58a)') ctrcnl(jn)(1:58) 352 END IF 353 IF( jl == jptrc_zdf ) THEN 354 ! short and long title for Z diffusion for tracer 355 WRITE (cltra,'("ZDF_",16a)') ctrcnm(jn) 356 WRITE (cltral,'("Z diffusion trend for ",58a)') ctrcnl(jn)(1:58) 357 END IF 358 # if defined key_trcldf_eiv 359 IF( jl == jptrc_xei ) THEN 360 ! short and long title for x gent velocity for tracer 361 WRITE (cltra,'("XGV_",16a)') ctrcnm(jn) 362 WRITE (cltral,'("X gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 363 END IF 364 IF( jl == jptrc_yei ) THEN 365 ! short and long title for y gent velocity for tracer 366 WRITE (cltra,'("YGV_",16a)') ctrcnm(jn) 367 WRITE (cltral,'("Y gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 368 END IF 369 IF( jl == jptrc_zei ) THEN 370 ! short and long title for Z gent velocity for tracer 371 WRITE (cltra,'("ZGV_",16a)') ctrcnm(jn) 372 WRITE (cltral,'("Z gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 373 END IF 374 # endif 375 # if defined key_trcdmp 376 IF( jl == jptrc_dmp ) THEN 377 ! last trends for tracer damping : short and long title 378 WRITE (cltra,'("TDM_",16a)') ctrcnm(jn) 379 WRITE (cltral,'("Tracer damping trend for ",55a)') ctrcnl(jn)(1:55) 380 END IF 381 # endif 382 IF( jl == jptrc_sbc ) THEN 383 ! last trends for tracer damping : short and long title 384 WRITE (cltra,'("SBC_",16a)') ctrcnm(jn) 385 WRITE (cltral,'("Surface boundary flux ",58a)') ctrcnl(jn)(1:55) 386 END IF 387 WRITE (cltral,'("Surface boundary flux ",58a)') ctrcnl(jn)(1:55) 388 END IF 389 CALL FLUSH( numout ) 390 cltrau = ctrcun(jn) ! UNIT for tracer /trends 391 CALL histdef( nit6(jn), cltra, cltral, cltrau, jpi,jpj, & 392 & nhorit6(jn), ipk, 1, ipk, ndepit6(jn), 32, clop , & 393 & zsto,zout ) 394 END DO 395 END IF 396 END DO 397 ! CLOSE netcdf Files 398 DO jn = 1, jptra 399 IF( luttrd(jn) ) CALL histend( nit6(jn) ) 400 END DO 401 402 IF(lwp) WRITE(numout,*) 403 IF(lwp) WRITE(numout,*) 'End of NetCDF Initialization in trcdid' 404 IF(ll_print) CALL FLUSH(numout ) 405 ! 406 ENDIF 407 408 ! SOME diagnostics to DO first time 409 410 ! Start writing data 411 ! --------------------- 412 413 ! trends for tracer concentrations 414 415 IF( lwp .AND. MOD( itmod, nwritetrd ) == 0 ) THEN 416 WRITE(numout,*) 'trcdid_wr : write NetCDF dynamical trends at ', kt, 'time-step' 417 WRITE(numout,*) '~~~~~~ ' 418 ENDIF 419 420 DO jn = 1, jptra 421 IF( luttrd(jn) ) THEN 422 ikn = ikeep(jn) 423 DO jl = 1, jpdiatrc 424 ! short titles 425 IF( jl == jptrc_xad) WRITE (cltra,'("XAD_",16a)') ctrcnm(jn) 426 IF( jl == jptrc_yad) WRITE (cltra,'("YAD_",16a)') ctrcnm(jn) 427 IF( jl == jptrc_zad) WRITE (cltra,'("ZAD_",16a)') ctrcnm(jn) 428 IF( jl == jptrc_xdf) WRITE (cltra,'("XDF_",16a)') ctrcnm(jn) 429 IF( jl == jptrc_ydf) WRITE (cltra,'("YDF_",16a)') ctrcnm(jn) 430 IF( jl == jptrc_zdf) WRITE (cltra,'("ZDF_",16a)') ctrcnm(jn) 431 # if defined key_trcldf_eiv 432 IF( jl == jptrc_xei) WRITE (cltra,'("XGV_",16a)') ctrcnm(jn) 433 IF( jl == jptrc_yei) WRITE (cltra,'("YGV_",16a)') ctrcnm(jn) 434 IF( jl == jptrc_zei) WRITE (cltra,'("ZGV_",16a)') ctrcnm(jn) 435 # endif 436 # if defined key_trcdmp 437 IF( jl == jptrc_dmp ) WRITE (cltra,'("TDM_",16a)') ctrcnm(jn) 438 # endif 439 IF( jl == jptrc_sbc ) WRITE (cltra,'("SBC_",16a)') ctrcnm(jn) 440 ! 441 CALL histwrite(nit6(jn), cltra, it, trtrd(:,:,:,ikn,jl),ndimt50, ndext50) 442 END DO 443 END IF 444 END DO 445 446 ! Closing all files 447 ! ----------------- 448 IF( kt == nitend .OR. kindic < 0 ) THEN 449 DO jn = 1, jptra 450 IF( luttrd(jn) ) CALL histclo( nit6(jn) ) 451 END DO 452 ENDIF 453 ! 454 455 END SUBROUTINE trcdid_wr 456 457 # else 458 459 SUBROUTINE trcdid_wr( kt, kindic ) ! Dummy routine 460 INTEGER, INTENT ( in ) :: kt, kindic 461 END SUBROUTINE trcdid_wr 462 463 # endif 464 465 #if defined key_trc_diaadd 226 #if defined key_diatrc 466 227 467 228 SUBROUTINE trcdii_wr( kt, kindic ) … … 506 267 ENDIF 507 268 # if defined key_diainstant 508 zsto = n writedia * zdt269 zsto = nn_writedia * zdt 509 270 clop = "inst("//TRIM(clop)//")" 510 271 # else … … 512 273 clop = "ave("//TRIM(clop)//")" 513 274 # endif 514 zout = n writedia * zdt275 zout = nn_writedia * zdt 515 276 516 277 ! Define indices of the horizontal output zoom and vertical limit storage … … 534 295 ! Define the T grid file for tracer auxiliary files 535 296 536 CALL dia_nam( clhstnam, n writedia, 'diad_T' )297 CALL dia_nam( clhstnam, nn_writedia, 'diad_T' ) 537 298 IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam 538 299 … … 581 342 ! --------------------- 582 343 583 IF( lwp .AND. MOD( itmod, n writedia ) == 0 ) THEN344 IF( lwp .AND. MOD( itmod, nn_writedia ) == 0 ) THEN 584 345 WRITE(numout,*) 'trcdii_wr : write NetCDF additional arrays at ', kt, 'time-step' 585 346 WRITE(numout,*) '~~~~~~ ' … … 613 374 # endif 614 375 615 # if defined key_ trc_diabio376 # if defined key_diabio 616 377 617 378 SUBROUTINE trcdib_wr( kt, kindic ) … … 658 419 ENDIF 659 420 # if defined key_diainstant 660 zsto = n writebio * zdt421 zsto = nn_writebio * zdt 661 422 clop = "inst("//TRIM(clop)//")" 662 423 # else … … 664 425 clop = "ave("//TRIM(clop)//")" 665 426 # endif 666 zout = n writebio * zdt427 zout = nn_writebio * zdt 667 428 668 429 ! Define indices of the horizontal output zoom and vertical limit storage … … 684 445 ! Define the NETCDF files for biological trends 685 446 686 CALL dia_nam(clhstnam,n writebio,'biolog')447 CALL dia_nam(clhstnam,nn_writebio,'biolog') 687 448 IF(lwp)WRITE(numout,*) " Name of NETCDF file for biological trends ", clhstnam 688 449 ! Horizontal grid : glamt and gphit … … 716 477 717 478 ! biological trends 718 IF( lwp .AND. MOD( itmod, n writebio ) == 0 ) THEN479 IF( lwp .AND. MOD( itmod, nn_writebio ) == 0 ) THEN 719 480 WRITE(numout,*) 'trcdit_wr : write NetCDF biological trends at ', kt, 'time-step' 720 481 WRITE(numout,*) '~~~~~~ '
Note: See TracChangeset
for help on using the changeset viewer.