- Timestamp:
- 2019-11-26T15:11:43+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo_TEST_MERGE/src/OCE/DYN/sshwzv.F90
r11931 r11967 9 9 !! - ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 10 10 !! 3.3 ! 2011-10 (M. Leclair) split former ssh_wzv routine and remove all vvl related work 11 !! 4.0 ! 2018-12 (A. Coward) add mixed implicit/explicit advection 11 12 !!---------------------------------------------------------------------- 12 13 … … 287 288 !! : wi : now vertical velocity (for implicit treatment) 288 289 !! 289 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. 290 !! Reference : Shchepetkin, A. F. (2015): An adaptive, Courant-number-dependent 291 !! implicit scheme for vertical advection in oceanic modeling. 292 !! Ocean Modelling, 91, 38-69. 290 293 !!---------------------------------------------------------------------- 291 294 INTEGER, INTENT(in) :: kt ! time step … … 294 297 REAL(wp) :: zCu, zcff, z1_e3t ! local scalars 295 298 REAL(wp) , PARAMETER :: Cu_min = 0.15_wp ! local parameters 296 REAL(wp) , PARAMETER :: Cu_max = 0. 27! local parameters299 REAL(wp) , PARAMETER :: Cu_max = 0.30_wp ! local parameters 297 300 REAL(wp) , PARAMETER :: Cu_cut = 2._wp*Cu_max - Cu_min ! local parameters 298 301 REAL(wp) , PARAMETER :: Fcu = 4._wp*Cu_max*(Cu_max-Cu_min) ! local parameters … … 308 311 ENDIF 309 312 ! 310 ! 311 DO jk = 1, jpkm1 ! calculate Courant numbers 312 DO jj = 2, jpjm1 313 DO ji = 2, fs_jpim1 ! vector opt. 314 z1_e3t = 1._wp / e3t_n(ji,jj,jk) 315 Cu_adv(ji,jj,jk) = 2._wp * rdt * ( ( MAX( wn(ji,jj,jk) , 0._wp ) - MIN( wn(ji,jj,jk+1) , 0._wp ) ) & ! 2*rdt and not r2dt (for restartability) 316 & + ( MAX( e2u(ji ,jj)*e3u_n(ji ,jj,jk)*un(ji ,jj,jk), 0._wp ) - & 317 & MIN( e2u(ji-1,jj)*e3u_n(ji-1,jj,jk)*un(ji-1,jj,jk), 0._wp ) ) & 318 & * r1_e1e2t(ji,jj) & 319 & + ( MAX( e1v(ji,jj )*e3v_n(ji,jj ,jk)*vn(ji,jj ,jk), 0._wp ) - & 320 & MIN( e1v(ji,jj-1)*e3v_n(ji,jj-1,jk)*vn(ji,jj-1,jk), 0._wp ) ) & 321 & * r1_e1e2t(ji,jj) & 322 & ) * z1_e3t 313 ! Calculate Courant numbers 314 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 315 DO jk = 1, jpkm1 316 DO jj = 2, jpjm1 317 DO ji = 2, fs_jpim1 ! vector opt. 318 z1_e3t = 1._wp / e3t_n(ji,jj,jk) 319 ! 2*rdt and not r2dt (for restartability) 320 Cu_adv(ji,jj,jk) = 2._wp * rdt * ( ( MAX( wn(ji,jj,jk) , 0._wp ) - MIN( wn(ji,jj,jk+1) , 0._wp ) ) & 321 & + ( MAX( e2u(ji ,jj)*e3u_n(ji ,jj,jk)*un(ji ,jj,jk) + un_td(ji ,jj,jk), 0._wp ) - & 322 & MIN( e2u(ji-1,jj)*e3u_n(ji-1,jj,jk)*un(ji-1,jj,jk) + un_td(ji-1,jj,jk), 0._wp ) ) & 323 & * r1_e1e2t(ji,jj) & 324 & + ( MAX( e1v(ji,jj )*e3v_n(ji,jj ,jk)*vn(ji,jj ,jk) + vn_td(ji,jj ,jk), 0._wp ) - & 325 & MIN( e1v(ji,jj-1)*e3v_n(ji,jj-1,jk)*vn(ji,jj-1,jk) + vn_td(ji,jj-1,jk), 0._wp ) ) & 326 & * r1_e1e2t(ji,jj) & 327 & ) * z1_e3t 328 END DO 323 329 END DO 324 330 END DO 325 END DO 331 ELSE 332 DO jk = 1, jpkm1 333 DO jj = 2, jpjm1 334 DO ji = 2, fs_jpim1 ! vector opt. 335 z1_e3t = 1._wp / e3t_n(ji,jj,jk) 336 ! 2*rdt and not r2dt (for restartability) 337 Cu_adv(ji,jj,jk) = 2._wp * rdt * ( ( MAX( wn(ji,jj,jk) , 0._wp ) - MIN( wn(ji,jj,jk+1) , 0._wp ) ) & 338 & + ( MAX( e2u(ji ,jj)*e3u_n(ji ,jj,jk)*un(ji ,jj,jk), 0._wp ) - & 339 & MIN( e2u(ji-1,jj)*e3u_n(ji-1,jj,jk)*un(ji-1,jj,jk), 0._wp ) ) & 340 & * r1_e1e2t(ji,jj) & 341 & + ( MAX( e1v(ji,jj )*e3v_n(ji,jj ,jk)*vn(ji,jj ,jk), 0._wp ) - & 342 & MIN( e1v(ji,jj-1)*e3v_n(ji,jj-1,jk)*vn(ji,jj-1,jk), 0._wp ) ) & 343 & * r1_e1e2t(ji,jj) & 344 & ) * z1_e3t 345 END DO 346 END DO 347 END DO 348 ENDIF 326 349 CALL lbc_lnk( 'sshwzv', Cu_adv, 'T', 1. ) 327 350 ! … … 354 377 wn(ji,jj,jk) = ( 1._wp - zcff ) * wn(ji,jj,jk) 355 378 ! 356 Cu_adv(ji,jj,jk) = zcff ! Reuse array to output coefficient 379 Cu_adv(ji,jj,jk) = zcff ! Reuse array to output coefficient below and in stp_ctl 357 380 END DO 358 381 END DO … … 361 384 ELSE 362 385 ! Fully explicit everywhere 363 Cu_adv(:,:,:) = 0._wp ! Reuse array to output coefficient 386 Cu_adv(:,:,:) = 0._wp ! Reuse array to output coefficient below and in stp_ctl 364 387 wi (:,:,:) = 0._wp 365 388 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.