Changeset 14765
- Timestamp:
- 2021-04-29T16:25:38+02:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src
- Files:
-
- 44 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DOM/domqco.F90
r14752 r14765 159 159 #if ! defined key_qcoTest_FluxForm 160 160 ! ! no 'key_qcoTest_FluxForm' : surface weighted ssh average 161 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )162 161 DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 163 162 pr3u(ji,jj) = 0.5_wp * ( e1e2t(ji ,jj) * pssh(ji ,jj) & … … 168 167 !!st ELSE !- Flux Form (simple averaging) 169 168 #else 170 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )171 169 DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 172 170 pr3u(ji,jj) = 0.5_wp * ( pssh(ji,jj) + pssh(ji+1,jj ) ) * r1_hu_0(ji,jj) … … 177 175 ! 178 176 IF( .NOT.PRESENT( pr3f ) ) THEN !- lbc on ratio at u-, v-points only 179 IF (nn_hls .eq.1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp )177 IF (nn_hls==1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp ) 180 178 ! 181 179 ! … … 186 184 ! ! no 'key_qcoTest_FluxForm' : surface weighted ssh average 187 185 188 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line189 186 DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 190 187 ! round brackets added to fix the order of floating point operations … … 200 197 !!st ELSE !- Flux Form (simple averaging) 201 198 #else 202 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line203 199 DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 204 200 ! round brackets added to fix the order of floating point operations … … 212 208 #endif 213 209 ! ! lbc on ratio at u-,v-,f-points 214 IF (nn_hls .eq.1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp, pr3f, 'F', 1._wp )210 IF (nn_hls==1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp, pr3f, 'F', 1._wp ) 215 211 ! 216 212 ENDIF -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/divhor.F90
r14751 r14765 79 79 ENDIF 80 80 ! 81 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !== Horizontal divergence ==!82 81 DO_3D_OVR( nn_hls-1, nn_hls, nn_hls-1, nn_hls, 1, jpkm1 ) !== Horizontal divergence ==! 83 82 ! round brackets added to fix the order of floating point operations … … 101 100 IF( ln_isf ) CALL isf_hdiv( kt, Kmm, hdiv ) !== ice shelf ==! (update hdiv field) 102 101 ! 103 IF (nn_hls .eq.1) CALL lbc_lnk( 'divhor', hdiv, 'T', 1.0_wp ) ! (no sign change)102 IF (nn_hls==1) CALL lbc_lnk( 'divhor', hdiv, 'T', 1.0_wp ) ! (no sign change) 104 103 ! 105 104 IF( ln_timing ) CALL timing_stop('div_hor') -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynadv_ubs.F90
r14751 r14765 112 112 END_2D 113 113 ! 114 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! laplacian 115 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! laplacian 116 117 ! NOTE: [halo1-halo2] zlu_uu/zlv_vv expressions expanded and brackets added to make results independent of nn_hls 118 zlu_uu(ji,jj,jk,1) = ( (puu (ji+1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb)) + & 119 & (puu (ji-1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb)) ) * umask(ji ,jj ,jk) 120 zlv_vv(ji,jj,jk,1) = ( (pvv (ji ,jj+1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb)) + & 121 & (pvv (ji ,jj-1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb)) ) * vmask(ji ,jj ,jk) 114 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! laplacia 115 ! round brackets added to fix the order of floating point operations 116 ! needed to ensure halo 1 - halo 2 compatibility 117 zlu_uu(ji,jj,jk,1) = ( ( puu (ji+1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb) & 118 & ) & ! bracket for halo 1 - halo 2 compatibility 119 & + ( puu (ji-1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb) & 120 & ) & ! bracket for halo 1 - halo 2 compatibility 121 & ) * umask(ji ,jj ,jk) 122 zlv_vv(ji,jj,jk,1) = ( ( pvv (ji ,jj+1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) & 123 & ) & ! bracket for halo 1 - halo 2 compatibility 124 & + ( pvv (ji ,jj-1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) & 125 & ) & ! bracket for halo 1 - halo 2 compatibility 126 & ) * vmask(ji ,jj ,jk) 122 127 zlu_uv(ji,jj,jk,1) = ( puu (ji ,jj+1,jk,Kbb) - puu (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 123 128 & - ( puu (ji ,jj ,jk,Kbb) - puu (ji ,jj-1,jk,Kbb) ) * fmask(ji ,jj-1,jk) … … 125 130 & - ( pvv (ji ,jj ,jk,Kbb) - pvv (ji-1,jj ,jk,Kbb) ) * fmask(ji-1,jj ,jk) 126 131 ! 127 ! NOTE: [halo1-halo2] zlu_uu/zlv_vv expressions expanded and brackets added to make results independent of nn_hls 128 zlu_uu(ji,jj,jk,2) = ( (zfu(ji+1,jj ,jk) - zfu(ji ,jj ,jk)) + & 129 & (zfu(ji-1,jj ,jk) - zfu(ji ,jj ,jk)) ) * umask(ji ,jj ,jk) 130 zlv_vv(ji,jj,jk,2) = ( (zfv(ji ,jj+1,jk) - zfv(ji ,jj ,jk)) + & 131 & (zfv(ji ,jj-1,jk) - zfv(ji ,jj ,jk)) ) * vmask(ji ,jj ,jk) 132 ! round brackets added to fix the order of floating point operations 133 ! needed to ensure halo 1 - halo 2 compatibility 134 zlu_uu(ji,jj,jk,2) = ( ( zfu(ji+1,jj ,jk) - zfu(ji ,jj ,jk) & 135 & ) & ! bracket for halo 1 - halo 2 compatibility 136 & + ( zfu(ji-1,jj ,jk) - zfu(ji ,jj ,jk) & 137 & ) & ! bracket for halo 1 - halo 2 compatibility 138 & ) * umask(ji ,jj ,jk) 139 zlv_vv(ji,jj,jk,2) = ( ( zfv(ji ,jj+1,jk) - zfv(ji ,jj ,jk) & 140 & ) & ! bracket for halo 1 - halo 2 compatibility 141 & + ( zfv(ji ,jj-1,jk) - zfv(ji ,jj ,jk) & 142 & ) & ! bracket for halo 1 - halo 2 compatibility 143 & ) * vmask(ji ,jj ,jk) 132 144 zlu_uv(ji,jj,jk,2) = ( zfu(ji ,jj+1,jk) - zfu(ji ,jj ,jk) ) * fmask(ji ,jj ,jk) & 133 145 & - ( zfu(ji ,jj ,jk) - zfu(ji ,jj-1,jk) ) * fmask(ji ,jj-1,jk) … … 137 149 END DO 138 150 ! NOTE: [tiling] sign reversal necessary for results to be independent of nn_hls (bug in trunk) 139 IF( nn_hls .eq.1 ) CALL lbc_lnk( 'dynadv_ubs', zlu_uu(:,:,:,1), 'U', -1.0_wp , zlu_uv(:,:,:,1), 'U', -1.0_wp, &140 141 142 151 IF( nn_hls == 1 ) CALL lbc_lnk( 'dynadv_ubs', zlu_uu(:,:,:,1), 'U', -1.0_wp , zlu_uv(:,:,:,1), 'U', -1.0_wp, & 152 & zlu_uu(:,:,:,2), 'U', -1.0_wp , zlu_uv(:,:,:,2), 'U', -1.0_wp, & 153 & zlv_vv(:,:,:,1), 'V', -1.0_wp , zlv_vu(:,:,:,1), 'V', -1.0_wp, & 154 & zlv_vv(:,:,:,2), 'V', -1.0_wp , zlv_vu(:,:,:,2), 'V', -1.0_wp ) 143 155 ! 144 156 ! ! ====================== ! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynatf.F90
r14751 r14765 201 201 IF( ln_linssh ) THEN ! Fixed volume ! 202 202 ! ! =============! 203 ! [comm_cleanup ] ! DO_3D( 1, 1, 1, 1, 1, jpkm1 )204 203 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 205 204 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) … … 238 237 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3u(:,:,:,Kmm), 'U' ) 239 238 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3v(:,:,:,Kmm), 'V' ) 240 ! [comm_cleanup ] ! DO_3D( 1, 1, 1, 1, 1, jpkm1 )241 239 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 242 240 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) … … 250 248 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3u_f, 'U' ) 251 249 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3v_f, 'V' ) 252 ! [comm_cleanup ] ! DO_3D( 1, 1, 1, 1, 1, jpkm1 )253 250 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 254 251 zue3a = pe3u(ji,jj,jk,Kaa) * puu(ji,jj,jk,Kaa) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynhpg.F90
r14751 r14765 118 118 CASE ( np_zps ) ; CALL hpg_zps ( kt, Kmm, puu, pvv, Krhs ) ! z-coordinate plus partial steps (interpolation) 119 119 CASE ( np_sco ) ; CALL hpg_sco ( kt, Kmm, puu, pvv, Krhs ) ! s-coordinate (standard jacobian formulation) 120 CASE ( np_djc ) ; CALL hpg_djc ( kt, Kmm, puu, pvv, Krhs ) ! s-coordinate (Density Jacobian with Cubic polynomial) 120 CASE ( np_djc ) 121 ! [ comm_cleanup ] : it should not be needed but the removal/shift of this lbc_lnk results in a seg_fault error 122 ! NOTE: [tiling] to check if still needed 123 !#if defined key_qco 124 ! IF (nn_hls==2) CALL lbc_lnk( 'dynhpg', r3t(:,:,Kmm), 'T', 1.) 125 !#endif 126 CALL hpg_djc ( kt, Kmm, puu, pvv, Krhs ) ! s-coordinate (Density Jacobian with Cubic polynomial) 121 127 CASE ( np_prj ) ; CALL hpg_prj ( kt, Kmm, puu, pvv, Krhs ) ! s-coordinate (Pressure Jacobian scheme) 122 128 CASE ( np_isf ) ; CALL hpg_isf ( kt, Kmm, puu, pvv, Krhs ) ! s-coordinate similar to sco modify for ice shelf … … 796 802 zdzy (:,:,:) = 0._wp 797 803 798 ! [ comm_cleanup ] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 )799 804 ! NOTE: [tiling] reorder zdzx/zdzy to avoid leading negation operator (may change order of operations) 800 805 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynkeg.F90
r14751 r14765 111 111 END_3D 112 112 CASE ( nkeg_HW ) !-- Hollingsworth scheme --! 113 ! [comm_cleanup ] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )114 113 DO_3D( 0, nn_hls-1, 0, nn_hls-1, 1, jpkm1 ) 115 114 ! round brackets added to fix the order of floating point operations … … 128 127 zhke(ji,jj,jk) = r1_48 * ( zv + zu ) 129 128 END_3D 130 IF (nn_hls .eq.1) CALL lbc_lnk( 'dynkeg', zhke, 'T', 1.0_wp )129 IF (nn_hls==1) CALL lbc_lnk( 'dynkeg', zhke, 'T', 1.0_wp ) 131 130 ! 132 131 END SELECT -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynldf_iso.F90
r14751 r14765 132 132 IF( ln_dynldf_hor .AND. ln_traldf_iso ) THEN 133 133 ! 134 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )135 134 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) ! set the slopes of iso-level 136 135 uslp (ji,jj,jk) = - ( gdept(ji+1,jj,jk,Kbb) - gdept(ji ,jj ,jk,Kbb) ) * r1_e1u(ji,jj) * umask(ji,jj,jk) … … 140 139 END_3D 141 140 ! Lateral boundary conditions on the slopes 142 IF( nn_hls.eq.1 ) CALL lbc_lnk( 'dynldf_iso', uslp , 'U', -1.0_wp, vslp , 'V', -1.0_wp, & 143 & wslpi, 'W', -1.0_wp, wslpj, 'W', -1.0_wp ) 141 IF (nn_hls == 1) CALL lbc_lnk( 'dynldf_iso', uslp , 'U', -1.0_wp, vslp , 'V', -1.0_wp, wslpi, 'W', -1.0_wp, wslpj, 'W', -1.0_wp ) 144 142 ! 145 143 ENDIF -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynldf_lap_blp.F90
r14751 r14765 105 105 DO jk = 1, jpkm1 ! Horizontal slab 106 106 ! 107 ! [comm_cleanup] ! DO_2D( 0, 1, 0, 1 )108 107 DO_2D( iij-1, iij, iij-1, iij ) 109 108 ! ! ahm * e3 * curl (computed from 1 to jpim1/jpjm1) … … 117 116 END_2D 118 117 ! 119 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! - curl( curl) + grad( div )120 118 DO_2D( iij-1, iij-1, iij-1, iij-1 ) ! - curl( curl) + grad( div ) 121 119 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zsign * umask(ji,jj,jk) * ( & ! * by umask is mandatory for dyn_ldf_blp use … … 138 136 DO jk = 1, jpkm1 ! Horizontal slab 139 137 ! 140 ! [comm_cleanup] ! DO_2D( 0, 1, 0, 1 )141 138 DO_2D( iij-1, iij, iij-1, iij ) 142 139 ! ! shearing stress component (F-point) NB : ahmf has already been multiplied by fmask … … 154 151 END_2D 155 152 ! 156 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )157 153 DO_2D( iij-1, iij-1, iij-1, iij-1 ) 158 154 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zsign * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) & … … 213 209 CALL dyn_ldf_lap( kt, Kbb, Kmm, pu, pv, zulap, zvlap, 1 ) ! rotated laplacian applied to pt (output in zlap,Kbb) 214 210 ! 215 IF (nn_hls .eq.1) CALL lbc_lnk( 'dynldf_lap_blp', zulap, 'U', -1.0_wp, zvlap, 'V', -1.0_wp ) ! Lateral boundary conditions211 IF (nn_hls==1) CALL lbc_lnk( 'dynldf_lap_blp', zulap, 'U', -1.0_wp, zvlap, 'V', -1.0_wp ) ! Lateral boundary conditions 216 212 ! 217 213 CALL dyn_ldf_lap( kt, Kbb, Kmm, zulap, zvlap, pu_rhs, pv_rhs, 2 ) ! rotated laplacian applied to zlap (output in pt(:,:,:,:,Krhs)) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/dynvor.F90
r14751 r14765 270 270 ALLOCATE( zwz(A2D(nn_hls),jpk) ) 271 271 DO jk = 1, jpkm1 ! Horizontal slab 272 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )273 272 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 274 273 zwz(ji,jj,jk) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & … … 276 275 END_2D 277 276 IF( ln_dynvor_msk ) THEN ! mask relative vorticity 278 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )279 277 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 280 278 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) … … 282 280 ENDIF 283 281 END DO 284 IF (nn_hls .eq.1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp )282 IF (nn_hls==1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp ) 285 283 ! 286 284 END SELECT … … 657 655 ! 658 656 #if defined key_qco || defined key_linssh 659 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) ! == reciprocal of e3 at F-point (key_qco)660 657 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! == reciprocal of e3 at F-point (key_qco) 661 658 z1_e3f(ji,jj) = 1._wp / e3f_vor(ji,jj,jk) … … 664 661 SELECT CASE( nn_e3f_typ ) ! == reciprocal of e3 at F-point 665 662 CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) 666 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )667 663 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 668 664 ! NOTE: [halo1-halo2] brackets added to make results independent of nn_hls … … 676 672 END_2D 677 673 CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) 678 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )679 674 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 680 675 ! NOTE: [halo1-halo2] brackets added to make results independent of nn_hls … … 695 690 ! 696 691 CASE ( np_COR ) !* Coriolis (planetary vorticity) 697 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )698 692 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 699 693 zwz(ji,jj,jk) = ff_f(ji,jj) * z1_e3f(ji,jj) 700 694 END_2D 701 695 CASE ( np_RVO ) !* relative vorticity 702 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )703 696 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 704 697 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & … … 706 699 END_2D 707 700 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 708 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )709 701 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 710 702 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) … … 712 704 ENDIF 713 705 CASE ( np_MET ) !* metric term 714 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )715 706 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 716 707 zwz(ji,jj,jk) = ( ( pv(ji+1,jj,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & … … 718 709 END_2D 719 710 CASE ( np_CRV ) !* Coriolis + relative vorticity 720 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )721 711 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 722 712 ! round brackets added to fix the order of floating point operations … … 729 719 END_2D 730 720 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 731 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )732 721 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 733 722 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) … … 735 724 ENDIF 736 725 CASE ( np_CME ) !* Coriolis + metric 737 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )738 726 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 739 727 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & … … 747 735 ! ! =============== 748 736 ! 749 IF (nn_hls .eq.1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp )737 IF (nn_hls==1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp ) 750 738 ! 751 739 ! ! =============== … … 828 816 SELECT CASE( kvor ) !== vorticity considered ==! 829 817 CASE ( np_COR ) !* Coriolis (planetary vorticity) 830 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )831 818 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 832 819 zwz(ji,jj,jk) = ff_f(ji,jj) 833 820 END_2D 834 821 CASE ( np_RVO ) !* relative vorticity 835 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )836 822 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 837 823 ! NOTE: [halo1-halo2] brackets added to make results independent of nn_hls … … 841 827 END_2D 842 828 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 843 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )844 829 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 845 830 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) … … 847 832 ENDIF 848 833 CASE ( np_MET ) !* metric term 849 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )850 834 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 851 835 zwz(ji,jj,jk) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & … … 853 837 END_2D 854 838 CASE ( np_CRV ) !* Coriolis + relative vorticity 855 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )856 839 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 857 840 ! NOTE: [halo1-halo2] brackets added to make results independent of nn_hls … … 861 844 END_2D 862 845 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 863 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )864 846 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 865 847 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) … … 867 849 ENDIF 868 850 CASE ( np_CME ) !* Coriolis + metric 869 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )870 851 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 871 852 zwz(ji,jj,jk) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & … … 880 861 ! ! =============== 881 862 ! 882 IF (nn_hls .eq.1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp )863 IF (nn_hls==1) CALL lbc_lnk( 'dynvor', zwz, 'F', 1.0_wp ) 883 864 ! 884 865 ! ! =============== -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/DYN/sshwzv.F90
r14751 r14765 123 123 IF ( .NOT.ln_dynspg_ts ) THEN 124 124 IF( ln_bdy ) THEN 125 ! [comm_cleanup] 126 IF (nn_hls.eq.1) CALL lbc_lnk( 'sshwzv', pssh(:,:,Kaa), 'T', 1.0_wp ) ! Not sure that's necessary 125 IF (nn_hls==1) CALL lbc_lnk( 'sshwzv', pssh(:,:,Kaa), 'T', 1.0_wp ) ! Not sure that's necessary 127 126 CALL bdy_ssh( pssh(:,:,Kaa) ) ! Duplicate sea level across open boundaries 128 127 ENDIF … … 183 182 ! horizontal divergence of thickness diffusion transport ( velocity multiplied by e3t) 184 183 ! - ML - note: computation already done in dom_vvl_sf_nxt. Could be optimized (not critical and clearer this way) 185 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )186 184 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 187 185 zhdiv(ji,jj,jk) = r1_e1e2t(ji,jj) * ( un_td(ji,jj,jk) - un_td(ji-1,jj,jk) + vn_td(ji,jj,jk) - vn_td(ji,jj-1,jk) ) 188 186 END_2D 189 187 END DO 190 IF (nn_hls .eq.1) CALL lbc_lnk('sshwzv', zhdiv, 'T', 1.0_wp) ! - ML - Perhaps not necessary: not used for horizontal "connexions"188 IF (nn_hls==1) CALL lbc_lnk('sshwzv', zhdiv, 'T', 1.0_wp) ! - ML - Perhaps not necessary: not used for horizontal "connexions" 191 189 ! ! Is it problematic to have a wrong vertical velocity in boundary cells? 192 190 ! ! Same question holds for hdiv. Perhaps just for security … … 364 362 zdt = 2._wp * rn_Dt ! 2*rn_Dt and not rDt (for restartability) 365 363 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 366 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )367 364 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 368 365 z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) … … 382 379 END_3D 383 380 ELSE 384 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )385 381 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 386 382 z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) … … 396 392 END_3D 397 393 ENDIF 398 IF (nn_hls .eq.1) CALL lbc_lnk( 'sshwzv', Cu_adv, 'T', 1.0_wp )394 IF (nn_hls==1) CALL lbc_lnk( 'sshwzv', Cu_adv, 'T', 1.0_wp ) 399 395 ! 400 396 CALL iom_put("Courant",Cu_adv) 401 397 ! 402 398 IF( MAXVAL( Cu_adv(:,:,:) ) > Cu_min ) THEN ! Quick check if any breaches anywhere 403 ! [comm_cleanup] ! DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 ) ! or scan Courant criterion and partition ! w where necessary404 399 DO_3DS( nn_hls, nn_hls, nn_hls, nn_hls, jpkm1, 2, -1 ) ! or scan Courant criterion and partition ! w where necessary 405 400 ! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/LDF/ldfslp.F90
r14631 r14765 371 371 ! 372 372 ip = jl ; jp = jl ! guaranteed nonzero gradients ( absolute value larger than repsln) 373 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 ) ! done each pair of triad ! NB: not masked ==> a minimum value is set374 373 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) ! done each pair of triad ! NB: not masked ==> a minimum value is set 375 374 zdit = ( ts(ji+1,jj,jk,jp_tem,Kbb) - ts(ji,jj,jk,jp_tem,Kbb) ) ! i-gradient of T & S at u-point … … 384 383 ! 385 384 IF( ln_zps .AND. l_grad_zps ) THEN ! partial steps: correction of i- & j-grad on bottom 386 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )387 385 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 388 386 iku = mbku(ji,jj) ; ikv = mbkv(ji,jj) ! last ocean level (u- & v-points) … … 399 397 400 398 DO kp = 0, 1 !== unmasked before density i- j-, k-gradients ==! 401 ! [comm_cleanup] ! DO_3D( 1, 1, 1, 1, 1, jpkm1 ) ! done each pair of triad ! NB: not masked ==> a minimum value is set402 399 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) ! done each pair of triad ! NB: not masked ==> a minimum value is set 403 400 IF( jk+kp > 1 ) THEN ! k-gradient of T & S a jk+kp … … 415 412 END DO 416 413 ! 417 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) !== Reciprocal depth of the w-point below ML base ==!418 414 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) !== Reciprocal depth of the w-point below ML base ==! 419 415 jk = MIN( nmln(ji,jj), mbkt(ji,jj) ) + 1 ! MIN in case ML depth is the ocean depth … … 436 432 DO jl = 0, 1 ! calculate slope of the 4 triads immediately ONE level below mixed-layer base 437 433 DO kp = 0, 1 ! with only the slope-max limit and MASKED 438 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )439 434 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 440 435 ip = jl ; jp = jl … … 474 469 ! Must mask contribution to slope from dz/dx at constant s for triads jk=1,kp=0 that poke up though ocean surface 475 470 znot_thru_surface = REAL( 1-1/(jk+kp), wp ) !jk+kp=1,=0.; otherwise=1.0 476 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )477 471 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 478 472 ! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/LDF/ldftra.F90
r14680 r14765 647 647 ! ! Compute lateral diffusive coefficient at T-point 648 648 IF( ln_traldf_triad ) THEN 649 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )650 649 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 651 650 ! Take the max of N^2 and zero then take the vertical sum … … 662 661 END_3D 663 662 ELSE 664 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )665 663 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 666 664 ! Take the max of N^2 and zero then take the vertical sum … … 679 677 ENDIF 680 678 681 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )682 679 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 683 680 zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) … … 690 687 ! !== Bound on eiv coeff. ==! 691 688 z1_f20 = 1._wp / ( 2._wp * omega * sin( rad * 20._wp ) ) 692 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )693 689 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 694 690 zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj) ! tropical decrease … … 697 693 CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1.0_wp ) ! lateral boundary condition 698 694 ! 699 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )700 695 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 701 696 paeiu(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji+1,jj ) ) * umask(ji,jj,1) … … 757 752 zpsi_uw(:,:,jpk) = 0._wp ; zpsi_vw(:,:,jpk) = 0._wp 758 753 ! 759 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 2, jpkm1 )760 754 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 2, jpkm1 ) 761 755 zpsi_uw(ji,jj,jk) = - r1_4 * e2u(ji,jj) * ( wslpi(ji,jj,jk ) + wslpi(ji+1,jj,jk) ) & … … 765 759 END_3D 766 760 ! 767 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 )768 761 DO_3D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) 769 762 pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 770 763 pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 771 764 END_3D 772 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )773 765 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 774 766 pw(ji,jj,jk) = pw(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj ,jk) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/SBC/sbccpl.F90
r14574 r14765 1293 1293 IF( llnewtau ) THEN 1294 1294 zcoef = 1. / ( zrhoa * zcdrag ) 1295 DO_2D( 1, 1, 1, 1)1295 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 1296 1296 frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 1297 1297 END_2D -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/SBC/sbcrnf.F90
r14751 r14765 207 207 IF( ln_rnf_depth .OR. ln_rnf_depth_ini ) THEN !== runoff distributed over several levels ==! 208 208 IF( ln_linssh ) THEN !* constant volume case : just apply the runoff input flow 209 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )210 209 DO_2D_OVR( nn_hls-1, nn_hls, nn_hls-1, nn_hls ) 211 210 DO jk = 1, nk_rnf(ji,jj) … … 214 213 END_2D 215 214 ELSE !* variable volume case 216 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) ! update the depth over which runoffs are distributed217 215 DO_2D_OVR( nn_hls, nn_hls, nn_hls, nn_hls ) ! update the depth over which runoffs are distributed 218 216 h_rnf(ji,jj) = 0._wp … … 363 361 ! 364 362 nk_rnf(:,:) = 0 ! set the number of level over which river runoffs are applied 365 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )366 363 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 367 364 IF( h_rnf(ji,jj) > 0._wp ) THEN … … 377 374 ENDIF 378 375 END_2D 379 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) ! set the associated depth380 376 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) ! set the associated depth 381 377 h_rnf(ji,jj) = 0._wp … … 408 404 WHERE( zrnfcl(:,:,1) > 0._wp ) h_rnf(:,:) = zacoef * zrnfcl(:,:,1) ! compute depth for all runoffs 409 405 ! 410 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) ! take in account min depth of ocean rn_hmin411 406 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) ! take in account min depth of ocean rn_hmin 412 407 IF( zrnfcl(ji,jj,1) > 0._wp ) THEN … … 417 412 ! 418 413 nk_rnf(:,:) = 0 ! number of levels on which runoffs are distributed 419 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )420 414 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 421 415 IF( zrnfcl(ji,jj,1) > 0._wp ) THEN … … 429 423 END_2D 430 424 ! 431 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) ! set the associated depth432 425 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) ! set the associated depth 433 426 h_rnf(ji,jj) = 0._wp -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv.F90
r14764 r14765 112 112 IF( nadv == np_FCT .OR. (nn_hls == 1 .AND. (nadv /= np_CEN .OR. (nadv == np_CEN .AND. nn_cen_h == 4))) ) THEN 113 113 IF( ln_tile ) THEN 114 114 IF( ntile == 1 ) THEN 115 115 CALL dom_tile_stop( ldhold=.TRUE., cstr='traadv' ) 116 117 118 119 116 ELSE 117 lskip = .TRUE. 118 ENDIF 119 ENDIF 120 120 ENDIF 121 121 IF( .NOT. lskip ) THEN … … 179 179 CALL tra_adv_cen ( kt, nit000, 'TRA', zuu, zvv, zww, Kmm, pts, jpts, Krhs, nn_cen_h, nn_cen_v ) 180 180 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order 181 IF (nn_hls .EQ.2) THEN181 IF (nn_hls==2) THEN 182 182 #if defined key_loop_fusion 183 183 CALL tra_adv_fct_lf ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v ) … … 189 189 END IF 190 190 CASE ( np_MUS ) ! MUSCL 191 IF (nn_hls .EQ.2) THEN191 IF (nn_hls==2) THEN 192 192 #if defined key_loop_fusion 193 193 CALL tra_adv_mus_lf ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups ) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_cen.F90
r14631 r14765 119 119 ztv(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 120 120 END_3D 121 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_cen', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond.121 IF (nn_hls==1) CALL lbc_lnk( 'traadv_cen', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond. 122 122 ! 123 123 DO_3D( nn_hls-1, 0, nn_hls-1, 0, 1, jpkm1 ) ! Horizontal advective fluxes … … 131 131 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * zC4t_v 132 132 END_3D 133 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_cen', zwx, 'U', -1. , zwy, 'V', -1. )133 IF (nn_hls==1) CALL lbc_lnk( 'traadv_cen', zwx, 'U', -1. , zwy, 'V', -1. ) 134 134 ! 135 135 CASE DEFAULT -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_fct.F90
r14631 r14765 238 238 END_2D 239 239 END DO 240 CALL lbc_lnk( 'traadv_fct', zltu, 'T', 1.0_wp , zltv, 'T', 1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 241 ! 242 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 240 ! NOTE [ comm_cleanup ] : need to change sign to ensure halo 1 - halo 2 compatibility 241 CALL lbc_lnk( 'traadv_fct', zltu, 'T', -1.0_wp , zltv, 'T', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 242 ! 243 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) 243 244 zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) ! 2 x C2 interpolation of T at u- & v-points 244 245 zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) 245 246 ! ! C4 minus upstream advective fluxes 246 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 247 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 248 END_3D 249 IF (nn_hls.EQ.2) CALL lbc_lnk( 'traadv_fct', zwx, 'U', -1.0_wp, zwy, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 247 ! round brackets added to fix the order of floating point operations 248 ! needed to ensure halo 1 - halo 2 compatibility 249 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( zC2t_u + ( zltu(ji,jj,jk) - zltu(ji+1,jj,jk) & 250 & ) & ! bracket for halo 1 - halo 2 compatibility 251 & ) - zwx(ji,jj,jk) 252 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( zC2t_v + ( zltv(ji,jj,jk) - zltv(ji,jj+1,jk) & 253 & ) & ! bracket for halo 1 - halo 2 compatibility 254 & ) - zwy(ji,jj,jk) 255 END_3D 250 256 ! 251 257 CASE( 41 ) !- 4th order centered ==>> !!gm coding attempt need to be tested 252 258 ztu(:,:,jpk) = 0._wp ! Bottom value : flux set to zero 253 259 ztv(:,:,jpk) = 0._wp 254 DO_3D( nn_hls , nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) ! 1st derivative (gradient)260 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) ! 1st derivative (gradient) 255 261 ztu(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 256 262 ztv(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 257 263 END_3D 258 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn)264 IF (nn_hls==1) CALL lbc_lnk( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 259 265 ! 260 266 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) ! Horizontal advective fluxes … … 268 274 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * zC4t_v - zwy(ji,jj,jk) 269 275 END_3D 270 IF (nn_hls .EQ.2) CALL lbc_lnk( 'traadv_fct', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn)276 IF (nn_hls==2) CALL lbc_lnk( 'traadv_fct', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 271 277 ! 272 278 END SELECT … … 291 297 ENDIF 292 298 ! 293 IF (nn_hls .EQ.1) THEN299 IF (nn_hls==1) THEN 294 300 CALL lbc_lnk( 'traadv_fct', zwi, 'T', 1.0_wp, zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp, zwz, 'T', 1.0_wp ) 295 301 ELSE … … 449 455 END_2D 450 456 END DO 451 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_fct', zbetup, 'T', 1.0_wp , zbetdo, 'T', 1.0_wp ) ! lateral boundary cond. (unchanged sign)457 IF (nn_hls==1) CALL lbc_lnk( 'traadv_fct', zbetup, 'T', 1.0_wp , zbetdo, 'T', 1.0_wp ) ! lateral boundary cond. (unchanged sign) 452 458 453 459 ! 3. monotonic flux in the i & j direction (paa & pbb) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_mus.F90
r14631 r14765 139 139 zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( pt(ji,jj+1,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 140 140 END_3D 141 ! lateral boundary conditions (changed sign)142 IF ( nn_hls.EQ.1 ) CALL lbc_lnk( 'traadv_mus', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp )143 141 ! !-- Slopes of tracer 144 142 zslpx(:,:,jpk) = 0._wp ! bottom values 145 143 zslpy(:,:,jpk) = 0._wp 146 DO_3D( nn_hls-1, 1, nn_hls-1,1, 1, jpkm1 )144 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 147 145 zslpx(ji,jj,jk) = ( zwx(ji,jj,jk) + zwx(ji-1,jj ,jk) ) & 148 146 & * ( 0.25 + SIGN( 0.25_wp, zwx(ji,jj,jk) * zwx(ji-1,jj ,jk) ) ) … … 151 149 END_3D 152 150 ! 153 DO_3D( nn_hls-1, 1, nn_hls-1,1, 1, jpkm1 ) !-- Slopes limitation151 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) !-- Slopes limitation 154 152 zslpx(ji,jj,jk) = SIGN( 1.0_wp, zslpx(ji,jj,jk) ) * MIN( ABS( zslpx(ji ,jj,jk) ), & 155 153 & 2.*ABS( zwx (ji-1,jj,jk) ), & … … 159 157 & 2.*ABS( zwy (ji,jj ,jk) ) ) 160 158 END_3D 161 ! 162 DO_3D( nn_hls-1, 0, nn_hls-1, 0, 1, jpkm1 ) !-- MUSCL horizontal advective fluxes 159 ! NOTE [ comm_cleanup ] : need to change sign to ensure halo 1 - halo 2 compatibility 160 IF ( nn_hls==1 ) CALL lbc_lnk( 'traadv_mus', zslpx, 'T', -1.0_wp , zslpy, 'T', -1.0_wp ) ! lateral boundary conditions (changed sign) 161 ! 162 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) !-- MUSCL horizontal advective fluxes 163 163 ! MUSCL fluxes 164 164 z0u = SIGN( 0.5_wp, pU(ji,jj,jk) ) … … 176 176 zwy(ji,jj,jk) = pV(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 177 177 END_3D 178 IF ( nn_hls.EQ.1 ) CALL lbc_lnk( 'traadv_mus', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp ) ! lateral boundary conditions (changed sign)179 178 ! 180 179 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !-- Tracer advective trend -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_qck.F90
r14631 r14765 149 149 zfd(ji,jj,jk) = pt(ji+1,jj,jk,jn,Kbb) ! Downstream in the x-direction for the tracer 150 150 END_3D 151 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfd(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions151 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfd(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions 152 152 153 153 ! … … 167 167 END_3D 168 168 !--- Lateral boundary conditions 169 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp, zwx(:,:,:), 'T', 1.0_wp )169 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp, zwx(:,:,:), 'T', 1.0_wp ) 170 170 171 171 !--- QUICKEST scheme … … 176 176 zfu(ji,jj,jk) = tmask(ji-1,jj,jk) + tmask(ji,jj,jk) + tmask(ji+1,jj,jk) - 2. 177 177 END_3D 178 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions178 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions 179 179 180 180 ! … … 237 237 END_3D 238 238 239 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfc(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions239 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfc(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions 240 240 241 241 ! Correct zfd on northfold after lbc_lnk; see #2640 … … 263 263 264 264 !--- Lateral boundary conditions 265 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp, zwy(:,:,:), 'T', 1.0_wp )265 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp, zwy(:,:,:), 'T', 1.0_wp ) 266 266 267 267 !--- QUICKEST scheme … … 272 272 zfu(ji,jj,jk) = tmask(ji,jj-1,jk) + tmask(ji,jj,jk) + tmask(ji,jj+1,jk) - 2. 273 273 END_3D 274 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp ) !--- Lateral boundary conditions274 IF (nn_hls==1) CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp ) !--- Lateral boundary conditions 275 275 ! 276 276 ! Tracer flux on the x-direction -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_ubs.F90
r14631 r14765 140 140 ! 141 141 END DO 142 IF (nn_hls .EQ.1) CALL lbc_lnk( 'traadv_ubs', zltu, 'T', 1.0_wp, zltv, 'T', 1.0_wp ) ! Lateral boundary cond. (unchanged sgn)142 IF (nn_hls==1) CALL lbc_lnk( 'traadv_ubs', zltu, 'T', 1.0_wp, zltv, 'T', 1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 143 143 ! 144 144 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) !== Horizontal advective fluxes ==! (UBS) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traatf.F90
r14753 r14765 175 175 ENDIF 176 176 ! 177 ! [comm_cleanup]177 ! TODO: [tiling] check if needed 178 178 IF (nn_hls.eq.1) CALL lbc_lnk( 'traatf', pts(:,:,:,jp_tem,Kmm) , 'T', 1.0_wp, pts(:,:,:,jp_sal,Kmm) , 'T', 1.0_wp ) 179 179 -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traatf_qco.F90
r14764 r14765 146 146 ENDIF 147 147 ! 148 ! [ comm_cleanup ]148 ! TODO: [tiling] check if needed 149 149 CALL lbc_lnk( 'traatfqco', pts(:,:,:,jp_tem,Kmm) , 'T', 1._wp, pts(:,:,:,jp_sal,Kmm) , 'T', 1._wp ) 150 150 ! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/trabbl.F90
r14663 r14765 137 137 CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_adv - Ta: ', mask1=tmask, & 138 138 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 139 IF( .NOT. l_istiled .OR. ntile == nijtile ) THEN ! Do only on the last tile140 ! lateral boundary conditions ; just need for outputs141 ! [ comm_cleanup ] ! no need lbc_lnk for outputs142 ! NOTE: [tiling] removal of this lbc_lnk causes results to change, as the sign was unchanged (bug in trunk)143 ! CALL lbc_lnk( 'trabbl', utr_bbl, 'U', 1.0_wp , vtr_bbl, 'V', 1.0_wp )144 ENDIF145 139 CALL iom_put( "uoce_bbl", utr_bbl ) ! bbl i-transport 146 140 CALL iom_put( "voce_bbl", vtr_bbl ) ! bbl j-transport -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_iso.F90
r14680 r14765 147 147 ENDIF 148 148 ! 149 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )150 149 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 151 150 akz (ji,jj,jk) = 0._wp … … 178 177 IF( kpass == 1 ) THEN !== first pass only ==! 179 178 ! 180 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )181 179 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 182 180 ! … … 201 199 ! 202 200 IF( ln_traldf_msc ) THEN ! stabilizing vertical diffusivity coefficient 203 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )204 201 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 205 202 ! round brackets added to fix the order of floating point operations … … 215 212 ! 216 213 IF( ln_traldf_blp ) THEN ! bilaplacian operator 217 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )218 214 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 219 215 akz(ji,jj,jk) = 16._wp & … … 224 220 END_3D 225 221 ELSEIF( ln_traldf_lap ) THEN ! laplacian operator 226 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )227 222 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 228 223 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) … … 233 228 ! 234 229 ELSE ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 235 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )236 230 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 237 231 akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) … … 251 245 252 246 ! Horizontal tracer gradient 253 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 )254 247 DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) 255 248 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) … … 257 250 END_3D 258 251 IF( ln_zps ) THEN ! botton and surface ocean correction of the horizontal gradient 259 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) ! bottom correction (partial bottom cell)260 252 DO_2D( iij, iij-1, iij, iij-1 ) ! bottom correction (partial bottom cell) 261 253 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) … … 263 255 END_2D 264 256 IF( ln_isfcav ) THEN ! first wet level beneath a cavity 265 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )266 257 DO_2D( iij, iij-1, iij, iij-1 ) 267 258 IF( miku(ji,jj) > 1 ) zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn) … … 277 268 DO jk = 1, jpkm1 ! Horizontal slab 278 269 ! 279 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )280 270 DO_2D( iij, iij, iij, iij ) 281 271 ! !== Vertical tracer gradient … … 287 277 END_2D 288 278 ! 289 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) !== Horizontal fluxes290 279 DO_2D( iij, iij-1, iij, iij-1 ) !== Horizontal fluxes 291 280 zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) … … 317 306 END_2D 318 307 ! 319 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) !== horizontal divergence and add to pta320 308 DO_2D( iij-1, iij-1, iij-1, iij-1 ) !== horizontal divergence and add to pta 321 309 ! round brackets added to fix the order of floating point operations … … 339 327 ztfw(:,:, 1 ) = 0._wp ; ztfw(:,:,jpk) = 0._wp 340 328 341 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! interior (2=<jk=<jpk-1)342 329 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) ! interior (2=<jk=<jpk-1) 343 330 ! … … 370 357 ! !== add the vertical 33 flux ==! 371 358 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 372 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )373 359 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 374 360 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & … … 380 366 SELECT CASE( kpass ) 381 367 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 382 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )383 368 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 384 369 ztfw(ji,jj,jk) = & … … 395 380 ENDIF 396 381 ! 397 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==!398 382 DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==! 399 383 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_lap_blp.F90
r14680 r14765 239 239 END SELECT 240 240 ! 241 ! [comm_cleanup] 242 IF (nn_hls.EQ.1) CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp ) ! Lateral boundary conditions (unchanged sign) 241 IF (nn_hls==1) CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp ) ! Lateral boundary conditions (unchanged sign) 243 242 ! ! Partial top/bottom cell: GRADh( zlap ) 244 243 IF( ln_isfcav .AND. ln_zps ) THEN ; CALL zps_hde_isf( kt, Kmm, kjpt, zlap, zglu, zglv, zgui, zgvi ) ! both top & bottom -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_triad.F90
r14713 r14765 150 150 IF( kpass == 1 ) THEN !== first pass only and whatever the tracer is ==! 151 151 ! 152 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )153 152 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 154 153 akz (ji,jj,jk) = 0._wp … … 157 156 ! 158 157 DO kp = 0, 1 ! i-k triads 159 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )160 158 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 161 159 ze3wr = 1._wp / e3w(ji,jj,jk+kp,Kmm) … … 181 179 ! 182 180 DO kp = 0, 1 ! j-k triads 183 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )184 181 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 185 182 ze3wr = 1.0_wp / e3w(ji,jj,jk+kp,Kmm) … … 209 206 ! 210 207 IF( ln_traldf_blp ) THEN ! bilaplacian operator 211 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )212 208 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 213 209 akz(ji,jj,jk) = 16._wp & … … 218 214 END_3D 219 215 ELSEIF( ln_traldf_lap ) THEN ! laplacian operator 220 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )221 216 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 222 217 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) … … 227 222 ! 228 223 ELSE ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 229 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )230 224 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 231 225 akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) … … 268 262 zdjt(:,:,:) = 0._wp 269 263 ! 270 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 ) !== before lateral T & S gradients at T-level jk ==!271 264 DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) !== before lateral T & S gradients at T-level jk ==! 272 265 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) … … 274 267 END_3D 275 268 IF( ln_zps .AND. l_grad_zps ) THEN ! partial steps: correction at top/bottom ocean level 276 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) ! bottom level277 269 DO_2D( iij, iij-1, iij, iij-1 ) ! bottom level 278 270 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) … … 280 272 END_2D 281 273 IF( ln_isfcav ) THEN ! top level (ocean cavities only) 282 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )283 274 DO_2D( iij, iij-1, iij, iij-1 ) 284 275 IF( miku(ji,jj) > 1 ) zdit(ji,jj,miku(ji,jj) ) = pgui(ji,jj,jn) … … 294 285 DO jk = 1, jpkm1 295 286 ! !== Vertical tracer gradient at level jk and jk+1 296 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )297 287 DO_2D( iij, iij, iij, iij ) 298 288 zdkt3d(ji,jj,1) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1) … … 302 292 IF( jk == 1 ) THEN ; zdkt3d(:,:,0) = zdkt3d(:,:,1) 303 293 ELSE 304 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )305 294 DO_2D( iij, iij, iij, iij ) 306 295 zdkt3d(ji,jj,0) = ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) * tmask(ji,jj,jk) … … 315 304 IF( ln_botmix_triad ) THEN 316 305 DO kp = 0, 1 !== Horizontal & vertical fluxes 317 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )318 306 DO_2D( iij, iij-1, iij, iij-1 ) 319 307 ze1ur = r1_e1u(ji,jj) … … 352 340 ! 353 341 DO kp = 0, 1 354 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )355 342 DO_2D( iij, iij-1, iij, iij-1 ) 356 343 ze2vr = r1_e2v(ji,jj) … … 390 377 ! 391 378 DO kp = 0, 1 !== Horizontal & vertical fluxes 392 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )393 379 DO_2D( iij, iij-1, iij, iij-1 ) 394 380 ze1ur = r1_e1u(ji,jj) … … 429 415 ! 430 416 DO kp = 0, 1 431 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )432 417 DO_2D( iij, iij-1, iij, iij-1 ) 433 418 ze2vr = r1_e2v(ji,jj) … … 467 452 ENDIF 468 453 ! !== horizontal divergence and add to the general trend ==! 469 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )470 454 DO_2D( iij-1, iij-1, iij-1, iij-1 ) 471 455 ! round brackets added to fix the order of floating point operations … … 483 467 ! !== add the vertical 33 flux ==! 484 468 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 485 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 )486 469 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 487 470 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & … … 492 475 SELECT CASE( kpass ) 493 476 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 494 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 )495 477 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 496 478 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & … … 498 480 END_3D 499 481 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 500 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 )501 482 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 502 483 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & … … 507 488 ENDIF 508 489 ! 509 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==!510 490 DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==! 511 491 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/tramle.F90
r14631 r14765 108 108 SELECT CASE( nn_mld_uv ) ! MLD at u- & v-pts 109 109 CASE ( 0 ) != min of the 2 neighbour MLDs 110 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )111 110 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 112 111 zhu(ji,jj) = MIN( hmle(ji+1,jj), hmle(ji,jj) ) … … 114 113 END_2D 115 114 CASE ( 1 ) != average of the 2 neighbour MLDs 116 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )117 115 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 118 116 zhu(ji,jj) = MAX( hmle(ji+1,jj), hmle(ji,jj) ) … … 120 118 END_2D 121 119 CASE ( 2 ) != max of the 2 neighbour MLDs 122 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )123 120 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 124 121 zhu(ji,jj) = MAX( hmle(ji+1,jj), hmle(ji,jj) ) … … 127 124 END SELECT 128 125 IF( nn_mle == 0 ) THEN ! Fox-Kemper et al. 2010 formulation 129 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )130 126 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 131 127 zpsim_u(ji,jj) = rn_ce * zhu(ji,jj) * zhu(ji,jj) * e2u(ji,jj) & … … 139 135 ! 140 136 ELSEIF( nn_mle == 1 ) THEN ! New formulation (Lf = 5km fo/ff with fo=Coriolis parameter at latitude rn_lat) 141 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )142 137 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 143 138 zpsim_u(ji,jj) = rc_f * zhu(ji,jj) * zhu(ji,jj) * e2u(ji,jj) & … … 152 147 ! !== MLD used for MLE ==! 153 148 ! ! compute from the 10m density to deal with the diurnal cycle 154 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )155 149 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 156 150 inml_mle(ji,jj) = mbkt(ji,jj) + 1 ! init. to number of ocean w-level (T-level + 1) 157 151 END_2D 158 152 IF ( nla10 > 0 ) THEN ! avoid case where first level is thicker than 10m 159 ! [comm_cleanup] ! DO_3DS( 1, 1, 1, 1, jpkm1, nlb10, -1 ) ! from the bottom to nlb10 (10m)160 153 DO_3DS( nn_hls, nn_hls, nn_hls, nn_hls, jpkm1, nlb10, -1 ) ! from the bottom to nlb10 (10m) 161 154 IF( rhop(ji,jj,jk) > rhop(ji,jj,nla10) + rn_rho_c_mle ) inml_mle(ji,jj) = jk ! Mixed layer … … 168 161 zbm (:,:) = 0._wp 169 162 zn2 (:,:) = 0._wp 170 ! [comm_cleanup] ! DO_3D( 1, 1, 1, 1, 1, ikmax ) ! MLD and mean buoyancy and N2 over the mixed layer171 163 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, ikmax ) ! MLD and mean buoyancy and N2 over the mixed layer 172 164 zc = e3t(ji,jj,jk,Kmm) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1 ) ) ! zc being 0 outside the ML t-points … … 178 170 SELECT CASE( nn_mld_uv ) ! MLD at u- & v-pts 179 171 CASE ( 0 ) != min of the 2 neighbour MLDs 180 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )181 172 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 182 173 zhu(ji,jj) = MIN( zmld(ji+1,jj), zmld(ji,jj) ) … … 184 175 END_2D 185 176 CASE ( 1 ) != average of the 2 neighbour MLDs 186 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )187 177 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 188 178 zhu(ji,jj) = ( zmld(ji+1,jj) + zmld(ji,jj) ) * 0.5_wp … … 190 180 END_2D 191 181 CASE ( 2 ) != max of the 2 neighbour MLDs 192 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )193 182 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 194 183 zhu(ji,jj) = MAX( zmld(ji+1,jj), zmld(ji,jj) ) … … 197 186 END SELECT 198 187 ! ! convert density into buoyancy 199 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )200 188 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 201 189 zbm(ji,jj) = + grav * zbm(ji,jj) / MAX( e3t(ji,jj,1,Kmm), zmld(ji,jj) ) … … 211 199 ! 212 200 IF( nn_mle == 0 ) THEN ! Fox-Kemper et al. 2010 formulation 213 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )214 201 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 215 202 zpsim_u(ji,jj) = rn_ce * zhu(ji,jj) * zhu(ji,jj) * e2_e1u(ji,jj) & … … 223 210 ! 224 211 ELSEIF( nn_mle == 1 ) THEN ! New formulation (Lf = 5km fo/ff with fo=Coriolis parameter at latitude rn_lat) 225 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )226 212 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 227 213 zpsim_u(ji,jj) = rc_f * zhu(ji,jj) * zhu(ji,jj) * e2_e1u(ji,jj) & … … 234 220 ! 235 221 IF( nn_conv == 1 ) THEN ! No MLE in case of convection 236 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )237 222 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 238 223 IF( MIN( zn2(ji,jj) , zn2(ji+1,jj) ) < 0._wp ) zpsim_u(ji,jj) = 0._wp … … 243 228 ENDIF ! end of ln_osm_mle conditional 244 229 ! !== structure function value at uw- and vw-points ==! 245 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )246 230 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 247 231 zhu(ji,jj) = 1._wp / MAX(zhu(ji,jj), rsmall) ! hu --> 1/hu … … 252 236 zpsi_vw(:,:,:) = 0._wp 253 237 ! 254 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 2, ikmax ) ! start from 2 : surface value = 0255 238 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 2, ikmax ) ! start from 2 : surface value = 0 256 239 … … 268 251 ! !== transport increased by the MLE induced transport ==! 269 252 DO jk = 1, ikmax 270 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) ! CAUTION pu,pv must be defined at row/column i=1 / j=1271 253 DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 272 254 pu(ji,jj,jk) = pu(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 273 255 pv(ji,jj,jk) = pv(ji,jj,jk) + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 274 256 END_2D 275 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )276 257 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 277 258 pw(ji,jj,jk) = pw(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj,jk) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/zpshde.F90
r14680 r14765 170 170 END DO 171 171 ! 172 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond.172 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond. 173 173 ! 174 174 IF( PRESENT( prd ) ) THEN !== horizontal derivative of density anomalies (rd) ==! (optional part) … … 203 203 ENDIF 204 204 END_2D 205 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp ) ! Lateral boundary conditions205 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp ) ! Lateral boundary conditions 206 206 ! 207 207 END IF … … 352 352 END DO 353 353 ! 354 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond.354 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond. 355 355 356 356 ! horizontal derivative of density anomalies (rd) … … 394 394 END_2D 395 395 396 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp ) ! Lateral boundary conditions396 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp ) ! Lateral boundary conditions 397 397 ! 398 398 END IF … … 446 446 ! 447 447 END DO 448 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgtui(:,:,:), 'U', -1.0_wp , pgtvi(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond.448 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgtui(:,:,:), 'U', -1.0_wp , pgtvi(:,:,:), 'V', -1.0_wp ) ! Lateral boundary cond. 449 449 450 450 IF( PRESENT( prd ) ) THEN !== horizontal derivative of density anomalies (rd) ==! (optional part) … … 485 485 486 486 END_2D 487 IF (nn_hls .EQ.1) CALL lbc_lnk( 'zpshde', pgrui, 'U', -1.0_wp , pgrvi, 'V', -1.0_wp ) ! Lateral boundary conditions487 IF (nn_hls==1) CALL lbc_lnk( 'zpshde', pgrui, 'U', -1.0_wp , pgrvi, 'V', -1.0_wp ) ! Lateral boundary conditions 488 488 ! 489 489 END IF -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfddm.F90
r14665 r14765 95 95 !!gm and many acces in memory 96 96 97 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) !== R=zrau = (alpha / beta) (dk[t] / dk[s]) ==!98 97 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) !== R=zrau = (alpha / beta) (dk[t] / dk[s]) ==! 99 98 zrw = ( gdepw(ji,jj,jk ,Kmm) - gdept(ji,jj,jk,Kmm) ) & … … 112 111 END_2D 113 112 114 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) !== indicators ==!115 113 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) !== indicators ==! 116 114 ! stability indicator: msks=1 if rn2>0; 0 elsewhere … … 143 141 ! ------------------ 144 142 ! Constant eddy coefficient: reset to the background value 145 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )146 143 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 147 144 zinr = 1._wp / zrau(ji,jj) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfdrg.F90
r14665 r14765 117 117 ! 118 118 IF( l_log_not_linssh ) THEN !== "log layer" ==! compute Cd and -Cd*|U| 119 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )120 119 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 121 120 imk = k_mk(ji,jj) ! ocean bottom level at t-points … … 130 129 END_2D 131 130 ELSE !== standard Cd ==! 132 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )133 131 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 134 132 imk = k_mk(ji,jj) ! ocean bottom level at t-points … … 178 176 ENDIF 179 177 180 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )181 DO_2D _OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1)178 ! NOTE: [tiling] no need for this to work on haloes because output is Krhs 179 DO_2D( 0, 0, 0, 0 ) 182 180 ikbu = mbku(ji,jj) ! deepest wet ocean u- & v-levels 183 181 ikbv = mbkv(ji,jj) … … 192 190 ! 193 191 IF( ln_isfcav ) THEN ! ocean cavities 194 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )195 DO_2D _OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1)192 ! NOTE: [tiling] no need for this to work on haloes because output is Krhs 193 DO_2D( 0, 0, 0, 0 ) 196 194 ikbu = miku(ji,jj) ! first wet ocean u- & v-levels 197 195 ikbv = mikv(ji,jj) … … 436 434 l_log_not_linssh = .FALSE. !- don't update Cd at each time step 437 435 ! 438 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) ! pCd0 = mask (and boosted) logarithmic drag coef.439 436 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) ! pCd0 = mask (and boosted) logarithmic drag coef. 440 437 zzz = 0.5_wp * e3t_0(ji,jj,k_mk(ji,jj)) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfevd.F90
r14665 r14765 97 97 ! END WHERE 98 98 ! 99 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )100 99 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 101 100 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN … … 119 118 ! END WHERE 120 119 121 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )122 120 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 123 121 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfgls.F90
r14665 r14765 181 181 182 182 ! Compute surface, top and bottom friction at T-points 183 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) !== surface ocean friction184 183 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) !== surface ocean friction 185 184 ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1) ! surface friction … … 189 188 ! 190 189 IF( .NOT.ln_drg_OFF ) THEN !== top/bottom friction (explicit before friction) 191 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! bottom friction (explicit before friction)192 190 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! bottom friction (explicit before friction) 193 191 zmsku = 0.5_wp * ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) … … 197 195 END_2D 198 196 IF( ln_isfcav ) THEN 199 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! top friction200 197 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! top friction 201 198 zmsku = 0.5_wp * ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) … … 230 227 END_2D 231 228 ! 232 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !== Compute dissipation rate ==!233 229 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) !== Compute dissipation rate ==! 234 230 eps(ji,jj,jk) = rc03 * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / hmxl_n(ji,jj,jk) … … 242 238 243 239 IF( nn_clos == 0 ) THEN ! Mellor-Yamada 244 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )245 240 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 246 241 zup = hmxl_n(ji,jj,jk) * gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) … … 264 259 ! Warning : after this step, en : right hand side of the matrix 265 260 266 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )267 261 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 268 262 ! … … 367 361 ! ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = rn_lmin 368 362 ! ! Balance between the production and the dissipation terms 369 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )370 363 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 371 364 !!gm This means that bottom and ocean w-level above have a specified "en" value. Sure ???? … … 387 380 ! NOTE: [tiling] not tested- ctl_stop with ln_isfcav! 388 381 IF( ln_isfcav) THEN ! top boundary (ocean cavity) 389 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )390 382 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 391 383 itop = mikt(ji,jj) ! k top w-point … … 406 398 CASE ( 1 ) ! Neumman boundary condition 407 399 ! 408 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )409 400 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 410 401 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 423 414 ! NOTE: [tiling] not tested- ctl_stop with ln_isfcav! 424 415 IF( ln_isfcav) THEN ! top boundary (ocean cavity) 425 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )426 416 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 427 417 itop = mikt(ji,jj) ! k top w-point … … 445 435 ! ---------------------------------------------------------- 446 436 ! 447 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1448 437 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 449 438 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 450 439 END_3D 451 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1452 440 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 453 441 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) 454 442 END_3D 455 ! [comm_cleanup] ! DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk456 443 DO_3DS_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpkm1, 2, -1 ) ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 457 444 en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) … … 471 458 ! 472 459 CASE( 0 ) ! k-kl (Mellor-Yamada) 473 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )474 460 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 475 461 psi(ji,jj,jk) = eb(ji,jj,jk) * hmxl_b(ji,jj,jk) … … 477 463 ! 478 464 CASE( 1 ) ! k-eps 479 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )480 465 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 481 466 psi(ji,jj,jk) = eps(ji,jj,jk) … … 483 468 ! 484 469 CASE( 2 ) ! k-w 485 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )486 470 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 487 471 psi(ji,jj,jk) = SQRT( eb(ji,jj,jk) ) / ( rc0 * hmxl_b(ji,jj,jk) ) … … 489 473 ! 490 474 CASE( 3 ) ! generic 491 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )492 475 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 493 476 psi(ji,jj,jk) = rc02 * eb(ji,jj,jk) * hmxl_b(ji,jj,jk)**rnn … … 503 486 ! Warning : after this step, en : right hand side of the matrix 504 487 505 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )506 488 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 507 489 ! … … 606 588 ! ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = vkarmn * r_z0_bot 607 589 ! ! Balance between the production and the dissipation terms 608 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )609 590 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 610 591 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 626 607 CASE ( 1 ) ! Neumman boundary condition 627 608 ! 628 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )629 609 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 630 610 ibot = mbkt(ji,jj) + 1 ! k bottom level of w-point … … 655 635 ! ---------------- 656 636 ! 657 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1658 637 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 659 638 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 660 639 END_3D 661 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1662 640 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 663 641 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) 664 642 END_3D 665 ! [comm_cleanup] ! DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk666 643 DO_3DS( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpkm1, 2, -1 ) ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 667 644 psi(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * psi(ji,jj,jk+1) ) / zdiag(ji,jj,jk) … … 674 651 ! 675 652 CASE( 0 ) ! k-kl (Mellor-Yamada) 676 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )677 653 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 678 654 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) … … 680 656 ! 681 657 CASE( 1 ) ! k-eps 682 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )683 658 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 684 659 eps(ji,jj,jk) = psi(ji,jj,jk) … … 686 661 ! 687 662 CASE( 2 ) ! k-w 688 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )689 663 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 690 664 eps(ji,jj,jk) = rc04 * en(ji,jj,jk) * psi(ji,jj,jk) … … 695 669 zex1 = ( 1.5_wp + rmm/rnn ) 696 670 zex2 = -1._wp / rnn 697 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )698 671 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 699 672 eps(ji,jj,jk) = zcoef * en(ji,jj,jk)**zex1 * psi(ji,jj,jk)**zex2 … … 704 677 ! Limit dissipation rate under stable stratification 705 678 ! -------------------------------------------------- 706 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) ! Note that this set boundary conditions on hmxl_n at the same time707 679 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) ! Note that this set boundary conditions on hmxl_n at the same time 708 680 ! limitation … … 724 696 ! 725 697 CASE ( 0 , 1 ) ! Galperin or Kantha-Clayson stability functions 726 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )727 698 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 728 699 ! zcof = l²/q² … … 742 713 ! 743 714 CASE ( 2, 3 ) ! Canuto stability functions 744 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )745 715 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 746 716 ! zcof = l²/q² … … 775 745 ! default value, in case jpk > mbkt(ji,jj)+1. Not needed but avoid a bug when looking for undefined values (-fpe0) 776 746 zstm(:,:,jpk) = 0. 777 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! update bottom with good values778 747 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! update bottom with good values 779 748 zstm(ji,jj,mbkt(ji,jj)+1) = zstm(ji,jj,mbkt(ji,jj)) … … 791 760 ! later overwritten by surface/bottom boundaries conditions, so we don't really care of p_avm(:,:1) and p_avm(:,:jpk) 792 761 ! for zd_lw and zd_up but they have to be defined to avoid a bug when looking for undefined values (-fpe0) 793 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk )794 762 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 795 763 zsqen = SQRT( 2._wp * en(ji,jj,jk) ) * hmxl_n(ji,jj,jk) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfiwm.F90
r14665 r14765 145 145 ! Set to zero the 1st and last vertical levels of appropriate variables 146 146 IF( iom_use("emix_iwm") ) THEN 147 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )148 147 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 149 148 zemx_iwm (ji,jj,1) = 0._wp ; zemx_iwm (ji,jj,jpk) = 0._wp … … 151 150 ENDIF 152 151 IF( iom_use("av_ratio") ) THEN 153 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )154 152 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 155 153 zav_ratio(ji,jj,1) = 0._wp ; zav_ratio(ji,jj,jpk) = 0._wp … … 157 155 ENDIF 158 156 IF( iom_use("av_wave") .OR. sn_cfctl%l_prtctl ) THEN 159 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )160 157 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 161 158 zav_wave (ji,jj,1) = 0._wp ; zav_wave (ji,jj,jpk) = 0._wp … … 169 166 ! !* Critical slope mixing: distribute energy over the time-varying ocean depth, 170 167 ! using an exponential decay from the seafloor. 171 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! part independent of the level172 168 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! part independent of the level 173 169 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean … … 176 172 END_2D 177 173 !!gm gde3w ==>>> check for ssh taken into account.... seem OK gde3w_n=gdept(:,:,:,Kmm) - ssh(:,:,Kmm) 178 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part179 174 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! complete with the level-dependent part 180 175 IF ( zfact(ji,jj) == 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization … … 197 192 CASE ( 1 ) ! Dissipation scales as N (recommended) 198 193 ! 199 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )200 194 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 201 195 zfact(ji,jj) = 0._wp 202 196 END_2D 203 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level204 197 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! part independent of the level 205 198 zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * SQRT( MAX( 0._wp, rn2(ji,jj,jk) ) ) * wmask(ji,jj,jk) 206 199 END_3D 207 200 ! 208 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )209 201 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 210 202 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 211 203 END_2D 212 204 ! 213 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part214 205 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! complete with the level-dependent part 215 206 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) … … 218 209 CASE ( 2 ) ! Dissipation scales as N^2 219 210 ! 220 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )221 211 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 222 212 zfact(ji,jj) = 0._wp 223 213 END_2D 224 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level225 214 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! part independent of the level 226 215 zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 227 216 END_3D 228 217 ! 229 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )230 218 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 231 219 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 232 220 END_2D 233 221 ! 234 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )235 222 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 236 223 zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zfact(ji,jj) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) … … 242 229 ! !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 243 230 ! 244 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )245 231 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 246 232 zwkb(ji,jj,1) = 0._wp 247 233 END_2D 248 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )249 234 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 250 235 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) 251 236 END_3D 252 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )253 237 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 254 238 zfact(ji,jj) = zwkb(ji,jj,jpkm1) 255 239 END_2D 256 240 ! 257 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )258 241 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 259 242 IF( zfact(ji,jj) /= 0 ) zwkb(ji,jj,jk) = zhdep(ji,jj) * ( zfact(ji,jj) - zwkb(ji,jj,jk) ) & 260 243 & * wmask(ji,jj,jk) / zfact(ji,jj) 261 244 END_3D 262 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )263 245 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 264 246 zwkb (ji,jj,1) = zhdep(ji,jj) * wmask(ji,jj,1) 265 247 END_2D 266 248 ! 267 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )268 249 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 269 250 IF ( rn2(ji,jj,jk) <= 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN ! optimization: EXP coast a lot … … 275 256 END_3D 276 257 ! 277 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )278 258 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 279 259 zfact(ji,jj) = 0._wp 280 260 END_2D 281 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! part independent of the level282 261 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! part independent of the level 283 262 zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 284 263 END_3D 285 264 ! 286 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )287 265 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 288 266 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 289 267 END_2D 290 268 ! 291 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! complete with the level-dependent part292 269 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! complete with the level-dependent part 293 270 zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zweight(ji,jj,jk) * zfact(ji,jj) * wmask(ji,jj,jk) & … … 298 275 !!gm this is to be replaced by just a constant value znu=1.e-6 m2/s 299 276 ! Calculate molecular kinematic viscosity 300 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 )301 277 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 302 278 znu_t(ji,jj,jk) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts(ji,jj,jk,jp_tem,Kmm) & … … 304 280 & + 0.02305_wp * ts(ji,jj,jk,jp_sal,Kmm) ) * tmask(ji,jj,jk) * r1_rho0 305 281 END_3D 306 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )307 282 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 308 283 znu_w(ji,jj,jk) = 0.5_wp * ( znu_t(ji,jj,jk-1) + znu_t(ji,jj,jk) ) * wmask(ji,jj,jk) … … 311 286 ! 312 287 ! Calculate turbulence intensity parameter Reb 313 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )314 288 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 315 289 zReb(ji,jj,jk) = zemx_iwm(ji,jj,jk) / MAX( 1.e-20_wp, znu_w(ji,jj,jk) * rn2(ji,jj,jk) ) … … 317 291 ! 318 292 ! Define internal wave-induced diffusivity 319 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )320 293 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 321 294 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 … … 323 296 ! 324 297 IF( ln_mevar ) THEN ! Variable mixing efficiency case : modify zav_wave in the 325 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes326 298 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 327 299 IF( zReb(ji,jj,jk) > 480.00_wp ) THEN … … 333 305 ENDIF 334 306 ! 335 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! Bound diffusivity by molecular value and 100 cm2/s336 307 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! Bound diffusivity by molecular value and 100 cm2/s 337 308 zav_wave(ji,jj,jk) = MIN( MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp ) * wmask(ji,jj,jk) … … 341 312 IF( .NOT. l_istiled .OR. ntile == 1 ) zztmp = 0._wp ! Do only on the first tile 342 313 !!gm used of glosum 3D.... 343 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )344 314 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 345 315 zztmp = zztmp + e3w(ji,jj,jk,Kmm) * e1e2t(ji,jj) & … … 367 337 IF( ln_tsdiff ) THEN !* Option for differential mixing of salinity and temperature 368 338 ztmp1 = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10( 1.e-20_wp ) - 0.60_wp ) ) 369 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! Calculate S/T diffusivity ratio as a function of Reb370 339 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! Calculate S/T diffusivity ratio as a function of Reb 371 340 ztmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 … … 377 346 END_3D 378 347 CALL iom_put( "av_ratio", zav_ratio ) 379 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !* update momentum & tracer diffusivity with wave-driven mixing380 348 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) !* update momentum & tracer diffusivity with wave-driven mixing 381 349 p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) * zav_ratio(ji,jj,jk) … … 385 353 ! 386 354 ELSE !* update momentum & tracer diffusivity with wave-driven mixing 387 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )388 355 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 389 356 p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfmxl.F90
r14665 r14765 97 97 END_2D 98 98 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 99 ! [comm_cleanup] ! DO_3D( 1, 1, 1, 1, nlb10, jpkm1 ) ! Mixed layer level: w-level100 99 DO_3D_OVR( nn_hls, nn_hls, nn_hls, nn_hls, nlb10, jpkm1 ) ! Mixed layer level: w-level 101 100 ikt = mbkt(ji,jj) … … 105 104 END_3D 106 105 ! depth of the mixed layer 107 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )108 106 DO_2D_OVR( nn_hls, nn_hls, nn_hls, nn_hls ) 109 107 iik = nmln(ji,jj) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfphy.F90
r14665 r14765 371 371 372 372 ! !* Lateral boundary conditions (sign unchanged) 373 ! [comm_cleanup] ! lbc_lnk shifted in stp 374 IF(nn_hls.eq.1) THEN 373 IF(nn_hls==1) THEN 375 374 ! NOTE: [tiling] this solution for lbc_lnk will not work if outer halo values are accessed before the end of the tiling loop 376 375 IF( .NOT. l_istiled .OR. ntile == nijtile ) THEN ! Do only on the last tile 377 IF( l_zdfsh2 ) THEN 378 CALL lbc_lnk( 'zdfphy', avm_k, 'W', 1.0_wp , avt_k, 'W', 1.0_wp, & 379 & avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 380 ELSE 381 CALL lbc_lnk( 'zdfphy', avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 376 IF( l_zdfsh2 ) THEN 377 CALL lbc_lnk( 'zdfphy', avm_k, 'W', 1.0_wp , avt_k, 'W', 1.0_wp, & 378 & avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 379 ELSE 380 CALL lbc_lnk( 'zdfphy', avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 381 ENDIF 382 ! 383 IF( l_zdfdrg ) THEN ! drag have been updated (non-linear cases) 384 IF( ln_isfcav ) THEN ; CALL lbc_lnk( 'zdfphy', rCdU_top, 'T', 1.0_wp , rCdU_bot, 'T', 1.0_wp ) ! top & bot drag 385 ELSE ; CALL lbc_lnk( 'zdfphy', rCdU_bot, 'T', 1.0_wp ) ! bottom drag only 382 386 ENDIF 383 ! 384 IF( l_zdfdrg ) THEN ! drag have been updated (non-linear cases) 385 IF( ln_isfcav ) THEN ; CALL lbc_lnk( 'zdfphy', rCdU_top, 'T', 1.0_wp , rCdU_bot, 'T', 1.0_wp ) ! top & bot drag 386 ELSE ; CALL lbc_lnk( 'zdfphy', rCdU_bot, 'T', 1.0_wp ) ! bottom drag only 387 ENDIF 388 ENDIF 389 ENDIF 387 ENDIF 388 ENDIF 390 389 ENDIF 391 390 ! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfric.F90
r14665 r14765 157 157 ! 158 158 ! !== avm and avt = F(Richardson number) ==! 159 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 2, jpkm1 ) ! coefficient = F(richardson number) (avm-weighted Ri)160 159 DO_3D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 2, jpkm1 ) ! coefficient = F(richardson number) (avm-weighted Ri) 161 160 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 ) ) ) … … 171 170 IF( ln_mldw ) THEN !== set a minimum value in the Ekman layer ==! 172 171 ! 173 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) !* Ekman depth174 172 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 175 173 zustar = SQRT( taum(ji,jj) * r1_rho0 ) … … 177 175 zh_ekm(ji,jj) = MAX( rn_mldmin , MIN( zhek , rn_mldmax ) ) ! set allowed range 178 176 END_2D 179 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !* minimum mixing coeff. within the Ekman layer180 177 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) !* minimum mixing coeff. within the Ekman layer 181 178 IF( gdept(ji,jj,jk,Kmm) < zh_ekm(ji,jj) ) THEN -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfsh2.F90
r14665 r14765 66 66 ! TODO: [tiling] NOT TESTED- requires key_oasis3 67 67 IF ( cpl_sdrftx .AND. ln_stshear ) THEN ! Surface Stokes Drift available ===>>> shear + stokes drift contibution 68 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 )69 68 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 70 69 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & … … 80 79 END_2D 81 80 ELSE 82 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) !* 2 x shear production at uw- and vw-points (energy conserving form)83 81 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) !* 2 x shear production at uw- and vw-points (energy conserving form) 84 82 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & … … 94 92 END_2D 95 93 ENDIF 96 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) !* shear production at w-point ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked)97 94 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) !* shear production at w-point ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 98 95 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfswm.F90
r14665 r14765 63 63 ! 64 64 zcoef = 1._wp * 0.353553_wp 65 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )66 65 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 67 66 zqb = zcoef * hsw(ji,jj) * tsd2d(ji,jj) * EXP( -3. * wnum(ji,jj) * gdepw(ji,jj,jk,Kmm) ) * wmask(ji,jj,jk) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdftke.F90
r14665 r14765 241 241 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 242 242 ! 243 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )244 243 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 245 244 en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) … … 259 258 IF( .NOT.ln_drg_OFF ) THEN !== friction used as top/bottom boundary condition on TKE 260 259 ! 261 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! bottom friction262 260 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! bottom friction 263 261 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) … … 269 267 END_2D 270 268 IF( ln_isfcav ) THEN 271 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! top friction272 269 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! top friction 273 270 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) … … 298 295 !!gm ! PS: currently we don't have neither the 2 stress components at t-point !nor the angle between u* and u_s 299 296 !!gm ! so we will overestimate the LC velocity.... !!gm I will do the work if !LC have an effect ! 300 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )301 297 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 302 298 !!XC zWlc2(ji,jj) = 0.5_wp * SQRT( taum(ji,jj) * r1_rho0 * ( ut0sd(ji,jj)**2 +vt0sd(ji,jj)**2 ) ) … … 306 302 ! Projection of Stokes drift in the wind stress direction 307 303 ! 308 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )309 304 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 310 305 ztaui = 0.5_wp * ( utau(ji,jj) + utau(ji-1,jj) ) … … 319 314 ! ! 1/2 Wlc^2 = 0.5 * 0.016 * 0.016 |tau| /( rho_air Cdrag ) 320 315 zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) ! to convert stress in 10m wind using a constant drag 321 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )322 316 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 323 317 zWlc2(ji,jj) = zcof * taum(ji,jj) … … 338 332 ! !- compare LHS to RHS of Eq.47 339 333 imlc(:,:) = mbkt(A2D(nn_hls)) + 1 ! Initialization to the number of w ocean point (=2 over land) 340 ! [comm_cleanup] ! DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 )341 334 DO_3DS( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpkm1, 2, -1 ) 342 335 IF( zpelc(ji,jj,jk) > zWlc2(ji,jj) ) imlc(ji,jj) = jk 343 336 END_3D 344 337 ! ! finite LC depth 345 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 )346 338 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 347 339 zhlc(ji,jj) = gdepw(ji,jj,imlc(ji,jj),Kmm) … … 349 341 ! 350 342 zcof = 0.016 / SQRT( zrhoa * zcdrag ) 351 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )352 343 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 353 344 zus = SQRT( 2. * zWlc2(ji,jj) ) ! Stokes drift 354 345 zus3(ji,jj) = MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 355 346 END_2D 356 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !* TKE Langmuir circulation source term added to en357 347 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) !* TKE Langmuir circulation source term added to en 358 348 IF ( zus3(ji,jj) /= 0._wp ) THEN … … 376 366 ! 377 367 IF( nn_pdl == 1 ) THEN !* Prandtl number = F( Ri ) 378 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )379 368 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 380 369 ! ! local Richardson number … … 389 378 ENDIF 390 379 ! 391 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) !* Matrix and right hand side in en392 380 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) !* Matrix and right hand side in en 393 381 zcof = zfact1 * tmask(ji,jj,jk) … … 420 408 421 409 CASE ( 0 ) ! Dirichlet BC 422 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! en(1) = rn_ebb taum / rho0 (min value rn_emin0)423 410 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! en(1) = rn_ebb taum / rho0 (min value rn_emin0) 424 411 IF ( phioc(ji,jj) < 0 ) phioc(ji,jj) = 0._wp … … 428 415 429 416 CASE ( 1 ) ! Neumann BC 430 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )431 417 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 432 418 IF ( phioc(ji,jj) < 0 ) phioc(ji,jj) = 0._wp … … 443 429 ! 444 430 ! !* Matrix inversion from level 2 (tke prescribed at level 1) 445 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1446 431 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 447 432 zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) … … 451 436 ! zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1) ! Surface boudary conditions on tke 452 437 ! END_2D 453 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )454 438 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 455 439 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) 456 440 END_3D 457 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk458 441 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 459 442 en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 460 443 END_2D 461 ! [comm_cleanup] ! DO_3DS( 0, 0, 0, 0, jpk-2, 2, -1 )462 444 DO_3DS_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpk-2, 2, -1 ) 463 445 en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 464 446 END_3D 465 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! set the minimum value of tke466 447 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! set the minimum value of tke 467 448 en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) … … 477 458 ! 478 459 IF( nn_etau == 1 ) THEN !* penetration below the mixed layer (rn_efr fraction) 479 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )480 460 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 481 461 en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) ) & … … 483 463 END_3D 484 464 ELSEIF( nn_etau == 2 ) THEN !* act only at the base of the mixed layer (jk=nmln) (rn_efr fraction) 485 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )486 465 DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 487 466 jk = nmln(ji,jj) … … 491 470 ! TODO: [tiling] NOT TESTED- requires ln_cpl 492 471 ELSEIF( nn_etau == 3 ) THEN !* penetration belox the mixed layer (HF variability) 493 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )494 472 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 495 473 ztx2 = utau(ji-1,jj ) + utau(ji,jj) … … 574 552 zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 575 553 #if ! defined key_si3 && ! defined key_cice 576 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) ! No sea-ice577 554 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! No sea-ice 578 555 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) … … 583 560 ! 584 561 CASE( 0 ) ! No scaling under sea-ice 585 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )586 562 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 587 563 zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) … … 589 565 ! 590 566 CASE( 1 ) ! scaling with constant sea-ice thickness 591 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )592 567 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 593 568 zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & … … 596 571 ! 597 572 CASE( 2 ) ! scaling with mean sea-ice thickness 598 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )599 573 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 600 574 #if defined key_si3 … … 609 583 ! 610 584 CASE( 3 ) ! scaling with max sea-ice thickness 611 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )612 585 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 613 586 zmaxice = MAXVAL( h_i(ji,jj,:) ) … … 619 592 #endif 620 593 ! 621 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )622 594 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 623 595 zmxlm(ji,jj,1) = MAX( rn_mxl0, zmxlm(ji,jj,1) ) … … 629 601 ENDIF 630 602 ! 631 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )632 603 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 633 604 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) … … 645 616 ! where wmask = 0 set zmxlm == e3w(:,:,:,Kmm) 646 617 CASE ( 0 ) ! bounded by the distance to surface and bottom 647 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )648 618 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 649 619 zemxl = MIN( gdepw(ji,jj,jk,Kmm) - gdepw(ji,jj,mikt(ji,jj),Kmm), zmxlm(ji,jj,jk), & … … 657 627 ! 658 628 CASE ( 1 ) ! bounded by the vertical scale factor 659 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )660 629 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 661 630 zemxl = MIN( e3w(ji,jj,jk,Kmm), zmxlm(ji,jj,jk) ) … … 665 634 ! 666 635 CASE ( 2 ) ! |dk[xml]| bounded by e3t : 667 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! from the surface to the bottom :668 636 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! from the surface to the bottom : 669 637 zmxlm(ji,jj,jk) = & 670 638 & MIN( zmxlm(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 671 639 END_3D 672 ! [comm_cleanup] ! DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) ! from the bottom to the surface :673 640 DO_3DS( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpkm1, 2, -1 ) ! from the bottom to the surface : 674 641 zemxl = MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) … … 678 645 ! 679 646 CASE ( 3 ) ! lup and ldown, |dk[xml]| bounded by e3t : 680 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) ! from the surface to the bottom : lup681 647 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! from the surface to the bottom : lup 682 648 zmxld(ji,jj,jk) = & 683 649 & MIN( zmxld(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 684 650 END_3D 685 ! [comm_cleanup] ! DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) ! from the bottom to the surface : ldown686 651 DO_3DS( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, jpkm1, 2, -1 ) ! from the bottom to the surface : ldown 687 652 zmxlm(ji,jj,jk) = & 688 653 & MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 689 654 END_3D 690 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )691 655 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 692 656 zemlm = MIN ( zmxld(ji,jj,jk), zmxlm(ji,jj,jk) ) … … 701 665 ! ! Vertical eddy viscosity and diffusivity (avm and avt) 702 666 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 703 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !* vertical eddy viscosity & diffivity at w-points704 667 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) !* vertical eddy viscosity & diffivity at w-points 705 668 zsqen = SQRT( en(ji,jj,jk) ) … … 712 675 ! 713 676 IF( nn_pdl == 1 ) THEN !* Prandtl number case: update avt 714 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )715 677 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 716 678 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) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/nemogcm.F90
r14574 r14765 390 390 CALL mpp_init 391 391 392 #if defined key_loop_fusion 393 IF( nn_hls == 1 ) THEN 394 CALL ctl_stop( 'STOP', 'nemogcm : Loop fusion can be used only with extra-halo' ) 395 ENDIF 396 #endif 397 392 398 CALL halo_mng_init() 393 399 ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/step.F90
r14753 r14765 362 362 !! 363 363 !!jc2: dynnxt must be the latest call. e3t(:,:,:,Nbb) are indeed updated in that routine 364 365 364 CALL tra_atf ( kstp, Nbb, Nnn, Naa, ts ) ! time filtering of "now" tracer arrays 366 365 CALL dyn_atf ( kstp, Nbb, Nnn, Naa, uu, vv, e3t, e3u, e3v ) ! time filtering of "now" velocities and scale factors -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/SWE/stprk3.F90
r14764 r14765 172 172 ! 173 173 CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 174 ! [ comm_cleanup ] ! lbc_lnk from DYN - needed for ssh_nxt 175 IF (nn_hls.eq.2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 174 IF (nn_hls==2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 176 175 ! 177 176 ! !== Swap time levels ==! … … 239 238 ! 240 239 CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 241 ! [ comm_cleanup ] ! lbc_lnk from DYN - needed for ssh_nxt 242 IF (nn_hls.eq.2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 240 IF (nn_hls==2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 243 241 ! 244 242 ! !== Swap time levels ==! … … 304 302 ! 305 303 CALL lbc_lnk( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 306 ! [ comm_cleanup ] ! lbc_lnk from DYN - needed for ssh_nxt 307 IF (nn_hls.eq.2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 304 IF (nn_hls==2) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Naa), 'U', 1., r3v(:,:,Naa), 'U', 1.) 308 305 ! 309 306 ! !== Swap time levels ==! -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/TOP/TRP/trcadv.F90
r14764 r14765 129 129 CALL tra_adv_cen( kt, nittrc000,'TRC', zuu, zvv, zww, Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 130 130 CASE ( np_FCT ) ! FCT : 2nd / 4th order 131 IF (nn_hls .EQ.2) THEN131 IF (nn_hls==2) THEN 132 132 #if defined key_loop_fusion 133 133 CALL tra_adv_fct_lf( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) … … 139 139 END IF 140 140 CASE ( np_MUS ) ! MUSCL 141 IF (nn_hls .EQ.2) THEN141 IF (nn_hls==2) THEN 142 142 #if defined key_loop_fusion 143 143 CALL tra_adv_mus_lf( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups ) -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/TOP/TRP/trcldf.F90
r14636 r14765 83 83 zahv(:,:,:) = rldf * ahtv(:,:,:) 84 84 ! !* Enhanced zonal diffusivity coefficent in the equatorial domain 85 ! [ comm_cleanup ] DO_3D( 1, 1, 1, 1, 1, jpk )86 85 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk ) 87 86 IF( gdept(ji,jj,jk,Kmm) > 200. .AND. gphit(ji,jj) < 5. .AND. gphit(ji,jj) > -5. ) THEN … … 103 102 & ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, 1 ) 104 103 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: all operator (iso-level, -neutral) 105 IF(nn_hls.EQ.2) CALL lbc_lnk( 'trc_ldf', ptr(:,:,:,:,Kbb), 'T',1.)106 104 CALL tra_ldf_blp ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 107 105 & ptr(:,:,:,:,Kbb) , ptr(:,:,:,:,Krhs), jptra, nldf_trc )
Note: See TracChangeset
for help on using the changeset viewer.