Ignore:
Timestamp:
2021-05-11T11:24:44+02:00 (9 months ago)
Author:
hadcv
Message:

#2600: Merge in dev_r14273_HPC-02_Daley_Tiling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/step.F90

    r14553 r14834  
    174174 
    175175      !  VERTICAL PHYSICS 
     176      ! lbc_lnk needed for zdf_sh2 when using nn_hls = 2, moved here to allow tiling in zdf_phy 
     177      IF( nn_hls == 2 .AND. l_zdfsh2 ) CALL lbc_lnk( 'stp', avm_k, 'W', 1.0_wp ) 
     178 
     179      IF( ln_tile ) CALL dom_tile_start         ! [tiling] ZDF tiling loop 
     180      DO jtile = 1, nijtile 
     181         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     182 
    176183                         CALL zdf_phy( kstp, Nbb, Nnn, Nrhs )   ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 
     184      END DO 
     185      IF( ln_tile ) CALL dom_tile_stop 
    177186 
    178187      !  LATERAL  PHYSICS 
     
    181190                         CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) )               ! before in situ density 
    182191 
    183          IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     192      IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
    184193            &            CALL zps_hde    ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    185194            &                                          rhd, gru , grv    )       ! of t, s, rd at the last ocean level 
    186195 
    187          IF( ln_zps .AND.       ln_isfcav)                                                & 
     196      IF( ln_zps .AND.       ln_isfcav)                                                & 
    188197            &            CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    189198            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
     
    213222                         vv(:,:,:,Nrhs) = 0._wp 
    214223 
    215       IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   & 
    216                &         CALL dyn_asm_inc   ( kstp, Nbb, Nnn, uu, vv, Nrhs )  ! apply dynamics assimilation increment 
    217       IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp, Nbb,      uu, vv, Nrhs )  ! bdy damping trends 
    218 #if defined key_agrif 
     224      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (1) 
     225      DO jtile = 1, nijtile 
     226         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     227 
     228         IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   & 
     229                  &         CALL dyn_asm_inc   ( kstp, Nbb, Nnn, uu, vv, Nrhs )  ! apply dynamics assimilation increment 
     230         IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp, Nbb,      uu, vv, Nrhs )  ! bdy damping trends 
     231#if defined key_agrif 
     232      END DO 
     233      IF( ln_tile ) CALL dom_tile_stop 
     234 
    219235      IF(.NOT. Agrif_Root())  & 
    220236               &         CALL Agrif_Sponge_dyn        ! momentum sponge 
    221 #endif 
    222                          CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
    223                          CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
    224                          CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
    225       IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
    226                          CALL dyn_hpg( kstp,      Nnn      , uu, vv, Nrhs )  ! horizontal gradient of Hydrostatic pressure 
    227                          CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa )  ! surface pressure gradient 
     237 
     238      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (1, continued) 
     239      DO jtile = 1, nijtile 
     240         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     241#endif 
     242                            CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
     243                            CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
     244                            CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
     245         IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
     246                            CALL dyn_hpg( kstp,      Nnn      , uu, vv, Nrhs )  ! horizontal gradient of Hydrostatic pressure 
     247      END DO 
     248      IF( ln_tile ) CALL dom_tile_stop 
     249 
     250                            CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa )  ! surface pressure gradient 
    228251 
    229252                                                      ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) as well 
    230253      IF( ln_dynspg_ts ) THEN                         ! vertical scale factors and vertical velocity need to be updated 
    231                             CALL div_hor       ( kstp, Nbb, Nnn )                ! Horizontal divergence  (2nd call in time-split case) 
    232          IF(.NOT.ln_linssh) CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn, Naa, kcall=2 )  ! after vertical scale factors (update depth average component) 
    233       ENDIF 
    234                             CALL dyn_zdf    ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa  )  ! vertical diffusion 
     254         IF( ln_tile ) CALL dom_tile_start      ! [tiling] DYN tiling loop (2- div_hor only) 
     255         DO jtile = 1, nijtile 
     256            IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     257 
     258                             CALL div_hor       ( kstp, Nbb, Nnn )               ! Horizontal divergence  (2nd call in time-split case) 
     259         END DO 
     260         IF( ln_tile ) CALL dom_tile_stop 
     261 
     262         IF(.NOT. ln_linssh) CALL dom_vvl_sf_nxt( kstp, Nbb, Nnn, Naa, kcall=2 )  ! after vertical scale factors (update depth average component) 
     263      ENDIF 
     264 
     265      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (3- dyn_zdf only) 
     266      DO jtile = 1, nijtile 
     267         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     268 
     269                               CALL dyn_zdf    ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa  )  ! vertical diffusion 
     270      END DO 
     271      IF( ln_tile ) CALL dom_tile_stop 
     272 
    235273      IF( ln_dynspg_ts ) THEN                                                       ! vertical scale factors and vertical velocity need to be updated 
    236274                            CALL wzv        ( kstp, Nbb, Nnn, Naa, ww )             ! Nnn cross-level velocity 
     
    268306      ! Active tracers 
    269307      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    270       ! Loop over tile domains 
    271       DO jtile = 1, nijtile 
    272          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    273  
    274          DO_3D( 0, 0, 0, 0, 1, jpk ) 
    275             ts(ji,jj,jk,:,Nrhs) = 0._wp                                   ! set tracer trends to zero 
    276          END_3D 
     308                         ts(:,:,:,:,Nrhs) = 0._wp         ! set tracer trends to zero 
     309 
     310      IF( ln_tile ) CALL dom_tile_start         ! [tiling] TRA tiling loop (1) 
     311      DO jtile = 1, nijtile 
     312         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    277313 
    278314         IF(  lk_asminc .AND. ln_asmiau .AND. & 
     
    286322         IF( ln_bdy     )   CALL bdy_tra_dmp( kstp, Nbb,      ts, Nrhs )  ! bdy damping trends 
    287323      END DO 
     324      IF( ln_tile ) CALL dom_tile_stop 
    288325 
    289326#if defined key_agrif 
    290327      IF(.NOT. Agrif_Root() )   THEN 
    291          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) 
    292328                            CALL Agrif_Sponge_tra        ! tracers sponge 
    293329      ENDIF 
     
    295331 
    296332      ! TEMP: [tiling] Separate loop over tile domains (due to tra_adv workarounds for tiling) 
    297       DO jtile = 1, nijtile 
    298          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     333      IF( ln_tile ) CALL dom_tile_start         ! [tiling] TRA tiling loop (2) 
     334      DO jtile = 1, nijtile 
     335         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    299336 
    300337                            CALL tra_adv    ( kstp, Nbb, Nnn, ts, Nrhs )  ! hor. + vert. advection ==> RHS 
     
    309346         IF( ln_zdfnpc  )   CALL tra_npc    ( kstp,      Nnn, Nrhs, ts, Naa  )  ! update after fields by non-penetrative convection 
    310347      END DO 
    311  
    312       IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) ! Revert to tile over full domain 
     348      IF( ln_tile ) CALL dom_tile_stop 
     349 
    313350      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    314351      ! Set boundary conditions, time filter and swap time levels 
Note: See TracChangeset for help on using the changeset viewer.