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 13882 for NEMO/branches/2020/dev_r13508_HPC-09_loop_fusion/src/OCE/TRA/traadv_mus_lf.F90 – NEMO

Ignore:
Timestamp:
2020-11-26T10:52:00+01:00 (3 years ago)
Author:
francesca
Message:

loop fusion v2 - mus and fct advection schemes - ticket #2367

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13508_HPC-09_loop_fusion/src/OCE/TRA/traadv_mus_lf.F90

    r13881 r13882  
    129129      REAL(wp) ::   zv, z0v, z0w           !   -      - 
    130130      REAL(wp) ::   zzwx, zzwxm1, zzwxp1, zzwy, zzwym1, zzwyp1 
    131       REAL(wp) ::   zzwz, zzwzp1, zzwzp2, zzslpz, zzslpzp1 
    132       REAL(wp) ::   zzslpx, zzslpx_ip1, zzslpy, zzslpy_jp1 
    133       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwx, zwy, zwz  
     131      REAL(wp) ::   zzslpx, zzslpxp1, zzslpy, zzslpyp1 
     132      REAL(wp), TARGET, DIMENSION(jpi,jpj) :: zzwz_buf, zzwzp1_buf, zzwzp2_buf 
     133      REAL(wp), TARGET, DIMENSION(jpi,jpj) :: zzslpz_buf, zzslpzp1_buf 
     134      REAL(wp), POINTER, DIMENSION(:,:)    :: tmp, zzwz_ptr, zzwzp1_ptr, zzwzp2_ptr 
     135      REAL(wp), POINTER, DIMENSION(:,:)    :: zzslpz_ptr, zzslpzp1_ptr  
     136      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwz, zwx, zwy   ! 3D workspace 
    134137      !!---------------------------------------------------------------------- 
    135138      ! 
     
    167170         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
    168171      ! 
     172         zzwz_ptr => zzwz_buf 
     173         zzwzp1_ptr => zzwzp1_buf 
     174         zzwzp2_ptr => zzwzp2_buf 
     175         zzslpz_ptr => zzslpz_buf 
     176         zzslpzp1_ptr => zzslpzp1_buf 
     177         ! 
    169178      DO jn = 1, kjpt            !==  loop over the tracers  ==! 
    170179         ! 
    171          !                          !* Horizontal advective fluxes 
    172          ! 
    173          !!---------------------------------------------------------------------- 
    174180         zwx(:,:,jpk) = 0._wp                   ! bottom values 
    175181         zwy(:,:,jpk) = 0._wp 
    176182         zwz(:,:, 1 ) = 0._wp                   ! surface & bottom boundary conditions 
    177183         zwz(:,:,jpk) = 0._wp 
    178  
     184         !                          !* Horizontal advective fluxes 
     185         ! 
     186         !!---------------------------------------------------------------------- 
    179187         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    180188            !-- first guess of the slopes 
     189            initial_slop_i(zzwxm1, ji-1) 
    181190            initial_slop_i(zzwx, ji) 
    182             initial_slop_i(zzwxm1, ji-1) 
    183191            initial_slop_i(zzwxp1, ji+1) 
    184192 
     193            initial_slop_j(zzwym1, jj-1) 
    185194            initial_slop_j(zzwy, jj) 
    186             initial_slop_j(zzwym1, jj-1) 
    187195            initial_slop_j(zzwyp1, jj+1) 
    188196            !-- Slopes of tracer 
    189197            tracer_slop(zzslpx, zzwx, zzwxm1)  
    190             tracer_slop(zzslpx_ip1, zzwxp1, zzwx)  
     198            tracer_slop(zzslpxp1, zzwxp1, zzwx)  
    191199            tracer_slop(zzslpy, zzwy, zzwym1)  
    192             tracer_slop(zzslpy_jp1, zzwyp1, zzwy)  
     200            tracer_slop(zzslpyp1, zzwyp1, zzwy)  
    193201            !-- Slopes limitation 
    194202            limitation_slop(zzslpx, zzslpx, zzwxm1, zzwx) 
    195             limitation_slop(zzslpx_ip1, zzslpx_ip1, zzwx, zzwxp1) 
     203            limitation_slop(zzslpxp1, zzslpxp1, zzwx, zzwxp1) 
    196204            limitation_slop(zzslpy, zzslpy, zzwym1, zzwy) 
    197             limitation_slop(zzslpy_jp1, zzslpy_jp1, zzwy, zzwyp1) 
     205            limitation_slop(zzslpyp1, zzslpyp1, zzwy, zzwyp1) 
    198206            !-- MUSCL horizontal advective fluxes 
    199             vertical_adv_flux_i(zwx(ji,jj,jk), jk, zzslpx, zzslpx_ip1)  
    200             vertical_adv_flux_j(zwy(ji,jj,jk), jk, zzslpy, zzslpy_jp1)  
     207            vertical_adv_flux_i(zwx(ji,jj,jk), jk, zzslpx, zzslpxp1)  
     208            vertical_adv_flux_j(zwy(ji,jj,jk), jk, zzslpy, zzslpyp1)  
    201209         END_3D 
    202210         ! 
     
    207215         END_3D 
    208216         !                          !* Vertical advective fluxes 
    209          ! 
    210217         DO_2D( 0, 0, 0, 0 )  
    211218            !-- first guess of the slopes 
    212             initial_slop_k(zzwzp1, 2) 
    213             initial_slop_k(zzwzp2, 3) 
     219            initial_slop_k(zzwz_ptr(ji,jj), 2) 
     220            initial_slop_k(zzwzp1_ptr(ji,jj), 3) 
    214221            !-- Slopes of tracer 
    215             tracer_slop(zzslpzp1, zzwzp1, zzwzp2) 
     222            tracer_slop(zzslpz_ptr(ji,jj), zzwz_ptr(ji,jj), zzwzp1_ptr(ji,jj)) 
    216223            !-- Slopes limitation 
    217             limitation_slop(zzslpzp1, zzslpzp1, zzwzp2, zzwzp1) 
     224            limitation_slop(zzslpz_ptr(ji,jj), zzslpz_ptr(ji,jj), zzwzp1_ptr(ji,jj), zzwz_ptr(ji,jj)) 
    218225            !-- vertical advective flux 
    219             vertical_adv_flux(zwz(ji,jj,2), 1, 0, zzslpzp1) 
     226            vertical_adv_flux(zwz(ji,jj,2), 1, 0, zzslpz_ptr(ji,jj)) 
    220227         END_2D 
    221          DO_3D( 0, 0, 0, 0, 2, jpk-3 )     
    222             !-- first guess of the slopes 
    223             initial_slop_k(zzwz, jk) 
    224             initial_slop_k(zzwzp1, jk+1) 
    225             initial_slop_k(zzwzp2, jk+2) 
     228          
     229         DO jk = 2, jpk-3     
     230            DO_2D( 0, 0, 0, 0 ) 
     231               !-- first guess of the slopes 
     232               initial_slop_k(zzwzp2_ptr(ji,jj), jk+2) 
     233               !-- Slopes of tracer 
     234               tracer_slop(zzslpzp1_ptr(ji,jj), zzwzp1_ptr(ji,jj), zzwzp2_ptr(ji,jj)) 
     235               !-- Slopes limitation 
     236               limitation_slop(zzslpzp1_ptr(ji,jj), zzslpzp1_ptr(ji,jj), zzwzp2_ptr(ji,jj), zzwzp1_ptr(ji,jj)) 
     237               !-- vertical advective flux 
     238               vertical_adv_flux(zwz(ji,jj,jk+1), jk, zzslpz_ptr(ji,jj), zzslpzp1_ptr(ji,jj)) 
     239            END_2D 
     240            tmp => zzwzp1_ptr 
     241            zzwzp1_ptr => zzwzp2_ptr 
     242            zzwzp2_ptr => tmp 
     243 
     244            tmp => zzslpz_ptr 
     245            zzslpz_ptr => zzslpzp1_ptr 
     246            zzslpzp1_ptr => tmp  
     247         END DO 
     248         DO_2D( 0, 0, 0, 0 )  
    226249            !-- Slopes of tracer 
    227             tracer_slop(zzslpz, zzwz, zzwzp1) 
    228             tracer_slop(zzslpzp1, zzwzp1, zzwzp2) 
     250            tracer_slop(zzslpzp1_ptr(ji,jj), zzwzp1_ptr(ji,jj), 0) 
    229251            !-- Slopes limitation 
    230             limitation_slop(zzslpz, zzslpz, zzwzp1, zzwz) 
    231             limitation_slop(zzslpzp1, zzslpzp1, zzwzp2, zzwzp1) 
     252            limitation_slop(zzslpzp1_ptr(ji,jj), zzslpzp1_ptr(ji,jj), 0, zzwzp1_ptr(ji,jj)) 
    232253            !-- vertical advective flux 
    233             vertical_adv_flux(zwz(ji,jj,jk+1), jk, zzslpz, zzslpzp1) 
    234          END_3D 
    235          DO_2D( 0, 0, 0, 0 )  
    236             !-- first guess of the slopes 
    237             initial_slop_k(zzwz, jpk-2) 
    238             initial_slop_k(zzwzp1, jpk-1) 
    239             zzwzp2 = 0 
    240             !-- Slopes of tracer 
    241             tracer_slop(zzslpz, zzwz, zzwzp1) 
    242             tracer_slop(zzslpzp1, zzwzp1, zzwzp2) 
    243             !-- Slopes limitation 
    244             limitation_slop(zzslpz, zzslpz, zzwzp1, zzwz) 
    245             limitation_slop(zzslpzp1, zzslpzp1, zzwzp2, zzwzp1) 
    246             !-- vertical advective flux 
    247             vertical_adv_flux(zwz(ji,jj,jpk-1), jpk-2, zzslpz, zzslpzp1) 
     254            vertical_adv_flux(zwz(ji,jj,jpk-1), jpk-2, zzslpz_ptr(ji,jj), zzslpzp1_ptr(ji,jj)) 
    248255         END_2D 
    249256 
Note: See TracChangeset for help on using the changeset viewer.