Changeset 13295 for NEMO/trunk/src/OCE/LDF
- Timestamp:
- 2020-07-10T20:24:21+02:00 (4 years ago)
- Location:
- NEMO/trunk/src/OCE/LDF
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/LDF/ldfc1d_c2d.F90
r13226 r13295 80 80 pah1(:,:,jk) = pahs1(:,:) * ( zratio + zc * ( 1._wp + TANH( - ( gdept_0(:,:,jk) - zh ) * zw) ) ) 81 81 END DO 82 DO_3DS _10_10(jpkm1, 1, -1 )82 DO_3DS( 1, 0, 1, 0, jpkm1, 1, -1 ) 83 83 zdep2 = ( gdept_0(ji,jj+1,jk) + gdept_0(ji+1,jj+1,jk) & 84 84 & + gdept_0(ji,jj ,jk) + gdept_0(ji+1,jj ,jk) ) * r1_4 … … 88 88 ! 89 89 CASE( 'TRA' ) ! U- and V-points (zdep1 & 2 are an approximation in zps-coord.) 90 DO_3DS _10_10(jpkm1, 1, -1 )90 DO_3DS( 1, 0, 1, 0, jpkm1, 1, -1 ) 91 91 zdep1 = ( gdept_0(ji,jj,jk) + gdept_0(ji+1,jj,jk) ) * 0.5_wp 92 92 zdep2 = ( gdept_0(ji,jj,jk) + gdept_0(ji,jj+1,jk) ) * 0.5_wp … … 135 135 ! 136 136 CASE( 'DYN' ) ! T- and F-points 137 DO_2D _11_11137 DO_2D( 1, 1, 1, 1 ) 138 138 pah1(ji,jj,1) = pUfac * MAX( e1t(ji,jj) , e2t(ji,jj) )**knn 139 139 pah2(ji,jj,1) = pUfac * MAX( e1f(ji,jj) , e2f(ji,jj) )**knn 140 140 END_2D 141 141 CASE( 'TRA' ) ! U- and V-points 142 DO_2D _11_11142 DO_2D( 1, 1, 1, 1 ) 143 143 pah1(ji,jj,1) = pUfac * MAX( e1u(ji,jj), e2u(ji,jj) )**knn 144 144 pah2(ji,jj,1) = pUfac * MAX( e1v(ji,jj), e2v(ji,jj) )**knn -
NEMO/trunk/src/OCE/LDF/ldfdyn.F90
r13286 r13295 311 311 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'ldf_dyn_init: failed to allocate Smagorinsky arrays') 312 312 ! 313 DO_2D _11_11313 DO_2D( 1, 1, 1, 1 ) 314 314 esqt(ji,jj) = ( 2._wp * e1e2t(ji,jj) / ( e1t(ji,jj) + e2t(ji,jj) ) )**2 315 315 esqf(ji,jj) = ( 2._wp * e1e2f(ji,jj) / ( e1f(ji,jj) + e2f(ji,jj) ) )**2 … … 368 368 IF( ln_dynldf_lap ) THEN ! laplacian operator : |u| e /12 = |u/144| e 369 369 DO jk = 1, jpkm1 370 DO_2D _00_00370 DO_2D( 0, 0, 0, 0 ) 371 371 zu2pv2_ij = uu(ji ,jj ,jk,Kbb) * uu(ji ,jj ,jk,Kbb) + vv(ji ,jj ,jk,Kbb) * vv(ji ,jj ,jk,Kbb) 372 372 zu2pv2_ij_m1 = uu(ji-1,jj ,jk,Kbb) * uu(ji-1,jj ,jk,Kbb) + vv(ji ,jj-1,jk,Kbb) * vv(ji ,jj-1,jk,Kbb) … … 374 374 ahmt(ji,jj,jk) = SQRT( (zu2pv2_ij + zu2pv2_ij_m1) * r1_288 ) * zemax * tmask(ji,jj,jk) ! 288= 12*12 * 2 375 375 END_2D 376 DO_2D _10_10376 DO_2D( 1, 0, 1, 0 ) 377 377 zu2pv2_ij_p1 = uu(ji ,jj+1,jk, Kbb) * uu(ji ,jj+1,jk, Kbb) + vv(ji+1,jj ,jk, Kbb) * vv(ji+1,jj ,jk, Kbb) 378 378 zu2pv2_ij = uu(ji ,jj ,jk, Kbb) * uu(ji ,jj ,jk, Kbb) + vv(ji ,jj ,jk, Kbb) * vv(ji ,jj ,jk, Kbb) … … 383 383 ELSEIF( ln_dynldf_blp ) THEN ! bilaplacian operator : sqrt( |u| e^3 /12 ) = sqrt( |u/144| e ) * e 384 384 DO jk = 1, jpkm1 385 DO_2D _00_00385 DO_2D( 0, 0, 0, 0 ) 386 386 zu2pv2_ij = uu(ji ,jj ,jk,Kbb) * uu(ji ,jj ,jk,Kbb) + vv(ji ,jj ,jk,Kbb) * vv(ji ,jj ,jk,Kbb) 387 387 zu2pv2_ij_m1 = uu(ji-1,jj ,jk,Kbb) * uu(ji-1,jj ,jk,Kbb) + vv(ji ,jj-1,jk,Kbb) * vv(ji ,jj-1,jk,Kbb) … … 389 389 ahmt(ji,jj,jk) = SQRT( SQRT( (zu2pv2_ij + zu2pv2_ij_m1) * r1_288 ) * zemax ) * zemax * tmask(ji,jj,jk) 390 390 END_2D 391 DO_2D _10_10391 DO_2D( 1, 0, 1, 0 ) 392 392 zu2pv2_ij_p1 = uu(ji ,jj+1,jk, Kbb) * uu(ji ,jj+1,jk, Kbb) + vv(ji+1,jj ,jk, Kbb) * vv(ji+1,jj ,jk, Kbb) 393 393 zu2pv2_ij = uu(ji ,jj ,jk, Kbb) * uu(ji ,jj ,jk, Kbb) + vv(ji ,jj ,jk, Kbb) * vv(ji ,jj ,jk, Kbb) … … 412 412 DO jk = 1, jpkm1 413 413 ! 414 DO_2D _00_00414 DO_2D( 0, 0, 0, 0 ) 415 415 zdb = ( uu(ji,jj,jk,Kbb) * r1_e2u(ji,jj) - uu(ji-1,jj,jk,Kbb) * r1_e2u(ji-1,jj) ) & 416 416 & * r1_e1t(ji,jj) * e2t(ji,jj) & … … 420 420 END_2D 421 421 ! 422 DO_2D _10_10422 DO_2D( 1, 0, 1, 0 ) 423 423 zdb = ( uu(ji,jj+1,jk,Kbb) * r1_e1u(ji,jj+1) - uu(ji,jj,jk,Kbb) * r1_e1u(ji,jj) ) & 424 424 & * r1_e2f(ji,jj) * e1f(ji,jj) & … … 434 434 DO jk = 1, jpkm1 435 435 ! 436 DO_2D _00_00436 DO_2D( 0, 0, 0, 0 ) 437 437 ! 438 438 zu2pv2_ij = uu(ji ,jj ,jk,Kbb) * uu(ji ,jj ,jk,Kbb) + vv(ji ,jj ,jk,Kbb) * vv(ji ,jj ,jk,Kbb) … … 448 448 END_2D 449 449 ! 450 DO_2D _10_10450 DO_2D( 1, 0, 1, 0 ) 451 451 ! 452 452 zu2pv2_ij_p1 = uu(ji ,jj+1,jk, kbb) * uu(ji ,jj+1,jk, kbb) + vv(ji+1,jj ,jk, kbb) * vv(ji+1,jj ,jk, kbb) … … 471 471 ! ! effective default limits are 1/12 |U|L^3 < B_hm < 1//(32*2dt) L^4 472 472 DO jk = 1, jpkm1 473 DO_2D _00_00473 DO_2D( 0, 0, 0, 0 ) 474 474 ahmt(ji,jj,jk) = SQRT( r1_8 * esqt(ji,jj) * ahmt(ji,jj,jk) ) 475 475 END_2D 476 DO_2D _10_10476 DO_2D( 1, 0, 1, 0 ) 477 477 ahmf(ji,jj,jk) = SQRT( r1_8 * esqf(ji,jj) * ahmf(ji,jj,jk) ) 478 478 END_2D -
NEMO/trunk/src/OCE/LDF/ldfslp.F90
r13237 r13295 137 137 zwz(:,:,:) = 0._wp 138 138 ! 139 DO_3D _10_10(1, jpk )139 DO_3D( 1, 0, 1, 0, 1, jpk ) 140 140 zgru(ji,jj,jk) = umask(ji,jj,jk) * ( prd(ji+1,jj ,jk) - prd(ji,jj,jk) ) 141 141 zgrv(ji,jj,jk) = vmask(ji,jj,jk) * ( prd(ji ,jj+1,jk) - prd(ji,jj,jk) ) 142 142 END_3D 143 143 IF( ln_zps ) THEN ! partial steps correction at the bottom ocean level 144 DO_2D _10_10144 DO_2D( 1, 0, 1, 0 ) 145 145 zgru(ji,jj,mbku(ji,jj)) = gru(ji,jj) 146 146 zgrv(ji,jj,mbkv(ji,jj)) = grv(ji,jj) … … 148 148 ENDIF 149 149 IF( ln_zps .AND. ln_isfcav ) THEN ! partial steps correction at the bottom ocean level 150 DO_2D _10_10150 DO_2D( 1, 0, 1, 0 ) 151 151 IF( miku(ji,jj) > 1 ) zgru(ji,jj,miku(ji,jj)) = grui(ji,jj) 152 152 IF( mikv(ji,jj) > 1 ) zgrv(ji,jj,mikv(ji,jj)) = grvi(ji,jj) … … 173 173 ! 174 174 IF ( ln_isfcav ) THEN 175 DO_2D _00_00175 DO_2D( 0, 0, 0, 0 ) 176 176 zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt (ji,jj), hmlpt (ji+1,jj ), 5._wp) & 177 177 & - MAX(risfdep(ji,jj), risfdep(ji+1,jj ) ) ) … … 180 180 END_2D 181 181 ELSE 182 DO_2D _00_00182 DO_2D( 0, 0, 0, 0 ) 183 183 zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) 184 184 zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) … … 186 186 END IF 187 187 188 DO_3D _00_00(2, jpkm1 )188 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 189 189 ! ! horizontal and vertical density gradient at u- and v-points 190 190 zau = zgru(ji,jj,jk) * r1_e1u(ji,jj) … … 233 233 ! !* horizontal Shapiro filter 234 234 DO jk = 2, jpkm1 235 DO_2D _00_00235 DO_2D( 0, 0, 0, 0 ) 236 236 uslp(ji,jj,jk) = z1_16 * ( zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk) & 237 237 & + zwz(ji-1,jj+1,jk) + zwz(ji+1,jj+1,jk) & … … 260 260 END DO 261 261 ! !* decrease along coastal boundaries 262 DO_2D _00_00262 DO_2D( 0, 0, 0, 0 ) 263 263 uslp(ji,jj,jk) = uslp(ji,jj,jk) * ( umask(ji,jj+1,jk) + umask(ji,jj-1,jk ) ) * 0.5_wp & 264 264 & * ( umask(ji,jj ,jk) + umask(ji,jj ,jk+1) ) * 0.5_wp … … 272 272 ! =========================== | wslpj = mij( d/dj( prd ) / d/dz( prd ) 273 273 ! 274 DO_3D _00_00(2, jpkm1 )274 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 275 275 ! !* Local vertical density gradient evaluated from N^2 276 276 zbw = zm1_2g * pn2 (ji,jj,jk) * ( prd (ji,jj,jk) + prd (ji,jj,jk-1) + 2. ) … … 307 307 ! !* horizontal Shapiro filter 308 308 DO jk = 2, jpkm1 309 DO_2D _00_00309 DO_2D( 0, 0, 0, 0 ) 310 310 zcofw = wmask(ji,jj,jk) * z1_16 311 311 wslpi(ji,jj,jk) = ( zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk) & … … 338 338 END DO 339 339 ! !* decrease in vicinity of topography 340 DO_2D _00_00340 DO_2D( 0, 0, 0, 0 ) 341 341 zck = ( umask(ji,jj,jk) + umask(ji-1,jj,jk) ) & 342 342 & * ( vmask(ji,jj,jk) + vmask(ji,jj-1,jk) ) * 0.25 … … 401 401 ! 402 402 ip = jl ; jp = jl ! guaranteed nonzero gradients ( absolute value larger than repsln) 403 DO_3D _10_10(1, jpkm1 )403 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 404 404 zdit = ( ts(ji+1,jj,jk,jp_tem,Kbb) - ts(ji,jj,jk,jp_tem,Kbb) ) ! i-gradient of T & S at u-point 405 405 zdis = ( ts(ji+1,jj,jk,jp_sal,Kbb) - ts(ji,jj,jk,jp_sal,Kbb) ) … … 413 413 ! 414 414 IF( ln_zps .AND. l_grad_zps ) THEN ! partial steps: correction of i- & j-grad on bottom 415 DO_2D _10_10415 DO_2D( 1, 0, 1, 0 ) 416 416 iku = mbku(ji,jj) ; ikv = mbkv(ji,jj) ! last ocean level (u- & v-points) 417 417 zdit = gtsu(ji,jj,jp_tem) ; zdjt = gtsv(ji,jj,jp_tem) ! i- & j-gradient of Temperature … … 427 427 428 428 DO kp = 0, 1 !== unmasked before density i- j-, k-gradients ==! 429 DO_3D _11_11(1, jpkm1 )429 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 430 430 IF( jk+kp > 1 ) THEN ! k-gradient of T & S a jk+kp 431 431 zdkt = ( ts(ji,jj,jk+kp-1,jp_tem,Kbb) - ts(ji,jj,jk+kp,jp_tem,Kbb) ) … … 442 442 END DO 443 443 ! 444 DO_2D _11_11444 DO_2D( 1, 1, 1, 1 ) 445 445 jk = MIN( nmln(ji,jj), mbkt(ji,jj) ) + 1 ! MIN in case ML depth is the ocean depth 446 446 z1_mlbw(ji,jj) = 1._wp / gdepw(ji,jj,jk,Kmm) … … 462 462 DO jl = 0, 1 ! calculate slope of the 4 triads immediately ONE level below mixed-layer base 463 463 DO kp = 0, 1 ! with only the slope-max limit and MASKED 464 DO_2D _10_10464 DO_2D( 1, 0, 1, 0 ) 465 465 ip = jl ; jp = jl 466 466 ! … … 499 499 ! Must mask contribution to slope from dz/dx at constant s for triads jk=1,kp=0 that poke up though ocean surface 500 500 znot_thru_surface = REAL( 1-1/(jk+kp), wp ) !jk+kp=1,=0.; otherwise=1.0 501 DO_2D _10_10501 DO_2D( 1, 0, 1, 0 ) 502 502 ! 503 503 ! Calculate slope relative to geopotentials used for GM skew fluxes … … 628 628 ! 629 629 ! !== surface mixed layer mask ! 630 DO_3D _11_11(1, jpk )630 DO_3D( 1, 1, 1, 1, 1, jpk ) 631 631 ik = nmln(ji,jj) - 1 632 632 IF( jk <= ik ) THEN ; omlmask(ji,jj,jk) = 1._wp … … 646 646 !----------------------------------------------------------------------- 647 647 ! 648 DO_2D _00_00648 DO_2D( 0, 0, 0, 0 ) 649 649 ! !== Slope at u- & v-points just below the Mixed Layer ==! 650 650 ! -
NEMO/trunk/src/OCE/LDF/ldftra.F90
r13286 r13295 430 430 zaht_min = 0.2_wp * aht0 ! minimum value for aht 431 431 zDaht = aht0 - zaht_min 432 DO_2D _11_11432 DO_2D( 1, 1, 1, 1 ) 433 433 !!gm CAUTION : here we assume lat/lon grid in 20deg N/S band (like all ORCA cfg) 434 434 !! ==>>> The Coriolis value is identical for t- & u_points, and for v- and f-points … … 648 648 ! ! Compute lateral diffusive coefficient at T-point 649 649 IF( ln_traldf_triad ) THEN 650 DO_3D _00_00(1, jpk )650 DO_3D( 0, 0, 0, 0, 1, jpk ) 651 651 ! Take the max of N^2 and zero then take the vertical sum 652 652 ! of the square root of the resulting N^2 ( required to compute … … 662 662 END_3D 663 663 ELSE 664 DO_3D _00_00(1, jpk )664 DO_3D( 0, 0, 0, 0, 1, jpk ) 665 665 ! Take the max of N^2 and zero then take the vertical sum 666 666 ! of the square root of the resulting N^2 ( required to compute … … 678 678 ENDIF 679 679 680 DO_2D _00_00680 DO_2D( 0, 0, 0, 0 ) 681 681 zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) 682 682 ! Rossby radius at w-point taken betwenn 2 km and 40km … … 688 688 ! !== Bound on eiv coeff. ==! 689 689 z1_f20 = 1._wp / ( 2._wp * omega * sin( rad * 20._wp ) ) 690 DO_2D _00_00690 DO_2D( 0, 0, 0, 0 ) 691 691 zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj) ! tropical decrease 692 692 zaeiw(ji,jj) = MIN( zzaei , paei0 ) ! Max value = paei0 … … 694 694 CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1.0_wp ) ! lateral boundary condition 695 695 ! 696 DO_2D _00_00696 DO_2D( 0, 0, 0, 0 ) 697 697 paeiu(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji+1,jj ) ) * umask(ji,jj,1) 698 698 paeiv(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji ,jj+1) ) * vmask(ji,jj,1) … … 750 750 zpsi_uw(:,:,jpk) = 0._wp ; zpsi_vw(:,:,jpk) = 0._wp 751 751 ! 752 DO_3D _10_10(2, jpkm1 )752 DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 753 753 zpsi_uw(ji,jj,jk) = - r1_4 * e2u(ji,jj) * ( wslpi(ji,jj,jk ) + wslpi(ji+1,jj,jk) ) & 754 754 & * ( aeiu (ji,jj,jk-1) + aeiu (ji ,jj,jk) ) * wumask(ji,jj,jk) … … 757 757 END_3D 758 758 ! 759 DO_3D _10_10(1, jpkm1 )759 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 760 760 pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 761 761 pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 762 762 END_3D 763 DO_3D _00_00(1, jpkm1 )763 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 764 764 pw(ji,jj,jk) = pw(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj ,jk) & 765 765 & + zpsi_vw(ji,jj,jk) - zpsi_vw(ji ,jj-1,jk) ) … … 813 813 CALL iom_put( "voce_eiv", zw3d ) 814 814 ! 815 DO_3D _00_00(1, jpkm1 )815 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 816 816 zw3d(ji,jj,jk) = ( psi_vw(ji,jj,jk) - psi_vw(ji ,jj-1,jk) & 817 817 & + psi_uw(ji,jj,jk) - psi_uw(ji-1,jj ,jk) ) / e1e2t(ji,jj) … … 840 840 zw2d(:,:) = 0._wp 841 841 zw3d(:,:,:) = 0._wp 842 DO_3D _00_00(1, jpkm1 )842 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 843 843 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1) - psi_uw(ji ,jj,jk) ) & 844 844 & * ( ts (ji,jj,jk,jp_tem,Kmm) + ts (ji+1,jj,jk,jp_tem,Kmm) ) … … 861 861 zw2d(:,:) = 0._wp 862 862 zw3d(:,:,:) = 0._wp 863 DO_3D _00_00(1, jpkm1 )863 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 864 864 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj ,jk) ) & 865 865 & * ( ts (ji,jj,jk,jp_tem,Kmm) + ts (ji,jj+1,jk,jp_tem,Kmm) ) … … 876 876 zw2d(:,:) = 0._wp 877 877 zw3d(:,:,:) = 0._wp 878 DO_3D _00_00(1, jpkm1 )878 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 879 879 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1) - psi_uw(ji ,jj,jk) ) & 880 880 & * ( ts (ji,jj,jk,jp_sal,Kmm) + ts (ji+1,jj,jk,jp_sal,Kmm) ) … … 888 888 zw2d(:,:) = 0._wp 889 889 zw3d(:,:,:) = 0._wp 890 DO_3D _00_00(1, jpkm1 )890 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 891 891 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj ,jk) ) & 892 892 & * ( ts (ji,jj,jk,jp_sal,Kmm) + ts (ji,jj+1,jk,jp_sal,Kmm) )
Note: See TracChangeset
for help on using the changeset viewer.