Changeset 6041 for branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
- Timestamp:
- 2015-12-14T10:06:06+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r5776 r6041 28 28 !! 3.6 ! 2014-11 (P. Mathiot) add ice shelf capability 29 29 !!---------------------------------------------------------------------- 30 #if defined key_zdftke || defined key_esopa30 #if defined key_zdftke 31 31 !!---------------------------------------------------------------------- 32 32 !! 'key_zdftke' TKE vertical physics … … 102 102 # include "vectopt_loop_substitute.h90" 103 103 !!---------------------------------------------------------------------- 104 !! NEMO/OPA 4.0 , NEMO Consortium (2011)104 !! NEMO/OPA 3.7 , NEMO Consortium (2015) 105 105 !! $Id$ 106 106 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 117 117 & e_pdl(jpi,jpj,jpk) , e_ric(jpi,jpj,jpk) , & 118 118 #endif 119 & apdlr(jpi,jpj,jpk) ,htau (jpi,jpj) , dissl(jpi,jpj,jpk) , &120 & STAT= zdf_tke_alloc )119 & htau (jpi,jpj) , dissl(jpi,jpj,jpk) , & 120 & apdlr(jpi,jpj,jpk) , STAT= zdf_tke_alloc ) 121 121 ! 122 122 IF( lk_mpp ) CALL mpp_sum ( zdf_tke_alloc ) … … 232 232 REAL(wp) :: zzd_up, zzd_lw ! - - 233 233 !!bfr REAL(wp) :: zebot ! - - 234 INTEGER , POINTER, DIMENSION(:,: ) :: imlc235 REAL(wp), POINTER, DIMENSION(:,: ) :: zhlc236 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpelc, zdiag, zd_up, zd_lw, z3du, z3dv234 INTEGER , POINTER, DIMENSION(:,: ) :: imlc 235 REAL(wp), POINTER, DIMENSION(:,: ) :: zhlc 236 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpelc, zdiag, zd_up, zd_lw, z3du, z3dv 237 237 REAL(wp) :: zri ! local Richardson number 238 238 !!-------------------------------------------------------------------- … … 240 240 IF( nn_timing == 1 ) CALL timing_start('tke_tke') 241 241 ! 242 CALL wrk_alloc( jpi,jpj, imlc ) ! integer243 CALL wrk_alloc( jpi,jpj, zhlc )244 CALL wrk_alloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )242 CALL wrk_alloc( jpi,jpj, imlc ) ! integer 243 CALL wrk_alloc( jpi,jpj, zhlc ) 244 CALL wrk_alloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv ) 245 245 ! 246 246 zbbrau = rn_ebb / rau0 ! Local constant initialisation … … 256 256 DO jj = 2, jpjm1 ! en(mikt(ji,jj)) = rn_emin 257 257 DO ji = fs_2, fs_jpim1 ! vector opt. 258 en(ji,jj,mikt(ji,jj)) =rn_emin * tmask(ji,jj,1)258 en(ji,jj,mikt(ji,jj)) = rn_emin * tmask(ji,jj,1) 259 259 END DO 260 260 END DO … … 277 277 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 278 278 ! en(bot) = (rn_ebb0/rau0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 279 !CDIR NOVERRCHK280 279 !! DO jj = 2, jpjm1 281 !CDIR NOVERRCHK282 280 !! DO ji = fs_2, fs_jpim1 ! vector opt. 283 281 !! ztx2 = bfrua(ji-1,jj) * ub(ji-1,jj,mbku(ji-1,jj)) + & … … 318 316 END DO 319 317 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 320 !CDIR NOVERRCHK321 318 DO jk = 2, jpkm1 !* TKE Langmuir circulation source term added to en 322 !CDIR NOVERRCHK 323 DO jj = 2, jpjm1 324 !CDIR NOVERRCHK 319 DO jj = 2, jpjm1 325 320 DO ji = fs_2, fs_jpim1 ! vector opt. 326 321 zus = zcof * SQRT( taum(ji,jj) ) ! Stokes drift … … 348 343 z3du(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk ) + avm(ji+1,jj,jk) ) & 349 344 & * ( un(ji,jj,jk-1) - un(ji ,jj,jk) ) & 350 & * ( ub(ji,jj,jk-1) - ub(ji ,jj,jk) ) / ( fse3uw_n(ji,jj,jk) * fse3uw_b(ji,jj,jk) ) 345 & * ( ub(ji,jj,jk-1) - ub(ji ,jj,jk) ) * wumask(ji,jj,jk) & 346 & / ( fse3uw_n(ji,jj,jk) * fse3uw_b(ji,jj,jk) ) 351 347 z3dv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk ) + avm(ji,jj+1,jk) ) & 352 348 & * ( vn(ji,jj,jk-1) - vn(ji,jj ,jk) ) & 353 & * ( vb(ji,jj,jk-1) - vb(ji,jj ,jk) ) / ( fse3vw_n(ji,jj,jk) * fse3vw_b(ji,jj,jk) ) 349 & * ( vb(ji,jj,jk-1) - vb(ji,jj ,jk) ) * wvmask(ji,jj,jk) & 350 & / ( fse3vw_n(ji,jj,jk) * fse3vw_b(ji,jj,jk) ) 354 351 END DO 355 352 END DO … … 374 371 ! 375 372 ENDIF 376 373 ! 377 374 DO jk = 2, jpkm1 !* Matrix and right hand side in en 378 375 DO jj = 2, jpjm1 … … 406 403 END DO 407 404 END DO 408 ! 409 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 410 DO jj = 2, jpjm1 405 DO jj = 2, jpjm1 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 411 406 DO ji = fs_2, fs_jpim1 ! vector opt. 412 407 zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke … … 420 415 END DO 421 416 END DO 422 ! 423 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 424 DO jj = 2, jpjm1 417 DO jj = 2, jpjm1 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 425 418 DO ji = fs_2, fs_jpim1 ! vector opt. 426 419 en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) … … 463 456 END DO 464 457 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 465 !CDIR NOVERRCHK466 458 DO jk = 2, jpkm1 467 !CDIR NOVERRCHK 468 DO jj = 2, jpjm1 469 !CDIR NOVERRCHK 459 DO jj = 2, jpjm1 470 460 DO ji = fs_2, fs_jpim1 ! vector opt. 471 461 ztx2 = utau(ji-1,jj ) + utau(ji,jj) … … 482 472 CALL lbc_lnk( en, 'W', 1. ) ! Lateral boundary conditions (sign unchanged) 483 473 ! 484 CALL wrk_dealloc( jpi,jpj, imlc ) ! integer485 CALL wrk_dealloc( jpi,jpj, zhlc )486 CALL wrk_dealloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv )474 CALL wrk_dealloc( jpi,jpj, imlc ) ! integer 475 CALL wrk_dealloc( jpi,jpj, zhlc ) 476 CALL wrk_dealloc( jpi,jpj,jpk, zpelc, zdiag, zd_up, zd_lw, z3du, z3dv ) 487 477 ! 488 478 IF( nn_timing == 1 ) CALL timing_stop('tke_tke') … … 528 518 INTEGER :: ji, jj, jk ! dummy loop indices 529 519 REAL(wp) :: zrn2, zraug, zcoef, zav ! local scalars 530 REAL(wp) :: zdku, zri, zsqen ! - -520 REAL(wp) :: zdku, zri, zsqen ! - - 531 521 REAL(wp) :: zdkv, zemxl, zemlm, zemlp ! - - 532 522 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmpdl, zmxlm, zmxld … … 558 548 ENDIF 559 549 ! 560 !CDIR NOVERRCHK561 550 DO jk = 2, jpkm1 ! interior value : l=sqrt(2*e/n^2) 562 !CDIR NOVERRCHK 563 DO jj = 2, jpjm1 564 !CDIR NOVERRCHK 551 DO jj = 2, jpjm1 565 552 DO ji = fs_2, fs_jpim1 ! vector opt. 566 553 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 567 zmxlm(ji,jj,jk) = MAX( rmxl_min, SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) )554 zmxlm(ji,jj,jk) = MAX( rmxl_min, SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) ) 568 555 END DO 569 556 END DO … … 572 559 ! !* Physical limits for the mixing length 573 560 ! 574 zmxld(:,:, 1) = zmxlm(:,:,1) ! surface set to the minimum value561 zmxld(:,:, 1 ) = zmxlm(:,:,1) ! surface set to the minimum value 575 562 zmxld(:,:,jpk) = rmxl_min ! last level set to the minimum value 576 563 ! 577 564 SELECT CASE ( nn_mxl ) 578 565 ! 566 !!gm Not sure of that coding for ISF.... 579 567 ! where wmask = 0 set zmxlm == fse3w 580 568 CASE ( 0 ) ! bounded by the distance to surface and bottom … … 635 623 END DO 636 624 END DO 637 !CDIR NOVERRCHK638 625 DO jk = 2, jpkm1 639 !CDIR NOVERRCHK 640 DO jj = 2, jpjm1 641 !CDIR NOVERRCHK 626 DO jj = 2, jpjm1 642 627 DO ji = fs_2, fs_jpim1 ! vector opt. 643 628 zemlm = MIN ( zmxld(ji,jj,jk), zmxlm(ji,jj,jk) ) … … 659 644 ! ! Vertical eddy viscosity and diffusivity (avmu, avmv, avt) 660 645 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 661 !CDIR NOVERRCHK662 646 DO jk = 1, jpkm1 !* vertical eddy viscosity & diffivity at w-points 663 !CDIR NOVERRCHK 664 DO jj = 2, jpjm1 665 !CDIR NOVERRCHK 647 DO jj = 2, jpjm1 666 648 DO ji = fs_2, fs_jpim1 ! vector opt. 667 649 zsqen = SQRT( en(ji,jj,jk) ) … … 692 674 # if defined key_c1d 693 675 e_pdl(ji,jj,jk) = apdlr(ji,jj,jk) * wmask(ji,jj,jk) ! c1d configuration : save masked Prandlt number 676 !!gm bug NO zri here.... 677 !!gm remove the specific diag for c1d ! 694 678 e_ric(ji,jj,jk) = zri * wmask(ji,jj,jk) ! c1d config. : save Ri 695 679 # endif
Note: See TracChangeset
for help on using the changeset viewer.