- Timestamp:
- 2020-04-03T16:22:29+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/dynvor.F90
r12614 r12667 21 21 !! - ! 2018-03 (G. Madec) add two new schemes (ln_dynvor_enT and ln_dynvor_eet) 22 22 !! - ! 2018-04 (G. Madec) add pre-computed gradient for metric term calculation 23 !! 4.x ! 2020-03 (G. Madec, A. Nasser) make ln_dynvor_msk truly efficient on relative vorticity 23 24 !!---------------------------------------------------------------------- 24 25 … … 226 227 ! 227 228 ! 228 SELECT CASE( kvor ) !== volume weightedvorticity considered ==!229 CASE ( np_RVO ) !* relative vorticity230 DO jk = 1, jpkm1 229 SELECT CASE( kvor ) !== relative vorticity considered ==! 230 CASE ( np_RVO , np_CRV ) !* relative vorticity at f-point is used 231 DO jk = 1, jpkm1 ! Horizontal slab 231 232 DO_2D_10_10 232 233 zwz(ji,jj,jk) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 233 234 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 234 235 END_2D 235 IF( ln_dynvor_msk ) THEN ! mask /unmaskrelative vorticity236 IF( ln_dynvor_msk ) THEN ! mask relative vorticity 236 237 DO_2D_10_10 237 238 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) … … 239 240 ENDIF 240 241 END DO 241 242 242 CALL lbc_lnk( 'dynvor', zwz, 'F', 1. ) 243 244 CASE ( np_CRV ) !* Coriolis + relative vorticity 245 DO jk = 1, jpkm1 ! Horizontal slab 246 DO_2D_10_10 247 zwz(ji,jj,jk) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 248 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 249 END_2D 250 IF( ln_dynvor_msk ) THEN ! mask/unmask relative vorticity 251 DO_2D_10_10 252 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 253 END_2D 254 ENDIF 255 END DO 256 257 CALL lbc_lnk( 'dynvor', zwz, 'F', 1. ) 258 243 ! 259 244 END SELECT 260 245 261 246 ! ! =============== 262 247 DO jk = 1, jpkm1 ! Horizontal slab 263 !! ===============264 248 ! ! =============== 249 ! 265 250 SELECT CASE( kvor ) !== volume weighted vorticity considered ==! 251 ! 266 252 CASE ( np_COR ) !* Coriolis (planetary vorticity) 267 253 zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t(:,:,jk,Kmm) … … 356 342 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 357 343 END_2D 344 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 345 DO_2D_10_10 346 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 347 END_2D 348 ENDIF 358 349 CASE ( np_MET ) !* metric term 359 350 DO_2D_10_10 … … 366 357 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 367 358 END_2D 359 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) 360 DO_2D_10_10 361 zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 362 END_2D 363 ENDIF 368 364 CASE ( np_CME ) !* Coriolis + metric 369 365 DO_2D_10_10 … … 375 371 END SELECT 376 372 ! 377 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 378 DO_2D_10_10 379 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 380 END_2D 381 ENDIF 382 383 IF( ln_sco ) THEN 384 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 385 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 386 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 387 ELSE 388 zwx(:,:) = e2u(:,:) * pu(:,:,jk) 389 zwy(:,:) = e1v(:,:) * pv(:,:,jk) 390 ENDIF 373 ! !== horizontal fluxes and potential vorticity ==! 374 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 375 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 376 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 377 ! 391 378 ! !== compute and add the vorticity term trend =! 392 379 DO_2D_00_00 … … 452 439 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 453 440 END_2D 441 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 442 DO_2D_10_10 443 zwz(ji,jj) = ff_f(ji,jj) * fmask(ji,jj,jk) 444 END_2D 445 ENDIF 454 446 CASE ( np_MET ) !* metric term 455 447 DO_2D_10_10 … … 461 453 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 462 454 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 463 !!an & * fmask(ji,jj,jk) 464 END_2D 455 END_2D 456 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) 457 DO_2D_10_10 458 zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 459 END_2D 460 ENDIF 465 461 CASE ( np_CME ) !* Coriolis + metric 466 462 DO_2D_10_10 … … 472 468 END SELECT 473 469 ! 474 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 475 DO_2D_10_10 476 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 477 END_2D 478 ENDIF 479 ! 480 IF( ln_sco ) THEN !== horizontal fluxes ==! 481 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 482 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 483 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 484 ELSE 485 zwx(:,:) = e2u(:,:) * pu(:,:,jk) 486 zwy(:,:) = e1v(:,:) * pv(:,:,jk) 487 ENDIF 470 ! 471 ! !== horizontal fluxes and potential vorticity ==! 472 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 473 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 474 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 475 ! 488 476 ! !== compute and add the vorticity term trend =! 489 477 DO_2D_00_00 … … 725 713 ! 726 714 DO jk = 1, jpkm1 ! Horizontal slab 727 728 ! !== horizontal fluxes ==!715 ! 716 ! !== horizontal fluxes ==! 729 717 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 730 718 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) … … 801 789 ENDIF 802 790 803 IF( ln_dynvor_msk ) CALL ctl_stop( 'dyn_vor_init: masked vorticity is not currently not available')791 !!an IF( ln_dynvor_msk ) CALL ctl_stop( 'dyn_vor_init: masked vorticity is not currently not available') 804 792 805 793 !!gm this should be removed when choosing a unique strategy for fmask at the coast
Note: See TracChangeset
for help on using the changeset viewer.