New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 12979 for NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DOM/domain.F90 – NEMO

Ignore:
Timestamp:
2020-05-27T14:38:32+02:00 (4 years ago)
Author:
hadcv
Message:

Replace references to tile index arrays with scalars

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  
    5050   PUBLIC   dom_init     ! called by nemogcm.F90 
    5151   PUBLIC   domain_cfg   ! called by nemogcm.F90 
     52   PUBLIC   dom_tile     ! called by step.F90 
    5253 
    5354   !!------------------------------------------------------------------------- 
     
    120121      !           !==  Reference coordinate system  ==! 
    121122      ! 
    122       CALL dom_glo                     ! global domain versus local domain 
    123       CALL dom_nam                     ! read namelist ( namrun, namdom ) 
    124       CALL dom_tile                    ! Tile domains 
     123      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 
    125126 
    126127      ! 
     
    283284 
    284285 
    285    SUBROUTINE dom_tile 
     286   SUBROUTINE dom_tile( ktsi, ktsj, ktei, ktej, ktile ) 
    286287      !!---------------------------------------------------------------------- 
    287288      !!                     ***  ROUTINE dom_tile  *** 
     
    289290      !! ** Purpose :   Set tile domain variables 
    290291      !! 
    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 
    293295      !!              - nijtile        : total number of tiles 
    294296      !!---------------------------------------------------------------------- 
    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) 
    308308      ELSE 
     309         ntile = 0                     ! Initialise to full domain 
    309310         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 
    346358         ENDIF 
    347359      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.