Changeset 13295 for NEMO/trunk/src/OCE/ZDF/zdftke.F90
- Timestamp:
- 2020-07-10T20:24:21+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/ZDF/zdftke.F90
r13286 r13295 224 224 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 225 225 ! 226 DO_2D _00_00226 DO_2D( 0, 0, 0, 0 ) 227 227 en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 228 228 END_2D … … 238 238 IF( ln_drg ) THEN !== friction used as top/bottom boundary condition on TKE 239 239 ! 240 DO_2D _00_00240 DO_2D( 0, 0, 0, 0 ) 241 241 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 242 242 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) … … 247 247 END_2D 248 248 IF( ln_isfcav ) THEN ! top friction 249 DO_2D _00_00249 DO_2D( 0, 0, 0, 0 ) 250 250 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 251 251 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) … … 274 274 zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 275 275 imlc(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point (=2 over land) 276 DO_3DS _11_11(jpkm1, 2, -1 )276 DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 ) 277 277 zus = zcof * taum(ji,jj) 278 278 IF( zpelc(ji,jj,jk) > zus ) imlc(ji,jj) = jk 279 279 END_3D 280 280 ! ! finite LC depth 281 DO_2D _11_11281 DO_2D( 1, 1, 1, 1 ) 282 282 zhlc(ji,jj) = gdepw(ji,jj,imlc(ji,jj),Kmm) 283 283 END_2D 284 284 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 285 DO_2D _00_00285 DO_2D( 0, 0, 0, 0 ) 286 286 zus = zcof * SQRT( taum(ji,jj) ) ! Stokes drift 287 287 zfr_i(ji,jj) = ( 1._wp - 4._wp * fr_i(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 288 288 IF (zfr_i(ji,jj) < 0. ) zfr_i(ji,jj) = 0. 289 289 END_2D 290 DO_3D _00_00(2, jpkm1 )290 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 291 291 IF ( zfr_i(ji,jj) /= 0. ) THEN 292 292 ! vertical velocity due to LC … … 310 310 ! 311 311 IF( nn_pdl == 1 ) THEN !* Prandtl number = F( Ri ) 312 DO_3D _00_00(2, jpkm1 )312 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 313 313 ! ! local Richardson number 314 314 IF (rn2b(ji,jj,jk) <= 0.0_wp) then … … 322 322 ENDIF 323 323 ! 324 DO_3D _00_00(2, jpkm1 )324 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 325 325 zcof = zfact1 * tmask(ji,jj,jk) 326 326 ! ! A minimum of 2.e-5 m2/s is imposed on TKE vertical … … 344 344 END_3D 345 345 ! !* Matrix inversion from level 2 (tke prescribed at level 1) 346 DO_3D _00_00(3, jpkm1 )346 DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 347 347 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 348 348 END_3D 349 DO_2D _00_00349 DO_2D( 0, 0, 0, 0 ) 350 350 zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke 351 351 END_2D 352 DO_3D _00_00(3, jpkm1 )352 DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 353 353 zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 354 354 END_3D 355 DO_2D _00_00355 DO_2D( 0, 0, 0, 0 ) 356 356 en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 357 357 END_2D 358 DO_3DS _00_00(jpk-2, 2, -1 )358 DO_3DS( 0, 0, 0, 0, jpk-2, 2, -1 ) 359 359 en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 360 360 END_3D 361 DO_3D _00_00(2, jpkm1 )361 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 362 362 en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 363 363 END_3D … … 371 371 372 372 IF( nn_etau == 1 ) THEN !* penetration below the mixed layer (rn_efr fraction) 373 DO_3D _00_00(2, jpkm1 )373 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 374 374 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) ) & 375 375 & * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 376 376 END_3D 377 377 ELSEIF( nn_etau == 2 ) THEN !* act only at the base of the mixed layer (jk=nmln) (rn_efr fraction) 378 DO_2D _00_00378 DO_2D( 0, 0, 0, 0 ) 379 379 jk = nmln(ji,jj) 380 380 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) ) & … … 382 382 END_2D 383 383 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 384 DO_3D _00_00(2, jpkm1 )384 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 385 385 ztx2 = utau(ji-1,jj ) + utau(ji,jj) 386 386 zty2 = vtau(ji ,jj-1) + vtau(ji,jj) … … 456 456 zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 457 457 #if ! defined key_si3 && ! defined key_cice 458 DO_2D _00_00458 DO_2D( 0, 0, 0, 0 ) 459 459 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 460 460 END_2D … … 463 463 ! 464 464 CASE( 0 ) ! No scaling under sea-ice 465 DO_2D _00_00465 DO_2D( 0, 0, 0, 0 ) 466 466 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 467 467 END_2D 468 468 ! 469 469 CASE( 1 ) ! scaling with constant sea-ice thickness 470 DO_2D _00_00470 DO_2D( 0, 0, 0, 0 ) 471 471 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * rn_mxlice ) * tmask(ji,jj,1) 472 472 END_2D 473 473 ! 474 474 CASE( 2 ) ! scaling with mean sea-ice thickness 475 DO_2D _00_00475 DO_2D( 0, 0, 0, 0 ) 476 476 #if defined key_si3 477 477 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * hm_i(ji,jj) * 2. ) * tmask(ji,jj,1) … … 483 483 ! 484 484 CASE( 3 ) ! scaling with max sea-ice thickness 485 DO_2D _00_00485 DO_2D( 0, 0, 0, 0 ) 486 486 zmaxice = MAXVAL( h_i(ji,jj,:) ) 487 487 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) … … 491 491 #endif 492 492 ! 493 DO_2D _00_00493 DO_2D( 0, 0, 0, 0 ) 494 494 zmxlm(ji,jj,1) = MAX( rn_mxl0, zmxlm(ji,jj,1) ) 495 495 END_2D … … 500 500 501 501 ! 502 DO_3D _00_00(2, jpkm1 )502 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 503 503 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 504 504 zmxlm(ji,jj,jk) = MAX( rmxl_min, SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) ) … … 515 515 ! where wmask = 0 set zmxlm == e3w(:,:,:,Kmm) 516 516 CASE ( 0 ) ! bounded by the distance to surface and bottom 517 DO_3D _00_00(2, jpkm1 )517 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 518 518 zemxl = MIN( gdepw(ji,jj,jk,Kmm) - gdepw(ji,jj,mikt(ji,jj),Kmm), zmxlm(ji,jj,jk), & 519 519 & gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) - gdepw(ji,jj,jk,Kmm) ) … … 526 526 ! 527 527 CASE ( 1 ) ! bounded by the vertical scale factor 528 DO_3D _00_00(2, jpkm1 )528 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 529 529 zemxl = MIN( e3w(ji,jj,jk,Kmm), zmxlm(ji,jj,jk) ) 530 530 zmxlm(ji,jj,jk) = zemxl … … 533 533 ! 534 534 CASE ( 2 ) ! |dk[xml]| bounded by e3t : 535 DO_3D _00_00(2, jpkm1 )535 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 536 536 zmxlm(ji,jj,jk) = & 537 537 & MIN( zmxlm(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 538 538 END_3D 539 DO_3DS _00_00(jpkm1, 2, -1 )539 DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 540 540 zemxl = MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 541 541 zmxlm(ji,jj,jk) = zemxl … … 544 544 ! 545 545 CASE ( 3 ) ! lup and ldown, |dk[xml]| bounded by e3t : 546 DO_3D _00_00(2, jpkm1 )546 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 547 547 zmxld(ji,jj,jk) = & 548 548 & MIN( zmxld(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 549 549 END_3D 550 DO_3DS _00_00(jpkm1, 2, -1 )550 DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 551 551 zmxlm(ji,jj,jk) = & 552 552 & MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 553 553 END_3D 554 DO_3D _00_00(2, jpkm1 )554 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 555 555 zemlm = MIN ( zmxld(ji,jj,jk), zmxlm(ji,jj,jk) ) 556 556 zemlp = SQRT( zmxld(ji,jj,jk) * zmxlm(ji,jj,jk) ) … … 564 564 ! ! Vertical eddy viscosity and diffusivity (avm and avt) 565 565 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 566 DO_3D _00_00(1, jpkm1 )566 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 567 567 zsqen = SQRT( en(ji,jj,jk) ) 568 568 zav = rn_ediff * zmxlm(ji,jj,jk) * zsqen … … 574 574 ! 575 575 IF( nn_pdl == 1 ) THEN !* Prandtl number case: update avt 576 DO_3D _00_00(2, jpkm1 )576 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 577 577 p_avt(ji,jj,jk) = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * wmask(ji,jj,jk) 578 578 END_3D
Note: See TracChangeset
for help on using the changeset viewer.