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 11044 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydyn2d.F90 – NEMO

Ignore:
Timestamp:
2019-05-23T17:13:38+02:00 (5 years ago)
Author:
girrmann
Message:

dev_r10984_HPC-13 : missing part of [11024], see #2285

File:
1 edited

Legend:

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

    r11024 r11044  
    256256      !! ** Purpose : Duplicate sea level across open boundaries 
    257257      !! 
    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      !!---------------------------------------------------------------------- 
    280263      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      ! 
    315268   END SUBROUTINE bdy_ssh 
    316269 
Note: See TracChangeset for help on using the changeset viewer.