- Timestamp:
- 2015-09-13T09:42:41+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
r5130 r5737 54 54 # include "vectopt_loop_substitute.h90" 55 55 !!---------------------------------------------------------------------- 56 !! NEMO/OPA 4.0 , NEMO Consortium (2011)56 !! NEMO/OPA 3.7 , NEMO Consortium (2014) 57 57 !! $Id$ 58 58 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 136 136 137 137 DO jk = 2, jpkm1 !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 138 DO jj = 1, jpj !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 139 DO ji = 1, jpi 140 zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk) !kz max = 300 cm2/s 141 END DO 142 END DO 138 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk) !kz max = 300 cm2/s 143 139 END DO 144 140 145 141 IF( kt == nit000 ) THEN !* check at first time-step: diagnose the energy consumed by zav_tide 146 ztpc = 0. e0142 ztpc = 0._wp 147 143 DO jk= 1, jpk 148 144 DO jj= 1, jpj 149 145 DO ji= 1, jpi 150 ztpc = ztpc + fse3w(ji,jj,jk) * e1 t(ji,jj) * e2t(ji,jj)&151 & 146 ztpc = ztpc + fse3w(ji,jj,jk) * e1e2t(ji,jj) & 147 & * MAX( 0.e0, rn2(ji,jj,jk) ) * zav_tide(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 152 148 END DO 153 149 END DO 154 150 END DO 155 151 ztpc= rau0 / ( rn_tfe * rn_me ) * ztpc 152 IF( lk_mpp ) CALL mpp_sum( ztpc ) 156 153 IF(lwp) WRITE(numout,*) 157 154 IF(lwp) WRITE(numout,*) ' N Total power consumption by av_tide : ztpc = ', ztpc * 1.e-12 ,'TW' … … 167 164 ! ! ----------------------- ! 168 165 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with tidal mixing 169 DO jj = 1, jpj !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 170 DO ji = 1, jpi 171 avt(ji,jj,jk) = avt(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 172 avm(ji,jj,jk) = avm(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 173 END DO 174 END DO 175 END DO 176 177 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with tidal mixing 166 avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 167 avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 178 168 DO jj = 2, jpjm1 179 169 DO ji = fs_2, fs_jpim1 ! vector opt. … … 239 229 DO jk = 1, jpkm1 240 230 zdn2dz (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1) ! Vertical profile of dN2/dz 241 !CDIR NOVERRCHK242 231 zempba_3d_1(:,:,jk) = SQRT( MAX( 0.e0, rn2(:,:,jk) ) ) ! - - of N 243 232 zempba_3d_2(:,:,jk) = MAX( 0.e0, rn2(:,:,jk) ) ! - - of N^2 … … 248 237 zsum2(:,:) = 0.e0 249 238 DO jk= 2, jpk 250 zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1)251 zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1)239 zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) * wmask(:,:,jk) 240 zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk) * wmask(:,:,jk) 252 241 END DO 253 242 DO jj = 1, jpj … … 285 274 zkz(:,:) = 0.e0 ! Associated potential energy consummed over the whole water column 286 275 DO jk = 2, jpkm1 287 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1)276 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * wmask(:,:,jk) 288 277 END DO 289 278 … … 295 284 296 285 DO jk = 2, jpkm1 ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 297 zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * tmask(:,:,jk) * tmask(:,:,jk-1) ! kz max = 120 cm2/s286 zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * wmask(:,:,jk) ! kz max = 120 cm2/s 298 287 END DO 299 288 … … 303 292 DO jj= 1, jpj 304 293 DO ji= 1, jpi 305 ztpc = ztpc + e1 t(ji,jj) *e2t(ji,jj) * fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) &306 & * zavt_itf(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)294 ztpc = ztpc + e1e2t(ji,jj) * fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) & 295 & * zavt_itf(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 307 296 END DO 308 297 END DO 309 298 END DO 299 IF( lk_mpp ) CALL mpp_sum( ztpc ) 310 300 ztpc= rau0 * ztpc / ( rn_me * rn_tfe_itf ) 311 301 IF(lwp) WRITE(numout,*) ' N Total power consumption by zavt_itf: ztpc = ', ztpc * 1.e-12 ,'TW' … … 429 419 !============ 430 420 !TG: Bug for VVL? Should this section be moved out of _init and be updated at every timestep? 421 !!gm : you are right, but tidal mixing acts in deep ocean (H>500m) where e3 is O(100m) 422 !! the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 431 423 ! Vertical structure (az_tmx) 432 424 DO jj = 1, jpj ! part independent of the level … … 460 452 DO jj = 1, jpj 461 453 DO ji = 1, jpi 462 ztpc = ztpc + fse3w(ji,jj,jk) * e1 t(ji,jj) *e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj)454 ztpc = ztpc + fse3w(ji,jj,jk) * e1e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 463 455 END DO 464 456 END DO 465 457 END DO 458 IF( lk_mpp ) CALL mpp_sum( ztpc ) 466 459 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 467 460 … … 474 467 zkz(:,:) = 0.e0 475 468 DO jk = 2, jpkm1 476 DO jj = 1, jpj 477 DO ji = 1, jpi 478 zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX(0.e0, rn2(ji,jj,jk)) * rau0 * zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 479 END DO 480 END DO 469 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 481 470 END DO 482 471 ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz … … 499 488 500 489 DO jk = 2, jpkm1 501 DO jj = 1, jpj 502 DO ji = 1, jpi 503 zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk) !kz max = 300 cm2/s 504 END DO 505 END DO 490 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk) !kz max = 300 cm2/s 506 491 END DO 507 492 ztpc = 0.e0 … … 510 495 DO jj = 1, jpj 511 496 DO ji = 1, jpi 512 ztpc = ztpc + fse3w(ji,jj,jk) * e1 t(ji,jj) *e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj)497 ztpc = ztpc + fse3w(ji,jj,jk) * e1e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 513 498 END DO 514 499 END DO 515 500 END DO 501 IF( lk_mpp ) CALL mpp_sum( ztpc ) 516 502 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 517 503 WRITE(numout,*) ' 2 Total power consumption of the tidally driven part of Kz : ztpc = ', ztpc * 1.e-12 ,'TW' 518 504 !!gm bug mpp in these diagnostics 519 505 DO jk = 1, jpk 520 ze_z = SUM( e1 t(:,:) * e2t(:,:) * zav_tide(:,:,jk)* tmask_i(:,:) ) &521 & / MAX( 1.e-20, SUM( e1 t(:,:) * e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) )522 ztpc = 1. E50506 ze_z = SUM( e1e2t(:,:) * zav_tide(:,:,jk) * tmask_i(:,:) ) & 507 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask (:,:,jk) * tmask_i(:,:) ) ) 508 ztpc = 1.e50 523 509 DO jj = 1, jpj 524 510 DO ji = 1, jpi 525 IF( zav_tide(ji,jj,jk) /= 0.e0 ) ztpc = Min( ztpc, zav_tide(ji,jj,jk) )511 IF( zav_tide(ji,jj,jk) /= 0.e0 ) ztpc = MIN( ztpc, zav_tide(ji,jj,jk) ) 526 512 END DO 527 513 END DO … … 530 516 END DO 531 517 532 WRITE(numout,*) ' e_tide : ', SUM( e1 t*e2t*en_tmx ) / ( rn_tfe * rn_me ) * 1.e-12, 'TW'518 WRITE(numout,*) ' e_tide : ', SUM( e1e2t*en_tmx ) / ( rn_tfe * rn_me ) * 1.e-12, 'TW' 533 519 WRITE(numout,*) 534 520 WRITE(numout,*) ' Initial profile of tidal vertical mixing' … … 539 525 END DO 540 526 END DO 541 ze_z = SUM( e1 t(:,:) * e2t(:,:) * zkz(:,:)* tmask_i(:,:) ) &542 & / MAX( 1.e-20, SUM( e1 t(:,:) * e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) )527 ze_z = SUM( e1e2t(:,:) * zkz (:,:) * tmask_i(:,:) ) & 528 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 543 529 WRITE(numout,*) ' jk= ', jk,' ', ze_z * 1.e4,' cm2/s' 544 530 END DO 545 531 DO jk = 1, jpk 546 532 zkz(:,:) = az_tmx(:,:,jk) /rn_n2min 547 ze_z = SUM( e1 t(:,:) * e2t(:,:) * zkz(:,:)* tmask_i(:,:) ) &548 & / MAX( 1.e-20, SUM( e1 t(:,:) * e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) )533 ze_z = SUM( e1e2t(:,:) * zkz (:,:) * tmask_i(:,:) ) & 534 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 549 535 WRITE(numout,*) 550 536 WRITE(numout,*) ' N2 min - jk= ', jk,' ', ze_z * 1.e4,' cm2/s min= ',MINVAL(zkz)*1.e4, & 551 537 & 'max= ', MAXVAL(zkz)*1.e4, ' cm2/s' 552 538 END DO 539 !!gm end bug mpp 553 540 ! 554 541 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.