Changeset 14753 for NEMO/branches/2021
- Timestamp:
- 2021-04-27T13:41:44+02:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traatf.F90
r14752 r14753 129 129 #endif 130 130 ! ! local domain boundaries (T-point, unchanged sign) 131 ! [comm_cleanup] ! lbc_lnk moved into stp 132 IF (nn_hls.eq.1) CALL lbc_lnk( 'traatf', pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp ) 131 CALL lbc_lnk( 'traatf', pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp ) 133 132 ! 134 133 IF( ln_bdy ) CALL bdy_tra( kt, Kbb, pts, Kaa ) ! BDY open boundaries -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/step.F90
r14712 r14753 168 168 CALL bn2 ( ts(:,:,:,:,Nnn), rab_n, rn2, Nnn ) ! now Brunt-Vaisala frequency 169 169 170 ! [comm_cleanup]171 IF (nn_hls.eq.2) THEN172 IF( l_zdfsh2 ) THEN173 CALL lbc_lnk( 'stp', avm_k, 'W', 1.0_wp , avt_k, 'W', 1.0_wp, &174 & avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp )175 ELSE176 CALL lbc_lnk( 'stp', avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp )177 ENDIF178 ENDIF179 170 ! VERTICAL PHYSICS 171 ! lbc_lnk needed for zdf_sh2 when using nn_hls = 2, moved here to allow tiling in zdf_phy 172 IF( nn_hls == 2 .AND. l_zdfsh2 ) CALL lbc_lnk( 'stp', avm_k, 'W', 1.0_wp ) 173 174 IF( ln_tile ) CALL dom_tile_start ! [tiling] ZDF tiling loop 175 DO jtile = 1, nijtile 176 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 177 180 178 CALL zdf_phy( kstp, Nbb, Nnn, Nrhs ) ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 179 END DO 180 IF( ln_tile ) CALL dom_tile_stop 181 181 182 182 ! LATERAL PHYSICS 183 183 ! 184 IF( l_ldfslp ) THEN ! slope of lateral mixing185 186 187 184 ! NOTE: [tiling] IF(l_ldfslp) has been moved down so that eos and zps_hde are always calculated; tra_ldf_lap needs gts[uv], gts[uv]i to be calculated. We do this rather than modify the l_ldfslp condition in ldf_tra_init, because tra_ldf_lap does not define akz, ah_wslp2 which are needed by trazdf when l_ldfslp = T. 185 IF( ln_zps .OR. l_ldfslp ) CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) ) ! before in situ density 186 187 IF( ln_zps .AND. .NOT. ln_isfcav) & 188 188 & CALL zps_hde ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, & ! Partial steps: before horizontal gradient 189 189 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 190 190 191 191 IF( ln_zps .AND. ln_isfcav) & 192 192 & CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi, & ! Partial steps for top cell (ISF) 193 193 & rhd, gru , grv , grui, grvi ) ! of t, s, rd at the first ocean level 194 195 IF( l_ldfslp ) THEN ! slope of lateral mixing 194 196 IF( ln_traldf_triad ) THEN 195 197 CALL ldf_slp_triad( kstp, Nbb, Nnn ) ! before slope for triad operator … … 217 219 vv(:,:,:,Nrhs) = 0._wp 218 220 219 IF( lk_asminc .AND. ln_asmiau .AND. ln_dyninc ) & 220 & CALL dyn_asm_inc ( kstp, Nbb, Nnn, uu, vv, Nrhs ) ! apply dynamics assimilation increment 221 IF( ln_bdy ) CALL bdy_dyn3d_dmp ( kstp, Nbb, uu, vv, Nrhs ) ! bdy damping trends 222 #if defined key_agrif 221 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (1) 222 DO jtile = 1, nijtile 223 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 224 225 IF( lk_asminc .AND. ln_asmiau .AND. ln_dyninc ) & 226 & CALL dyn_asm_inc ( kstp, Nbb, Nnn, uu, vv, Nrhs ) ! apply dynamics assimilation increment 227 IF( ln_bdy ) CALL bdy_dyn3d_dmp ( kstp, Nbb, uu, vv, Nrhs ) ! bdy damping trends 228 #if defined key_agrif 229 END DO 230 IF( ln_tile ) CALL dom_tile_stop 231 223 232 IF(.NOT. Agrif_Root()) & 224 233 & CALL Agrif_Sponge_dyn ! momentum sponge 225 #endif 226 IF (nn_hls.eq.2) THEN227 ! [comm_cleanup] ! needed from DYN228 CALL lbc_lnk( 'stp', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., ww(:,:,:), 'W', 1.)229 IF(.NOT.ln_linssh) CALL lbc_lnk( 'stp', e3f, 'F', 1. ) 230 ! [comm_cleanup] ! needed from DYN dyn_ldf_blp231 CALL lbc_lnk( 'stp', uu(:,:,:,Nbb), 'U', -1., vv(:,:,:,Nbb), 'V', -1.)232 ENDIF233 CALL dyn_adv( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! advection (VF or FF)==> RHS234 CALL dyn_vor( kstp, Nnn , uu, vv, Nrhs ) ! vorticity ==> RHS235 CALL dyn_ldf( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! lateral mixing236 IF( ln_ zdfosm ) CALL dyn_osm( kstp, Nnn , uu, vv, Nrhs ) ! OSMOSIS non-local velocity fluxes ==> RHS237 CALL dyn_hpg( kstp, Nnn , uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure 238 CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa ) ! surface pressure gradient234 235 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (1, continued) 236 DO jtile = 1, nijtile 237 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 238 #endif 239 CALL dyn_adv( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! advection (VF or FF) ==> RHS 240 CALL dyn_vor( kstp, Nnn , uu, vv, Nrhs ) ! vorticity ==> RHS 241 CALL dyn_ldf( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! lateral mixing 242 IF( ln_zdfosm ) CALL dyn_osm( kstp, Nnn , uu, vv, Nrhs ) ! OSMOSIS non-local velocity fluxes ==> RHS 243 CALL dyn_hpg( kstp, Nnn , uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure 244 END DO 245 IF( ln_tile ) CALL dom_tile_stop 246 247 CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa ) ! surface pressure gradient 239 248 240 249 ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) as well 241 250 IF( ln_dynspg_ts ) THEN ! vertical scale factors and vertical velocity need to be updated 242 CALL div_hor ( kstp, Nbb, Nnn ) ! Horizontal divergence (2nd call in time-split case) 243 IF(.NOT.ln_linssh) CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn, Naa, kcall=2 ) ! after vertical scale factors (update depth average component) 244 ENDIF 245 CALL dyn_zdf ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa ) ! vertical diffusion 251 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (2- div_hor only) 252 DO jtile = 1, nijtile 253 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 254 255 CALL div_hor ( kstp, Nbb, Nnn ) ! Horizontal divergence (2nd call in time-split case) 256 END DO 257 IF( ln_tile ) CALL dom_tile_stop 258 259 IF(.NOT. ln_linssh) CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn, Naa, kcall=2 ) ! after vertical scale factors (update depth average component) 260 ENDIF 261 262 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (3- dyn_zdf only) 263 DO jtile = 1, nijtile 264 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 265 266 CALL dyn_zdf ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa ) ! vertical diffusion 267 END DO 268 IF( ln_tile ) CALL dom_tile_stop 269 246 270 IF( ln_dynspg_ts ) THEN ! vertical scale factors and vertical velocity need to be updated 247 271 CALL wzv ( kstp, Nbb, Nnn, Naa, ww ) ! Nnn cross-level velocity … … 279 303 ! Active tracers 280 304 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 281 ! Loop over tile domains 282 DO jtile = 1, nijtile 283 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 284 285 DO_3D( 0, 0, 0, 0, 1, jpk ) 286 ts(ji,jj,jk,:,Nrhs) = 0._wp ! set tracer trends to zero 287 END_3D 305 ts(:,:,:,:,Nrhs) = 0._wp ! set tracer trends to zero 306 307 IF( ln_tile ) CALL dom_tile_start ! [tiling] TRA tiling loop (1) 308 DO jtile = 1, nijtile 309 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 288 310 289 311 IF( lk_asminc .AND. ln_asmiau .AND. & … … 297 319 IF( ln_bdy ) CALL bdy_tra_dmp( kstp, Nbb, ts, Nrhs ) ! bdy damping trends 298 320 END DO 321 IF( ln_tile ) CALL dom_tile_stop 299 322 300 323 #if defined key_agrif 301 324 IF(.NOT. Agrif_Root() ) THEN 302 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 )303 325 CALL Agrif_Sponge_tra ! tracers sponge 304 326 ENDIF 305 327 #endif 306 328 307 ! [comm_cleanup]308 IF (nn_hls.EQ.2) THEN309 SELECT CASE ( nadv )310 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order311 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1., ts(:,:,:,:,Nnn), 'T', 1.)312 CALL lbc_lnk( 'stp', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., ww(:,:,:), 'W', 1.)313 CASE ( np_MUS ) ! MUSCL314 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.)315 CASE ( np_UBS ) ! UBS316 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.)317 CASE ( np_QCK ) ! QUICKEST318 CALL lbc_lnk( 'stp', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1.)319 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.)320 END SELECT321 ENDIF322 323 329 ! TEMP: [tiling] Separate loop over tile domains (due to tra_adv workarounds for tiling) 324 DO jtile = 1, nijtile 325 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 330 IF( ln_tile ) CALL dom_tile_start ! [tiling] TRA tiling loop (2) 331 DO jtile = 1, nijtile 332 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 326 333 327 334 CALL tra_adv ( kstp, Nbb, Nnn, ts, Nrhs ) ! hor. + vert. advection ==> RHS … … 336 343 IF( ln_zdfnpc ) CALL tra_npc ( kstp, Nnn, Nrhs, ts, Naa ) ! update after fields by non-penetrative convection 337 344 END DO 338 339 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) ! Revert to tile over full domain 345 IF( ln_tile ) CALL dom_tile_stop 346 340 347 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 341 348 ! Set boundary conditions, time filter and swap time levels … … 355 362 !! 356 363 !!jc2: dynnxt must be the latest call. e3t(:,:,:,Nbb) are indeed updated in that routine 357 ! [comm_cleanup]358 IF (nn_hls.eq.2) CALL lbc_lnk( 'stp', ts(:,:,:,jp_tem,Naa), 'T', 1.0_wp, ts(:,:,:,jp_sal,Naa), 'T', 1.0_wp, &359 & uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1.)360 364 361 365 CALL tra_atf ( kstp, Nbb, Nnn, Naa, ts ) ! time filtering of "now" tracer arrays -
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/stpmlf.F90
r14712 r14753 170 170 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 171 171 ! THERMODYNAMICS 172 ! [ comm_cleanup ] ! lbc_lnk for AMM12 with blp / triad & for atf_qco with ln_iceberg .true.173 IF( nn_hls.eq.2) CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1._wp)174 172 CALL eos_rab( ts(:,:,:,:,Nbb), rab_b, Nnn ) ! before local thermal/haline expension ratio at T-points 175 173 CALL eos_rab( ts(:,:,:,:,Nnn), rab_n, Nnn ) ! now local thermal/haline expension ratio at T-points … … 178 176 179 177 ! VERTICAL PHYSICS 180 ! [comm_cleanup] ! lbc_lnk from ZDF 181 IF (nn_hls.eq.2) THEN 182 IF( l_zdfsh2 ) THEN 183 CALL lbc_lnk( 'stp_MLF', avm_k, 'W', 1.0_wp , avt_k, 'W', 1.0_wp, & 184 & avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 185 ELSE 186 CALL lbc_lnk( 'stp_MLF', avm , 'W', 1.0_wp , avt , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 187 ENDIF 188 ENDIF 178 IF( ln_tile ) CALL dom_tile_start ! [tiling] ZDF tiling loop 179 DO jtile = 1, nijtile 180 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 189 181 CALL zdf_phy( kstp, Nbb, Nnn, Nrhs ) ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 182 END DO 183 IF( ln_tile ) CALL dom_tile_stop 190 184 191 185 ! LATERAL PHYSICS 192 186 ! 193 IF( l_ldfslp ) THEN ! slope of lateral mixing194 195 196 187 ! NOTE: [tiling] IF(l_ldfslp) has been moved down so that eos and zps_hde are always calculated; tra_ldf_lap needs gts[uv], gts[uv]i to be calculated. We do this rather than modify the l_ldfslp condition in ldf_tra_init, because tra_ldf_lap does not define akz, ah_wslp2 which are needed by trazdf when l_ldfslp = T. 188 IF( ln_zps .OR. l_ldfslp ) CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) ) ! before in situ density 189 190 IF( ln_zps .AND. .NOT. ln_isfcav) & 197 191 & CALL zps_hde ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, & ! Partial steps: before horizontal gradient 198 192 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 199 193 200 194 IF( ln_zps .AND. ln_isfcav) & 201 195 & CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi, & ! Partial steps for top cell (ISF) 202 196 & rhd, gru , grv , grui, grvi ) ! of t, s, rd at the first ocean level 197 198 IF( l_ldfslp ) THEN ! slope of lateral mixing 203 199 IF( ln_traldf_triad ) THEN 204 200 CALL ldf_slp_triad( kstp, Nbb, Nnn ) ! before slope for triad operator … … 233 229 vv(:,:,:,Nrhs) = 0._wp 234 230 235 IF( lk_asminc .AND. ln_asmiau .AND. ln_dyninc ) & 236 & CALL dyn_asm_inc ( kstp, Nbb, Nnn, uu, vv, Nrhs ) ! apply dynamics assimilation increment 237 IF( ln_bdy ) CALL bdy_dyn3d_dmp ( kstp, Nbb, uu, vv, Nrhs ) ! bdy damping trends 238 #if defined key_agrif 231 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (1) 232 DO jtile = 1, nijtile 233 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 234 235 IF( lk_asminc .AND. ln_asmiau .AND. ln_dyninc ) & 236 & CALL dyn_asm_inc ( kstp, Nbb, Nnn, uu, vv, Nrhs ) ! apply dynamics assimilation increment 237 IF( ln_bdy ) CALL bdy_dyn3d_dmp ( kstp, Nbb, uu, vv, Nrhs ) ! bdy damping trends 238 #if defined key_agrif 239 END DO 240 IF( ln_tile ) CALL dom_tile_stop 241 239 242 IF(.NOT. Agrif_Root()) & 240 243 & CALL Agrif_Sponge_dyn ! momentum sponge 241 #endif 242 ! [comm_cleanup] ! lbc_lnk from DYN 243 IF (nn_hls.eq.2) THEN 244 CALL lbc_lnk( 'stp_MLF', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., ww(:,:,:), 'W', 1., & 245 & uu(:,:,:,Nbb), 'U', -1., vv(:,:,:,Nbb), 'V', -1.) 246 IF(.NOT.lk_linssh) CALL lbc_lnk( 'stp_MLF', r3u(:,:,Nnn), 'U', 1.0_wp, r3v(:,:,Nnn), 'V', 1.0_wp, & 247 & r3u(:,:,Nbb), 'U', 1.0_wp, r3v(:,:,Nbb), 'V', 1.0_wp, & 248 & r3t(:,:,Nbb), 'T', 1.0_wp ) 249 ENDIF 250 CALL dyn_adv( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! advection (VF or FF) ==> RHS 251 CALL dyn_vor( kstp, Nnn , uu, vv, Nrhs ) ! vorticity ==> RHS 252 CALL dyn_ldf( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! lateral mixing 253 IF( ln_zdfosm ) CALL dyn_osm( kstp, Nnn , uu, vv, Nrhs ) ! OSMOSIS non-local velocity fluxes ==> RHS 254 255 CALL dyn_hpg( kstp, Nnn , uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure 256 CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa ) ! surface pressure gradient 257 258 IF( ln_dynspg_ts ) THEN ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) 259 ! as well as vertical scale factors and vertical velocity need to be updated 260 CALL div_hor ( kstp, Nbb, Nnn ) ! Horizontal divergence (2nd call in time-split case) 261 IF(.NOT.lk_linssh) CALL dom_qco_r3c( ssh(:,:,Naa), r3t(:,:,Naa), r3u(:,:,Naa), r3v(:,:,Naa), r3f(:,:) ) ! update ssh/h_0 ratio at t,u,v,f pts 262 ENDIF 244 245 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (1, continued) 246 DO jtile = 1, nijtile 247 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 248 #endif 249 CALL dyn_adv( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! advection (VF or FF) ==> RHS 250 CALL dyn_vor( kstp, Nnn , uu, vv, Nrhs ) ! vorticity ==> RHS 251 CALL dyn_ldf( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! lateral mixing 252 IF( ln_zdfosm ) CALL dyn_osm( kstp, Nnn , uu, vv, Nrhs ) ! OSMOSIS non-local velocity fluxes ==> RHS 253 CALL dyn_hpg( kstp, Nnn , uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure 254 END DO 255 IF( ln_tile ) CALL dom_tile_stop 256 257 CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa ) ! surface pressure gradient 258 259 IF( ln_tile ) CALL dom_tile_start ! [tiling] DYN tiling loop (2) 260 DO jtile = 1, nijtile 261 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 262 263 IF( ln_dynspg_ts ) THEN ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) 264 ! as well as vertical scale factors and vertical velocity need to be updated 265 CALL div_hor ( kstp, Nbb, Nnn ) ! Horizontal divergence (2nd call in time-split case) 266 IF(.NOT.lk_linssh) CALL dom_qco_r3c( ssh(:,:,Naa), r3t(:,:,Naa), r3u(:,:,Naa), r3v(:,:,Naa), r3f(:,:) ) ! update ssh/h_0 ratio at t,u,v,f pts 267 ENDIF 263 268 CALL dyn_zdf ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa ) ! vertical diffusion 269 END DO 270 IF( ln_tile ) CALL dom_tile_stop 271 264 272 IF( ln_dynspg_ts ) THEN ! vertical scale factors and vertical velocity need to be updated 265 273 CALL wzv ( kstp, Nbb, Nnn, Naa, ww ) ! Nnn cross-level velocity … … 292 300 CALL ssh_atf ( kstp, Nbb, Nnn, Naa, ssh ) ! time filtering of "now" sea surface height 293 301 IF(.NOT.lk_linssh) CALL dom_qco_r3c( ssh(:,:,Nnn), r3t_f, r3u_f, r3v_f ) ! "now" ssh/h_0 ratio from filtrered ssh 294 ! [comm_cleanup] this should not be needed295 IF(nn_hls.eq.2.AND..NOT.lk_linssh) CALL lbc_lnk( 'stp_MLF', r3u_f, 'U', 1.0_wp, r3v_f, 'V', 1.0_wp )296 302 #if defined key_top 297 303 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 304 310 ! Active tracers 305 311 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 306 ! Loop over tile domains 312 ts(:,:,:,:,Nrhs) = 0._wp ! set tracer trends to zero 313 314 IF( ln_tile ) CALL dom_tile_start ! [tiling] TRA tiling loop (1) 307 315 DO jtile = 1, nijtile 308 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 309 310 DO_3D( 0, 0, 0, 0, 1, jpk ) 311 ts(ji,jj,jk,:,Nrhs) = 0._wp ! set tracer trends to zero 312 END_3D 316 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 313 317 314 318 IF( lk_asminc .AND. ln_asmiau .AND. & … … 322 326 IF( ln_bdy ) CALL bdy_tra_dmp( kstp, Nbb, ts, Nrhs ) ! bdy damping trends 323 327 END DO 328 IF( ln_tile ) CALL dom_tile_stop 324 329 325 330 #if defined key_agrif 326 331 IF(.NOT. Agrif_Root() ) THEN 327 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 )328 332 CALL Agrif_Sponge_tra ! tracers sponge 329 333 ENDIF 330 334 #endif 331 335 332 ! [comm_cleanup] ! lbc_lnk from tra_adv333 IF (nn_hls.EQ.2) THEN334 SELECT CASE ( nadv )335 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order336 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1., ts(:,:,:,:,Nnn), 'T', 1.)337 CALL lbc_lnk( 'stp_MLF', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., ww(:,:,:), 'W', 1.)338 CASE ( np_MUS ) ! MUSCL339 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1.)340 CASE ( np_UBS ) ! UBS341 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1.)342 CASE ( np_QCK ) ! QUICKEST343 CALL lbc_lnk( 'stp_MLF', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1.)344 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1.)345 END SELECT346 ENDIF347 348 336 ! TEMP: [tiling] Separate loop over tile domains (due to tra_adv workarounds for tiling) 337 IF( ln_tile ) CALL dom_tile_start ! [tiling] TRA tiling loop (2) 349 338 DO jtile = 1, nijtile 350 IF( ln_tile )CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile )339 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 351 340 352 341 CALL tra_adv ( kstp, Nbb, Nnn, ts, Nrhs ) ! hor. + vert. advection ==> RHS … … 361 350 IF( ln_zdfnpc ) CALL tra_npc ( kstp, Nnn, Nrhs, ts, Naa ) ! update after fields by non-penetrative convection 362 351 END DO 363 364 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) ! Revert to tile over full domain 352 IF( ln_tile ) CALL dom_tile_stop 353 365 354 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 366 355 ! Set boundary conditions, time filter and swap time levels … … 548 537 & , pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1. ) 549 538 ! 539 ! lbc_lnk needed for zdf_sh2 when using nn_hls = 2, moved here to allow tiling in zdf_phy 540 IF( nn_hls == 2 .AND. l_zdfsh2 ) CALL lbc_lnk( 'stp', avm_k, 'W', 1.0_wp ) 541 542 ! NOTE: [tiling] needed because dom_qco_r3c defines on [nn_hls, nn_hls-1, nn_hls, nn_hls-1] (r3[uv]_f needed for ln_dynldf_blp = T & ln_dynldf_lev/ln_dynldf_hor = T, possibly due to uu_b/vv_b calculation in dyn_atf_qco). Not sure r3f needs an lbc_lnk since it is defined on [nn_hls, nn_hls-1, nn_hls, nn_hls-1] and does not seem to be accessed elsewhere 543 ! dom_qco_r3c defines over [nn_hls, nn_hls-1, nn_hls, nn_hls-1] 544 IF( nn_hls == 2 .AND. .NOT. lk_linssh ) THEN 545 CALL lbc_lnk( 'finalize_lbc', r3u(:,:,Kaa), 'U', 1._wp, r3v(:,:,Kaa), 'V', 1._wp, & 546 & r3u_f(:,:), 'U', 1._wp, r3v_f(:,:), 'V', 1._wp ) 547 ENDIF 550 548 ! !* BDY open boundaries 551 549 IF( ln_bdy ) THEN
Note: See TracChangeset
for help on using the changeset viewer.