Changeset 12766
- Timestamp:
- 2020-04-17T14:54:46+02:00 (5 years ago)
- Location:
- NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/cfgs/SHARED/namelist_ref
r12530 r12766 94 94 ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present 95 95 ! ! in netcdf input files, as the start j-row for reading 96 / 97 !----------------------------------------------------------------------- 98 &namtile ! parameters of the tiling 99 !----------------------------------------------------------------------- 100 ln_tile = .false. ! Use tiling (T) or not (F) 101 nn_tile_i = 10 ! Length of tiles in i 102 nn_tile_j = 10 ! Length of tiles in j 96 103 / 97 104 !----------------------------------------------------------------------- -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/DOM/dom_oce.F90
r12489 r12766 72 72 ! ! = 7 bi-cyclic East-West AND North-South 73 73 LOGICAL, PUBLIC :: l_Iperio, l_Jperio ! should we explicitely take care I/J periodicity 74 75 ! Tiling namelist 76 LOGICAL, PUBLIC :: ln_tile 77 INTEGER :: nn_tile_i, nn_tile_j 78 79 ! Tile indices 80 TYPE, PUBLIC :: TILE 81 INTEGER :: ntsi, ntsj, ntei, ntej, ntsim1, ntsjm1, nteip1, ntejp1, ntile 82 END TYPE TILE 74 83 75 84 ! ! domain MPP decomposition parameters -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/DOM/domain.F90
r12489 r12766 49 49 50 50 PUBLIC dom_init ! called by nemogcm.F90 51 PUBLIC dom_tile ! called by step.F90 51 52 PUBLIC domain_cfg ! called by nemogcm.F90 52 53 … … 270 271 271 272 273 SUBROUTINE dom_tile(kntile, ktile) 274 !!---------------------------------------------------------------------- 275 !! *** ROUTINE dom_tile *** 276 !! 277 !! ** Purpose : Set domain indices for specified tile 278 !! 279 !! ** Action : - ntile : current tile number 280 !! - ntsi, ntsj : start of internal part of domain 281 !! - ntei, ntej : end of internal part of domain 282 !! - ntsim1, ntsjm1 : start of domain 283 !! - nteip1, ntejp1 : end of domain 284 !!---------------------------------------------------------------------- 285 INTEGER , INTENT(in ) :: kntile ! Tile number 286 TYPE(TILE), INTENT(out) :: ktile ! Tile indices 287 INTEGER :: iitile, ijtile ! Tile number in i and j 288 !!---------------------------------------------------------------------- 289 290 IF( ln_tile .AND. kntile > 0 ) THEN ! Tile domain 291 iitile = 1 + MOD( kntile - 1, jpnitile ) 292 ijtile = 1 + (kntile - 1) / jpnitile 293 294 ktile % ntile = kntile 295 ktile % ntsi = 2 + (iitile - 1) * nn_tile_i 296 ktile % ntsj = 2 + (ijtile - 1) * nn_tile_j 297 ktile % ntei = MIN(ktile % ntsi + nn_tile_i - 1, jpim1) ! Size of last tile limited by full domain 298 ktile % ntej = MIN(ktile % ntsj + nn_tile_j - 1, jpjm1) ! 299 ktile % ntsim1 = ktile % ntsi - 1 300 ktile % ntsjm1 = ktile % ntsj - 1 301 ktile % nteip1 = ktile % ntei + 1 302 ktile % ntejp1 = ktile % ntej + 1 303 ELSE ! Full domain 304 ktile % ntile = 1 305 ktile % ntsi = 2 306 ktile % ntsj = 2 307 ktile % ntei = jpim1 308 ktile % ntej = jpjm1 309 ktile % ntsim1 = 1 310 ktile % ntsjm1 = 1 311 ktile % nteip1 = jpi 312 ktile % ntejp1 = jpj 313 ENDIF 314 END SUBROUTINE dom_tile 315 316 272 317 SUBROUTINE dom_nam 273 318 !!---------------------------------------------------------------------- … … 278 323 !! ** input : - namrun namelist 279 324 !! - namdom namelist 325 !! - namtile namelist 280 326 !! - namnc4 namelist ! "key_netcdf4" only 281 327 !!---------------------------------------------------------------------- … … 290 336 & ln_cfmeta, ln_xios_read, nn_wxios 291 337 NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_meshmask 338 NAMELIST/namtile/ ln_tile, nn_tile_i, nn_tile_j 292 339 #if defined key_netcdf4 293 340 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 417 464 r1_Dt = 1._wp / rDt 418 465 466 READ ( numnam_ref, namtile, IOSTAT = ios, ERR = 905 ) 467 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtile in reference namelist' ) 468 READ ( numnam_cfg, namtile, IOSTAT = ios, ERR = 906 ) 469 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtile in configuration namelist' ) 470 IF(lwm) WRITE( numond, namtile ) 471 472 ! Set tile decomposition 473 IF( ln_tile ) THEN 474 jpnitile = (jpi - 2) / nn_tile_i 475 jpnjtile = (jpj - 2) / nn_tile_j 476 IF( MOD( jpi - 2, nn_tile_i ) /= 0 ) jpnitile = jpnitile + 1 477 IF( MOD( jpj - 2, nn_tile_j ) /= 0 ) jpnjtile = jpnjtile + 1 478 ELSE 479 jpnitile = 1 480 jpnjtile = 1 481 ENDIF 482 jpnijtile = jpnitile * jpnjtile 483 484 IF(lwp) THEN 485 WRITE(numout,*) 486 WRITE(numout,*) ' Namelist : namtile --- tiling decomposition' 487 WRITE(numout,*) ' Tiling (T) or not (F) ln_tile = ', ln_tile 488 WRITE(numout,*) ' Length of tile in i nn_tile_i = ', nn_tile_i 489 WRITE(numout,*) ' Length of tile in j nn_tile_j = ', nn_tile_j 490 WRITE(numout,*) 491 IF( ln_tile ) THEN 492 WRITE(numout,*) ' The domain will be decomposed into', jpnijtile, 'tiles of size', nn_tile_i, 'x', nn_tile_j 493 ELSE 494 WRITE(numout,*) ' Domain tiling will NOT be used' 495 ENDIF 496 ENDIF 497 419 498 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 420 499 lrxios = ln_xios_read.AND.ln_rstart -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/TRA/traldf.F90
r12377 r12766 45 45 CONTAINS 46 46 47 SUBROUTINE tra_ldf( kt, Kbb, Kmm, pts, Krhs )47 SUBROUTINE tra_ldf(ktile, kt, Kbb, Kmm, pts, Krhs ) 48 48 !!---------------------------------------------------------------------- 49 49 !! *** ROUTINE tra_ldf *** … … 51 51 !! ** Purpose : compute the lateral ocean tracer physics. 52 52 !!---------------------------------------------------------------------- 53 TYPE(TILE), INTENT(in ) :: ktile ! Tile indices 53 54 INTEGER, INTENT(in ) :: kt ! ocean time-step index 54 55 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! ocean time level indices … … 58 59 !!---------------------------------------------------------------------- 59 60 ! 60 IF( ln_timing ) CALL timing_start('tra_ldf') 61 IF( ktile % ntile == 1 ) THEN ! Do only on the first tile 62 ! TODO: TO BE TILED 63 IF( ln_timing ) CALL timing_start('tra_ldf') 64 ENDIF 61 65 ! 62 IF( l_trdtra ) THEN !* Save ta and sa trends 63 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 64 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) 65 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) 66 IF( ktile % ntile == jpnijtile ) THEN ! Do only after all tiles finish 67 IF( l_trdtra ) THEN !* Save ta and sa trends 68 ! TODO: TO BE TILED 69 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 70 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) 71 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) 72 ENDIF 66 73 ENDIF 67 74 ! … … 70 77 CALL tra_ldf_lap ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) 71 78 CASE ( np_lap_i ) ! laplacian: standard iso-neutral operator (Madec) 72 CALL tra_ldf_iso ( kt , Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 )79 CALL tra_ldf_iso ( ktile, kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) 73 80 CASE ( np_lap_it ) ! laplacian: triad iso-neutral operator (griffies) 74 81 CALL tra_ldf_triad( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) … … 77 84 END SELECT 78 85 ! 79 IF( l_trdtra ) THEN !* save the horizontal diffusive trends for further diagnostics 80 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 81 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 82 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_ldf, ztrdt ) 83 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_ldf, ztrds ) 84 DEALLOCATE( ztrdt, ztrds ) 86 IF( ktile % ntile == jpnijtile ) THEN ! Do only after all tiles finish 87 IF( l_trdtra ) THEN !* save the horizontal diffusive trends for further diagnostics 88 ! TODO: TO BE TILED 89 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 90 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 91 ! TODO: TO BE TILED 92 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_ldf, ztrdt ) 93 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_ldf, ztrds ) 94 DEALLOCATE( ztrdt, ztrds ) 95 ENDIF 96 97 ! !* print mean trends (used for debugging) 98 ! TODO: TO BE TILED 99 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' ldf - Ta: ', mask1=tmask, & 100 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 101 ! 102 ! TODO: TO BE TILED 103 IF( ln_timing ) CALL timing_stop('tra_ldf') 85 104 ENDIF 86 ! !* print mean trends (used for debugging)87 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' ldf - Ta: ', mask1=tmask, &88 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )89 !90 IF( ln_timing ) CALL timing_stop('tra_ldf')91 105 ! 92 106 END SUBROUTINE tra_ldf -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/TRA/traldf_iso.F90
r12489 r12766 36 36 PUBLIC tra_ldf_iso ! routine called by step.F90 37 37 38 LOGICAL :: l_ptr ! flag to compute poleward transport39 LOGICAL :: l_hst ! flag to compute heat transport40 41 38 !! * Substitutions 42 39 # include "do_loop_substitute.h90" … … 48 45 CONTAINS 49 46 50 SUBROUTINE tra_ldf_iso( kt , Kmm, kit000, cdtype, pahu, pahv, &47 SUBROUTINE tra_ldf_iso( ktile, kt, Kmm, kit000, cdtype, pahu, pahv, & 51 48 & pgu , pgv , pgui, pgvi, & 52 49 & pt , pt2 , pt_rhs , kjpt , kpass ) … … 91 88 !! ** Action : Update pt_rhs arrays with the before rotated diffusion 92 89 !!---------------------------------------------------------------------- 90 TYPE(TILE) , INTENT(in ) :: ktile ! Tile indices 93 91 INTEGER , INTENT(in ) :: kt ! ocean time-step index 94 92 INTEGER , INTENT(in ) :: kit000 ! first time step index … … 104 102 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 105 103 ! 104 LOGICAL :: l_ptr ! flag to compute poleward transport 105 LOGICAL :: l_hst ! flag to compute heat transport 106 106 INTEGER :: ji, jj, jk, jn ! dummy loop indices 107 107 INTEGER :: ikt … … 110 110 REAL(wp) :: zmskv, zahv_w, zabe2, zcof2, zcoef4 ! - - 111 111 REAL(wp) :: zcoef0, ze3w_2, zsign ! - - 112 REAL(wp), DIMENSION( jpi,jpj) :: zdkt, zdk1t, z2d113 REAL(wp), DIMENSION( jpi,jpj,jpk) :: zdit, zdjt, zftu, zftv, ztfw112 REAL(wp), DIMENSION(IND_2D) :: zdkt, zdk1t, z2d 113 REAL(wp), DIMENSION(IND_2D,jpk) :: zdit, zdjt, zftu, zftv, ztfw 114 114 !!---------------------------------------------------------------------- 115 115 ! 116 116 IF( kpass == 1 .AND. kt == kit000 ) THEN 117 IF(lwp) WRITE(numout,*) 118 IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype 119 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 120 ! 121 akz (:,:,:) = 0._wp 122 ah_wslp2(:,:,:) = 0._wp 117 IF( ktile % ntile == 1 ) THEN ! Do only on the first tile 118 ! TODO: TO BE TILED 119 IF(lwp) WRITE(numout,*) 120 IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype 121 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 122 ENDIF 123 ! 124 DO_3D_11_11_T( 1, jpk ) 125 akz (ji,jj,jk) = 0._wp 126 ah_wslp2(ji,jj,jk) = 0._wp 127 END_3D 123 128 ENDIF 124 129 ! … … 140 145 IF( kpass == 1 ) THEN !== first pass only ==! 141 146 ! 142 DO_3D_00_00 ( 2, jpkm1 )147 DO_3D_00_00_T( 2, jpkm1 ) 143 148 ! 144 149 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & … … 157 162 ! 158 163 IF( ln_traldf_msc ) THEN ! stabilizing vertical diffusivity coefficient 159 DO_3D_00_00 ( 2, jpkm1 )164 DO_3D_00_00_T( 2, jpkm1 ) 160 165 akz(ji,jj,jk) = 0.25_wp * ( & 161 166 & ( pahu(ji ,jj,jk) + pahu(ji ,jj,jk-1) ) / ( e1u(ji ,jj) * e1u(ji ,jj) ) & … … 166 171 ! 167 172 IF( ln_traldf_blp ) THEN ! bilaplacian operator 168 DO_3D_10_10 ( 2, jpkm1 )173 DO_3D_10_10_T( 2, jpkm1 ) 169 174 akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk) & 170 175 & * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) ) ) 171 176 END_3D 172 177 ELSEIF( ln_traldf_lap ) THEN ! laplacian operator 173 DO_3D_10_10 ( 2, jpkm1 )178 DO_3D_10_10_T( 2, jpkm1 ) 174 179 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 175 180 zcoef0 = rDt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) … … 179 184 ! 180 185 ELSE ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 181 akz(:,:,:) = ah_wslp2(:,:,:) 186 DO_3D_11_11_T( 1, jpk ) 187 akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 188 END_3D 182 189 ENDIF 183 190 ENDIF … … 196 203 197 204 ! Horizontal tracer gradient 198 DO_3D_10_10 ( 1, jpkm1 )205 DO_3D_10_10_T( 1, jpkm1 ) 199 206 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 200 207 zdjt(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 201 208 END_3D 202 209 IF( ln_zps ) THEN ! botton and surface ocean correction of the horizontal gradient 203 DO_2D_10_10 210 DO_2D_10_10_T 204 211 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 205 212 zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 206 213 END_2D 207 214 IF( ln_isfcav ) THEN ! first wet level beneath a cavity 208 DO_2D_10_10 215 DO_2D_10_10_T 209 216 IF( miku(ji,jj) > 1 ) zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn) 210 217 IF( mikv(ji,jj) > 1 ) zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn) … … 219 226 DO jk = 1, jpkm1 ! Horizontal slab 220 227 ! 221 ! !== Vertical tracer gradient 222 zdk1t(:,:) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * wmask(:,:,jk+1) ! level jk+1 223 ! 224 IF( jk == 1 ) THEN ; zdkt(:,:) = zdk1t(:,:) ! surface: zdkt(jk=1)=zdkt(jk=2) 225 ELSE ; zdkt(:,:) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * wmask(:,:,jk) 226 ENDIF 227 DO_2D_10_10 228 DO_2D_11_11_T 229 ! !== Vertical tracer gradient 230 zdk1t(ji,jj) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1) ! level jk+1 231 ! 232 IF( jk == 1 ) THEN ; zdkt(ji,jj) = zdk1t(ji,jj) ! surface: zdkt(jk=1)=zdkt(jk=2) 233 ELSE ; zdkt(ji,jj) = ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) * wmask(ji,jj,jk) 234 ENDIF 235 END_2D 236 ! 237 DO_2D_10_10_T 228 238 zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 229 239 zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) … … 246 256 END_2D 247 257 ! 248 DO_2D_00_00 258 DO_2D_00_00_T 249 259 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) & 250 260 & + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) & … … 262 272 ztfw(:,:, 1 ) = 0._wp ; ztfw(:,:,jpk) = 0._wp 263 273 264 DO_3D_00_00 ( 2, jpkm1 )274 DO_3D_00_00_T( 2, jpkm1 ) 265 275 ! 266 276 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & … … 284 294 ! !== add the vertical 33 flux ==! 285 295 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 286 DO_3D_00_00 ( 2, jpkm1 )296 DO_3D_00_00_T( 2, jpkm1 ) 287 297 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 288 298 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & … … 293 303 SELECT CASE( kpass ) 294 304 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 295 DO_3D_00_00 ( 2, jpkm1 )305 DO_3D_00_00_T( 2, jpkm1 ) 296 306 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) & 297 307 & + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) & … … 299 309 END_3D 300 310 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 301 DO_3D_00_00 ( 2, jpkm1 )311 DO_3D_00_00_T( 2, jpkm1 ) 302 312 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 303 313 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & … … 307 317 ENDIF 308 318 ! 309 DO_3D_00_00 ( 1, jpkm1 )319 DO_3D_00_00_T( 1, jpkm1 ) 310 320 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1) ) & 311 321 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 312 322 END_3D 313 323 ! 314 IF( ( kpass == 1 .AND. ln_traldf_lap ) .OR. & !== first pass only ( laplacian) ==! 315 ( kpass == 2 .AND. ln_traldf_blp ) ) THEN !== 2nd pass (bilaplacian) ==! 316 ! 317 ! ! "Poleward" diffusive heat or salt transports (T-S case only) 318 ! note sign is reversed to give down-gradient diffusive transports ) 319 IF( l_ptr ) CALL dia_ptr_hst( jn, 'ldf', -zftv(:,:,:) ) 320 ! ! Diffusive heat transports 321 IF( l_hst ) CALL dia_ar5_hst( jn, 'ldf', -zftu(:,:,:), -zftv(:,:,:) ) 322 ! 323 ENDIF !== end pass selection ==! 324 IF( ktile % ntile == jpnijtile ) THEN ! Do only after all tiles finish 325 IF( ( kpass == 1 .AND. ln_traldf_lap ) .OR. & !== first pass only ( laplacian) ==! 326 ( kpass == 2 .AND. ln_traldf_blp ) ) THEN !== 2nd pass (bilaplacian) ==! 327 ! 328 ! ! "Poleward" diffusive heat or salt transports (T-S case only) 329 ! note sign is reversed to give down-gradient diffusive transports ) 330 ! TODO: TO BE TILED 331 IF( l_ptr ) CALL dia_ptr_hst( jn, 'ldf', -zftv(:,:,:) ) 332 ! ! Diffusive heat transports 333 ! TODO: TO BE TILED 334 IF( l_hst ) CALL dia_ar5_hst( jn, 'ldf', -zftu(:,:,:), -zftv(:,:,:) ) 335 ! 336 ENDIF !== end pass selection ==! 337 ENDIF 324 338 ! 325 339 ! ! =============== -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/TRA/traldf_lap_blp.F90
r12377 r12766 171 171 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 172 172 ! 173 TYPE(TILE) :: ktile ! Tile indices 173 174 INTEGER :: ji, jj, jk, jn ! dummy loop indices 174 175 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt) :: zlap ! laplacian at t-point … … 194 195 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, zlap, kjpt, 1 ) 195 196 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 196 CALL tra_ldf_iso ( kt , Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 )197 CALL tra_ldf_iso ( ktile, kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) 197 198 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 198 199 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) … … 210 211 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt_rhs, kjpt, 2 ) 211 212 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 212 CALL tra_ldf_iso ( kt , Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 )213 CALL tra_ldf_iso ( ktile, kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 ) 213 214 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 214 215 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 ) -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/do_loop_substitute.h90
r12377 r12766 102 102 #define END_2D END DO ; END DO 103 103 #define END_3D END DO ; END DO ; END DO 104 105 #define __kIs_T ktile % ntsi 106 #define __kJs_T ktile % ntsj 107 #define __kIsm1_T ktile % ntsim1 108 #define __kJsm1_T ktile % ntsjm1 109 110 #define __kIe_T ktile % ntei 111 #define __kJe_T ktile % ntej 112 #define __kIep1_T ktile % nteip1 113 #define __kJep1_T ktile % ntejp1 114 115 #define IND_2D __kIsm1_T:__kIep1_T,__kJsm1_T:__kJep1_T 116 117 #define DO_2D_00_00_T DO jj = __kJs_T, __kJe_T ; DO ji = __kIs_T, __kIe_T 118 #define DO_2D_00_01_T DO jj = __kJs_T, __kJe_T ; DO ji = __kIs_T, __kIep1_T 119 #define DO_2D_00_10_T DO jj = __kJs_T, __kJe_T ; DO ji = __kIsm1_T, __kIe_T 120 #define DO_2D_00_11_T DO jj = __kJs_T, __kJe_T ; DO ji = __kIsm1_T, __kIep1_T 121 122 #define DO_2D_01_00_T DO jj = __kJs_T, __kJep1_T ; DO ji = __kIs_T, __kIe_T 123 #define DO_2D_01_01_T DO jj = __kJs_T, __kJep1_T ; DO ji = __kIs_T, __kIep1_T 124 #define DO_2D_01_10_T DO jj = __kJs_T, __kJep1_T ; DO ji = __kIsm1_T, __kIe_T 125 #define DO_2D_01_11_T DO jj = __kJs_T, __kJep1_T ; DO ji = __kIsm1_T, __kIep1_T 126 127 #define DO_2D_10_00_T DO jj = __kJsm1_T, __kJe_T ; DO ji = __kIs_T, __kIe_T 128 #define DO_2D_10_10_T DO jj = __kJsm1_T, __kJe_T ; DO ji = __kIsm1_T, __kIe_T 129 #define DO_2D_10_11_T DO jj = __kJsm1_T, __kJe_T ; DO ji = __kIsm1_T, __kIep1_T 130 131 #define DO_2D_11_00_T DO jj = __kJsm1_T, __kJep1_T ; DO ji = __kIs_T, __kIe_T 132 #define DO_2D_11_01_T DO jj = __kJsm1_T, __kJep1_T ; DO ji = __kIs_T, __kIep1_T 133 #define DO_2D_11_10_T DO jj = __kJsm1_T, __kJep1_T ; DO ji = __kIsm1_T, __kIe_T 134 #define DO_2D_11_11_T DO jj = __kJsm1_T, __kJep1_T ; DO ji = __kIsm1_T, __kIep1_T 135 136 #define DO_3D_00_00_T(ks,ke) DO jk = ks, ke ; DO_2D_00_00_T 137 #define DO_3D_00_10_T(ks,ke) DO jk = ks, ke ; DO_2D_00_10_T 138 139 #define DO_3D_01_01_T(ks,ke) DO jk = ks, ke ; DO_2D_01_01_T 140 141 #define DO_3D_10_00_T(ks,ke) DO jk = ks, ke ; DO_2D_10_00_T 142 #define DO_3D_10_10_T(ks,ke) DO jk = ks, ke ; DO_2D_10_10_T 143 #define DO_3D_10_11_T(ks,ke) DO jk = ks, ke ; DO_2D_10_11_T 144 145 #define DO_3D_11_11_T(ks,ke) DO jk = ks, ke ; DO_2D_11_11_T 146 147 #define DO_3DS_00_00_T(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_00_T 148 #define DO_3DS_01_01_T(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01_T 149 #define DO_3DS_10_10_T(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10_T 150 #define DO_3DS_11_11_T(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11_T -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/par_oce.F90
r12377 r12766 62 62 INTEGER, PUBLIC :: jpjmax! = ( jpjglo-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls !: maximum jpj 63 63 64 ! Tiling decomposition 65 INTEGER, PUBLIC :: jpnitile !: number of tiles following i 66 INTEGER, PUBLIC :: jpnjtile !: number of tiles following j 67 INTEGER, PUBLIC :: jpnijtile !: number of tiles in total (jpnitile x jpnjtile) 68 64 69 !!--------------------------------------------------------------------- 65 70 !! Active tracer parameters -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/step.F90
r12650 r12766 81 81 !! -8- Outputs and diagnostics 82 82 !!---------------------------------------------------------------------- 83 INTEGER :: ji, jj, jk ! dummy loop indice 83 TYPE(TILE) :: stile ! Tile indices 84 INTEGER :: ji, jj, jk, jtile ! dummy loop indice 84 85 INTEGER :: indic ! error indicator if < 0 85 86 !!gm kcall can be removed, I guess … … 264 265 IF( lrst_oce .AND. ln_zdfosm ) & 265 266 & CALL osm_rst ( kstp, Nnn, 'WRITE' ) ! write OSMOSIS outputs + ww (so must do here) to restarts 266 CALL tra_ldf ( kstp, Nbb, Nnn, ts, Nrhs ) ! lateral mixing 267 267 268 ! Loop over tile domains 269 DO jtile = 1, jpnijtile 270 CALL dom_tile( jtile, stile ) 271 CALL tra_ldf ( stile, kstp, Nbb, Nnn, ts, Nrhs ) ! lateral mixing 272 END DO 268 273 CALL tra_zdf ( kstp, Nbb, Nnn, Nrhs, ts, Naa ) ! vertical mixing and after tracer fields 269 274 IF( ln_zdfnpc ) CALL tra_npc ( kstp, Nnn, Nrhs, ts, Naa ) ! update after fields by non-penetrative convection -
NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_structure/src/OCE/step_oce.F90
r12377 r12766 62 62 USE domvvl ! variable vertical scale factors (dom_vvl_sf_nxt routine) 63 63 ! (dom_vvl_sf_swp routine) 64 USE domain , ONLY : dom_tile 64 65 65 66 USE ldfslp ! iso-neutral slopes (ldf_slp routine)
Note: See TracChangeset
for help on using the changeset viewer.