- Timestamp:
- 2020-11-27T17:26:33+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/tickets_icb_1900
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/tickets_icb_1900
- Property svn:externals
-
NEMO/branches/2020/tickets_icb_1900/src/OCE/DYN/dynzdf.F90
r13237 r13899 107 107 ! ! time stepping except vertical diffusion 108 108 IF( ln_dynadv_vec .OR. ln_linssh ) THEN ! applied on velocity 109 DO jk = 1, jpkm1110 puu( :,:,jk,Kaa) = ( puu(:,:,jk,Kbb) + rDt * puu(:,:,jk,Krhs) ) * umask(:,:,jk)111 pvv( :,:,jk,Kaa) = ( pvv(:,:,jk,Kbb) + rDt * pvv(:,:,jk,Krhs) ) * vmask(:,:,jk)112 END DO109 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 110 puu(ji,jj,jk,Kaa) = ( puu(ji,jj,jk,Kbb) + rDt * puu(ji,jj,jk,Krhs) ) * umask(ji,jj,jk) 111 pvv(ji,jj,jk,Kaa) = ( pvv(ji,jj,jk,Kbb) + rDt * pvv(ji,jj,jk,Krhs) ) * vmask(ji,jj,jk) 112 END_3D 113 113 ELSE ! applied on thickness weighted velocity 114 DO jk = 1, jpkm1115 puu( :,:,jk,Kaa) = ( e3u(:,:,jk,Kbb) * puu(:,:,jk,Kbb) &116 & + rDt * e3u(:,:,jk,Kmm) * puu(:,:,jk,Krhs) )&117 & / e3u(:,:,jk,Kaa) * umask(:,:,jk)118 pvv( :,:,jk,Kaa) = ( e3v(:,:,jk,Kbb) * pvv(:,:,jk,Kbb) &119 & + rDt * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Krhs) )&120 & / e3v(:,:,jk,Kaa) * vmask(:,:,jk)121 END DO114 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 115 puu(ji,jj,jk,Kaa) = ( e3u(ji,jj,jk,Kbb) * puu(ji,jj,jk,Kbb ) & 116 & + rDt * e3u(ji,jj,jk,Kmm) * puu(ji,jj,jk,Krhs) ) & 117 & / e3u(ji,jj,jk,Kaa) * umask(ji,jj,jk) 118 pvv(ji,jj,jk,Kaa) = ( e3v(ji,jj,jk,Kbb) * pvv(ji,jj,jk,Kbb ) & 119 & + rDt * e3v(ji,jj,jk,Kmm) * pvv(ji,jj,jk,Krhs) ) & 120 & / e3v(ji,jj,jk,Kaa) * vmask(ji,jj,jk) 121 END_3D 122 122 ENDIF 123 123 ! ! add top/bottom friction … … 127 127 ! G. Madec : in linear free surface, e3u(:,:,:,Kaa) = e3u(:,:,:,Kmm) = e3u_0, so systematic use of e3u(:,:,:,Kaa) 128 128 IF( ln_drgimp .AND. ln_dynspg_ts ) THEN 129 DO jk = 1, jpkm1! remove barotropic velocities130 puu( :,:,jk,Kaa) = ( puu(:,:,jk,Kaa) - uu_b(:,:,Kaa) ) * umask(:,:,jk)131 pvv( :,:,jk,Kaa) = ( pvv(:,:,jk,Kaa) - vv_b(:,:,Kaa) ) * vmask(:,:,jk)132 END DO133 DO_2D _00_00129 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) ! remove barotropic velocities 130 puu(ji,jj,jk,Kaa) = ( puu(ji,jj,jk,Kaa) - uu_b(ji,jj,Kaa) ) * umask(ji,jj,jk) 131 pvv(ji,jj,jk,Kaa) = ( pvv(ji,jj,jk,Kaa) - vv_b(ji,jj,Kaa) ) * vmask(ji,jj,jk) 132 END_3D 133 DO_2D( 0, 0, 0, 0 ) ! Add bottom/top stress due to barotropic component only 134 134 iku = mbku(ji,jj) ! ocean bottom level at u- and v-points 135 135 ikv = mbkv(ji,jj) ! (deepest ocean u- and v-points) … … 141 141 pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 142 142 END_2D 143 IF( ln_isfcav ) THEN ! Ocean cavities (ISF)144 DO_2D _00_00143 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! Ocean cavities (ISF) 144 DO_2D( 0, 0, 0, 0 ) 145 145 iku = miku(ji,jj) ! top ocean level at u- and v-points 146 146 ikv = mikv(ji,jj) ! (first wet ocean u- and v-points) … … 162 162 SELECT CASE( nldf_dyn ) 163 163 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzu) 164 DO_3D _00_00(1, jpkm1 )164 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 165 165 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,jk,Kmm) & 166 166 & + r_vvl * e3u(ji,jj,jk,Kaa) ! after scale factor at U-point … … 176 176 END_3D 177 177 CASE DEFAULT ! iso-level lateral mixing 178 DO_3D _00_00(1, jpkm1 )178 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 179 179 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,jk,Kmm) & ! after scale factor at U-point 180 180 & + r_vvl * e3u(ji,jj,jk,Kaa) … … 190 190 END_3D 191 191 END SELECT 192 DO_2D _00_00192 DO_2D( 0, 0, 0, 0 ) !* Surface boundary conditions 193 193 zwi(ji,jj,1) = 0._wp 194 194 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,1,Kmm) & … … 203 203 SELECT CASE( nldf_dyn ) 204 204 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzu) 205 DO_3D _00_00(1, jpkm1 )205 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 206 206 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,jk,Kmm) & 207 207 & + r_vvl * e3u(ji,jj,jk,Kaa) ! after scale factor at U-point … … 215 215 END_3D 216 216 CASE DEFAULT ! iso-level lateral mixing 217 DO_3D _00_00(1, jpkm1 )217 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 218 218 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,jk,Kmm) & 219 219 & + r_vvl * e3u(ji,jj,jk,Kaa) ! after scale factor at U-point … … 227 227 END_3D 228 228 END SELECT 229 DO_2D _00_00229 DO_2D( 0, 0, 0, 0 ) !* Surface boundary conditions 230 230 zwi(ji,jj,1) = 0._wp 231 231 zwd(ji,jj,1) = 1._wp - zws(ji,jj,1) … … 241 241 ! 242 242 IF ( ln_drgimp ) THEN ! implicit bottom friction 243 DO_2D _00_00243 DO_2D( 0, 0, 0, 0 ) 244 244 iku = mbku(ji,jj) ! ocean bottom level at u- and v-points 245 245 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm) & … … 247 247 zwd(ji,jj,iku) = zwd(ji,jj,iku) - rDt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / ze3ua 248 248 END_2D 249 IF ( ln_isfcav ) THEN ! top friction (always implicit)250 DO_2D _00_00249 IF ( ln_isfcav.OR.ln_drgice_imp ) THEN ! top friction (always implicit) 250 DO_2D( 0, 0, 0, 0 ) 251 251 !!gm top Cd is masked (=0 outside cavities) no need of test on mik>=2 ==>> it has been suppressed 252 252 iku = miku(ji,jj) ! ocean top level at u- and v-points … … 273 273 !----------------------------------------------------------------------- 274 274 ! 275 DO_3D _00_00( 2, jpkm1 )275 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !== First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 (increasing k) == 276 276 zwd(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwd(ji,jj,jk-1) 277 277 END_3D 278 278 ! 279 DO_2D _00_00279 DO_2D( 0, 0, 0, 0 ) !== second recurrence: SOLk = RHSk - Lk / Dk-1 Lk-1 ==! 280 280 ze3ua = ( 1._wp - r_vvl ) * e3u(ji,jj,1,Kmm) & 281 281 & + r_vvl * e3u(ji,jj,1,Kaa) … … 283 283 & / ( ze3ua * rho0 ) * umask(ji,jj,1) 284 284 END_2D 285 DO_3D _00_00(2, jpkm1 )285 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 286 286 puu(ji,jj,jk,Kaa) = puu(ji,jj,jk,Kaa) - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * puu(ji,jj,jk-1,Kaa) 287 287 END_3D 288 288 ! 289 DO_2D _00_00289 DO_2D( 0, 0, 0, 0 ) !== thrid recurrence : SOLk = ( Lk - Uk * Ek+1 ) / Dk ==! 290 290 puu(ji,jj,jpkm1,Kaa) = puu(ji,jj,jpkm1,Kaa) / zwd(ji,jj,jpkm1) 291 291 END_2D 292 DO_3DS _00_00(jpk-2, 1, -1 )292 DO_3DS( 0, 0, 0, 0, jpk-2, 1, -1 ) 293 293 puu(ji,jj,jk,Kaa) = ( puu(ji,jj,jk,Kaa) - zws(ji,jj,jk) * puu(ji,jj,jk+1,Kaa) ) / zwd(ji,jj,jk) 294 294 END_3D … … 301 301 SELECT CASE( nldf_dyn ) 302 302 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzv) 303 DO_3D _00_00(1, jpkm1 )303 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 304 304 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,jk,Kmm) & 305 305 & + r_vvl * e3v(ji,jj,jk,Kaa) ! after scale factor at V-point … … 315 315 END_3D 316 316 CASE DEFAULT ! iso-level lateral mixing 317 DO_3D _00_00(1, jpkm1 )317 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 318 318 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,jk,Kmm) & 319 319 & + r_vvl * e3v(ji,jj,jk,Kaa) ! after scale factor at V-point … … 329 329 END_3D 330 330 END SELECT 331 DO_2D _00_00331 DO_2D( 0, 0, 0, 0 ) !* Surface boundary conditions 332 332 zwi(ji,jj,1) = 0._wp 333 333 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,1,Kmm) & … … 342 342 SELECT CASE( nldf_dyn ) 343 343 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzu) 344 DO_3D _00_00(1, jpkm1 )344 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 345 345 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,jk,Kmm) & 346 346 & + r_vvl * e3v(ji,jj,jk,Kaa) ! after scale factor at V-point … … 354 354 END_3D 355 355 CASE DEFAULT ! iso-level lateral mixing 356 DO_3D _00_00(1, jpkm1 )356 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 357 357 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,jk,Kmm) & 358 358 & + r_vvl * e3v(ji,jj,jk,Kaa) ! after scale factor at V-point … … 366 366 END_3D 367 367 END SELECT 368 DO_2D _00_00368 DO_2D( 0, 0, 0, 0 ) !* Surface boundary conditions 369 369 zwi(ji,jj,1) = 0._wp 370 370 zwd(ji,jj,1) = 1._wp - zws(ji,jj,1) … … 379 379 ! 380 380 IF( ln_drgimp ) THEN 381 DO_2D _00_00381 DO_2D( 0, 0, 0, 0 ) 382 382 ikv = mbkv(ji,jj) ! (deepest ocean u- and v-points) 383 383 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) & … … 385 385 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / ze3va 386 386 END_2D 387 IF ( ln_isfcav ) THEN388 DO_2D _00_00387 IF ( ln_isfcav.OR.ln_drgice_imp ) THEN 388 DO_2D( 0, 0, 0, 0 ) 389 389 ikv = mikv(ji,jj) ! (first wet ocean u- and v-points) 390 390 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm) & … … 410 410 !----------------------------------------------------------------------- 411 411 ! 412 DO_3D _00_00( 2, jpkm1 )412 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !== First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 (increasing k) == 413 413 zwd(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwd(ji,jj,jk-1) 414 414 END_3D 415 415 ! 416 DO_2D _00_00416 DO_2D( 0, 0, 0, 0 ) !== second recurrence: SOLk = RHSk - Lk / Dk-1 Lk-1 ==! 417 417 ze3va = ( 1._wp - r_vvl ) * e3v(ji,jj,1,Kmm) & 418 418 & + r_vvl * e3v(ji,jj,1,Kaa) … … 420 420 & / ( ze3va * rho0 ) * vmask(ji,jj,1) 421 421 END_2D 422 DO_3D _00_00(2, jpkm1 )422 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 423 423 pvv(ji,jj,jk,Kaa) = pvv(ji,jj,jk,Kaa) - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * pvv(ji,jj,jk-1,Kaa) 424 424 END_3D 425 425 ! 426 DO_2D _00_00426 DO_2D( 0, 0, 0, 0 ) !== third recurrence : SOLk = ( Lk - Uk * SOLk+1 ) / Dk ==! 427 427 pvv(ji,jj,jpkm1,Kaa) = pvv(ji,jj,jpkm1,Kaa) / zwd(ji,jj,jpkm1) 428 428 END_2D 429 DO_3DS _00_00(jpk-2, 1, -1 )429 DO_3DS( 0, 0, 0, 0, jpk-2, 1, -1 ) 430 430 pvv(ji,jj,jk,Kaa) = ( pvv(ji,jj,jk,Kaa) - zws(ji,jj,jk) * pvv(ji,jj,jk+1,Kaa) ) / zwd(ji,jj,jk) 431 431 END_3D
Note: See TracChangeset
for help on using the changeset viewer.