Changeset 1546 for trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90
- Timestamp:
- 2009-07-27T15:39:29+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90
r1537 r1546 88 88 !! Koch-Larrouy et al. 2007, GRL. 89 89 !!---------------------------------------------------------------------- 90 USE oce, zav_tide => ua ! use ua as workspace 91 !! 90 92 INTEGER, INTENT(in) :: kt ! ocean time-step 91 93 !! … … 98 100 IF( kt == nit000 ) CALL zdf_tmx_init ! Initialization (first time-step only) 99 101 100 ! 101 ! ! Standard tidal mixing ! (computeav_tide)102 ! 102 ! ! ----------------------- ! 103 ! ! Standard tidal mixing ! (compute zav_tide) 104 ! ! ----------------------- ! 103 105 ! !* First estimation (with n2 bound by rn_n2min) bounded by 60 cm2/s 104 av_tide(:,:,:) = MIN( 60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) ) )106 zav_tide(:,:,:) = MIN( 60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) ) ) 105 107 106 108 zkz(:,:) = 0.e0 !* Associated potential energy consummed over the whole water column 107 109 DO jk = 2, jpkm1 108 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * av_tide(:,:,jk)* tmask(:,:,jk)110 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk)* tmask(:,:,jk) 109 111 END DO 110 112 … … 115 117 END DO 116 118 117 DO jk = 2, jpkm1 !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> av_tide bound by 300 cm2/s118 av_tide(:,:,jk) =av_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) !kz max = 300 cm2/s119 END DO 120 121 IF( kt == nit000 ) THEN !* check at first time-step: diagnose the energy consumed by av_tide119 DO jk = 2, jpkm1 !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 120 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) !kz max = 300 cm2/s 121 END DO 122 123 IF( kt == nit000 ) THEN !* check at first time-step: diagnose the energy consumed by zav_tide 122 124 ztpc = 0.e0 123 125 DO jk= 1, jpk … … 125 127 DO ji= 1, jpi 126 128 ztpc = ztpc + fse3w(ji,jj,jk) * e1t(ji,jj) * e2t(ji,jj) & 127 & * MAX( 0.e0, rn2(ji,jj,jk) ) * av_tide(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)129 & * MAX( 0.e0, rn2(ji,jj,jk) ) * zav_tide(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 128 130 END DO 129 131 END DO … … 134 136 ENDIF 135 137 136 ! ! ----------------------- ! 137 IF( ln_tmx_itf ) CALL tmx_itf( kt ) ! ITF tidal mixing ! (update av_tide) 138 ! ! ----------------------- ! 139 140 ! ! ----------------------- ! 141 ! ! Update mixing coefs ! 142 ! ! ----------------------- ! 138 ! ! ----------------------- ! 139 ! ! ITF tidal mixing ! (update zav_tide) 140 ! ! ----------------------- ! 141 IF( ln_tmx_itf ) CALL tmx_itf( kt, zav_tide ) 142 143 ! ! ----------------------- ! 144 ! ! Update mixing coefs ! 145 ! ! ----------------------- ! 143 146 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with tidal mixing 144 avt(:,:,jk) = avt(:,:,jk) + av_tide(:,:,jk)145 avm(:,:,jk) = avm(:,:,jk) + av_tide(:,:,jk)147 avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) 148 avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) 146 149 DO jj = 2, jpjm1 147 150 DO ji = fs_2, fs_jpim1 ! vector opt. 148 avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( av_tide(ji,jj,jk) +av_tide(ji+1,jj ,jk) ) * umask(ji,jj,jk)149 avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( av_tide(ji,jj,jk) +av_tide(ji ,jj+1,jk) ) * vmask(ji,jj,jk)151 avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji+1,jj ,jk) ) * umask(ji,jj,jk) 152 avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji ,jj+1,jk) ) * vmask(ji,jj,jk) 150 153 END DO 151 154 END DO … … 153 156 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) ! lateral boundary condition 154 157 155 IF(ln_ctl) CALL prt_ctl(tab3d_1=av_tide ,clinfo1=' tmx - av_tide: ',tab3d_2=avt,clinfo2=' avt: ',ovlap=1,kdim=jpk) 158 ! !* output tidal mixing coefficient 159 CALL iom_put( "av_tide", zav_tide ) 160 161 IF(ln_ctl) CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 156 162 ! 157 163 END SUBROUTINE zdf_tmx 158 164 159 165 160 SUBROUTINE tmx_itf( kt )166 SUBROUTINE tmx_itf( kt, pav ) 161 167 !!---------------------------------------------------------------------- 162 168 !! *** ROUTINE tmx_itf *** 163 169 !! 164 170 !! ** Purpose : modify the vertical eddy diffusivity coefficients 165 !! ( av_tide) in the Indonesian Through Flow area (ITF).171 !! (pav) in the Indonesian Through Flow area (ITF). 166 172 !! 167 173 !! ** Method : - Following Koch-Larrouy et al. (2007), in the ITF defined … … 178 184 !! References : Koch-Larrouy et al. 2007, GRL 179 185 !!---------------------------------------------------------------------- 180 INTEGER, INTENT(in) :: kt ! ocean time-step 186 INTEGER , INTENT(in ) :: kt ! ocean time-step 187 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pav ! Tidal mixing coef. 181 188 !! 182 189 INTEGER :: ji, jj, jk ! dummy loop indices … … 267 274 ENDIF 268 275 269 ! ! Update av_tidewith the ITF mixing coefficient276 ! ! Update pav with the ITF mixing coefficient 270 277 DO jk = 2, jpkm1 271 av_tide(:,:,jk) = av_tide(:,:,jk) * ( 1.e0 - mask_itf(:,:) ) &272 & 278 pav(:,:,jk) = pav (:,:,jk) * ( 1.e0 - mask_itf(:,:) ) & 279 & + zavt_itf(:,:,jk) * mask_itf(:,:) 273 280 END DO 274 281 ! … … 311 318 !! Koch-Larrouy et al. 2007, GRL. 312 319 !!---------------------------------------------------------------------- 320 USE oce, zav_tide => ua ! use ua as workspace 321 !! 313 322 INTEGER :: ji, jj, jk ! dummy loop indices 314 323 INTEGER :: inum ! temporary logical unit … … 379 388 ! Control print 380 389 ! Total power consumption due to vertical mixing 381 ! zpc = rau0 * 1/rn_me * rn2 * av_tide382 av_tide(:,:,:) = 0.e0390 ! zpc = rau0 * 1/rn_me * rn2 * zav_tide 391 zav_tide(:,:,:) = 0.e0 383 392 DO jk = 2, jpkm1 384 av_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) )393 zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 385 394 END DO 386 395 387 396 ztpc = 0.e0 388 zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * av_tide(:,:,:)397 zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 389 398 DO jk= 2, jpkm1 390 399 DO jj = 1, jpj … … 401 410 402 411 ! control print 2 403 av_tide(:,:,:) = MIN(av_tide(:,:,:), 60.e-4 )412 zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 ) 404 413 zkz(:,:) = 0.e0 405 414 DO jk = 2, jpkm1 406 415 DO jj = 1, jpj 407 416 DO ji = 1, jpi 408 zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * av_tide(ji,jj,jk)* tmask(ji,jj,jk)417 zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zav_tide(ji,jj,jk)* tmask(ji,jj,jk) 409 418 END DO 410 419 END DO … … 429 438 430 439 DO jk = 2, jpkm1 431 av_tide(:,:,jk) =av_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) !kz max = 300 cm2/s440 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) !kz max = 300 cm2/s 432 441 END DO 433 442 ztpc = 0.e0 434 zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * av_tide(:,:,:)443 zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 435 444 DO jk= 1, jpk 436 445 DO jj = 1, jpj … … 444 453 445 454 DO jk = 1, jpk 446 ze_z = SUM( e1t(:,:) * e2t(:,:) * av_tide(:,:,jk) * tmask_i(:,:) ) &455 ze_z = SUM( e1t(:,:) * e2t(:,:) * zav_tide(:,:,jk) * tmask_i(:,:) ) & 447 456 & / MAX( 1.e-20, SUM( e1t(:,:) * e2t(:,:) * tmask (:,:,jk) * tmask_i(:,:) ) ) 448 457 ztpc = 1.E50 449 458 DO jj = 1, jpj 450 459 DO ji = 1, jpi 451 IF( av_tide(ji,jj,jk) /= 0.e0 ) ztpc =Min( ztpc,av_tide(ji,jj,jk) )460 IF( zav_tide(ji,jj,jk) /= 0.e0 ) ztpc =Min( ztpc, zav_tide(ji,jj,jk) ) 452 461 END DO 453 462 END DO 454 463 WRITE(numout,*) ' N2 min - jk= ', jk,' ', ze_z * 1.e4,' cm2/s min= ',ztpc*1.e4, & 455 & 'max= ', MAXVAL( av_tide(:,:,jk) )*1.e4, ' cm2/s'464 & 'max= ', MAXVAL(zav_tide(:,:,jk) )*1.e4, ' cm2/s' 456 465 END DO 457 466
Note: See TracChangeset
for help on using the changeset viewer.