Changeset 11044 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydyn2d.F90
- Timestamp:
- 2019-05-23T17:13:38+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/bdydyn2d.F90
r11024 r11044 256 256 !! ** Purpose : Duplicate sea level across open boundaries 257 257 !! 258 !! ** Method : - take the average of free ocean neighbours 259 !! 260 !! ___ ! _| ! |_____| ! ___| ! __|x o ! ___| 261 !! __|x ! __|x o ! x ! x o ! o ! x o 262 !! o ! o ! o ! o ! ! o 263 !! 264 !! (special treatments) 265 !! ! |_ _| ! | 266 !! ! |_| ! |x o 267 !! ! o x o ! |x_x_ 268 !! ! o 269 !!---------------------------------------------------------------------- 270 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: zssh ! Sea level 271 !! 272 INTEGER :: ib_bdy, ib, igrd ! local integers 273 INTEGER :: ii, ij, zcoef, zcoef1, zcoef2, ip, jp ! " " 274 INTEGER :: flagu, flagv ! short cuts 275 REAL(wp) :: zr_3 276 !!---------------------------------------------------------------------- 277 igrd = 1 ! Everything is at T-points here 278 zr_3 = 1. / 3. 279 ! 258 !!---------------------------------------------------------------------- 259 REAL(wp), DIMENSION(jpi,jpj,1), INTENT(inout) :: zssh ! Sea level, need 3 dimensions to be used by bdy_nmn 260 !! 261 INTEGER :: ib_bdy ! bdy index 262 !!---------------------------------------------------------------------- 280 263 DO ib_bdy = 1, nb_bdy 281 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 282 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 283 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 284 SELECT CASE( idx_bdy(ib_bdy)%ntreat(ib,igrd) ) 285 CASE( 0 ) 286 flagu = NINT( idx_bdy(ib_bdy)%flagu(ib,igrd) ) 287 flagv = NINT( idx_bdy(ib_bdy)%flagv(ib,igrd) ) 288 IF( flagu == 0 .OR. flagv == 0 ) THEN ! linear bdy o 289 zssh(ii,ij) = zssh(ii+flagu,ij+flagv) ! ___x___ 290 ELSE ! ___ o 291 ! | x o 292 zssh(ii,ij) = ( zssh(ii+flagu,ij) + zssh(ii,ij+flagv) ) * 0.5 293 END IF 294 ! ! ! _____ ! _____ 295 ! 1 | o ! 2 o | ! 3 | x ! 4 x | 296 ! |_x_ _ ! _ _x_| ! | o ! o | 297 CASE( 1 ) ; zssh(ii,ij) = zssh(ii+1,ij+1) 298 CASE( 2 ) ; zssh(ii,ij) = zssh(ii-1,ij+1) 299 CASE( 3 ) ; zssh(ii,ij) = zssh(ii+1,ij-1) 300 CASE( 4 ) ; zssh(ii,ij) = zssh(ii-1,ij-1) 301 ! |_ o ! o _| ! ¨¨|_|¨¨ ! o 302 ! 5 _| x o ! 6 o x |_ ! 7 o x o ! 8 o x o 303 ! | o ! o | ! o ! __|¨|__ 304 CASE( 5 ) ; zssh(ii,ij) = ( zssh(ii ,ij+1) + zssh(ii+1,ij ) + zssh(ii ,ij-1) ) * zr_3 305 CASE( 6 ) ; zssh(ii,ij) = ( zssh(ii ,ij+1) + zssh(ii-1,ij ) + zssh(ii ,ij-1) ) * zr_3 306 CASE( 7 ) ; zssh(ii,ij) = ( zssh(ii-1,ij ) + zssh(ii ,ij-1) + zssh(ii+1,ij ) ) * zr_3 307 CASE( 8 ) ; zssh(ii,ij) = ( zssh(ii-1,ij ) + zssh(ii ,ij+1) + zssh(ii+1,ij ) ) * zr_3 308 END SELECT 309 END DO 310 311 ! Boundary points should be updated 312 CALL lbc_bdy_lnk( 'bdydyn2d', zssh(:,:), 'T', 1., ib_bdy ) 313 END DO 314 264 CALL bdy_nmn( idx_bdy(ib_bdy), 1, zssh ) ! zssh is masked 265 CALL lbc_bdy_lnk( 'bdydyn2d', zssh(:,:,1), 'T', 1., ib_bdy ) 266 END DO 267 ! 315 268 END SUBROUTINE bdy_ssh 316 269
Note: See TracChangeset
for help on using the changeset viewer.