- Timestamp:
- 2020-09-24T20:29:14+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DOM/domain.F90
r13286 r13514 55 55 PUBLIC dom_init ! called by nemogcm.F90 56 56 PUBLIC domain_cfg ! called by nemogcm.F90 57 PUBLIC dom_tile ! called by step.F90 57 58 58 59 !!------------------------------------------------------------------------- … … 125 126 ! !== Reference coordinate system ==! 126 127 ! 127 CALL dom_glo ! global domain versus local domain 128 CALL dom_nam ! read namelist ( namrun, namdom ) 128 CALL dom_glo ! global domain versus local domain 129 CALL dom_nam ! read namelist ( namrun, namdom ) 130 CALL dom_tile( ntsi, ntsj, ntei, ntej ) ! Tile domain 131 129 132 ! 130 133 IF( lwxios ) THEN … … 287 290 288 291 292 SUBROUTINE dom_tile( ktsi, ktsj, ktei, ktej, ktile ) 293 !!---------------------------------------------------------------------- 294 !! *** ROUTINE dom_tile *** 295 !! 296 !! ** Purpose : Set tile domain variables 297 !! 298 !! ** Action : - ktsi, ktsj : start of internal part of domain 299 !! - ktei, ktej : end of internal part of domain 300 !! - ntile : current tile number 301 !! - nijtile : total number of tiles 302 !!---------------------------------------------------------------------- 303 INTEGER, INTENT(out) :: ktsi, ktsj, ktei, ktej ! Tile domain indices 304 INTEGER, INTENT(in), OPTIONAL :: ktile ! Tile number 305 INTEGER :: jt ! dummy loop argument 306 INTEGER :: iitile, ijtile ! Local integers 307 !!---------------------------------------------------------------------- 308 IF( PRESENT(ktile) .AND. ln_tile ) THEN 309 ntile = ktile ! Set domain indices for tile 310 ktsi = ntsi_a(ktile) 311 ktsj = ntsj_a(ktile) 312 ktei = ntei_a(ktile) 313 ktej = ntej_a(ktile) 314 ELSE 315 ntile = 0 ! Initialise to full domain 316 nijtile = 1 317 ktsi = Nis0 318 ktsj = Njs0 319 ktei = Nie0 320 ktej = Nje0 321 322 IF( ln_tile ) THEN ! Calculate tile domain indices 323 iitile = Ni_0 / nn_ltile_i ! Number of tiles 324 ijtile = Nj_0 / nn_ltile_j 325 IF( MOD( Ni_0, nn_ltile_i ) /= 0 ) iitile = iitile + 1 326 IF( MOD( Nj_0, nn_ltile_j ) /= 0 ) ijtile = ijtile + 1 327 328 nijtile = iitile * ijtile 329 ALLOCATE( ntsi_a(0:nijtile), ntsj_a(0:nijtile), ntei_a(0:nijtile), ntej_a(0:nijtile) ) 330 331 ntsi_a(0) = ktsi ! Full domain 332 ntsj_a(0) = ktsj 333 ntei_a(0) = ktei 334 ntej_a(0) = ktej 335 336 DO jt = 1, nijtile ! Tile domains 337 ntsi_a(jt) = Nis0 + nn_ltile_i * MOD(jt - 1, iitile) 338 ntsj_a(jt) = Njs0 + nn_ltile_j * ((jt - 1) / iitile) 339 ntei_a(jt) = MIN(ntsi_a(jt) + nn_ltile_i - 1, Nie0) 340 ntej_a(jt) = MIN(ntsj_a(jt) + nn_ltile_j - 1, Nje0) 341 ENDDO 342 ENDIF 343 344 IF(lwp) THEN ! control print 345 WRITE(numout,*) 346 WRITE(numout,*) 'dom_tile : Domain tiling decomposition' 347 WRITE(numout,*) '~~~~~~~~' 348 IF( ln_tile ) THEN 349 WRITE(numout,*) iitile, 'tiles in i' 350 WRITE(numout,*) ' Starting indices' 351 WRITE(numout,*) ' ', (ntsi_a(jt), jt=1, iitile) 352 WRITE(numout,*) ' Ending indices' 353 WRITE(numout,*) ' ', (ntei_a(jt), jt=1, iitile) 354 WRITE(numout,*) ijtile, 'tiles in j' 355 WRITE(numout,*) ' Starting indices' 356 WRITE(numout,*) ' ', (ntsj_a(jt), jt=1, nijtile, iitile) 357 WRITE(numout,*) ' Ending indices' 358 WRITE(numout,*) ' ', (ntej_a(jt), jt=1, nijtile, iitile) 359 ELSE 360 WRITE(numout,*) 'No domain tiling' 361 WRITE(numout,*) ' i indices =', ktsi, ':', ktei 362 WRITE(numout,*) ' j indices =', ktsj, ':', ktej 363 ENDIF 364 ENDIF 365 ENDIF 366 END SUBROUTINE dom_tile 367 368 289 369 SUBROUTINE dom_nam 290 370 !!---------------------------------------------------------------------- … … 295 375 !! ** input : - namrun namelist 296 376 !! - namdom namelist 377 !! - namtile namelist 297 378 !! - namnc4 namelist ! "key_netcdf4" only 298 379 !!---------------------------------------------------------------------- … … 307 388 & ln_cfmeta, ln_xios_read, nn_wxios 308 389 NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_meshmask 390 NAMELIST/namtile/ ln_tile, nn_ltile_i, nn_ltile_j 309 391 #if defined key_netcdf4 310 392 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 443 525 r1_Dt = 1._wp / rDt 444 526 527 READ ( numnam_ref, namtile, IOSTAT = ios, ERR = 905 ) 528 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtile in reference namelist' ) 529 READ ( numnam_cfg, namtile, IOSTAT = ios, ERR = 906 ) 530 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtile in configuration namelist' ) 531 IF(lwm) WRITE( numond, namtile ) 532 533 IF(lwp) THEN 534 WRITE(numout,*) 535 WRITE(numout,*) ' Namelist : namtile --- Domain tiling decomposition' 536 WRITE(numout,*) ' Tiling (T) or not (F) ln_tile = ', ln_tile 537 WRITE(numout,*) ' Length of tile in i nn_ltile_i = ', nn_ltile_i 538 WRITE(numout,*) ' Length of tile in j nn_ltile_j = ', nn_ltile_j 539 WRITE(numout,*) 540 IF( ln_tile ) THEN 541 WRITE(numout,*) ' The domain will be decomposed into tiles of size', nn_ltile_i, 'x', nn_ltile_j 542 ELSE 543 WRITE(numout,*) ' Domain tiling will NOT be used' 544 ENDIF 545 ENDIF 546 445 547 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 446 548 lrxios = ln_xios_read.AND.ln_rstart
Note: See TracChangeset
for help on using the changeset viewer.