Changeset 5836 for trunk/NEMOGCM/NEMO/OPA_SRC/ZDF
- Timestamp:
- 2015-10-26T15:49:40+01:00 (8 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/ZDF
- Files:
-
- 1 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r5656 r5836 16 16 PUBLIC zdf_oce_alloc ! Called in nemogcm.F90 17 17 18 #if defined key_zdfcst || defined key_esopa18 #if defined key_zdfcst 19 19 LOGICAL, PARAMETER, PUBLIC :: lk_zdfcst = .TRUE. !: constant vertical mixing flag 20 20 #else … … 45 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_k , avm_k ! not enhanced Kz 46 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avmu_k, avmv_k ! not enhanced Kz 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: en !: now turbulent kinetic energy [m2/s2]47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: en !: now turbulent kinetic energy [m2/s2] 48 48 49 49 !!---------------------------------------------------------------------- … … 62 62 & avtb(jpk) , bfrva(jpi,jpj) , avtb_2d(jpi,jpj) , & 63 63 & tfrua(jpi, jpj), tfrva(jpi, jpj) , & 64 & avmu (jpi,jpj,jpk), avm (jpi,jpj,jpk) ,&65 & avmv (jpi,jpj,jpk), avt (jpi,jpj,jpk) ,&66 & avt_k (jpi,jpj,jpk), avm_k (jpi,jpj,jpk) ,&67 & avmu_k(jpi,jpj,jpk), avmv_k(jpi,jpj,jpk) , &64 & avmu (jpi,jpj,jpk), avm (jpi,jpj,jpk) , & 65 & avmv (jpi,jpj,jpk), avt (jpi,jpj,jpk) , & 66 & avt_k (jpi,jpj,jpk), avm_k (jpi,jpj,jpk) , & 67 & avmu_k(jpi,jpj,jpk), avmv_k(jpi,jpj,jpk) , & 68 68 & en (jpi,jpj,jpk), STAT = zdf_oce_alloc ) 69 69 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90
r5120 r5836 9 9 !! 3.6 ! 2013-04 (G. Madec, F. Roquet) zrau compute locally using interpolation of alpha & beta 10 10 !!---------------------------------------------------------------------- 11 #if defined key_zdfddm || defined key_esopa11 #if defined key_zdfddm 12 12 !!---------------------------------------------------------------------- 13 13 !! 'key_zdfddm' : double diffusion … … 162 162 ! ------------------ 163 163 ! Constant eddy coefficient: reset to the background value 164 !CDIR NOVERRCHK165 164 DO jj = 1, jpj 166 !CDIR NOVERRCHK167 165 DO ji = 1, jpi 168 166 zinr = 1._wp / zrau(ji,jj) -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
r4990 r5836 7 7 !! History : OPA ! 1997-06 (G. Madec, A. Lazar) Original code 8 8 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 9 !! - ! 2005-06 (C. Ethe) KPP parameterization10 9 !! 3.2 ! 2009-03 (M. Leclair, G. Madec, R. Benshila) test on both before & after 11 10 !!---------------------------------------------------------------------- 12 11 13 12 !!---------------------------------------------------------------------- 14 !! zdf_evd : increase the momentum and tracer Kz at the location of15 !! statically unstable portion of the water column (ln_zdfevd=T)13 !! zdf_evd : increase the momentum and tracer Kz at the location of 14 !! statically unstable portion of the water column (ln_zdfevd=T) 16 15 !!---------------------------------------------------------------------- 17 16 USE oce ! ocean dynamics and tracers variables 18 17 USE dom_oce ! ocean space and time domain variables 19 18 USE zdf_oce ! ocean vertical physics variables 20 USE zdfkpp ! KPP vertical mixing19 ! 21 20 USE in_out_manager ! I/O manager 22 21 USE iom ! for iom_put 23 22 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 23 USE wrk_nemo ! work arrays 24 24 USE timing ! Timing 25 25 … … 53 53 !! References : Lazar, A., these de l'universite Paris VI, France, 1997 54 54 !!---------------------------------------------------------------------- 55 USE oce, zavt_evd => ua , zavm_evd => va ! (ua,va) used ua workspace56 !57 55 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step 58 56 ! 59 57 INTEGER :: ji, jj, jk ! dummy loop indices 58 REAL(wp), POINTER, DIMENSION(:,:,:) :: zavt_evd, zavm_evd 60 59 !!---------------------------------------------------------------------- 61 60 ! … … 68 67 IF(lwp) WRITE(numout,*) 69 68 ENDIF 70 69 ! 70 CALL wrk_alloc( jpi,jpj,jpk, zavt_evd, zavm_evd ) 71 ! 71 72 zavt_evd(:,:,:) = avt(:,:,:) ! set avt prior to evd application 72 73 ! 73 74 SELECT CASE ( nn_evdm ) 74 75 ! … … 80 81 DO jj = 2, jpj ! no vector opt. 81 82 DO ji = 2, jpi 82 #if defined key_zdfkpp83 ! no evd mixing in the boundary layer with KPP84 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) THEN85 #else86 83 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 87 #endif88 84 avt (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk) 89 85 avm (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk) … … 107 103 DO jj = 1, jpj ! loop over the whole domain (no lbc_lnk call) 108 104 DO ji = 1, jpi 109 #if defined key_zdfkpp110 ! no evd mixing in the boundary layer with KPP111 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) &112 #else113 105 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & 114 #endif115 106 avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk) 116 107 END DO … … 123 114 CALL iom_put( "avt_evd", zavt_evd ) ! output this change 124 115 ! 116 CALL wrk_dealloc( jpi,jpj,jpk, zavt_evd, zavm_evd ) 117 ! 125 118 IF( nn_timing == 1 ) CALL timing_stop('zdf_evd') 126 119 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r5656 r5836 8 8 !! 3.3 ! 2010-10 (C. Bricaud) Add in the reference 9 9 !!---------------------------------------------------------------------- 10 #if defined key_zdfgls || defined key_esopa10 #if defined key_zdfgls 11 11 !!---------------------------------------------------------------------- 12 12 !! 'key_zdfgls' Generic Length Scale vertical physics … … 116 116 !!---------------------------------------------------------------------- 117 117 ALLOCATE( mxln(jpi,jpj,jpk), zwall(jpi,jpj,jpk) , & 118 & ustars2(jpi,jpj) , ustarb2(jpi,jpj), STAT= zdf_gls_alloc )118 & ustars2(jpi,jpj) , ustarb2(jpi,jpj) , STAT= zdf_gls_alloc ) 119 119 ! 120 120 IF( lk_mpp ) CALL mpp_sum ( zdf_gls_alloc ) … … 154 154 IF( nn_timing == 1 ) CALL timing_start('zdf_gls') 155 155 ! 156 CALL wrk_alloc( jpi,jpj, zdep, zkar, zflxs, zhsro )157 CALL wrk_alloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi )156 CALL wrk_alloc( jpi,jpj, zdep, zkar, zflxs, zhsro ) 157 CALL wrk_alloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi ) 158 158 159 159 ! Preliminary computing … … 169 169 170 170 ! Compute surface and bottom friction at T-points 171 !CDIR NOVERRCHK172 171 DO jj = 2, jpjm1 173 !CDIR NOVERRCHK174 172 DO ji = fs_2, fs_jpim1 ! vector opt. 175 173 ! … … 360 358 ! ! en(ibot) = u*^2 / Co2 and mxln(ibot) = rn_lmin 361 359 ! ! Balance between the production and the dissipation terms 362 !CDIR NOVERRCHK 363 DO jj = 2, jpjm1 364 !CDIR NOVERRCHK 360 DO jj = 2, jpjm1 365 361 DO ji = fs_2, fs_jpim1 ! vector opt. 366 362 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 383 379 CASE ( 1 ) ! Neumman boundary condition 384 380 ! 385 !CDIR NOVERRCHK 386 DO jj = 2, jpjm1 387 !CDIR NOVERRCHK 381 DO jj = 2, jpjm1 388 382 DO ji = fs_2, fs_jpim1 ! vector opt. 389 383 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 588 582 ! ! en(ibot) = u*^2 / Co2 and mxln(ibot) = vkarmn * rn_bfrz0 589 583 ! ! Balance between the production and the dissipation terms 590 !CDIR NOVERRCHK 591 DO jj = 2, jpjm1 592 !CDIR NOVERRCHK 584 DO jj = 2, jpjm1 593 585 DO ji = fs_2, fs_jpim1 ! vector opt. 594 586 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 611 603 CASE ( 1 ) ! Neumman boundary condition 612 604 ! 613 !CDIR NOVERRCHK 614 DO jj = 2, jpjm1 615 !CDIR NOVERRCHK 605 DO jj = 2, jpjm1 616 606 DO ji = fs_2, fs_jpim1 ! vector opt. 617 607 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 834 824 avmv_k(:,:,:) = avmv(:,:,:) 835 825 ! 836 CALL wrk_dealloc( jpi,jpj, zdep, zkar, zflxs, zhsro )837 CALL wrk_dealloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi )826 CALL wrk_dealloc( jpi,jpj, zdep, zkar, zflxs, zhsro ) 827 CALL wrk_dealloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi ) 838 828 ! 839 829 IF( nn_timing == 1 ) CALL timing_stop('zdf_gls') -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r5386 r5836 6 6 !! History : 8.0 ! 1997-06 (G. Madec) Original code from inimix 7 7 !! 1.0 ! 2002-08 (G. Madec) F90 : free form 8 !! - ! 2005-06 (C. Ethe) KPP parameterization8 !! - ! 2005-06 (C. Ethe) KPP scheme 9 9 !! - ! 2009-07 (G. Madec) add avmb, avtb in restart for cen2 advection 10 !! 3.7 ! 2014-12 (G. Madec) remove KPP scheme 10 11 !!---------------------------------------------------------------------- 11 12 … … 14 15 !!---------------------------------------------------------------------- 15 16 USE par_oce ! mesh and scale factors 16 USE ldftra_oce ! ocean active tracers: lateral physics17 USE ldfdyn_oce ! ocean dynamics lateral physics18 17 USE zdf_oce ! TKE vertical mixing 19 USE lib_mpp ! distribued memory computing18 USE sbc_oce ! surface module (only for nn_isf in the option compatibility test) 20 19 USE zdftke ! TKE vertical mixing 21 20 USE zdfgls ! GLS vertical mixing 22 USE zdf kpp ! KPP vertical mixing21 USE zdfric ! Richardson vertical mixing 23 22 USE zdfddm ! double diffusion mixing 24 23 USE zdfevd ! enhanced vertical diffusion 25 USE zdfric ! Richardson vertical mixing26 24 USE tranpc ! convection: non penetrative adjustment 27 25 USE ldfslp ! iso-neutral slopes 28 26 ! 29 27 USE in_out_manager ! I/O manager 30 28 USE iom ! IOM library 29 USE lib_mpp ! distribued memory computing 31 30 32 31 IMPLICIT NONE … … 50 49 !! ** Method : Read namelist namzdf, control logicals 51 50 !!---------------------------------------------------------------------- 52 INTEGER :: ioptio ! temporary scalar 53 INTEGER :: ios 51 INTEGER :: ioptio, ios ! local integers 54 52 !! 55 53 NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & … … 111 109 ioptio = ioptio+1 112 110 ENDIF 113 IF( lk_zdfkpp ) THEN 114 IF(lwp) WRITE(numout,*) ' KPP dependent eddy coefficients' 115 ioptio = ioptio+1 116 ENDIF 117 IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) & 111 IF( ioptio == 0 .OR. ioptio > 1 ) & 118 112 & CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' ) 119 IF( ( lk_zdfric .OR. lk_zdfgls .OR. lk_zdfkpp) .AND. ln_isfcav ) &113 IF( ( lk_zdfric .OR. lk_zdfgls ) .AND. ln_isfcav ) & 120 114 & CALL ctl_stop( ' only zdfcst and zdftke were tested with ice shelves cavities ' ) 121 115 ! … … 143 137 IF(lwp) WRITE(numout,*) ' use the GLS closure scheme' 144 138 ENDIF 145 IF( lk_zdfkpp ) THEN 146 IF(lwp) WRITE(numout,*) ' use the KPP closure scheme' 147 IF(lk_mpp) THEN 148 IF(lwp) WRITE(numout,cform_err) 149 IF(lwp) WRITE(numout,*) 'The KPP scheme is not ready to run in MPI' 150 ENDIF 151 ENDIF 152 IF ( ioptio > 1 .AND. .NOT. lk_esopa ) CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' ) 153 IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfgls .OR. lk_zdfkpp ) ) & 154 CALL ctl_stop( ' except for TKE, GLS or KPP physics, a convection scheme is', & 139 IF ( ioptio > 1 ) CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' ) 140 IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfgls ) ) & 141 CALL ctl_stop( ' except for TKE or GLS physics, a convection scheme is', & 155 142 & ' required: ln_zdfevd or ln_zdfnpc logicals' ) 156 143 -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90
r4624 r5836 13 13 !! 3.3.1! 2011-09 (P. Oddo) Mixed layer depth parameterization 14 14 !!---------------------------------------------------------------------- 15 #if defined key_zdfric || defined key_esopa15 #if defined key_zdfric 16 16 !!---------------------------------------------------------------------- 17 17 !! 'key_zdfric' Kz = f(Ri) -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r5803 r5836 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 … … 376 371 ! 377 372 ENDIF 378 373 ! 379 374 DO jk = 2, jpkm1 !* Matrix and right hand side in en 380 375 DO jj = 2, jpjm1 … … 408 403 END DO 409 404 END DO 410 ! 411 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 412 DO jj = 2, jpjm1 405 DO jj = 2, jpjm1 ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 413 406 DO ji = fs_2, fs_jpim1 ! vector opt. 414 407 zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke … … 422 415 END DO 423 416 END DO 424 ! 425 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 426 DO jj = 2, jpjm1 417 DO jj = 2, jpjm1 ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 427 418 DO ji = fs_2, fs_jpim1 ! vector opt. 428 419 en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) … … 465 456 END DO 466 457 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 467 !CDIR NOVERRCHK468 458 DO jk = 2, jpkm1 469 !CDIR NOVERRCHK 470 DO jj = 2, jpjm1 471 !CDIR NOVERRCHK 459 DO jj = 2, jpjm1 472 460 DO ji = fs_2, fs_jpim1 ! vector opt. 473 461 ztx2 = utau(ji-1,jj ) + utau(ji,jj) … … 484 472 CALL lbc_lnk( en, 'W', 1. ) ! Lateral boundary conditions (sign unchanged) 485 473 ! 486 CALL wrk_dealloc( jpi,jpj, imlc ) ! integer487 CALL wrk_dealloc( jpi,jpj, zhlc )488 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 ) 489 477 ! 490 478 IF( nn_timing == 1 ) CALL timing_stop('tke_tke') … … 530 518 INTEGER :: ji, jj, jk ! dummy loop indices 531 519 REAL(wp) :: zrn2, zraug, zcoef, zav ! local scalars 532 REAL(wp) :: zdku, zri, zsqen ! - -520 REAL(wp) :: zdku, zri, zsqen ! - - 533 521 REAL(wp) :: zdkv, zemxl, zemlm, zemlp ! - - 534 522 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmpdl, zmxlm, zmxld … … 560 548 ENDIF 561 549 ! 562 !CDIR NOVERRCHK563 550 DO jk = 2, jpkm1 ! interior value : l=sqrt(2*e/n^2) 564 !CDIR NOVERRCHK 565 DO jj = 2, jpjm1 566 !CDIR NOVERRCHK 551 DO jj = 2, jpjm1 567 552 DO ji = fs_2, fs_jpim1 ! vector opt. 568 553 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 569 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 ) ) 570 555 END DO 571 556 END DO … … 574 559 ! !* Physical limits for the mixing length 575 560 ! 576 zmxld(:,:, 1) = zmxlm(:,:,1) ! surface set to the minimum value561 zmxld(:,:, 1 ) = zmxlm(:,:,1) ! surface set to the minimum value 577 562 zmxld(:,:,jpk) = rmxl_min ! last level set to the minimum value 578 563 ! 579 564 SELECT CASE ( nn_mxl ) 580 565 ! 566 !!gm Not sure of that coding for ISF.... 581 567 ! where wmask = 0 set zmxlm == fse3w 582 568 CASE ( 0 ) ! bounded by the distance to surface and bottom … … 637 623 END DO 638 624 END DO 639 !CDIR NOVERRCHK640 625 DO jk = 2, jpkm1 641 !CDIR NOVERRCHK 642 DO jj = 2, jpjm1 643 !CDIR NOVERRCHK 626 DO jj = 2, jpjm1 644 627 DO ji = fs_2, fs_jpim1 ! vector opt. 645 628 zemlm = MIN ( zmxld(ji,jj,jk), zmxlm(ji,jj,jk) ) … … 661 644 ! ! Vertical eddy viscosity and diffusivity (avmu, avmv, avt) 662 645 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 663 !CDIR NOVERRCHK664 646 DO jk = 1, jpkm1 !* vertical eddy viscosity & diffivity at w-points 665 !CDIR NOVERRCHK 666 DO jj = 2, jpjm1 667 !CDIR NOVERRCHK 647 DO jj = 2, jpjm1 668 648 DO ji = fs_2, fs_jpim1 ! vector opt. 669 649 zsqen = SQRT( en(ji,jj,jk) ) … … 694 674 # if defined key_c1d 695 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 ! 696 678 e_ric(ji,jj,jk) = zri * wmask(ji,jj,jk) ! c1d config. : save Ri 697 679 # endif -
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
r5130 r5836 8 8 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 9 9 !!---------------------------------------------------------------------- 10 #if defined key_zdftmx || defined key_esopa10 #if defined key_zdftmx 11 11 !!---------------------------------------------------------------------- 12 12 !! 'key_zdftmx' Tidal vertical mixing … … 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) … … 105 105 !! Koch-Larrouy et al. 2007, GRL. 106 106 !!---------------------------------------------------------------------- 107 USE oce, zav_tide => ua ! use ua as workspace108 !!109 107 INTEGER, INTENT(in) :: kt ! ocean time-step 110 ! !108 ! 111 109 INTEGER :: ji, jj, jk ! dummy loop indices 112 110 REAL(wp) :: ztpc ! scalar workspace 113 REAL(wp), POINTER, DIMENSION(:,:) :: zkz 111 REAL(wp), POINTER, DIMENSION(:,:) :: zkz 112 REAL(wp), POINTER, DIMENSION(:,:,:) :: zav_tide 114 113 !!---------------------------------------------------------------------- 115 114 ! 116 115 IF( nn_timing == 1 ) CALL timing_start('zdf_tmx') 117 116 ! 118 CALL wrk_alloc( jpi,jpj, zkz ) 119 117 CALL wrk_alloc( jpi,jpj, zkz ) 118 CALL wrk_alloc( jpi,jpj,jpk, zav_tide ) 119 ! 120 120 ! ! ----------------------- ! 121 121 ! ! Standard tidal mixing ! (compute zav_tide) … … 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. … … 190 180 IF(ln_ctl) CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 191 181 ! 192 CALL wrk_dealloc( jpi,jpj, zkz ) 182 CALL wrk_dealloc( jpi,jpj, zkz ) 183 CALL wrk_dealloc( jpi,jpj,jpk, zav_tide ) 193 184 ! 194 185 IF( nn_timing == 1 ) CALL timing_stop('zdf_tmx') … … 239 230 DO jk = 1, jpkm1 240 231 zdn2dz (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1) ! Vertical profile of dN2/dz 241 !CDIR NOVERRCHK242 232 zempba_3d_1(:,:,jk) = SQRT( MAX( 0.e0, rn2(:,:,jk) ) ) ! - - of N 243 233 zempba_3d_2(:,:,jk) = MAX( 0.e0, rn2(:,:,jk) ) ! - - of N^2 … … 248 238 zsum2(:,:) = 0.e0 249 239 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)240 zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) * wmask(:,:,jk) 241 zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk) * wmask(:,:,jk) 252 242 END DO 253 243 DO jj = 1, jpj … … 285 275 zkz(:,:) = 0.e0 ! Associated potential energy consummed over the whole water column 286 276 DO jk = 2, jpkm1 287 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1)277 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * wmask(:,:,jk) 288 278 END DO 289 279 … … 295 285 296 286 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/s287 zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * wmask(:,:,jk) ! kz max = 120 cm2/s 298 288 END DO 299 289 … … 303 293 DO jj= 1, jpj 304 294 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)295 ztpc = ztpc + e1e2t(ji,jj) * fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) & 296 & * zavt_itf(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 307 297 END DO 308 298 END DO 309 299 END DO 300 IF( lk_mpp ) CALL mpp_sum( ztpc ) 310 301 ztpc= rau0 * ztpc / ( rn_me * rn_tfe_itf ) 311 302 IF(lwp) WRITE(numout,*) ' N Total power consumption by zavt_itf: ztpc = ', ztpc * 1.e-12 ,'TW' … … 361 352 !! Koch-Larrouy et al. 2007, GRL. 362 353 !!---------------------------------------------------------------------- 363 USE oce , zav_tide => ua ! ua used as workspace364 !!365 354 INTEGER :: ji, jj, jk ! dummy loop indices 366 355 INTEGER :: inum ! local integer 367 356 INTEGER :: ios 368 357 REAL(wp) :: ztpc, ze_z ! local scalars 369 REAL(wp), DIMENSION(:,:) , POINTER :: zem2, zek1 ! read M2 and K1 tidal energy370 REAL(wp), DIMENSION(:,:) , POINTER :: zkz ! total M2, K1 and S2 tidal energy371 REAL(wp), DIMENSION(:,:) , POINTER :: zfact ! used for vertical structure function372 REAL(wp), DIMENSION(:,:) , POINTER :: zhdep ! Ocean depth373 REAL(wp), DIMENSION(:,:,:), POINTER :: zpc 358 REAL(wp), DIMENSION(:,:) , POINTER :: zem2, zek1 ! read M2 and K1 tidal energy 359 REAL(wp), DIMENSION(:,:) , POINTER :: zkz ! total M2, K1 and S2 tidal energy 360 REAL(wp), DIMENSION(:,:) , POINTER :: zfact ! used for vertical structure function 361 REAL(wp), DIMENSION(:,:) , POINTER :: zhdep ! Ocean depth 362 REAL(wp), DIMENSION(:,:,:), POINTER :: zpc, zav_tide ! power consumption 374 363 !! 375 364 NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf … … 378 367 IF( nn_timing == 1 ) CALL timing_start('zdf_tmx_init') 379 368 ! 380 CALL wrk_alloc( jpi,jpj, zem2, zek1, zkz, zfact, zhdep )381 CALL wrk_alloc( jpi,jpj,jpk, zpc)382 383 REWIND( numnam_ref ) 369 CALL wrk_alloc( jpi,jpj, zem2, zek1, zkz, zfact, zhdep ) 370 CALL wrk_alloc( jpi,jpj,jpk, zpc, zav_tide ) 371 ! 372 REWIND( numnam_ref ) ! Namelist namzdf_tmx in reference namelist : Tidal Mixing 384 373 READ ( numnam_ref, namzdf_tmx, IOSTAT = ios, ERR = 901) 385 374 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_tmx in reference namelist', lwp ) 386 387 REWIND( numnam_cfg ) 375 ! 376 REWIND( numnam_cfg ) ! Namelist namzdf_tmx in configuration namelist : Tidal Mixing 388 377 READ ( numnam_cfg, namzdf_tmx, IOSTAT = ios, ERR = 902 ) 389 378 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_tmx in configuration namelist', lwp ) 390 379 IF(lwm) WRITE ( numond, namzdf_tmx ) 391 392 IF(lwp) THEN ! Control print380 ! 381 IF(lwp) THEN ! Control print 393 382 WRITE(numout,*) 394 383 WRITE(numout,*) 'zdf_tmx_init : tidal mixing' … … 402 391 WRITE(numout,*) ' ITF tidal dissipation efficiency = ', rn_tfe_itf 403 392 ENDIF 404 405 ! ! allocate tmx arrays 393 ! ! allocate tmx arrays 406 394 IF( zdf_tmx_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 407 395 408 IF( ln_tmx_itf ) THEN ! read the Indonesian Through Flow mask396 IF( ln_tmx_itf ) THEN ! read the Indonesian Through Flow mask 409 397 CALL iom_open('mask_itf',inum) 410 398 CALL iom_get (inum, jpdom_data, 'tmaskitf',mask_itf,1) ! 411 399 CALL iom_close(inum) 412 400 ENDIF 413 414 ! read M2 tidal energy flux : W/m2 ( zem2 < 0 ) 401 ! ! read M2 tidal energy flux : W/m2 ( zem2 < 0 ) 415 402 CALL iom_open('M2rowdrg',inum) 416 403 CALL iom_get (inum, jpdom_data, 'field',zem2,1) ! 417 404 CALL iom_close(inum) 418 419 ! read K1 tidal energy flux : W/m2 ( zek1 < 0 ) 405 ! ! read K1 tidal energy flux : W/m2 ( zek1 < 0 ) 420 406 CALL iom_open('K1rowdrg',inum) 421 407 CALL iom_get (inum, jpdom_data, 'field',zek1,1) ! 422 408 CALL iom_close(inum) 423 424 ! Total tidal energy ( M2, S2 and K1 with S2=(1/2)^2 * M2 ) 425 ! only the energy available for mixing is taken into account, 426 ! (mixing efficiency tidal dissipation efficiency) 409 ! ! Total tidal energy ( M2, S2 and K1 with S2=(1/2)^2 * M2 ) 410 ! ! only the energy available for mixing is taken into account, 411 ! ! (mixing efficiency tidal dissipation efficiency) 427 412 en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 428 413 429 414 !============ 430 415 !TG: Bug for VVL? Should this section be moved out of _init and be updated at every timestep? 431 ! Vertical structure (az_tmx) 432 DO jj = 1, jpj ! part independent of the level 416 !!gm : you are right, but tidal mixing acts in deep ocean (H>500m) where e3 is O(100m) 417 !! the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 418 ! ! Vertical structure (az_tmx) 419 DO jj = 1, jpj ! part independent of the level 433 420 DO ji = 1, jpi 434 421 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean … … 437 424 END DO 438 425 END DO 439 DO jk= 1, jpk ! complete with the level-dependent part426 DO jk= 1, jpk ! complete with the level-dependent part 440 427 DO jj = 1, jpj 441 428 DO ji = 1, jpi … … 445 432 END DO 446 433 !=========== 447 434 ! 448 435 IF( nprint == 1 .AND. lwp ) THEN 449 436 ! Control print … … 454 441 zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 455 442 END DO 456 457 ztpc = 0. e0443 ! 444 ztpc = 0._wp 458 445 zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 459 446 DO jk= 2, jpkm1 460 447 DO jj = 1, jpj 461 448 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)449 ztpc = ztpc + fse3w(ji,jj,jk) * e1e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 463 450 END DO 464 451 END DO 465 452 END DO 453 IF( lk_mpp ) CALL mpp_sum( ztpc ) 466 454 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 467 455 ! 468 456 WRITE(numout,*) 469 457 WRITE(numout,*) ' Total power consumption of the tidally driven part of Kz : ztpc = ', ztpc * 1.e-12 ,'TW' 470 471 458 ! 472 459 ! control print 2 473 460 zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 ) 474 zkz(:,:) = 0. e0461 zkz(:,:) = 0._wp 475 462 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 463 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 481 464 END DO 482 465 ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz … … 497 480 END DO 498 481 WRITE(numout,*) ' Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 499 482 ! 500 483 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 506 END DO 507 ztpc = 0.e0 484 zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk) !kz max = 300 cm2/s 485 END DO 486 ztpc = 0._wp 508 487 zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 509 488 DO jk= 1, jpk 510 489 DO jj = 1, jpj 511 490 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)491 ztpc = ztpc + fse3w(ji,jj,jk) * e1e2t(ji,jj) * zpc(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 513 492 END DO 514 493 END DO 515 494 END DO 495 IF( lk_mpp ) CALL mpp_sum( ztpc ) 516 496 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 517 497 WRITE(numout,*) ' 2 Total power consumption of the tidally driven part of Kz : ztpc = ', ztpc * 1.e-12 ,'TW' 518 498 !!gm bug mpp in these diagnostics 519 499 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. E50500 ze_z = SUM( e1e2t(:,:) * zav_tide(:,:,jk) * tmask_i(:,:) ) & 501 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask (:,:,jk) * tmask_i(:,:) ) ) 502 ztpc = 1.e50 523 503 DO jj = 1, jpj 524 504 DO ji = 1, jpi 525 IF( zav_tide(ji,jj,jk) /= 0.e0 ) ztpc = Min( ztpc, zav_tide(ji,jj,jk) )505 IF( zav_tide(ji,jj,jk) /= 0.e0 ) ztpc = MIN( ztpc, zav_tide(ji,jj,jk) ) 526 506 END DO 527 507 END DO … … 530 510 END DO 531 511 532 WRITE(numout,*) ' e_tide : ', SUM( e1 t*e2t*en_tmx ) / ( rn_tfe * rn_me ) * 1.e-12, 'TW'512 WRITE(numout,*) ' e_tide : ', SUM( e1e2t*en_tmx ) / ( rn_tfe * rn_me ) * 1.e-12, 'TW' 533 513 WRITE(numout,*) 534 514 WRITE(numout,*) ' Initial profile of tidal vertical mixing' … … 539 519 END DO 540 520 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(:,:) ) )521 ze_z = SUM( e1e2t(:,:) * zkz (:,:) * tmask_i(:,:) ) & 522 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 543 523 WRITE(numout,*) ' jk= ', jk,' ', ze_z * 1.e4,' cm2/s' 544 524 END DO 545 525 DO jk = 1, jpk 546 526 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(:,:) ) )527 ze_z = SUM( e1e2t(:,:) * zkz (:,:) * tmask_i(:,:) ) & 528 & / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 549 529 WRITE(numout,*) 550 530 WRITE(numout,*) ' N2 min - jk= ', jk,' ', ze_z * 1.e4,' cm2/s min= ',MINVAL(zkz)*1.e4, & 551 531 & 'max= ', MAXVAL(zkz)*1.e4, ' cm2/s' 552 532 END DO 533 !!gm end bug mpp 553 534 ! 554 535 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.