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 7029 for branches/NERC/dev_r6998_ORCHESTRA/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90 – NEMO

Ignore:
Timestamp:
2016-10-14T11:10:43+02:00 (8 years ago)
Author:
jamesharle
Message:

Adding ORCHESTRA configuration
Merging with branches/2016/dev_r5549_BDY_ZEROGRAD
Merging with branches/2016/dev_r5840_BDY_MSK
Merging with branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r6998_ORCHESTRA/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90

    r6140 r7029  
    5757         CASE('orlanski' )   ;   CALL bdy_dyn3d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.false. ) 
    5858         CASE('orlanski_npo');   CALL bdy_dyn3d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.true. ) 
     59         CASE('zerograd')    ;   CALL bdy_dyn3d_zgrad( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 
     60         CASE('neumann')     ;   CALL bdy_dyn3d_nmn( idx_bdy(ib_bdy), ib_bdy ) 
    5961         CASE DEFAULT        ;   CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' ) 
    6062         END SELECT 
     
    110112   END SUBROUTINE bdy_dyn3d_spe 
    111113 
     114   SUBROUTINE bdy_dyn3d_zgrad( idx, dta, kt , ib_bdy ) 
     115      !!---------------------------------------------------------------------- 
     116      !!                  ***  SUBROUTINE bdy_dyn3d_zgrad  *** 
     117      !! 
     118      !! ** Purpose : - Enforce a zero gradient of normal velocity 
     119      !! 
     120      !!---------------------------------------------------------------------- 
     121      INTEGER                     ::   kt 
     122      TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
     123      TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
     124      INTEGER,         INTENT(in) ::   ib_bdy  ! BDY set index 
     125      !! 
     126      INTEGER  ::   jb, jk         ! dummy loop indices 
     127      INTEGER  ::   ii, ij, igrd   ! local integers 
     128      REAL(wp) ::   zwgt           ! boundary weight 
     129      INTEGER  ::   fu, fv 
     130      !!---------------------------------------------------------------------- 
     131      ! 
     132      IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_zgrad') 
     133      ! 
     134      igrd = 2                      ! Copying tangential velocity into bdy points 
     135      DO jb = 1, idx%nblenrim(igrd) 
     136         DO jk = 1, jpkm1 
     137            ii   = idx%nbi(jb,igrd) 
     138            ij   = idx%nbj(jb,igrd) 
     139            fu   = ABS( ABS (NINT( idx%flagu(jb,igrd) ) ) - 1 ) 
     140            ua(ii,ij,jk) = ua(ii,ij,jk) * REAL( 1 - fu) + ( ua(ii,ij+fu,jk) * umask(ii,ij+fu,jk) & 
     141                        &+ ua(ii,ij-fu,jk) * umask(ii,ij-fu,jk) ) * umask(ii,ij,jk) * REAL( fu ) 
     142         END DO 
     143      END DO 
     144      ! 
     145      igrd = 3                      ! Copying tangential velocity into bdy points 
     146      DO jb = 1, idx%nblenrim(igrd) 
     147         DO jk = 1, jpkm1 
     148            ii   = idx%nbi(jb,igrd) 
     149            ij   = idx%nbj(jb,igrd) 
     150            fv   = ABS( ABS (NINT( idx%flagv(jb,igrd) ) ) - 1 ) 
     151            va(ii,ij,jk) = va(ii,ij,jk) * REAL( 1 - fv ) + ( va(ii+fv,ij,jk) * vmask(ii+fv,ij,jk) & 
     152                        &+ va(ii-fv,ij,jk) * vmask(ii-fv,ij,jk) ) * vmask(ii,ij,jk) * REAL( fv ) 
     153         END DO 
     154      END DO 
     155      CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy )   ! Boundary points should be updated   
     156      CALL lbc_bdy_lnk( va, 'V', -1., ib_bdy )    
     157      ! 
     158      IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
     159 
     160      IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_zgrad') 
     161 
     162   END SUBROUTINE bdy_dyn3d_zgrad 
    112163 
    113164   SUBROUTINE bdy_dyn3d_zro( idx, dta, kt, ib_bdy ) 
     
    296347   END SUBROUTINE bdy_dyn3d_dmp 
    297348 
     349   SUBROUTINE bdy_dyn3d_nmn( idx, ib_bdy ) 
     350      !!---------------------------------------------------------------------- 
     351      !!                 ***  SUBROUTINE bdy_dyn3d_nmn  *** 
     352      !!              
     353      !!              - Apply Neumann condition to baroclinic velocities.  
     354      !!              - Wrapper routine for bdy_nmn 
     355      !!  
     356      !! 
     357      !!---------------------------------------------------------------------- 
     358      TYPE(OBC_INDEX),              INTENT(in) ::   idx  ! OBC indices 
     359      INTEGER,                      INTENT(in) ::   ib_bdy  ! BDY set index 
     360 
     361      INTEGER  ::   jb, igrd                               ! dummy loop indices 
     362      !!---------------------------------------------------------------------- 
     363 
     364      IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_nmn') 
     365      ! 
     366      !! Note that at this stage the ub and ua arrays contain the baroclinic velocities.  
     367      ! 
     368      igrd = 2      ! Neumann bc on u-velocity;  
     369      !             
     370      CALL bdy_nmn( idx, igrd, ua ) 
     371 
     372      igrd = 3      ! Neumann bc on v-velocity 
     373      !   
     374      CALL bdy_nmn( idx, igrd, va ) 
     375      ! 
     376      CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy )    ! Boundary points should be updated 
     377      CALL lbc_bdy_lnk( va, 'V', -1., ib_bdy ) 
     378      ! 
     379      IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_nmn') 
     380      ! 
     381   END SUBROUTINE bdy_dyn3d_nmn 
     382 
    298383#else 
    299384   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.