Changeset 12979 for NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DOM/domain.F90
- Timestamp:
- 2020-05-27T14:38:32+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DOM/domain.F90
r12962 r12979 50 50 PUBLIC dom_init ! called by nemogcm.F90 51 51 PUBLIC domain_cfg ! called by nemogcm.F90 52 PUBLIC dom_tile ! called by step.F90 52 53 53 54 !!------------------------------------------------------------------------- … … 120 121 ! !== Reference coordinate system ==! 121 122 ! 122 CALL dom_glo ! global domain versus local domain123 CALL dom_nam ! read namelist ( namrun, namdom )124 CALL dom_tile ! Tile domains123 CALL dom_glo ! global domain versus local domain 124 CALL dom_nam ! read namelist ( namrun, namdom ) 125 CALL dom_tile( ntsi, ntsj, ntei, ntej ) ! Tile domain 125 126 126 127 ! … … 283 284 284 285 285 SUBROUTINE dom_tile 286 SUBROUTINE dom_tile( ktsi, ktsj, ktei, ktej, ktile ) 286 287 !!---------------------------------------------------------------------- 287 288 !! *** ROUTINE dom_tile *** … … 289 290 !! ** Purpose : Set tile domain variables 290 291 !! 291 !! ** Action : - ntsi, ntsj : start of internal part of domain 292 !! - ntei, ntej : end of internal part of domain 292 !! ** Action : - ktsi, ktsj : start of internal part of domain 293 !! - ktei, ktej : end of internal part of domain 294 !! - ntile : current tile number 293 295 !! - nijtile : total number of tiles 294 296 !!---------------------------------------------------------------------- 295 INTEGER :: jt ! dummy loop argument 296 INTEGER :: iitile, ijtile ! Local integers 297 !!---------------------------------------------------------------------- 298 ntile = 0 ! Initialise to full domain 299 300 IF( ln_tile ) THEN ! Number of tiles 301 iitile = Ni_0 / nn_ltile_i 302 ijtile = Nj_0 / nn_ltile_j 303 IF( MOD( Ni_0, nn_ltile_i ) /= 0 ) iitile = iitile + 1 304 IF( MOD( Nj_0, nn_ltile_j ) /= 0 ) ijtile = ijtile + 1 305 306 nijtile = iitile * ijtile 307 ALLOCATE( ntsi(0:nijtile), ntsj(0:nijtile), ntei(0:nijtile), ntej(0:nijtile) ) 297 INTEGER, INTENT(out) :: ktsi, ktsj, ktei, ktej ! Tile domain indices 298 INTEGER, INTENT(in), OPTIONAL :: ktile ! Tile number 299 INTEGER :: jt ! dummy loop argument 300 INTEGER :: iitile, ijtile ! Local integers 301 !!---------------------------------------------------------------------- 302 IF( PRESENT(ktile) .AND. ln_tile ) THEN 303 ntile = ktile ! Set domain indices for tile 304 ktsi = ntsi_a(ktile) 305 ktsj = ntsj_a(ktile) 306 ktei = ntei_a(ktile) 307 ktej = ntej_a(ktile) 308 308 ELSE 309 ntile = 0 ! Initialise to full domain 309 310 nijtile = 1 310 ALLOCATE( ntsi(0:0), ntsj(0:0), ntei(0:0), ntej(0:0) ) 311 ENDIF 312 313 ntsi(0) = Nis0 ! Full domain 314 ntsj(0) = Njs0 315 ntei(0) = Nie0 316 ntej(0) = Nje0 317 318 IF( ln_tile ) THEN ! Tile domains 319 DO jt = 1, nijtile 320 ntsi(jt) = Nis0 + nn_ltile_i * MOD(jt - 1, iitile) 321 ntsj(jt) = Njs0 + nn_ltile_j * ((jt - 1) / iitile) 322 ntei(jt) = MIN(ntsi(jt) + nn_ltile_i - 1, Nie0) 323 ntej(jt) = MIN(ntsj(jt) + nn_ltile_j - 1, Nje0) 324 ENDDO 325 ENDIF 326 327 IF(lwp) THEN ! control print 328 WRITE(numout,*) 329 WRITE(numout,*) 'dom_tile : Domain tiling decomposition' 330 WRITE(numout,*) '~~~~~~~~' 331 IF( ln_tile ) THEN 332 WRITE(numout,*) iitile, 'tiles in i' 333 WRITE(numout,*) ' Starting indices' 334 WRITE(numout,*) ' ', (ntsi(jt), jt=1, iitile) 335 WRITE(numout,*) ' Ending indices' 336 WRITE(numout,*) ' ', (ntei(jt), jt=1, iitile) 337 WRITE(numout,*) ijtile, 'tiles in j' 338 WRITE(numout,*) ' Starting indices' 339 WRITE(numout,*) ' ', (ntsj(jt), jt=1, nijtile, iitile) 340 WRITE(numout,*) ' Ending indices' 341 WRITE(numout,*) ' ', (ntej(jt), jt=1, nijtile, iitile) 342 ELSE 343 WRITE(numout,*) 'No domain tiling' 344 WRITE(numout,*) ' i indices =', ntsi(0), ':', ntei(0) 345 WRITE(numout,*) ' j indices =', ntsj(0), ':', ntej(0) 311 ktsi = Nis0 312 ktsj = Njs0 313 ktei = Nie0 314 ktej = Nje0 315 316 IF( ln_tile ) THEN ! Calculate tile domain indices 317 iitile = Ni_0 / nn_ltile_i ! Number of tiles 318 ijtile = Nj_0 / nn_ltile_j 319 IF( MOD( Ni_0, nn_ltile_i ) /= 0 ) iitile = iitile + 1 320 IF( MOD( Nj_0, nn_ltile_j ) /= 0 ) ijtile = ijtile + 1 321 322 nijtile = iitile * ijtile 323 ALLOCATE( ntsi_a(0:nijtile), ntsj_a(0:nijtile), ntei_a(0:nijtile), ntej_a(0:nijtile) ) 324 325 ntsi_a(0) = ktsi ! Full domain 326 ntsj_a(0) = ktsj 327 ntei_a(0) = ktei 328 ntej_a(0) = ktej 329 330 DO jt = 1, nijtile ! Tile domains 331 ntsi_a(jt) = Nis0 + nn_ltile_i * MOD(jt - 1, iitile) 332 ntsj_a(jt) = Njs0 + nn_ltile_j * ((jt - 1) / iitile) 333 ntei_a(jt) = MIN(ntsi_a(jt) + nn_ltile_i - 1, Nie0) 334 ntej_a(jt) = MIN(ntsj_a(jt) + nn_ltile_j - 1, Nje0) 335 ENDDO 336 ENDIF 337 338 IF(lwp) THEN ! control print 339 WRITE(numout,*) 340 WRITE(numout,*) 'dom_tile : Domain tiling decomposition' 341 WRITE(numout,*) '~~~~~~~~' 342 IF( ln_tile ) THEN 343 WRITE(numout,*) iitile, 'tiles in i' 344 WRITE(numout,*) ' Starting indices' 345 WRITE(numout,*) ' ', (ntsi_a(jt), jt=1, iitile) 346 WRITE(numout,*) ' Ending indices' 347 WRITE(numout,*) ' ', (ntei_a(jt), jt=1, iitile) 348 WRITE(numout,*) ijtile, 'tiles in j' 349 WRITE(numout,*) ' Starting indices' 350 WRITE(numout,*) ' ', (ntsj_a(jt), jt=1, nijtile, iitile) 351 WRITE(numout,*) ' Ending indices' 352 WRITE(numout,*) ' ', (ntej_a(jt), jt=1, nijtile, iitile) 353 ELSE 354 WRITE(numout,*) 'No domain tiling' 355 WRITE(numout,*) ' i indices =', ktsi, ':', ktei 356 WRITE(numout,*) ' j indices =', ktsj, ':', ktej 357 ENDIF 346 358 ENDIF 347 359 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.