Changeset 1546
- Timestamp:
- 2009-07-27T15:39:29+02:00 (15 years ago)
- Location:
- trunk/NEMO
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/C1D_SRC/diawri_c1d.F90
r1533 r1546 251 251 CALL histdef( nid_T, "votkeavt", "Vertical Eddy Diffusivity" , "m2/s" , & ! avt 252 252 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 253 CALL histdef( nid_T, "votkeevd", "Enhanced Vertical Diffusivity", "m2/s" , & ! avt_evd254 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout )255 253 CALL histdef( nid_T, "votkeavm", "Vertical Eddy Viscosity", "m2/s" , & ! avmu 256 254 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 257 255 ! 258 CALL histdef( nid_T, "votkeevm", "Enhanced Vertical Viscosity", "m2/s" , & ! avmu_evd259 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout )260 256 IF( lk_zdfddm ) THEN 261 257 CALL histdef( nid_T,"voddmavs","Salt Vertical Eddy Diffusivity" , "m2/s" , & ! avs … … 338 334 CALL histwrite( nid_T, "voeosbn2", it, rn2 , ndim_T , ndex_T ) ! Brunt-Vaisala Frequency 339 335 CALL histwrite( nid_T, "votkeavt", it, avt , ndim_T , ndex_T ) ! T vert. eddy diff. coef. 340 CALL histwrite( nid_T, "votkeevd", it, avt_evd , ndim_T , ndex_T ) ! T enhan. vert. eddy diff. coef.341 336 CALL histwrite( nid_T, "votkeavm", it, avmu , ndim_T , ndex_T ) ! T vert. eddy visc. coef. 342 CALL histwrite( nid_T, "votkeevm", it, avmu_evd , ndim_T , ndex_T ) ! T enhan. vert. eddy visc. coef.343 337 IF( lk_zdfddm ) THEN 344 338 CALL histwrite( nid_T, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T ) ! S vert. eddy diff. coef. -
trunk/NEMO/OPA_SRC/DIA/diawri.F90
r1528 r1546 400 400 CALL histdef( nid_W, "votkeavt", "Vertical Eddy Diffusivity" , "m2/s" , & ! avt 401 401 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 402 # if defined key_zdftmx403 CALL histdef( nid_W, "votidavt", "Tidal Vertical Eddy Diffusivity" , "m2/s" , & ! avt_tide404 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )405 406 CALL histdef( nid_W, "voitfavt", "Tidal ITF Vertical Eddy Diffusivity", "m2/s" , & ! avt_tide_itf407 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )408 # endif409 CALL histdef( nid_W, "votkeevd", "Enhanced Vertical Diffusivity", "m2/s" , & ! avt_evd410 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )411 !412 402 CALL histdef( nid_W, "votkeavm", "Vertical Eddy Viscosity" , "m2/s" , & ! avmu 413 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )414 415 CALL histdef( nid_W, "votkeevm", "Enhanced Vertical Viscosity", "m2/s" , & ! avmu_evd416 403 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 417 404 … … 525 512 # endif 526 513 CALL histwrite( nid_W, "votkeavt", it, avt , ndim_T, ndex_T ) ! T vert. eddy diff. coef. 527 # if defined key_zdftmx528 CALL histwrite( nid_W, "votidavt", it, av_tide , ndim_T, ndex_T ) ! vert. mix. related to internal tides529 # endif530 CALL histwrite( nid_W, "votkeevd", it, avt_evd , ndim_T, ndex_T ) ! T enhan. vert. eddy diff. coef.531 514 CALL histwrite( nid_W, "votkeavm", it, avmu , ndim_T, ndex_T ) ! T vert. eddy visc. coef. 532 CALL histwrite( nid_W, "votkeevm", it, avmu_evd , ndim_T, ndex_T ) ! T enhan. vert. eddy visc. coef.533 515 IF( lk_zdfddm ) THEN 534 516 CALL histwrite( nid_W, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T ) ! S vert. eddy diff. coef. -
trunk/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r1537 r1546 37 37 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avmu, avmv !: vertical viscosity coeff. at uw- & vw-points [m2/s] 38 38 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avm , avt !: vertical viscosity & diffusivity coeff. at w-point [m2/s] 39 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avt_evd !: enhanced vertical diffusivity coeff. at w-point [m2/s]40 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avmu_evd !: enhanced vertical viscosity coeff. at uw-point [m2/s]41 #if defined key_zdftmx42 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: av_tide !: Tidal mixing43 #endif44 39 45 40 !!---------------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/ZDF/zdfevd.F90
r1537 r1546 45 45 !! sivity coefficients when a static instability is encountered. 46 46 !! 47 !! ** Method : avt, a nd the 4 neighbouring avmu, avmv coefficients47 !! ** Method : avt, avm, and the 4 neighbouring avmu, avmv coefficients 48 48 !! are set to avevd (namelist parameter) if the water column is 49 49 !! statically unstable (i.e. if rn2 < -1.e-12 ) 50 50 !! 51 !! ** Action : Update avt, avmu, avmv in statically instablecases52 !! and avt_evd which is avt due to convection51 !! ** Action : avt, avm, avmu, avmv updted in static instability cases 52 !! 53 53 !! References : Lazar, A., these de l'universite Paris VI, France, 1997 54 54 !!---------------------------------------------------------------------- 55 USE oce, zav_evd => ua ! use ua as workspace 56 !! 55 57 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step 56 58 !! … … 65 67 ENDIF 66 68 67 ! Initialisation of avt_evd (vertical diffusion due to convection) to avt and avmu_evd to avmu 68 avt_evd (:,:,:) = avt(:,:,:) 69 avmu_evd (:,:,:) = avmu(:,:,:) 69 zav_evd(:,:,:) = avt(:,:,:) ! set avt prior to evd application 70 70 71 71 SELECT CASE ( nn_evdm ) 72 72 73 73 CASE ( 1 ) ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 74 ! ! =============== 75 DO jk = 1, jpkm1 ! Horizontal slab 76 ! ! =============== 74 DO jk = 1, jpkm1 77 75 #if defined key_vectopt_loop 78 76 DO jj = 1, 1 ! big loop forced … … 83 81 #endif 84 82 #if defined key_zdfkpp 85 !! no implicitmixing in the boundary layer with KPP83 ! no evd mixing in the boundary layer with KPP 86 84 IF( ( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) .AND. ( fsdepw(ji,jj,jk) > hkpp(ji,jj) ) ) THEN 87 85 #else … … 97 95 END DO 98 96 END DO 99 ! ! =============== 100 END DO ! End of slab 101 ! ! =============== 102 103 ! Lateral boundary conditions on ( avt, avmu, avmv ) (unchanged sign) 104 ! -------------------------------=================== 105 CALL lbc_lnk( avt , 'W', 1. ) 106 CALL lbc_lnk( avm , 'W', 1. ) 107 CALL lbc_lnk( avmu, 'U', 1. ) 108 CALL lbc_lnk( avmv, 'V', 1. ) 109 97 END DO 98 CALL lbc_lnk( avt , 'W', 1. ) ; CALL lbc_lnk( avm , 'W', 1. ) ! Lateral boundary conditions (unchanged sign) 99 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) 100 ! 110 101 CASE DEFAULT ! enhance vertical eddy diffusivity only (if rn2<-1.e-12) 111 ! ! =============== 112 DO jk = 1, jpkm1 ! Horizontal slab 113 ! ! =============== 114 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * rn_avevd ! agissant sur T SEUL! 102 DO jk = 1, jpkm1 103 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! 115 104 #if defined key_vectopt_loop 116 105 DO jj = 1, 1 ! big loop forced … … 121 110 #endif 122 111 #if defined key_zdfkpp 123 !! no implicitmixing in the boundary layer with KPP112 ! no evd mixing in the boundary layer with KPP 124 113 IF( ( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) .AND. ( fsdepw(ji,jj,jk) > hkpp(ji,jj) ) ) & 125 114 #else … … 129 118 END DO 130 119 END DO 131 ! ! =============== 132 END DO ! End of slab 133 ! ! =============== 120 END DO 121 ! 134 122 END SELECT 135 123 136 ! update of avt_evd and avmu_evd 137 avt_evd (:,:,:) = avt (:,:,:) - avt_evd (:,:,:) 138 avmu_evd(:,:,:) = avmu(:,:,:) - avmu_evd(:,:,:) 139 CALL iom_put( "avt_evd", avt_evd ) ! T enhan. vert. eddy diff. coef. 140 CALL iom_put( "avm_evd", avmu_evd ) ! T enhan. vert. eddy visc. coef. 141 124 zav_evd(:,:,:) = avt(:,:,:) - zav_evd(:,:,:) ! change in avt due to evd 125 CALL iom_put( "avt_evd", zav_evd ) ! output this change 126 ! 142 127 END SUBROUTINE zdf_evd 143 128 -
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 -
trunk/NEMO/OPA_SRC/step.F90
r1537 r1546 229 229 ! 230 230 IF( lk_ldfslp ) THEN ! slope of lateral mixing 231 CALL eos( tb, sb, rhd , rhop )! before in situ density231 CALL eos( tb, sb, rhd ) ! before in situ density 232 232 IF( ln_zps ) CALL zps_hde( kstp, tb, sb, rhd, & ! Partial steps: before horizontal gradient 233 233 & gtu, gsu, gru, & ! of t, s, rd at the last ocean level
Note: See TracChangeset
for help on using the changeset viewer.