Ignore:
Timestamp:
2019-05-24T10:22:47+02:00 (18 months ago)
Author:
girrmann
Message:

dev_r10984_HPC-13 : CYCLE instruction is not systematic anymore, computation is done on the halo whenever possible and overwritten by lbc_bdy instruction, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydyn2d.F90

    r11048 r11049  
    9999         ii   = idx%nbi(jb,igrd) 
    100100         ij   = idx%nbj(jb,igrd) 
    101          IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove 
    102101         zwgt = idx%nbw(jb,igrd) 
    103102         pua2d(ii,ij) = ( pua2d(ii,ij) + zwgt * ( dta%u2d(jb) - pua2d(ii,ij) ) ) * umask(ii,ij,1) 
     
    108107         ii   = idx%nbi(jb,igrd) 
    109108         ij   = idx%nbj(jb,igrd) 
    110          IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove 
    111109         zwgt = idx%nbw(jb,igrd) 
    112110         pva2d(ii,ij) = ( pva2d(ii,ij) + zwgt * ( dta%v2d(jb) - pva2d(ii,ij) ) ) * vmask(ii,ij,1) 
     
    165163         ii = idx%nbi(jb,igrd) 
    166164         ij = idx%nbj(jb,igrd) 
    167          IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove 
    168165         IF( ll_wd ) THEN 
    169166            spgu(ii, ij) = dta%ssh(jb)  - ssh_ref  
     
    180177      DO jb = 1, idx%nblenrim(igrd) 
    181178         ii  = idx%nbi(jb,igrd) 
    182          ij  = idx%nbj(jb,igrd)  
    183          IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove 
     179         ij  = idx%nbj(jb,igrd) 
    184180         flagu => idx%flagu(jb,igrd) 
    185181         iim1 = ii + MAX( 0, INT( flagu ) )   ! T pts i-indice inside the boundary 
    186182         iip1 = ii - MIN( 0, INT( flagu ) )   ! T pts i-indice outside the boundary  
     183         IF( iim1 > jpi .OR. iip1 > jpi )   CYCLE 
    187184         ! 
    188185         zcorr = - flagu * SQRT( grav * phur(ii, ij) ) * ( pssh(iim1, ij) - spgu(iip1,ij) ) 
     
    199196      DO jb = 1, idx%nblenrim(igrd) 
    200197         ii  = idx%nbi(jb,igrd) 
    201          ij  = idx%nbj(jb,igrd)  
    202          IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove 
     198         ij  = idx%nbj(jb,igrd) 
    203199         flagv => idx%flagv(jb,igrd) 
    204200         ijm1 = ij + MAX( 0, INT( flagv ) )   ! T pts j-indice inside the boundary 
    205201         ijp1 = ij - MIN( 0, INT( flagv ) )   ! T pts j-indice outside the boundary  
     202         IF( ijm1 > jpj .OR. ijp1 > jpj )   CYCLE 
    206203         ! 
    207204         zcorr = - flagv * SQRT( grav * phvr(ii, ij) ) * ( pssh(ii, ijm1) - spgu(ii,ijp1) ) 
     
    210207         ! Use characteristics method instead 
    211208         zflag = ABS(flagv) 
    212          zforc  = dta%v2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pva2d(ii,ijm1) 
     209         zforc = dta%v2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pva2d(ii,ijm1) 
    213210         pva2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * vmask(ii,ij,1) 
    214211      END DO 
Note: See TracChangeset for help on using the changeset viewer.