Changeset 11048 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydyn3d.F90
- Timestamp:
- 2019-05-23T18:36:06+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydyn3d.F90
r11024 r11048 86 86 ii = idx%nbi(jb,igrd) 87 87 ij = idx%nbj(jb,igrd) 88 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 88 89 ua(ii,ij,jk) = dta%u3d(jb,jk) * umask(ii,ij,jk) 89 90 END DO … … 95 96 ii = idx%nbi(jb,igrd) 96 97 ij = idx%nbj(jb,igrd) 98 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 97 99 va(ii,ij,jk) = dta%v3d(jb,jk) * vmask(ii,ij,jk) 98 100 END DO 99 101 END DO 102 ! 100 103 CALL lbc_bdy_lnk( 'bdydyn3d', ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 101 CALL lbc_bdy_lnk( 'bdydyn3d', va, 'V', -1., ib_bdy ) 102 ! 103 IF( kt == nit000 ) CLOSE( unit = 102 ) 104 CALL lbc_bdy_lnk( 'bdydyn3d', va, 'V', -1., ib_bdy ) 104 105 ! 105 106 END SUBROUTINE bdy_dyn3d_spe … … 120 121 INTEGER :: jb, jk ! dummy loop indices 121 122 INTEGER :: ii, ij, igrd ! local integers 122 REAL(wp) :: zwgt ! boundary weight 123 INTEGER :: fu, fv 123 INTEGER :: flagu, flagv ! short cuts 124 124 !!---------------------------------------------------------------------- 125 125 ! 126 126 igrd = 2 ! Copying tangential velocity into bdy points 127 127 DO jb = 1, idx%nblenrim(igrd) 128 DO jk = 1, jpkm1 129 ii = idx%nbi(jb,igrd) 130 ij = idx%nbj(jb,igrd) 131 fu = ABS( ABS (NINT( idx%flagu(jb,igrd) ) ) - 1 ) 132 ua(ii,ij,jk) = ua(ii,ij,jk) * REAL( 1 - fu) + ( ua(ii,ij+fu,jk) * umask(ii,ij+fu,jk) & 133 &+ ua(ii,ij-fu,jk) * umask(ii,ij-fu,jk) ) * umask(ii,ij,jk) * REAL( fu ) 134 END DO 128 ii = idx%nbi(jb,igrd) 129 ij = idx%nbj(jb,igrd) 130 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 131 flagu = NINT(idx%flagu(jb,igrd)) 132 flagv = NINT(idx%flagv(jb,igrd)) 133 ! 134 IF( flagu == 0 ) THEN ! north/south bdy 135 ! Rare case : rim is parallel to the mpi subdomain border and located next to the halo 136 IF( ij+flagv > jpj .OR. ij+flagv < 1 ) CYCLE 137 ! 138 DO jk = 1, jpkm1 139 ua(ii,ij,jk) = ua(ii,ij+flagv,jk) * umask(ii,ij+flagv,jk) 140 END DO 141 ! 142 END IF 135 143 END DO 136 144 ! 137 145 igrd = 3 ! Copying tangential velocity into bdy points 138 146 DO jb = 1, idx%nblenrim(igrd) 139 DO jk = 1, jpkm1 140 ii = idx%nbi(jb,igrd) 141 ij = idx%nbj(jb,igrd) 142 fv = ABS( ABS (NINT( idx%flagv(jb,igrd) ) ) - 1 ) 143 va(ii,ij,jk) = va(ii,ij,jk) * REAL( 1 - fv ) + ( va(ii+fv,ij,jk) * vmask(ii+fv,ij,jk) & 144 &+ va(ii-fv,ij,jk) * vmask(ii-fv,ij,jk) ) * vmask(ii,ij,jk) * REAL( fv ) 145 END DO 146 END DO 147 ii = idx%nbi(jb,igrd) 148 ij = idx%nbj(jb,igrd) 149 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 150 flagu = NINT(idx%flagu(jb,igrd)) 151 flagv = NINT(idx%flagv(jb,igrd)) 152 ! 153 IF( flagv == 0 ) THEN ! west/east bdy 154 ! Rare case : rim is parallel to the mpi subdomain border and located next to the halo 155 IF( ii+flagu > jpi .OR. ii+flagu < 1 ) CYCLE 156 ! 157 DO jk = 1, jpkm1 158 va(ii,ij,jk) = va(ii+flagu,ij,jk) * vmask(ii+flagu,ij,jk) 159 END DO 160 ! 161 END IF 162 END DO 163 ! 147 164 CALL lbc_bdy_lnk( 'bdydyn3d', ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 148 165 CALL lbc_bdy_lnk( 'bdydyn3d', va, 'V', -1., ib_bdy ) 149 !150 IF( kt == nit000 ) CLOSE( unit = 102 )151 166 ! 152 167 END SUBROUTINE bdy_dyn3d_zgrad … … 174 189 ii = idx%nbi(ib,igrd) 175 190 ij = idx%nbj(ib,igrd) 191 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 176 192 DO ik = 1, jpkm1 177 193 ua(ii,ij,ik) = 0._wp … … 183 199 ii = idx%nbi(ib,igrd) 184 200 ij = idx%nbj(ib,igrd) 201 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 185 202 DO ik = 1, jpkm1 186 203 va(ii,ij,ik) = 0._wp … … 189 206 ! 190 207 CALL lbc_bdy_lnk( 'bdydyn3d', ua, 'U', -1., ib_bdy ) ; CALL lbc_bdy_lnk( 'bdydyn3d', va, 'V', -1.,ib_bdy ) ! Boundary points should be updated 191 !192 IF( kt == nit000 ) CLOSE( unit = 102 )193 208 ! 194 209 END SUBROUTINE bdy_dyn3d_zro … … 221 236 ii = idx%nbi(jb,igrd) 222 237 ij = idx%nbj(jb,igrd) 238 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 223 239 zwgt = idx%nbw(jb,igrd) 224 240 ua(ii,ij,jk) = ( ua(ii,ij,jk) + zwgt * ( dta%u3d(jb,jk) - ua(ii,ij,jk) ) ) * umask(ii,ij,jk) … … 231 247 ii = idx%nbi(jb,igrd) 232 248 ij = idx%nbj(jb,igrd) 249 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 233 250 zwgt = idx%nbw(jb,igrd) 234 251 va(ii,ij,jk) = ( va(ii,ij,jk) + zwgt * ( dta%v3d(jb,jk) - va(ii,ij,jk) ) ) * vmask(ii,ij,jk) 235 252 END DO 236 253 END DO 254 ! 237 255 CALL lbc_bdy_lnk( 'bdydyn3d', ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 238 256 CALL lbc_bdy_lnk( 'bdydyn3d', va, 'V', -1., ib_bdy ) 239 !240 IF( kt == nit000 ) CLOSE( unit = 102 )241 257 ! 242 258 END SUBROUTINE bdy_dyn3d_frs … … 300 316 ii = idx_bdy(ib_bdy)%nbi(jb,igrd) 301 317 ij = idx_bdy(ib_bdy)%nbj(jb,igrd) 318 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 302 319 zwgt = idx_bdy(ib_bdy)%nbd(jb,igrd) 303 320 DO jk = 1, jpkm1 … … 311 328 ii = idx_bdy(ib_bdy)%nbi(jb,igrd) 312 329 ij = idx_bdy(ib_bdy)%nbj(jb,igrd) 330 IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj ) CYCLE ! to remove 313 331 zwgt = idx_bdy(ib_bdy)%nbd(jb,igrd) 314 332 DO jk = 1, jpkm1
Note: See TracChangeset
for help on using the changeset viewer.