New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14753 for NEMO/branches/2021 – NEMO

Changeset 14753 for NEMO/branches/2021


Ignore:
Timestamp:
2021-04-27T13:41:44+02:00 (3 years ago)
Author:
hadcv
Message:

#2600: Update step.F90

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  
    129129#endif 
    130130      !                                              ! 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 ) 
    133132      ! 
    134133      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  
    168168                         CALL bn2    ( ts(:,:,:,:,Nnn), rab_n, rn2, Nnn  ) ! now    Brunt-Vaisala frequency 
    169169 
    170       ! [comm_cleanup]  
    171       IF (nn_hls.eq.2) THEN 
    172          IF( l_zdfsh2 ) THEN 
    173             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          ELSE 
    176             CALL lbc_lnk( 'stp', avm  , 'W', 1.0_wp , avt  , 'W', 1.0_wp , avs , 'W', 1.0_wp ) 
    177          ENDIF 
    178       ENDIF 
    179170      !  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 
    180178                         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 
    181181 
    182182      !  LATERAL  PHYSICS 
    183183      ! 
    184       IF( l_ldfslp ) THEN                             ! slope of lateral mixing 
    185                         CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) )               ! before in situ density 
    186  
    187          IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     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)                                    & 
    188188            &            CALL zps_hde    ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    189189            &                                          rhd, gru , grv    )       ! of t, s, rd at the last ocean level 
    190190 
    191          IF( ln_zps .AND.       ln_isfcav)                                                & 
     191      IF( ln_zps .AND.       ln_isfcav)                                                & 
    192192            &            CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    193193            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
     194 
     195      IF( l_ldfslp ) THEN                             ! slope of lateral mixing 
    194196         IF( ln_traldf_triad ) THEN 
    195197                         CALL ldf_slp_triad( kstp, Nbb, Nnn )             ! before slope for triad operator 
     
    217219                         vv(:,:,:,Nrhs) = 0._wp 
    218220 
    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 
    223232      IF(.NOT. Agrif_Root())  & 
    224233               &         CALL Agrif_Sponge_dyn        ! momentum sponge 
    225 #endif 
    226       IF (nn_hls.eq.2) THEN 
    227          ! [comm_cleanup] ! needed from DYN  
    228          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_blp  
    231          CALL lbc_lnk( 'stp', uu(:,:,:,Nbb), 'U', -1., vv(:,:,:,Nbb), 'V', -1.) 
    232       ENDIF 
    233                          CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
    234                          CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
    235                          CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
    236       IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
    237                          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 gradient 
     234 
     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 
    239248 
    240249                                                      ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) as well 
    241250      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 
    246270      IF( ln_dynspg_ts ) THEN                                                       ! vertical scale factors and vertical velocity need to be updated 
    247271                            CALL wzv        ( kstp, Nbb, Nnn, Naa, ww )             ! Nnn cross-level velocity 
     
    279303      ! Active tracers 
    280304      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    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 ) 
    288310 
    289311         IF(  lk_asminc .AND. ln_asmiau .AND. & 
     
    297319         IF( ln_bdy     )   CALL bdy_tra_dmp( kstp, Nbb,      ts, Nrhs )  ! bdy damping trends 
    298320      END DO 
     321      IF( ln_tile ) CALL dom_tile_stop 
    299322 
    300323#if defined key_agrif 
    301324      IF(.NOT. Agrif_Root() )   THEN 
    302          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) 
    303325                            CALL Agrif_Sponge_tra        ! tracers sponge 
    304326      ENDIF 
    305327#endif 
    306328 
    307      ! [comm_cleanup] 
    308      IF (nn_hls.EQ.2) THEN 
    309          SELECT CASE ( nadv ) 
    310          CASE ( np_FCT )                                 ! FCT scheme      : 2nd / 4th order 
    311                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 )                                 ! MUSCL 
    314                 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.) 
    315          CASE ( np_UBS )                                 ! UBS 
    316                 CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.) 
    317          CASE ( np_QCK )                                 ! QUICKEST 
    318                CALL lbc_lnk( 'stp', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1.) 
    319                CALL lbc_lnk( 'stp', ts(:,:,:,:,Nbb), 'T', 1.) 
    320          END SELECT 
    321       ENDIF 
    322  
    323329      ! 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 ) 
    326333 
    327334                            CALL tra_adv    ( kstp, Nbb, Nnn, ts, Nrhs )  ! hor. + vert. advection ==> RHS 
     
    336343         IF( ln_zdfnpc  )   CALL tra_npc    ( kstp,      Nnn, Nrhs, ts, Naa  )  ! update after fields by non-penetrative convection 
    337344      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 
    340347      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    341348      ! Set boundary conditions, time filter and swap time levels 
     
    355362!! 
    356363!!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.) 
    360364 
    361365                         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  
    170170      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    171171      !  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) 
    174172                         CALL eos_rab( ts(:,:,:,:,Nbb), rab_b, Nnn )       ! before local thermal/haline expension ratio at T-points 
    175173                         CALL eos_rab( ts(:,:,:,:,Nnn), rab_n, Nnn )       ! now    local thermal/haline expension ratio at T-points 
     
    178176 
    179177      !  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 ) 
    189181                         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 
    190184 
    191185      !  LATERAL  PHYSICS 
    192186      ! 
    193       IF( l_ldfslp ) THEN                             ! slope of lateral mixing 
    194                         CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) )               ! before in situ density 
    195  
    196          IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     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)                                    & 
    197191            &            CALL zps_hde    ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    198192            &                                          rhd, gru , grv    )       ! of t, s, rd at the last ocean level 
    199193 
    200          IF( ln_zps .AND.       ln_isfcav)                                                & 
     194      IF( ln_zps .AND.       ln_isfcav)                                                & 
    201195            &            CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    202196            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
     197 
     198      IF( l_ldfslp ) THEN                             ! slope of lateral mixing 
    203199         IF( ln_traldf_triad ) THEN 
    204200                         CALL ldf_slp_triad( kstp, Nbb, Nnn )             ! before slope for triad operator 
     
    233229                         vv(:,:,:,Nrhs) = 0._wp 
    234230 
    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 
    239242      IF(.NOT. Agrif_Root())  & 
    240243               &         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 
    263268                            CALL dyn_zdf    ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa  )  ! vertical diffusion 
     269      END DO 
     270      IF( ln_tile ) CALL dom_tile_stop 
     271 
    264272      IF( ln_dynspg_ts ) THEN                                                       ! vertical scale factors and vertical velocity need to be updated 
    265273                            CALL wzv        ( kstp, Nbb, Nnn, Naa, ww )             ! Nnn cross-level velocity 
     
    292300                         CALL ssh_atf    ( kstp, Nbb, Nnn, Naa, ssh )            ! time filtering of "now" sea surface height 
    293301      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 needed 
    295          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 ) 
    296302#if defined key_top 
    297303      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    304310      ! Active tracers 
    305311      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    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) 
    307315      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 ) 
    313317 
    314318         IF(  lk_asminc .AND. ln_asmiau .AND. & 
     
    322326         IF( ln_bdy     )   CALL bdy_tra_dmp( kstp, Nbb,      ts, Nrhs )  ! bdy damping trends 
    323327      END DO 
     328      IF( ln_tile ) CALL dom_tile_stop 
    324329 
    325330#if defined key_agrif 
    326331      IF(.NOT. Agrif_Root() ) THEN 
    327          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) 
    328332                            CALL Agrif_Sponge_tra        ! tracers sponge 
    329333      ENDIF 
    330334#endif 
    331335 
    332       ! [comm_cleanup] ! lbc_lnk from tra_adv 
    333       IF (nn_hls.EQ.2) THEN 
    334          SELECT CASE ( nadv ) 
    335          CASE ( np_FCT )                                 ! FCT scheme : 2nd / 4th order 
    336                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 )                                 ! MUSCL 
    339                 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1.) 
    340          CASE ( np_UBS )                                 ! UBS 
    341                 CALL lbc_lnk( 'stp_MLF', ts(:,:,:,:,Nbb), 'T', 1.) 
    342          CASE ( np_QCK )                                 ! QUICKEST 
    343                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 SELECT 
    346       ENDIF 
    347  
    348336      ! 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) 
    349338      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 ) 
    351340 
    352341                            CALL tra_adv    ( kstp, Nbb, Nnn, ts, Nrhs )  ! hor. + vert. advection ==> RHS 
     
    361350         IF( ln_zdfnpc  )   CALL tra_npc    ( kstp,      Nnn, Nrhs, ts, Naa  )  ! update after fields by non-penetrative convection 
    362351      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 
    365354      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    366355      ! Set boundary conditions, time filter and swap time levels 
     
    548537                       &          , pts(:,:,:,jp_tem,Kaa), 'T',  1., pts(:,:,:,jp_sal,Kaa), 'T',  1. ) 
    549538      ! 
     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 
    550548      !                                        !* BDY open boundaries 
    551549      IF( ln_bdy )   THEN 
Note: See TracChangeset for help on using the changeset viewer.