Changes from NEMO/branches/2021/dev_r14393_HPC-03_Mele_Comm_Cleanup/src/OCE/TRA/traldf_iso.F90 at r14757 to NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_iso.F90 at r14765
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_iso.F90
r14757 r14765 132 132 INTEGER :: ji, jj, jk, jn ! dummy loop indices 133 133 INTEGER :: ikt 134 INTEGER :: ierr 134 INTEGER :: ierr, iij ! local integer 135 135 REAL(wp) :: zmsku, zahu_w, zabe1, zcof1, zcoef3 ! local scalars 136 136 REAL(wp) :: zmskv, zahv_w, zabe2, zcof2, zcoef4 ! - - … … 141 141 ! 142 142 IF( kpass == 1 .AND. kt == kit000 ) THEN 143 IF( ntile == 0.OR. ntile == 1 ) THEN ! Do only on the first tile143 IF( .NOT. l_istiled .OR. ntile == 1 ) THEN ! Do only on the first tile 144 144 IF(lwp) WRITE(numout,*) 145 145 IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype … … 147 147 ENDIF 148 148 ! 149 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk )149 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 150 150 akz (ji,jj,jk) = 0._wp 151 151 ah_wslp2(ji,jj,jk) = 0._wp … … 153 153 ENDIF 154 154 ! 155 IF( ntile == 0.OR. ntile == 1 ) THEN ! Do only on the first tile155 IF( .NOT. l_istiled .OR. ntile == 1 ) THEN ! Do only on the first tile 156 156 l_hst = .FALSE. 157 157 l_ptr = .FALSE. … … 161 161 ENDIF 162 162 ! 163 ! Define pt_rhs halo points for multi-point haloes in bilaplacian case 164 IF( nldf_tra == np_blp_i .AND. kpass == 1 ) THEN ; iij = nn_hls 165 ELSE ; iij = 1 166 ENDIF 167 163 168 ! 164 169 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 172 177 IF( kpass == 1 ) THEN !== first pass only ==! 173 178 ! 174 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )179 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 175 180 ! 176 181 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & … … 186 191 zahv_w = ( ( pahv(ji,jj ,jk-1) + pahv(ji,jj-1,jk) & 187 192 & ) & ! bracket for halo 1 - halo 2 compatibility 188 & + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj ,jk) & 193 & + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj ,jk) & 189 194 & ) ) * zmskv ! bracket for halo 1 - halo 2 compatibility 190 195 ! … … 194 199 ! 195 200 IF( ln_traldf_msc ) THEN ! stabilizing vertical diffusivity coefficient 196 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )201 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 197 202 ! round brackets added to fix the order of floating point operations 198 203 ! needed to ensure halo 1 - halo 2 compatibility … … 202 207 & ) & ! bracket for halo 1 - halo 2 compatibility 203 208 & + ( ( pahv(ji,jj ,jk) + pahv(ji,jj ,jk-1) ) / ( e2v(ji,jj ) * e2v(ji,jj ) ) & 204 & + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) ) & 209 & + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) ) & 205 210 & ) ) ! bracket for halo 1 - halo 2 compatibility 206 211 END_3D 207 212 ! 208 213 IF( ln_traldf_blp ) THEN ! bilaplacian operator 209 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )214 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 210 215 akz(ji,jj,jk) = 16._wp & 211 216 & * ah_wslp2 (ji,jj,jk) & … … 215 220 END_3D 216 221 ELSEIF( ln_traldf_lap ) THEN ! laplacian operator 217 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )222 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 218 223 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 219 224 zcoef0 = rDt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) … … 223 228 ! 224 229 ELSE ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 225 DO_3D ( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk )230 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 226 231 akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 227 232 END_3D … … 236 241 !! I - masked horizontal derivative 237 242 !!---------------------------------------------------------------------- 238 !!gm : bug.... why (x,:,:)? (1,jpj,:) and (jpi,1,:) should be sufficient.... 239 zdit (ntsi-nn_hls,:,:) = 0._wp ; zdit (ntei+nn_hls,:,:) = 0._wp 240 zdjt (ntsi-nn_hls,:,:) = 0._wp ; zdjt (ntei+nn_hls,:,:) = 0._wp 241 !!end 243 zdit(:,:,:) = 0._wp 244 zdjt(:,:,:) = 0._wp 242 245 243 246 ! Horizontal tracer gradient 244 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 )247 DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) 245 248 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 246 249 zdjt(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 247 250 END_3D 248 251 IF( ln_zps ) THEN ! botton and surface ocean correction of the horizontal gradient 249 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) ! bottom correction (partial bottom cell)252 DO_2D( iij, iij-1, iij, iij-1 ) ! bottom correction (partial bottom cell) 250 253 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 251 254 zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 252 255 END_2D 253 256 IF( ln_isfcav ) THEN ! first wet level beneath a cavity 254 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )257 DO_2D( iij, iij-1, iij, iij-1 ) 255 258 IF( miku(ji,jj) > 1 ) zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn) 256 259 IF( mikv(ji,jj) > 1 ) zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn) … … 265 268 DO jk = 1, jpkm1 ! Horizontal slab 266 269 ! 267 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls)270 DO_2D( iij, iij, iij, iij ) 268 271 ! !== Vertical tracer gradient 269 272 zdk1t(ji,jj) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1) ! level jk+1 … … 274 277 END_2D 275 278 ! 276 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) !== Horizontal fluxes279 DO_2D( iij, iij-1, iij, iij-1 ) !== Horizontal fluxes 277 280 zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 278 281 zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) … … 292 295 & + zcof1 * ( ( zdkt (ji+1,jj) + zdk1t(ji,jj) & 293 296 & ) & ! bracket for halo 1 - halo 2 compatibility 294 & + ( zdk1t(ji+1,jj) + zdkt (ji,jj) & 297 & + ( zdk1t(ji+1,jj) + zdkt (ji,jj) & 295 298 & ) & ! bracket for halo 1 - halo 2 compatibility 296 299 & ) ) * umask(ji,jj,jk) … … 300 303 & + ( zdk1t(ji,jj+1) + zdkt (ji,jj) & 301 304 & ) & ! bracket for halo 1 - halo 2 compatibility 302 & ) ) * vmask(ji,jj,jk) 305 & ) ) * vmask(ji,jj,jk) 303 306 END_2D 304 307 ! 305 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) !== horizontal divergence and add to pta308 DO_2D( iij-1, iij-1, iij-1, iij-1 ) !== horizontal divergence and add to pta 306 309 ! round brackets added to fix the order of floating point operations 307 310 ! needed to ensure halo 1 - halo 2 compatibility … … 324 327 ztfw(:,:, 1 ) = 0._wp ; ztfw(:,:,jpk) = 0._wp 325 328 326 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) ! interior (2=<jk=<jpk-1)329 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) ! interior (2=<jk=<jpk-1) 327 330 ! 328 331 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & … … 344 347 & ) & ! bracket for halo 1 - halo 2 compatibility 345 348 & + ( zdit(ji-1,jj ,jk-1) + zdit(ji ,jj ,jk) & 346 & ) & ! bracket for halo 1 - halo 2 compatibility 349 & ) & ! bracket for halo 1 - halo 2 compatibility 347 350 & ) & 348 351 & + zcoef4 * ( ( zdjt(ji ,jj ,jk-1) + zdjt(ji ,jj-1,jk) & … … 354 357 ! !== add the vertical 33 flux ==! 355 358 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 356 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )359 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 357 360 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 358 361 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & … … 363 366 SELECT CASE( kpass ) 364 367 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 365 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )368 DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 366 369 ztfw(ji,jj,jk) = & 367 370 & ztfw(ji,jj,jk) + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) & … … 369 372 END_3D 370 373 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 371 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )374 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 372 375 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 373 376 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & … … 377 380 ENDIF 378 381 ! 379 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==!382 DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==! 380 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) & 381 384 & / e3t(ji,jj,jk,Kmm)
Note: See TracChangeset
for help on using the changeset viewer.