Changeset 15556
- Timestamp:
- 2021-11-29T16:23:06+01:00 (3 years ago)
- Location:
- NEMO/trunk/src/OCE
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/DOM/dom_oce.F90
r15267 r15556 191 191 ! INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mbk_t, mbk_u, mbk_v !: bottom last wet T-, U-, and V-level 192 192 !!gm 193 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mbkt, mbku, mbkv !: bottom last wet T-, U- and V-level194 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tmask_i !: interior domain T-point mask193 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mbkt, mbku, mbkv, mbkf !: bottom last wet T-, U-, V- and F-level 194 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tmask_i !: interior domain T-point mask 195 195 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tmask_h !: internal domain T-point mask (Figure 8.5 NEMO book) 196 196 … … 200 200 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, wmask, fmask !: land/ocean mask at T-, U-, V-, W- and F-pts 201 201 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: wumask, wvmask !: land/ocean mask at WU- and WV-pts 202 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: fe3mask !: land/ocean mask at F-pts (qco only)202 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: fe3mask !: land/ocean mask at F-pts 203 203 204 204 !!---------------------------------------------------------------------- … … 306 306 ! 307 307 ii = ii+1 308 ALLOCATE( fe3mask(jpi,jpj,jpk) , STAT=ierr(ii) )309 308 ! 310 309 #elif defined key_linssh … … 330 329 ALLOCATE( tmask_i(jpi,jpj) , tmask_h(jpi,jpj) , & 331 330 & ssmask (jpi,jpj) , ssumask(jpi,jpj) , ssvmask(jpi,jpj) , ssfmask(jpi,jpj) , & 332 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv (jpi,jpj) 331 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv (jpi,jpj) , mbkf(jpi,jpj) , STAT=ierr(ii) ) 333 332 ! 334 333 ii = ii+1 … … 337 336 ii = ii+1 338 337 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk) , & 339 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk) , STAT=ierr(ii) )338 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk) , fe3mask(jpi,jpj,jpk), STAT=ierr(ii) ) 340 339 ! 341 340 ii = ii+1 -
NEMO/trunk/src/OCE/DOM/dommsk.F90
r15145 r15556 157 157 & * tmask(ji,jj+1,jk) * tmask(ji+1,jj+1,jk) 158 158 END_3D 159 ! 160 ! In case of a coarsened grid, account her for possibly aditionnal 161 ! masked points; these have been read in the mesh file and stored in mbku, mbkv, mbkf 162 DO_2D( 0, 0, 0, 0 ) 163 IF (mbku(ji,jj)<=1 ) umask(ji,jj,:) = 0._wp 164 IF (mbkv(ji,jj)<=1 ) vmask(ji,jj,:) = 0._wp 165 IF (mbkf(ji,jj)<=1 ) fmask(ji,jj,:) = 0._wp 166 IF ( MAXVAL(umask(ji,jj,:))/=0._wp ) umask(ji,jj,mbku(ji,jj)+1:jpk) = 0._wp 167 IF ( MAXVAL(vmask(ji,jj,:))/=0._wp ) vmask(ji,jj,mbkv(ji,jj)+1:jpk) = 0._wp 168 IF ( MAXVAL(fmask(ji,jj,:))/=0._wp ) fmask(ji,jj,mbkf(ji,jj)+1:jpk) = 0._wp 169 END_2D 159 170 CALL lbc_lnk( 'dommsk', umask, 'U', 1.0_wp, vmask, 'V', 1.0_wp, fmask, 'F', 1.0_wp ) ! Lateral boundary conditions 160 171 … … 183 194 CALL lbc_lnk( 'dommsk', ssfmask, 'F', 1.0_wp ) 184 195 ENDIF 185 #if defined key_qco186 196 fe3mask(:,:,:) = fmask(:,:,:) 187 #endif188 197 189 198 ! Interior domain mask (used for global sum) -
NEMO/trunk/src/OCE/DOM/domzgr.F90
r15529 r15556 74 74 INTEGER :: ikt, ikb ! top/bot index 75 75 INTEGER :: ioptio, ibat, ios ! local integer 76 INTEGER :: is_mbkuvf ! ==0 if mbku, mbkv, mbkf to be computed 76 77 REAL(wp) :: zrefdep ! depth of the reference level (~10m) 77 78 REAL(wp), DIMENSION(jpi,jpj ) :: zmsk … … 97 98 & e3t_0 , e3u_0 , e3v_0 , e3f_0 , & ! vertical scale factors 98 99 & e3w_0 , e3uw_0 , e3vw_0 , & ! vertical scale factors 99 & k_top , k_bot ) ! 1st & last ocean level 100 & k_top , k_bot , & ! 1st & last ocean level 101 & is_mbkuvf, mbku, mbkv, mbkf ) ! U/V/F points bottom levels 100 102 ! 101 103 ELSE !== User defined configuration ==! 102 104 IF(lwp) WRITE(numout,*) 103 105 IF(lwp) WRITE(numout,*) ' User defined vertical mesh (usr_def_zgr)' 106 is_mbkuvf = 0 104 107 ! 105 108 CALL usr_def_zgr( ln_zco , ln_zps , ln_sco, ln_isfcav, & … … 177 180 178 181 ! ! top/bottom ocean level indices for t-, u- and v-points (f-point also for top) 179 CALL zgr_top_bot( k_top, k_bot ) ! with a minimum value set to 1182 CALL zgr_top_bot( k_top, k_bot, is_mbkuvf ) ! with a minimum value set to 1 180 183 ! 181 184 ! ! ice shelf draft and bathymetry … … 220 223 & pe3t , pe3u , pe3v , pe3f , & ! vertical scale factors 221 224 & pe3w , pe3uw , pe3vw , & ! - - - 222 & k_top , k_bot ) ! top & bottom ocean level 225 & k_top , k_bot , & ! top & bottom ocean level 226 & k_mbkuvf , k_bot_u , k_bot_v , k_bot_f ) ! U/V/F points bottom levels 223 227 !!--------------------------------------------------------------------- 224 228 !! *** ROUTINE zgr_read *** … … 235 239 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3w , pe3uw, pe3vw ! - - - 236 240 INTEGER , DIMENSION(:,:) , INTENT(out) :: k_top , k_bot ! first & last ocean level 241 INTEGER , INTENT(out) :: k_mbkuvf ! ==1 if mbku, mbkv, mbkf are in file 242 INTEGER , DIMENSION(:,:) , INTENT(out) :: k_bot_u , k_bot_v, k_bot_f ! bottom levels at U/V/F points 237 243 ! 238 244 INTEGER :: ji,jj,jk ! dummy loop index … … 322 328 ENDIF 323 329 ! 330 IF( iom_varid( inum, 'mbku', ldstop = .FALSE. ) > 0 ) THEN 331 IF(lwp) WRITE(numout,*) ' mbku, mbkv & mbkf read in ', TRIM(cn_domcfg), ' file' 332 CALL iom_get( inum, jpdom_global, 'mbku', z2d ) 333 k_bot_u(:,:) = NINT( z2d(:,:) ) 334 CALL iom_get( inum, jpdom_global, 'mbkv', z2d ) 335 k_bot_v(:,:) = NINT( z2d(:,:) ) 336 CALL iom_get( inum, jpdom_global, 'mbkf', z2d ) 337 k_bot_f(:,:) = NINT( z2d(:,:) ) 338 k_mbkuvf = 1 339 ELSE 340 k_mbkuvf = 0 341 ENDIF 342 ! 324 343 ! reference depth for negative bathy (wetting and drying only) 325 344 IF( ll_wd ) CALL iom_get( inum, 'rn_wd_ref_depth' , ssh_ref ) … … 330 349 331 350 332 SUBROUTINE zgr_top_bot( k_top, k_bot )351 SUBROUTINE zgr_top_bot( k_top, k_bot, k_mbkuvf ) 333 352 !!---------------------------------------------------------------------- 334 353 !! *** ROUTINE zgr_top_bot *** … … 342 361 !! (min value = 1) 343 362 !! ** Action : mbkt, mbku, mbkv : vertical indices of the deeptest 344 !! ocean level at t-, u- & v-points363 !! mbkf ocean level at t-, u-, v- & f-points 345 364 !! (min value = 1 over land) 346 365 !!---------------------------------------------------------------------- 347 366 INTEGER , DIMENSION(:,:), INTENT(in) :: k_top, k_bot ! top & bottom ocean level indices 367 INTEGER , INTENT(in) :: k_mbkuvf ! flag to recompute mbku, mbkv, mbkf 348 368 ! 349 369 INTEGER :: ji, jj ! dummy loop indices … … 365 385 mikv(ji,jj) = MAX( mikt(ji ,jj+1) , mikt(ji,jj) ) 366 386 mikf(ji,jj) = MAX( mikt(ji ,jj+1) , mikt(ji,jj), mikt(ji+1,jj ), mikt(ji+1,jj+1) ) 367 ! 368 mbku(ji,jj) = MIN( mbkt(ji+1,jj ) , mbkt(ji,jj) ) 369 mbkv(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj) ) 370 END_2D 371 ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 387 END_2D 388 389 IF ( k_mbkuvf==0 ) THEN 390 IF(lwp) WRITE(numout,*) ' mbku, mbkv, mbkf computed from mbkt' 391 DO_2D( 0, 0, 0, 0 ) 392 mbku(ji,jj) = MIN( mbkt(ji+1,jj ) , mbkt(ji,jj) ) 393 mbkv(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj) ) 394 mbkf(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj), mbkt(ji+1,jj ), mbkt(ji+1,jj+1) ) 395 END_2D 396 ELSE 397 IF(lwp) WRITE(numout,*) ' mbku, mbkv, mbkf read from file' 398 ! Use mbku, mbkv, mbkf from file 399 ! Ensure these are lower than expected bottom level deduced from mbkt 400 DO_2D( 0, 0, 0, 0 ) 401 mbku(ji,jj) = MIN( mbku(ji,jj), mbkt(ji+1,jj ) , mbkt(ji,jj) ) 402 mbkv(ji,jj) = MIN( mbkv(ji,jj), mbkt(ji ,jj+1) , mbkt(ji,jj) ) 403 mbkf(ji,jj) = MIN( mbkf(ji,jj), mbkt(ji ,jj+1) , mbkt(ji,jj), mbkt(ji+1,jj ), mbkt(ji+1,jj+1) ) 404 END_2D 405 ENDIF 406 ! convert into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 372 407 DO_2D( 0, 0, 0, 0 ) 373 408 zk(ji,jj) = REAL( miku(ji,jj), wp ) … … 399 434 CALL lbc_lnk( 'domzgr', zk, 'V', 1.0_wp ) 400 435 mbkv(:,:) = MAX( NINT( zk(:,:) ), 1 ) 436 437 DO_2D( 0, 0, 0, 0 ) 438 zk(ji,jj) = REAL( mbkf(ji,jj), wp ) 439 END_2D 440 CALL lbc_lnk( 'domzgr', zk, 'F', 1.0_wp ) 441 mbkf(:,:) = MAX( NINT( zk(:,:) ), 1 ) 401 442 ! 402 443 END SUBROUTINE zgr_top_bot -
NEMO/trunk/src/OCE/oce.F90
r14064 r15556 110 110 & hu_e(jpi,jpj), hur_e(jpi,jpj), hv_e(jpi,jpj), hvr_e(jpi,jpj), STAT=ierr(4) ) 111 111 ! 112 ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), un_bf(jpi,jpj), vn_bf(jpi,jpj) , STAT=ierr( 6) )112 ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), un_bf(jpi,jpj), vn_bf(jpi,jpj) , STAT=ierr(5) ) 113 113 #if defined key_agrif 114 114 ALLOCATE( ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj) , STAT=ierr(6) )
Note: See TracChangeset
for help on using the changeset viewer.