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/stpmlf.F90

    r14553 r14834  
    6262#  include "do_loop_substitute.h90" 
    6363#  include "domzgr_substitute.h90" 
    64 #  include "do_loop_substitute.h90" 
    6564   !!---------------------------------------------------------------------- 
    6665   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    182181 
    183182      !  VERTICAL PHYSICS 
     183      IF( ln_tile ) CALL dom_tile_start         ! [tiling] ZDF tiling loop 
     184      DO jtile = 1, nijtile 
     185         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    184186                         CALL zdf_phy( kstp, Nbb, Nnn, Nrhs )   ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 
     187      END DO 
     188      IF( ln_tile ) CALL dom_tile_stop 
    185189 
    186190      !  LATERAL  PHYSICS 
     
    189193                         CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) )               ! before in situ density 
    190194 
    191          IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     195      IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
    192196            &            CALL zps_hde    ( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    193197            &                                          rhd, gru , grv    )       ! of t, s, rd at the last ocean level 
    194198 
    195          IF( ln_zps .AND.       ln_isfcav)                                                & 
     199      IF( ln_zps .AND.       ln_isfcav)                                                & 
    196200            &            CALL zps_hde_isf( kstp, Nnn, jpts, ts(:,:,:,:,Nbb), gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    197201            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
     
    228232                         vv(:,:,:,Nrhs) = 0._wp 
    229233 
    230       IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   & 
    231                &         CALL dyn_asm_inc   ( kstp, Nbb, Nnn, uu, vv, Nrhs )  ! apply dynamics assimilation increment 
    232       IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp, Nbb,      uu, vv, Nrhs )  ! bdy damping trends 
    233 #if defined key_agrif 
     234      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (1) 
     235      DO jtile = 1, nijtile 
     236         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     237 
     238         IF(  lk_asminc .AND. ln_asmiau .AND. ln_dyninc )   & 
     239                  &         CALL dyn_asm_inc   ( kstp, Nbb, Nnn, uu, vv, Nrhs )  ! apply dynamics assimilation increment 
     240         IF( ln_bdy     )   CALL bdy_dyn3d_dmp ( kstp, Nbb,      uu, vv, Nrhs )  ! bdy damping trends 
     241#if defined key_agrif 
     242      END DO 
     243      IF( ln_tile ) CALL dom_tile_stop 
     244 
    234245      IF(.NOT. Agrif_Root())  & 
    235246               &         CALL Agrif_Sponge_dyn        ! momentum sponge 
    236 #endif 
    237                          CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
    238                          CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
    239                          CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
    240       IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
    241                          CALL dyn_hpg( kstp,      Nnn      , uu, vv, Nrhs )  ! horizontal gradient of Hydrostatic pressure 
    242                          CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa )  ! surface pressure gradient 
    243                           
    244       IF( ln_dynspg_ts ) THEN      ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) 
    245                                    ! as well as vertical scale factors and vertical velocity need to be updated 
    246                             CALL div_hor    ( kstp, Nbb, Nnn )                ! Horizontal divergence  (2nd call in time-split case) 
    247          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  
    248       ENDIF 
     247 
     248      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (1, continued) 
     249      DO jtile = 1, nijtile 
     250         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     251#endif 
     252                            CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
     253                            CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
     254                            CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
     255         IF( ln_zdfosm  )   CALL dyn_osm( kstp,      Nnn      , uu, vv, Nrhs )  ! OSMOSIS non-local velocity fluxes ==> RHS 
     256                            CALL dyn_hpg( kstp,      Nnn      , uu, vv, Nrhs )  ! horizontal gradient of Hydrostatic pressure 
     257      END DO 
     258      IF( ln_tile ) CALL dom_tile_stop 
     259 
     260                            CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa )  ! surface pressure gradient 
     261 
     262      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (2) 
     263      DO jtile = 1, nijtile 
     264         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     265 
     266         IF( ln_dynspg_ts ) THEN      ! With split-explicit free surface, since now transports have been updated and ssh(:,:,Nrhs) 
     267                                      ! as well as vertical scale factors and vertical velocity need to be updated 
     268                            CALL div_hor    ( kstp, Nbb, Nnn )                  ! Horizontal divergence  (2nd call in time-split case) 
     269            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 
     270         ENDIF 
    249271                            CALL dyn_zdf    ( kstp, Nbb, Nnn, Nrhs, uu, vv, Naa  )  ! vertical diffusion 
     272      END DO 
     273      IF( ln_tile ) CALL dom_tile_stop 
     274 
    250275      IF( ln_dynspg_ts ) THEN                                                       ! vertical scale factors and vertical velocity need to be updated 
    251276                            CALL wzv        ( kstp, Nbb, Nnn, Naa, ww )             ! Nnn cross-level velocity 
     
    288313      ! Active tracers 
    289314      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    290       ! Loop over tile domains 
     315                         ts(:,:,:,:,Nrhs) = 0._wp         ! set tracer trends to zero 
     316 
     317      IF( ln_tile ) CALL dom_tile_start         ! [tiling] TRA tiling loop (1) 
    291318      DO jtile = 1, nijtile 
    292          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    293  
    294          DO_3D( 0, 0, 0, 0, 1, jpk ) 
    295             ts(ji,jj,jk,:,Nrhs) = 0._wp                                   ! set tracer trends to zero 
    296          END_3D 
     319         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    297320 
    298321         IF(  lk_asminc .AND. ln_asmiau .AND. & 
     
    306329         IF( ln_bdy     )   CALL bdy_tra_dmp( kstp, Nbb,      ts, Nrhs )  ! bdy damping trends 
    307330      END DO 
     331      IF( ln_tile ) CALL dom_tile_stop 
    308332 
    309333#if defined key_agrif 
    310334      IF(.NOT. Agrif_Root() ) THEN 
    311          IF( ln_tile    )   CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) 
    312335                            CALL Agrif_Sponge_tra        ! tracers sponge 
    313336      ENDIF 
     
    315338 
    316339      ! TEMP: [tiling] Separate loop over tile domains (due to tra_adv workarounds for tiling) 
     340      IF( ln_tile ) CALL dom_tile_start         ! [tiling] TRA tiling loop (2) 
    317341      DO jtile = 1, nijtile 
    318          IF( ln_tile    )  CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
     342         IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = jtile ) 
    319343 
    320344                            CALL tra_adv    ( kstp, Nbb, Nnn, ts, Nrhs )  ! hor. + vert. advection ==> RHS 
     
    329353         IF( ln_zdfnpc  )   CALL tra_npc    ( kstp,      Nnn, Nrhs, ts, Naa  )  ! update after fields by non-penetrative convection 
    330354      END DO 
    331  
    332       IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) ! Revert to tile over full domain 
     355      IF( ln_tile ) CALL dom_tile_stop 
     356 
    333357      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    334358      ! Set boundary conditions, time filter and swap time levels 
     
    516540                       &          , pts(:,:,:,jp_tem,Kaa), 'T',  1., pts(:,:,:,jp_sal,Kaa), 'T',  1. ) 
    517541      ! 
     542      ! lbc_lnk needed for zdf_sh2 when using nn_hls = 2, moved here to allow tiling in zdf_phy 
     543      IF( nn_hls == 2 .AND. l_zdfsh2 ) CALL lbc_lnk( 'stp', avm_k, 'W', 1.0_wp ) 
     544 
     545      ! dom_qco_r3c defines over [nn_hls, nn_hls-1, nn_hls, nn_hls-1] 
     546      IF( nn_hls == 2 .AND. .NOT. lk_linssh ) THEN 
     547         CALL lbc_lnk( 'finalize_lbc', r3u(:,:,Kaa), 'U', 1._wp, r3v(:,:,Kaa), 'V', 1._wp, & 
     548            &                          r3u_f(:,:),   'U', 1._wp, r3v_f(:,:),   'V', 1._wp ) 
     549      ENDIF 
    518550      !                                        !* BDY open boundaries 
    519551      IF( ln_bdy )   THEN 
Note: See TracChangeset for help on using the changeset viewer.