- Timestamp:
- 2016-04-07T16:32:24+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GC3p0_package/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r6439 r6440 53 53 USE timing ! Timing 54 54 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 55 #if defined key_agrif 56 USE agrif_opa_interp 57 USE agrif_opa_update 58 #endif 59 60 55 61 56 62 IMPLICIT NONE … … 85 91 REAL(wp) :: rhftau_scl = 1.0_wp ! scale factor applied to HF part of taum (nn_etau=3) 86 92 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: en !: now turbulent kinetic energy [m2/s2]88 93 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: htau ! depth of tke penetration (nn_htau) 89 94 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dissl ! now mixing lenght of dissipation 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_k , avm_k ! not enhanced Kz91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avmu_k, avmv_k ! not enhanced Kz92 95 #if defined key_c1d 93 96 ! !!** 1D cfg only ** ('key_c1d') … … 115 118 & e_pdl(jpi,jpj,jpk) , e_ric(jpi,jpj,jpk) , & 116 119 #endif 117 & en (jpi,jpj,jpk) , htau (jpi,jpj) , dissl(jpi,jpj,jpk) , & 118 & avt_k (jpi,jpj,jpk) , avm_k (jpi,jpj,jpk), & 119 & avmu_k(jpi,jpj,jpk) , avmv_k(jpi,jpj,jpk), STAT= zdf_tke_alloc ) 120 & htau (jpi,jpj) , dissl(jpi,jpj,jpk) , STAT= zdf_tke_alloc ) 120 121 ! 121 122 IF( lk_mpp ) CALL mpp_sum ( zdf_tke_alloc ) … … 189 190 avmv_k(:,:,:) = avmv(:,:,:) 190 191 ! 192 #if defined key_agrif 193 ! Update child grid f => parent grid 194 IF( .NOT.Agrif_Root() ) CALL Agrif_Update_Tke( kt ) ! children only 195 #endif 196 ! 191 197 END SUBROUTINE zdf_tke 192 198 … … 317 323 zwlc = zind * rn_lc * zus * SIN( rpi * fsdepw(ji,jj,jk) / zhlc(ji,jj) ) 318 324 ! ! TKE Langmuir circulation source term 319 en(ji,jj,jk) = en(ji,jj,jk) + rdt * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) * wmask(ji,jj,jk) * tmask(ji,jj,1) 325 en(ji,jj,jk) = en(ji,jj,jk) + rdt * ( 1._wp - fr_i(ji,jj) ) * ( zwlc * zwlc * zwlc ) / & 326 & zhlc(ji,jj) * wmask(ji,jj,jk) * tmask(ji,jj,1) 320 327 END DO 321 328 END DO … … 350 357 DO ji = fs_2, fs_jpim1 ! vector opt. 351 358 zcof = zfact1 * tmask(ji,jj,jk) 359 # if defined key_zdftmx_new 360 ! key_zdftmx_new: New internal wave-driven param: set a minimum value for Kz on TKE (ensure numerical stability) 361 zzd_up = zcof * ( MAX( avm(ji,jj,jk+1) + avm(ji,jj,jk), 2.e-5_wp ) ) & ! upper diagonal 362 & / ( fse3t(ji,jj,jk ) * fse3w(ji,jj,jk ) ) 363 zzd_lw = zcof * ( MAX( avm(ji,jj,jk) + avm(ji,jj,jk-1), 2.e-5_wp ) ) & ! lower diagonal 364 & / ( fse3t(ji,jj,jk-1) * fse3w(ji,jj,jk ) ) 365 # else 352 366 zzd_up = zcof * ( avm (ji,jj,jk+1) + avm (ji,jj,jk ) ) & ! upper diagonal 353 367 & / ( fse3t(ji,jj,jk ) * fse3w(ji,jj,jk ) ) 354 368 zzd_lw = zcof * ( avm (ji,jj,jk ) + avm (ji,jj,jk-1) ) & ! lower diagonal 355 369 & / ( fse3t(ji,jj,jk-1) * fse3w(ji,jj,jk ) ) 370 # endif 356 371 ! ! shear prod. at w-point weightened by mask 357 372 zesh2 = ( avmu(ji-1,jj,jk) + avmu(ji,jj,jk) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) ) & … … 710 725 !!---------------------------------------------------------------------- 711 726 INTEGER :: ji, jj, jk ! dummy loop indices 712 INTEGER :: ios 727 INTEGER :: ios, ierr 713 728 !! 714 729 NAMELIST/namzdf_tke/ rn_ediff, rn_ediss , rn_ebb , rn_emin , & … … 728 743 ! 729 744 ri_cri = 2._wp / ( 2._wp + rn_ediss / rn_ediff ) ! resulting critical Richardson number 745 # if defined key_zdftmx_new 746 ! key_zdftmx_new: New internal wave-driven param: specified value of rn_emin & rmxl_min are used 747 rn_emin = 1.e-10_wp 748 rmxl_min = 1.e-03_wp 749 IF(lwp) THEN ! Control print 750 WRITE(numout,*) 751 WRITE(numout,*) 'zdf_tke_init : New tidal mixing case: force rn_emin = 1.e-10 and rmxl_min = 1.e-3 ' 752 WRITE(numout,*) '~~~~~~~~~~~~' 753 ENDIF 754 # else 730 755 rmxl_min = 1.e-6_wp / ( rn_ediff * SQRT( rn_emin ) ) ! resulting minimum length to recover molecular viscosity 756 # endif 731 757 ! 732 758 IF(lwp) THEN !* Control print … … 768 794 ENDIF 769 795 770 IF( nn_etau == 2 ) CALL zdf_mxl( nit000 ) ! Initialization of nmln 796 IF( nn_etau == 2 ) THEN 797 ierr = zdf_mxl_alloc() 798 nmln(:,:) = nlb10 ! Initialization of nmln 799 ENDIF 771 800 772 801 ! !* depth of penetration of surface tke
Note: See TracChangeset
for help on using the changeset viewer.