Changeset 13295 for NEMO/trunk/src/OCE/ZDF
- Timestamp:
- 2020-07-10T20:24:21+02:00 (4 years ago)
- Location:
- NEMO/trunk/src/OCE/ZDF
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/ZDF/zdfddm.F90
r13237 r13295 94 94 !!gm and many acces in memory 95 95 96 DO_2D _11_1196 DO_2D( 1, 1, 1, 1 ) 97 97 zrw = ( gdepw(ji,jj,jk ,Kmm) - gdept(ji,jj,jk,Kmm) ) & 98 98 !!gm please, use e3w at Kmm below … … 110 110 END_2D 111 111 112 DO_2D _11_11112 DO_2D( 1, 1, 1, 1 ) 113 113 ! stability indicator: msks=1 if rn2>0; 0 elsewhere 114 114 IF( rn2(ji,jj,jk) + 1.e-12 <= 0. ) THEN ; zmsks(ji,jj) = 0._wp … … 140 140 ! ------------------ 141 141 ! Constant eddy coefficient: reset to the background value 142 DO_2D _11_11142 DO_2D( 1, 1, 1, 1 ) 143 143 zinr = 1._wp / zrau(ji,jj) 144 144 ! salt fingering -
NEMO/trunk/src/OCE/ZDF/zdfdrg.F90
r13286 r13295 116 116 ! 117 117 IF( l_log_not_linssh ) THEN !== "log layer" ==! compute Cd and -Cd*|U| 118 DO_2D _00_00118 DO_2D( 0, 0, 0, 0 ) 119 119 imk = k_mk(ji,jj) ! ocean bottom level at t-points 120 120 zut = uu(ji,jj,imk,Kmm) + uu(ji-1,jj,imk,Kmm) ! 2 x velocity at t-point … … 128 128 END_2D 129 129 ELSE !== standard Cd ==! 130 DO_2D _00_00130 DO_2D( 0, 0, 0, 0 ) 131 131 imk = k_mk(ji,jj) ! ocean bottom level at t-points 132 132 zut = uu(ji,jj,imk,Kmm) + uu(ji-1,jj,imk,Kmm) ! 2 x velocity at t-point … … 175 175 ENDIF 176 176 177 DO_2D _00_00177 DO_2D( 0, 0, 0, 0 ) 178 178 ikbu = mbku(ji,jj) ! deepest wet ocean u- & v-levels 179 179 ikbv = mbkv(ji,jj) … … 188 188 ! 189 189 IF( ln_isfcav ) THEN ! ocean cavities 190 DO_2D _00_00190 DO_2D( 0, 0, 0, 0 ) 191 191 ikbu = miku(ji,jj) ! first wet ocean u- & v-levels 192 192 ikbv = mikv(ji,jj) … … 422 422 l_log_not_linssh = .FALSE. !- don't update Cd at each time step 423 423 ! 424 DO_2D _11_11424 DO_2D( 1, 1, 1, 1 ) 425 425 zzz = 0.5_wp * e3t_0(ji,jj,k_mk(ji,jj)) 426 426 zcd = ( vkarmn / LOG( zzz / rn_z0 ) )**2 -
NEMO/trunk/src/OCE/ZDF/zdfevd.F90
r12377 r13295 87 87 ! END WHERE 88 88 ! 89 DO_3D _00_00(1, jpkm1 )89 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 90 90 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 91 91 p_avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) … … 103 103 ! END WHERE 104 104 105 DO_3D _00_00(1, jpkm1 )105 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 106 106 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & 107 107 p_avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) -
NEMO/trunk/src/OCE/ZDF/zdfgls.F90
r13286 r13295 168 168 169 169 ! Compute surface, top and bottom friction at T-points 170 DO_2D _00_00170 DO_2D( 0, 0, 0, 0 ) 171 171 ! 172 172 ! surface friction … … 181 181 END_2D 182 182 IF( ln_isfcav ) THEN !top friction 183 DO_2D _00_00183 DO_2D( 0, 0, 0, 0 ) 184 184 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 185 185 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) ! (CAUTION: CdU<0) … … 204 204 END SELECT 205 205 ! 206 DO_3D _10_10(2, jpkm1 )206 DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 207 207 eps(ji,jj,jk) = rc03 * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / hmxl_n(ji,jj,jk) 208 208 END_3D … … 213 213 214 214 IF( nn_clos == 0 ) THEN ! Mellor-Yamada 215 DO_3D _00_00(2, jpkm1 )215 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 216 216 zup = hmxl_n(ji,jj,jk) * gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) 217 217 zdown = vkarmn * gdepw(ji,jj,jk,Kmm) * ( -gdepw(ji,jj,jk,Kmm) + gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) ) … … 234 234 ! Warning : after this step, en : right hand side of the matrix 235 235 236 DO_3D _00_00(2, jpkm1 )236 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 237 237 ! 238 238 buoy = - p_avt(ji,jj,jk) * rn2(ji,jj,jk) ! stratif. destruction … … 330 330 ! ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = rn_lmin 331 331 ! ! Balance between the production and the dissipation terms 332 DO_2D _00_00332 DO_2D( 0, 0, 0, 0 ) 333 333 !!gm This means that bottom and ocean w-level above have a specified "en" value. Sure ???? 334 334 !! With thick deep ocean level thickness, this may be quite large, no ??? … … 348 348 ! 349 349 IF( ln_isfcav) THEN ! top boundary (ocean cavity) 350 DO_2D _00_00350 DO_2D( 0, 0, 0, 0 ) 351 351 itop = mikt(ji,jj) ! k top w-point 352 352 itopp1 = mikt(ji,jj) + 1 ! k+1 1st w-point below the top one … … 366 366 CASE ( 1 ) ! Neumman boundary condition 367 367 ! 368 DO_2D _00_00368 DO_2D( 0, 0, 0, 0 ) 369 369 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point 370 370 ibotm1 = mbkt(ji,jj) ! k-1 bottom level of w-point but >=1 … … 380 380 END_2D 381 381 IF( ln_isfcav) THEN ! top boundary (ocean cavity) 382 DO_2D _00_00382 DO_2D( 0, 0, 0, 0 ) 383 383 itop = mikt(ji,jj) ! k top w-point 384 384 itopp1 = mikt(ji,jj) + 1 ! k+1 1st w-point below the top one … … 400 400 ! ---------------------------------------------------------- 401 401 ! 402 DO_3D _00_00(2, jpkm1 )402 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 403 403 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 404 404 END_3D 405 DO_3D _00_00(2, jpk )405 DO_3D( 0, 0, 0, 0, 2, jpk ) 406 406 zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) * zd_lw(ji,jj,jk-1) 407 407 END_3D 408 DO_3DS _00_00(jpk-1, 2, -1 )408 DO_3DS( 0, 0, 0, 0, jpk-1, 2, -1 ) 409 409 en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 410 410 END_3D … … 421 421 ! 422 422 CASE( 0 ) ! k-kl (Mellor-Yamada) 423 DO_3D _00_00(2, jpkm1 )423 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 424 424 psi(ji,jj,jk) = eb(ji,jj,jk) * hmxl_b(ji,jj,jk) 425 425 END_3D 426 426 ! 427 427 CASE( 1 ) ! k-eps 428 DO_3D _00_00(2, jpkm1 )428 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 429 429 psi(ji,jj,jk) = eps(ji,jj,jk) 430 430 END_3D 431 431 ! 432 432 CASE( 2 ) ! k-w 433 DO_3D _00_00(2, jpkm1 )433 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 434 434 psi(ji,jj,jk) = SQRT( eb(ji,jj,jk) ) / ( rc0 * hmxl_b(ji,jj,jk) ) 435 435 END_3D 436 436 ! 437 437 CASE( 3 ) ! generic 438 DO_3D _00_00(2, jpkm1 )438 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 439 439 psi(ji,jj,jk) = rc02 * eb(ji,jj,jk) * hmxl_b(ji,jj,jk)**rnn 440 440 END_3D … … 449 449 ! Warning : after this step, en : right hand side of the matrix 450 450 451 DO_3D _00_00(2, jpkm1 )451 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 452 452 ! 453 453 ! psi / k … … 546 546 ! ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = vkarmn * r_z0_bot 547 547 ! ! Balance between the production and the dissipation terms 548 DO_2D _00_00548 DO_2D( 0, 0, 0, 0 ) 549 549 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point 550 550 ibotm1 = mbkt(ji,jj) ! k-1 bottom level of w-point but >=1 … … 565 565 CASE ( 1 ) ! Neumman boundary condition 566 566 ! 567 DO_2D _00_00567 DO_2D( 0, 0, 0, 0 ) 568 568 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point 569 569 ibotm1 = mbkt(ji,jj) ! k-1 bottom level of w-point but >=1 … … 593 593 ! ---------------- 594 594 ! 595 DO_3D _00_00(2, jpkm1 )595 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 596 596 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 597 597 END_3D 598 DO_3D _00_00(2, jpk )598 DO_3D( 0, 0, 0, 0, 2, jpk ) 599 599 zd_lw(ji,jj,jk) = psi(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) * zd_lw(ji,jj,jk-1) 600 600 END_3D 601 DO_3DS _00_00(jpk-1, 2, -1 )601 DO_3DS( 0, 0, 0, 0, jpk-1, 2, -1 ) 602 602 psi(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * psi(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 603 603 END_3D … … 609 609 ! 610 610 CASE( 0 ) ! k-kl (Mellor-Yamada) 611 DO_3D _00_00(1, jpkm1 )611 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 612 612 eps(ji,jj,jk) = rc03 * en(ji,jj,jk) * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / MAX( psi(ji,jj,jk), rn_epsmin) 613 613 END_3D 614 614 ! 615 615 CASE( 1 ) ! k-eps 616 DO_3D _00_00(1, jpkm1 )616 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 617 617 eps(ji,jj,jk) = psi(ji,jj,jk) 618 618 END_3D 619 619 ! 620 620 CASE( 2 ) ! k-w 621 DO_3D _00_00(1, jpkm1 )621 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 622 622 eps(ji,jj,jk) = rc04 * en(ji,jj,jk) * psi(ji,jj,jk) 623 623 END_3D … … 627 627 zex1 = ( 1.5_wp + rmm/rnn ) 628 628 zex2 = -1._wp / rnn 629 DO_3D _00_00(1, jpkm1 )629 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 630 630 eps(ji,jj,jk) = zcoef * en(ji,jj,jk)**zex1 * psi(ji,jj,jk)**zex2 631 631 END_3D … … 635 635 ! Limit dissipation rate under stable stratification 636 636 ! -------------------------------------------------- 637 DO_3D _00_00(1, jpkm1 )637 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 638 638 ! limitation 639 639 eps (ji,jj,jk) = MAX( eps(ji,jj,jk), rn_epsmin ) … … 651 651 ! 652 652 CASE ( 0 , 1 ) ! Galperin or Kantha-Clayson stability functions 653 DO_3D _00_00(2, jpkm1 )653 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 654 654 ! zcof = l²/q² 655 655 zcof = hmxl_b(ji,jj,jk) * hmxl_b(ji,jj,jk) / ( 2._wp*eb(ji,jj,jk) ) … … 668 668 ! 669 669 CASE ( 2, 3 ) ! Canuto stability functions 670 DO_3D _00_00(2, jpkm1 )670 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 671 671 ! zcof = l²/q² 672 672 zcof = hmxl_b(ji,jj,jk)*hmxl_b(ji,jj,jk) / ( 2._wp * eb(ji,jj,jk) ) … … 700 700 ! default value, in case jpk > mbkt(ji,jj)+1. Not needed but avoid a bug when looking for undefined values (-fpe0) 701 701 zstm(:,:,jpk) = 0. 702 DO_2D _00_00702 DO_2D( 0, 0, 0, 0 ) 703 703 zstm(ji,jj,mbkt(ji,jj)+1) = zstm(ji,jj,mbkt(ji,jj)) 704 704 END_2D … … 715 715 ! later overwritten by surface/bottom boundaries conditions, so we don't really care of p_avm(:,:1) and p_avm(:,:jpk) 716 716 ! for zd_lw and zd_up but they have to be defined to avoid a bug when looking for undefined values (-fpe0) 717 DO_3D _00_00(1, jpk )717 DO_3D( 0, 0, 0, 0, 1, jpk ) 718 718 zsqen = SQRT( 2._wp * en(ji,jj,jk) ) * hmxl_n(ji,jj,jk) 719 719 zavt = zsqen * zstt(ji,jj,jk) -
NEMO/trunk/src/OCE/ZDF/zdfiwm.F90
r13286 r13295 143 143 ! Set to zero the 1st and last vertical levels of appropriate variables 144 144 IF( iom_use("emix_iwm") ) THEN 145 DO_2D _00_00145 DO_2D( 0, 0, 0, 0 ) 146 146 zemx_iwm (ji,jj,1) = 0._wp ; zemx_iwm (ji,jj,jpk) = 0._wp 147 147 END_2D … … 150 150 ENDIF 151 151 IF( iom_use("av_ratio") ) THEN 152 DO_2D _00_00152 DO_2D( 0, 0, 0, 0 ) 153 153 zav_ratio(ji,jj,1) = 0._wp ; zav_ratio(ji,jj,jpk) = 0._wp 154 154 END_2D … … 157 157 ENDIF 158 158 IF( iom_use("av_wave") ) THEN 159 DO_2D _00_00159 DO_2D( 0, 0, 0, 0 ) 160 160 zav_wave (ji,jj,1) = 0._wp ; zav_wave (ji,jj,jpk) = 0._wp 161 161 END_2D … … 170 170 ! !* Critical slope mixing: distribute energy over the time-varying ocean depth, 171 171 ! using an exponential decay from the seafloor. 172 DO_2D _00_00172 DO_2D( 0, 0, 0, 0 ) 173 173 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean 174 174 zfact(ji,jj) = rho0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) ) … … 176 176 END_2D 177 177 !!gm gde3w ==>>> check for ssh taken into account.... seem OK gde3w_n=gdept(:,:,:,Kmm) - ssh(:,:,Kmm) 178 DO_3D _00_00(2, jpkm1 )178 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 179 179 IF ( zfact(ji,jj) == 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization 180 180 zemx_iwm(ji,jj,jk) = 0._wp … … 196 196 CASE ( 1 ) ! Dissipation scales as N (recommended) 197 197 ! 198 DO_2D _00_00198 DO_2D( 0, 0, 0, 0 ) 199 199 zfact(ji,jj) = 0._wp 200 200 END_2D 201 DO_3D _00_00(2, jpkm1 ) ! part independent of the level201 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level 202 202 zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 203 203 END_3D 204 204 ! 205 DO_2D _00_00205 DO_2D( 0, 0, 0, 0 ) 206 206 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 207 207 END_2D 208 208 ! 209 DO_3D _00_00(2, jpkm1 ) ! complete with the level-dependent part209 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part 210 210 zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zfact(ji,jj) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 211 211 END_3D … … 213 213 CASE ( 2 ) ! Dissipation scales as N^2 214 214 ! 215 DO_2D _00_00215 DO_2D( 0, 0, 0, 0 ) 216 216 zfact(ji,jj) = 0._wp 217 217 END_2D 218 DO_3D _00_00(2, jpkm1 ) ! part independent of the level218 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level 219 219 zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 220 220 END_3D 221 221 ! 222 DO_2D _00_00222 DO_2D( 0, 0, 0, 0 ) 223 223 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 224 224 END_2D 225 225 ! 226 DO_3D _00_00(2, jpkm1 ) ! complete with the level-dependent part226 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part 227 227 zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zfact(ji,jj) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 228 228 END_3D … … 233 233 ! !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 234 234 ! 235 DO_2D _00_00235 DO_2D( 0, 0, 0, 0 ) 236 236 zwkb(ji,jj,1) = 0._wp 237 237 END_2D 238 DO_3D _00_00(2, jpkm1 )238 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 239 239 zwkb(ji,jj,jk) = zwkb(ji,jj,jk-1) + e3w(ji,jj,jk,Kmm) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 240 240 END_3D 241 DO_2D _00_00241 DO_2D( 0, 0, 0, 0 ) 242 242 zfact(ji,jj) = zwkb(ji,jj,jpkm1) 243 243 END_2D 244 244 ! 245 DO_3D _00_00(2, jpkm1 )245 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 246 246 IF( zfact(ji,jj) /= 0 ) zwkb(ji,jj,jk) = zhdep(ji,jj) * ( zfact(ji,jj) - zwkb(ji,jj,jk) ) & 247 247 & * wmask(ji,jj,jk) / zfact(ji,jj) 248 248 END_3D 249 DO_2D _00_00249 DO_2D( 0, 0, 0, 0 ) 250 250 zwkb (ji,jj,1) = zhdep(ji,jj) * wmask(ji,jj,1) 251 251 END_2D 252 252 ! 253 DO_3D _00_00(2, jpkm1 )253 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 254 254 IF ( rn2(ji,jj,jk) <= 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization: EXP coast a lot 255 255 zweight(ji,jj,jk) = 0._wp … … 260 260 END_3D 261 261 ! 262 DO_2D _00_00262 DO_2D( 0, 0, 0, 0 ) 263 263 zfact(ji,jj) = 0._wp 264 264 END_2D 265 DO_3D _00_00(2, jpkm1 ) ! part independent of the level265 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level 266 266 zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 267 267 END_3D 268 268 ! 269 DO_2D _00_00269 DO_2D( 0, 0, 0, 0 ) 270 270 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 271 271 END_2D 272 272 ! 273 DO_3D _00_00(2, jpkm1 ) ! complete with the level-dependent part273 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part 274 274 zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zweight(ji,jj,jk) * zfact(ji,jj) * wmask(ji,jj,jk) & 275 275 & / ( gde3w(ji,jj,jk) - gde3w(ji,jj,jk-1) ) … … 279 279 !!gm this is to be replaced by just a constant value znu=1.e-6 m2/s 280 280 ! Calculate molecular kinematic viscosity 281 DO_3D _00_00(1, jpkm1 )281 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 282 282 znu_t(ji,jj,jk) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts(ji,jj,jk,jp_tem,Kmm) & 283 283 & + 0.00694_wp * ts(ji,jj,jk,jp_tem,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) & 284 284 & + 0.02305_wp * ts(ji,jj,jk,jp_sal,Kmm) ) * tmask(ji,jj,jk) * r1_rho0 285 285 END_3D 286 DO_3D _00_00(2, jpkm1 )286 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 287 287 znu_w(ji,jj,jk) = 0.5_wp * ( znu_t(ji,jj,jk-1) + znu_t(ji,jj,jk) ) * wmask(ji,jj,jk) 288 288 END_3D … … 290 290 ! 291 291 ! Calculate turbulence intensity parameter Reb 292 DO_3D _00_00(2, jpkm1 )292 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 293 293 zReb(ji,jj,jk) = zemx_iwm(ji,jj,jk) / MAX( 1.e-20_wp, znu_w(ji,jj,jk) * rn2(ji,jj,jk) ) 294 294 END_3D 295 295 ! 296 296 ! Define internal wave-induced diffusivity 297 DO_3D _00_00(2, jpkm1 )297 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 298 298 zav_wave(ji,jj,jk) = znu_w(ji,jj,jk) * zReb(ji,jj,jk) * r1_6 ! This corresponds to a constant mixing efficiency of 1/6 299 299 END_3D 300 300 ! 301 301 IF( ln_mevar ) THEN ! Variable mixing efficiency case : modify zav_wave in the 302 DO_3D _00_00(2, jpkm1 )302 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 303 303 IF( zReb(ji,jj,jk) > 480.00_wp ) THEN 304 304 zav_wave(ji,jj,jk) = 3.6515_wp * znu_w(ji,jj,jk) * SQRT( zReb(ji,jj,jk) ) … … 309 309 ENDIF 310 310 ! 311 DO_3D _00_00(2, jpkm1 ) ! Bound diffusivity by molecular value and 100 cm2/s311 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! Bound diffusivity by molecular value and 100 cm2/s 312 312 zav_wave(ji,jj,jk) = MIN( MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp ) * wmask(ji,jj,jk) 313 313 END_3D … … 316 316 zztmp = 0._wp 317 317 !!gm used of glosum 3D.... 318 DO_3D _00_00(2, jpkm1 )318 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 319 319 zztmp = zztmp + e3w(ji,jj,jk,Kmm) * e1e2t(ji,jj) & 320 320 & * MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) … … 338 338 IF( ln_tsdiff ) THEN !* Option for differential mixing of salinity and temperature 339 339 ztmp1 = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10( 1.e-20_wp ) - 0.60_wp ) ) 340 DO_3D _00_00(2, jpkm1 )340 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 341 341 ztmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 342 342 IF ( ztmp2 > 1.e-20_wp .AND. wmask(ji,jj,jk) == 1._wp ) THEN … … 347 347 END_3D 348 348 CALL iom_put( "av_ratio", zav_ratio ) 349 DO_3D _00_00(2, jpkm1 ) !* update momentum & tracer diffusivity with wave-driven mixing349 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !* update momentum & tracer diffusivity with wave-driven mixing 350 350 p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) * zav_ratio(ji,jj,jk) 351 351 p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zav_wave(ji,jj,jk) … … 354 354 ! 355 355 ELSE !* update momentum & tracer diffusivity with wave-driven mixing 356 DO_3D _00_00(2, jpkm1 )356 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 357 357 p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) 358 358 p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zav_wave(ji,jj,jk) … … 369 369 ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) 370 370 ! Initialisation for iom_put 371 DO_2D _00_00371 DO_2D( 0, 0, 0, 0 ) 372 372 z3d(ji,jj,1) = 0._wp ; z3d(ji,jj,jpk) = 0._wp 373 373 END_2D … … 377 377 z2d(jpi-nn_hls+1:jpi ,: ) = 0._wp ; z2d(:,jpj-nn_hls+1: jpj ) = 0._wp 378 378 379 DO_3D _00_00(2, jpkm1 )379 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 380 380 z3d(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) 381 381 END_3D 382 DO_2D _00_00382 DO_2D( 0, 0, 0, 0 ) 383 383 z2d(ji,jj) = 0._wp 384 384 END_2D 385 DO_3D _00_00(2, jpkm1 )385 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 386 386 z2d(ji,jj) = z2d(ji,jj) + e3w(ji,jj,jk,Kmm) * z3d(ji,jj,jk) * wmask(ji,jj,jk) 387 387 END_3D 388 DO_2D _00_00388 DO_2D( 0, 0, 0, 0 ) 389 389 z2d(ji,jj) = rho0 * z2d(ji,jj) 390 390 END_2D -
NEMO/trunk/src/OCE/ZDF/zdfmxl.F90
r13237 r13295 99 99 hmlp(:,:) = 0._wp ! here hmlp used as a dummy variable, integrating vertically N^2 100 100 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 101 DO_3D _11_11(nlb10, jpkm1 )101 DO_3D( 1, 1, 1, 1, nlb10, jpkm1 ) 102 102 ikt = mbkt(ji,jj) 103 103 hmlp(ji,jj) = & … … 108 108 ! w-level of the turbocline and mixing layer (iom_use) 109 109 imld(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point 110 DO_3DS _11_11(jpkm1, nlb10, -1 )110 DO_3DS( 1, 1, 1, 1, jpkm1, nlb10, -1 ) 111 111 IF( avt (ji,jj,jk) < avt_c * wmask(ji,jj,jk) ) imld(ji,jj) = jk ! Turbocline 112 112 END_3D 113 113 ! depth of the mixing and mixed layers 114 DO_2D _11_11114 DO_2D( 1, 1, 1, 1 ) 115 115 iiki = imld(ji,jj) 116 116 iikn = nmln(ji,jj) -
NEMO/trunk/src/OCE/ZDF/zdfosm.F90
r13286 r13295 300 300 zz0 = rn_abs ! surface equi-partition in 2-bands 301 301 zz1 = 1. - rn_abs 302 DO_2D _00_00302 DO_2D( 0, 0, 0, 0 ) 303 303 ! Surface downward irradiance (so always +ve) 304 304 zrad0(ji,jj) = qsr(ji,jj) * r1_rho0_rcp … … 310 310 END_2D 311 311 ! Turbulent surface fluxes and fluxes averaged over depth of the OSBL 312 DO_2D _00_00312 DO_2D( 0, 0, 0, 0 ) 313 313 zthermal = rab_n(ji,jj,1,jp_tem) 314 314 zbeta = rab_n(ji,jj,1,jp_sal) … … 337 337 ! Assume constant La#=0.3 338 338 CASE(0) 339 DO_2D _00_00339 DO_2D( 0, 0, 0, 0 ) 340 340 zus_x = zcos_wind(ji,jj) * zustar(ji,jj) / 0.3**2 341 341 zus_y = zsin_wind(ji,jj) * zustar(ji,jj) / 0.3**2 … … 345 345 ! Assume Pierson-Moskovitz wind-wave spectrum 346 346 CASE(1) 347 DO_2D _00_00347 DO_2D( 0, 0, 0, 0 ) 348 348 ! Use wind speed wndm included in sbc_oce module 349 349 zustke(ji,jj) = MAX ( 0.016 * wndm(ji,jj), 1.0e-8 ) … … 353 353 CASE(2) 354 354 zfac = 2.0_wp * rpi / 16.0_wp 355 DO_2D _00_00355 DO_2D( 0, 0, 0, 0 ) 356 356 ! The Langmur number from the ECMWF model appears to give La<0.3 for wind-driven seas. 357 357 ! The coefficient 0.8 gives La=0.3 in this situation. … … 366 366 ! Langmuir velocity scale (zwstrl), La # (zla) 367 367 ! mixed scale (zvstr), convective velocity scale (zwstrc) 368 DO_2D _00_00368 DO_2D( 0, 0, 0, 0 ) 369 369 ! Langmuir velocity scale (zwstrl), at T-point 370 370 zwstrl(ji,jj) = ( zustar(ji,jj) * zustar(ji,jj) * zustke(ji,jj) )**pthird … … 402 402 hbl(:,:) = MAX(hbl(:,:), gdepw(:,:,3,Kmm) ) 403 403 ibld(:,:) = 3 404 DO_3D _00_00(4, jpkm1 )404 DO_3D( 0, 0, 0, 0, 4, jpkm1 ) 405 405 IF ( hbl(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) THEN 406 406 ibld(ji,jj) = MIN(mbkt(ji,jj), jk) … … 408 408 END_3D 409 409 410 DO_2D _00_00410 DO_2D( 0, 0, 0, 0 ) 411 411 zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 412 412 zbeta = rab_n(ji,jj,1,jp_sal) … … 478 478 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_Dt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 479 479 480 DO_3D _00_00(4, jpkm1 )480 DO_3D( 0, 0, 0, 0, 4, jpkm1 ) 481 481 IF ( zhbl_t(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) THEN 482 482 ibld(ji,jj) = MIN(mbkt(ji,jj), jk) … … 487 487 ! Step through model levels taking account of buoyancy change to determine the effect on dhdt 488 488 ! 489 DO_2D _00_00489 DO_2D( 0, 0, 0, 0 ) 490 490 IF ( ibld(ji,jj) - imld(ji,jj) > 1 ) THEN 491 491 ! … … 552 552 ! Consider later combining this into the loop above and looking for columns 553 553 ! where the index for base of the boundary layer have changed 554 DO_2D _00_00554 DO_2D( 0, 0, 0, 0 ) 555 555 zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 556 556 zbeta = rab_n(ji,jj,1,jp_sal) … … 635 635 ! Average over the depth of the mixed layer in the convective boundary layer 636 636 ! Also calculate entrainment fluxes for temperature and salinity 637 DO_2D _00_00637 DO_2D( 0, 0, 0, 0 ) 638 638 zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 639 639 zbeta = rab_n(ji,jj,1,jp_sal) … … 705 705 ! 706 706 707 DO_2D _00_00707 DO_2D( 0, 0, 0, 0 ) 708 708 ztemp = zu_ml(ji,jj) 709 709 zu_ml(ji,jj) = zu_ml(ji,jj) * zcos_wind(ji,jj) + zv_ml(ji,jj) * zsin_wind(ji,jj) … … 723 723 zuw_bse = 0._wp 724 724 zvw_bse = 0._wp 725 DO_2D _00_00725 DO_2D( 0, 0, 0, 0 ) 726 726 727 727 IF ( lconv(ji,jj) ) THEN … … 740 740 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 741 741 742 DO_2D _00_00742 DO_2D( 0, 0, 0, 0 ) 743 743 ! 744 744 IF ( lconv (ji,jj) ) THEN … … 788 788 END_2D 789 789 ! 790 DO_2D _00_00790 DO_2D( 0, 0, 0, 0 ) 791 791 ! 792 792 IF ( lconv (ji,jj) ) THEN … … 832 832 ! zvisml_sc = zwstrl * zhbl * EXP ( -( zhol / 0.183_wp )**2 ) 833 833 ! ENDWHERE 834 DO_2D _00_00834 DO_2D( 0, 0, 0, 0 ) 835 835 IF ( lconv(ji,jj) ) THEN 836 836 zdifml_sc(ji,jj) = zhml(ji,jj) * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird … … 846 846 END_2D 847 847 ! 848 DO_2D _00_00848 DO_2D( 0, 0, 0, 0 ) 849 849 IF ( lconv(ji,jj) ) THEN 850 850 DO jk = 2, imld(ji,jj) ! mixed layer diffusivity … … 896 896 897 897 898 DO_2D _00_00898 DO_2D( 0, 0, 0, 0 ) 899 899 IF ( lconv(ji,jj) ) THEN 900 900 DO jk = 2, imld(ji,jj) … … 929 929 ENDWHERE 930 930 931 DO_2D _00_00931 DO_2D( 0, 0, 0, 0 ) 932 932 IF ( lconv(ji,jj) ) THEN 933 933 DO jk = 2, imld(ji,jj) … … 961 961 ENDWHERE 962 962 963 DO_2D _00_00963 DO_2D( 0, 0, 0, 0 ) 964 964 IF (lconv(ji,jj) ) THEN 965 965 DO jk = 2, imld(ji,jj) … … 993 993 ENDWHERE 994 994 995 DO_2D _00_00995 DO_2D( 0, 0, 0, 0 ) 996 996 IF ( lconv(ji,jj) ) THEN 997 997 DO jk = 2 , imld(ji,jj) … … 1021 1021 ENDWHERE 1022 1022 1023 DO_2D _00_001023 DO_2D( 0, 0, 0, 0 ) 1024 1024 IF ( lconv(ji,jj) ) THEN 1025 1025 DO jk = 2, imld(ji,jj) … … 1058 1058 ENDWHERE 1059 1059 1060 DO_2D _00_001060 DO_2D( 0, 0, 0, 0 ) 1061 1061 IF ( lconv(ji,jj) ) THEN 1062 1062 DO jk = 2, imld(ji,jj) … … 1093 1093 ! Make surface forced velocity non-gradient terms go to zero at the base of the mixed layer. 1094 1094 1095 DO_2D _00_001095 DO_2D( 0, 0, 0, 0 ) 1096 1096 IF ( lconv(ji,jj) ) THEN 1097 1097 DO jk = 2, ibld(ji,jj) … … 1122 1122 ! Temporary fix to avoid instabilities when zdb_bl becomes very very small 1123 1123 zsc_uw_1 = 0._wp ! 50.0 * zla**(8.0/3.0) * zustar**2 * zhbl / ( zdb_bl + epsln ) 1124 DO_2D _00_001124 DO_2D( 0, 0, 0, 0 ) 1125 1125 DO jk= 2, ibld(ji,jj) 1126 1126 znd = gdepw(ji,jj,jk,Kmm) / zhbl(ji,jj) … … 1135 1135 ! Entrainment contribution. 1136 1136 1137 DO_2D _00_001137 DO_2D( 0, 0, 0, 0 ) 1138 1138 IF ( lconv(ji,jj) ) THEN 1139 1139 DO jk = 1, imld(ji,jj) - 1 … … 1170 1170 ! rotate non-gradient velocity terms back to model reference frame 1171 1171 1172 DO_2D _00_001172 DO_2D( 0, 0, 0, 0 ) 1173 1173 DO jk = 2, ibld(ji,jj) 1174 1174 ztemp = ghamu(ji,jj,jk) … … 1184 1184 ! KPP-style Ri# mixing 1185 1185 IF( ln_kpprimix) THEN 1186 DO_3D _10_10(2, jpkm1 )1186 DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 1187 1187 z3du(ji,jj,jk) = 0.5 * ( uu(ji,jj,jk-1,Kmm) - uu(ji ,jj,jk,Kmm) ) & 1188 1188 & * ( uu(ji,jj,jk-1,Kbb) - uu(ji ,jj,jk,Kbb) ) * wumask(ji,jj,jk) & … … 1193 1193 END_3D 1194 1194 ! 1195 DO_3D _00_00(2, jpkm1 )1195 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 1196 1196 ! ! shear prod. at w-point weightened by mask 1197 1197 zesh2 = ( z3du(ji-1,jj,jk) + z3du(ji,jj,jk) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) ) & … … 1204 1204 END_3D 1205 1205 1206 DO_2D _00_001206 DO_2D( 0, 0, 0, 0 ) 1207 1207 DO jk = ibld(ji,jj) + 1, jpkm1 1208 1208 zdiffut(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri … … 1215 1215 ! KPP-style set diffusivity large if unstable below BL 1216 1216 IF( ln_convmix) THEN 1217 DO_2D _00_001217 DO_2D( 0, 0, 0, 0 ) 1218 1218 DO jk = ibld(ji,jj) + 1, jpkm1 1219 1219 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) zdiffut(ji,jj,jk) = rn_difconv … … 1227 1227 ! GN 25/8: need to change tmask --> wmask 1228 1228 1229 DO_3D _00_00(2, jpkm1 )1229 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 1230 1230 p_avt(ji,jj,jk) = MAX( zdiffut(ji,jj,jk), avtb(jk) ) * tmask(ji,jj,jk) 1231 1231 p_avm(ji,jj,jk) = MAX( zviscos(ji,jj,jk), avmb(jk) ) * tmask(ji,jj,jk) … … 1234 1234 CALL lbc_lnk_multi( 'zdfosm', p_avt, 'W', 1.0_wp , p_avm, 'W', 1.0_wp, & 1235 1235 & ghamu, 'W', 1.0_wp , ghamv, 'W', 1.0_wp ) 1236 DO_3D _00_00(2, jpkm1 )1236 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 1237 1237 ghamu(ji,jj,jk) = ( ghamu(ji,jj,jk) + ghamu(ji+1,jj,jk) ) & 1238 1238 & / MAX( 1., tmask(ji,jj,jk) + tmask (ji + 1,jj,jk) ) * umask(ji,jj,jk) … … 1395 1395 etmean(:,:,:) = 0.e0 1396 1396 1397 DO_3D _00_00(1, jpkm1 )1397 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 1398 1398 etmean(ji,jj,jk) = tmask(ji,jj,jk) & 1399 1399 & / MAX( 1., umask(ji-1,jj ,jk) + umask(ji,jj,jk) & … … 1409 1409 etmean(:,:,:) = 0.e0 1410 1410 1411 DO_3D _00_00(1, jpkm1 )1411 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 1412 1412 etmean(ji,jj,jk) = tmask(ji, jj,jk) & 1413 1413 & / MAX( 1., 2.* tmask(ji,jj,jk) & … … 1516 1516 ! 1517 1517 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 1518 DO_3D _11_11(1, jpkm1 )1518 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 1519 1519 ikt = mbkt(ji,jj) 1520 1520 hbl(ji,jj) = hbl(ji,jj) + MAX( rn2(ji,jj,jk) , 0._wp ) * e3w(ji,jj,jk,Kmm) … … 1522 1522 END_3D 1523 1523 ! 1524 DO_2D _11_111524 DO_2D( 1, 1, 1, 1 ) 1525 1525 iiki = imld_rst(ji,jj) 1526 1526 hbl (ji,jj) = gdepw(ji,jj,iiki ,Kmm) * ssmask(ji,jj) ! Turbocline depth … … 1561 1561 1562 1562 ! add non-local temperature and salinity flux 1563 DO_3D _00_00(1, jpkm1 )1563 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 1564 1564 pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs) & 1565 1565 & - ( ghamt(ji,jj,jk ) & … … 1629 1629 !code saving tracer trends removed, replace with trdmxl_oce 1630 1630 1631 DO_3D _00_00(1, jpkm1 )1631 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 1632 1632 puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) & 1633 1633 & - ( ghamu(ji,jj,jk ) & -
NEMO/trunk/src/OCE/ZDF/zdfric.F90
r13286 r13295 160 160 ! 161 161 ! !== avm and avt = F(Richardson number) ==! 162 DO_3D _10_10(2, jpkm1 )162 DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 163 163 zcfRi = 1._wp / ( 1._wp + rn_alp * MAX( 0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) ) ) 164 164 zav = rn_avmri * zcfRi**nn_ric … … 173 173 IF( ln_mldw ) THEN !== set a minimum value in the Ekman layer ==! 174 174 ! 175 DO_2D _00_00175 DO_2D( 0, 0, 0, 0 ) 176 176 zustar = SQRT( taum(ji,jj) * r1_rho0 ) 177 177 zhek = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall ) ! Ekman depth 178 178 zh_ekm(ji,jj) = MAX( rn_mldmin , MIN( zhek , rn_mldmax ) ) ! set allowed range 179 179 END_2D 180 DO_3D _00_00(2, jpkm1 )180 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 181 181 IF( gdept(ji,jj,jk,Kmm) < zh_ekm(ji,jj) ) THEN 182 182 p_avm(ji,jj,jk) = MAX( p_avm(ji,jj,jk), rn_wvmix ) * wmask(ji,jj,jk) -
NEMO/trunk/src/OCE/ZDF/zdfsh2.F90
r13237 r13295 60 60 ! 61 61 DO jk = 2, jpkm1 62 DO_2D _10_1062 DO_2D( 1, 0, 1, 0 ) 63 63 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 64 64 & * ( uu(ji,jj,jk-1,Kmm) - uu(ji,jj,jk,Kmm) ) & … … 72 72 & * wvmask(ji,jj,jk) 73 73 END_2D 74 DO_2D _00_0074 DO_2D( 0, 0, 0, 0 ) 75 75 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 76 76 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) -
NEMO/trunk/src/OCE/ZDF/zdfswm.F90
r12377 r13295 63 63 ! 64 64 zcoef = 1._wp * 0.353553_wp 65 DO_3D _00_00(2, jpkm1 )65 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 66 66 zqb = zcoef * hsw(ji,jj) * tsd2d(ji,jj) * EXP( -3. * wnum(ji,jj) * gdepw(ji,jj,jk,Kmm) ) * wmask(ji,jj,jk) 67 67 ! -
NEMO/trunk/src/OCE/ZDF/zdftke.F90
r13286 r13295 224 224 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 225 225 ! 226 DO_2D _00_00226 DO_2D( 0, 0, 0, 0 ) 227 227 en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 228 228 END_2D … … 238 238 IF( ln_drg ) THEN !== friction used as top/bottom boundary condition on TKE 239 239 ! 240 DO_2D _00_00240 DO_2D( 0, 0, 0, 0 ) 241 241 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 242 242 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) … … 247 247 END_2D 248 248 IF( ln_isfcav ) THEN ! top friction 249 DO_2D _00_00249 DO_2D( 0, 0, 0, 0 ) 250 250 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 251 251 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) … … 274 274 zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 275 275 imlc(:,:) = mbkt(:,:) + 1 ! Initialization to the number of w ocean point (=2 over land) 276 DO_3DS _11_11(jpkm1, 2, -1 )276 DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 ) 277 277 zus = zcof * taum(ji,jj) 278 278 IF( zpelc(ji,jj,jk) > zus ) imlc(ji,jj) = jk 279 279 END_3D 280 280 ! ! finite LC depth 281 DO_2D _11_11281 DO_2D( 1, 1, 1, 1 ) 282 282 zhlc(ji,jj) = gdepw(ji,jj,imlc(ji,jj),Kmm) 283 283 END_2D 284 284 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 285 DO_2D _00_00285 DO_2D( 0, 0, 0, 0 ) 286 286 zus = zcof * SQRT( taum(ji,jj) ) ! Stokes drift 287 287 zfr_i(ji,jj) = ( 1._wp - 4._wp * fr_i(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 288 288 IF (zfr_i(ji,jj) < 0. ) zfr_i(ji,jj) = 0. 289 289 END_2D 290 DO_3D _00_00(2, jpkm1 )290 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 291 291 IF ( zfr_i(ji,jj) /= 0. ) THEN 292 292 ! vertical velocity due to LC … … 310 310 ! 311 311 IF( nn_pdl == 1 ) THEN !* Prandtl number = F( Ri ) 312 DO_3D _00_00(2, jpkm1 )312 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 313 313 ! ! local Richardson number 314 314 IF (rn2b(ji,jj,jk) <= 0.0_wp) then … … 322 322 ENDIF 323 323 ! 324 DO_3D _00_00(2, jpkm1 )324 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 325 325 zcof = zfact1 * tmask(ji,jj,jk) 326 326 ! ! A minimum of 2.e-5 m2/s is imposed on TKE vertical … … 344 344 END_3D 345 345 ! !* Matrix inversion from level 2 (tke prescribed at level 1) 346 DO_3D _00_00(3, jpkm1 )346 DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 347 347 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 348 348 END_3D 349 DO_2D _00_00349 DO_2D( 0, 0, 0, 0 ) 350 350 zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke 351 351 END_2D 352 DO_3D _00_00(3, jpkm1 )352 DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 353 353 zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 354 354 END_3D 355 DO_2D _00_00355 DO_2D( 0, 0, 0, 0 ) 356 356 en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 357 357 END_2D 358 DO_3DS _00_00(jpk-2, 2, -1 )358 DO_3DS( 0, 0, 0, 0, jpk-2, 2, -1 ) 359 359 en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 360 360 END_3D 361 DO_3D _00_00(2, jpkm1 )361 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 362 362 en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 363 363 END_3D … … 371 371 372 372 IF( nn_etau == 1 ) THEN !* penetration below the mixed layer (rn_efr fraction) 373 DO_3D _00_00(2, jpkm1 )373 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 374 374 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) ) & 375 375 & * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 376 376 END_3D 377 377 ELSEIF( nn_etau == 2 ) THEN !* act only at the base of the mixed layer (jk=nmln) (rn_efr fraction) 378 DO_2D _00_00378 DO_2D( 0, 0, 0, 0 ) 379 379 jk = nmln(ji,jj) 380 380 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) ) & … … 382 382 END_2D 383 383 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 384 DO_3D _00_00(2, jpkm1 )384 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 385 385 ztx2 = utau(ji-1,jj ) + utau(ji,jj) 386 386 zty2 = vtau(ji ,jj-1) + vtau(ji,jj) … … 456 456 zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 457 457 #if ! defined key_si3 && ! defined key_cice 458 DO_2D _00_00458 DO_2D( 0, 0, 0, 0 ) 459 459 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 460 460 END_2D … … 463 463 ! 464 464 CASE( 0 ) ! No scaling under sea-ice 465 DO_2D _00_00465 DO_2D( 0, 0, 0, 0 ) 466 466 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 467 467 END_2D 468 468 ! 469 469 CASE( 1 ) ! scaling with constant sea-ice thickness 470 DO_2D _00_00470 DO_2D( 0, 0, 0, 0 ) 471 471 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * rn_mxlice ) * tmask(ji,jj,1) 472 472 END_2D 473 473 ! 474 474 CASE( 2 ) ! scaling with mean sea-ice thickness 475 DO_2D _00_00475 DO_2D( 0, 0, 0, 0 ) 476 476 #if defined key_si3 477 477 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * hm_i(ji,jj) * 2. ) * tmask(ji,jj,1) … … 483 483 ! 484 484 CASE( 3 ) ! scaling with max sea-ice thickness 485 DO_2D _00_00485 DO_2D( 0, 0, 0, 0 ) 486 486 zmaxice = MAXVAL( h_i(ji,jj,:) ) 487 487 zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) … … 491 491 #endif 492 492 ! 493 DO_2D _00_00493 DO_2D( 0, 0, 0, 0 ) 494 494 zmxlm(ji,jj,1) = MAX( rn_mxl0, zmxlm(ji,jj,1) ) 495 495 END_2D … … 500 500 501 501 ! 502 DO_3D _00_00(2, jpkm1 )502 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 503 503 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 504 504 zmxlm(ji,jj,jk) = MAX( rmxl_min, SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) ) … … 515 515 ! where wmask = 0 set zmxlm == e3w(:,:,:,Kmm) 516 516 CASE ( 0 ) ! bounded by the distance to surface and bottom 517 DO_3D _00_00(2, jpkm1 )517 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 518 518 zemxl = MIN( gdepw(ji,jj,jk,Kmm) - gdepw(ji,jj,mikt(ji,jj),Kmm), zmxlm(ji,jj,jk), & 519 519 & gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) - gdepw(ji,jj,jk,Kmm) ) … … 526 526 ! 527 527 CASE ( 1 ) ! bounded by the vertical scale factor 528 DO_3D _00_00(2, jpkm1 )528 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 529 529 zemxl = MIN( e3w(ji,jj,jk,Kmm), zmxlm(ji,jj,jk) ) 530 530 zmxlm(ji,jj,jk) = zemxl … … 533 533 ! 534 534 CASE ( 2 ) ! |dk[xml]| bounded by e3t : 535 DO_3D _00_00(2, jpkm1 )535 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 536 536 zmxlm(ji,jj,jk) = & 537 537 & MIN( zmxlm(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 538 538 END_3D 539 DO_3DS _00_00(jpkm1, 2, -1 )539 DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 540 540 zemxl = MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 541 541 zmxlm(ji,jj,jk) = zemxl … … 544 544 ! 545 545 CASE ( 3 ) ! lup and ldown, |dk[xml]| bounded by e3t : 546 DO_3D _00_00(2, jpkm1 )546 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 547 547 zmxld(ji,jj,jk) = & 548 548 & MIN( zmxld(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 549 549 END_3D 550 DO_3DS _00_00(jpkm1, 2, -1 )550 DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 551 551 zmxlm(ji,jj,jk) = & 552 552 & MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 553 553 END_3D 554 DO_3D _00_00(2, jpkm1 )554 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 555 555 zemlm = MIN ( zmxld(ji,jj,jk), zmxlm(ji,jj,jk) ) 556 556 zemlp = SQRT( zmxld(ji,jj,jk) * zmxlm(ji,jj,jk) ) … … 564 564 ! ! Vertical eddy viscosity and diffusivity (avm and avt) 565 565 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 566 DO_3D _00_00(1, jpkm1 )566 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 567 567 zsqen = SQRT( en(ji,jj,jk) ) 568 568 zav = rn_ediff * zmxlm(ji,jj,jk) * zsqen … … 574 574 ! 575 575 IF( nn_pdl == 1 ) THEN !* Prandtl number case: update avt 576 DO_3D _00_00(2, jpkm1 )576 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 577 577 p_avt(ji,jj,jk) = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * wmask(ji,jj,jk) 578 578 END_3D
Note: See TracChangeset
for help on using the changeset viewer.