- Timestamp:
- 2016-10-14T11:10:43+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r6998_ORCHESTRA/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90
r6140 r7029 57 57 CASE('orlanski' ) ; CALL bdy_dyn3d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.false. ) 58 58 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 ) 59 61 CASE DEFAULT ; CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' ) 60 62 END SELECT … … 110 112 END SUBROUTINE bdy_dyn3d_spe 111 113 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 112 163 113 164 SUBROUTINE bdy_dyn3d_zro( idx, dta, kt, ib_bdy ) … … 296 347 END SUBROUTINE bdy_dyn3d_dmp 297 348 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 298 383 #else 299 384 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.