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 13516 for NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_ubs.F90 – NEMO

Ignore:
Timestamp:
2020-09-24T20:38:10+02:00 (4 years ago)
Author:
hadcv
Message:

Tiling for tra_adv

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/TRA/traadv_ubs.F90

    r13295 r13516  
    1414   USE oce            ! ocean dynamics and active tracers 
    1515   USE dom_oce        ! ocean space and time domain 
     16   ! TEMP: This change not necessary after trd_tra is tiled 
     17   USE domain, ONLY : dom_tile 
    1618   USE trc_oce        ! share passive tracers/Ocean variables 
    1719   USE trd_oce        ! trends: ocean variables 
     
    9294      INTEGER                                  , INTENT(in   ) ::   kn_ubs_v        ! number of tracers 
    9395      REAL(wp)                                 , INTENT(in   ) ::   p2dt            ! tracer time-step 
     96      ! TEMP: This can be ST_2D(nn_hls) after trd_tra is tiled 
    9497      REAL(wp), DIMENSION(jpi,jpj,jpk         ), INTENT(in   ) ::   pU, pV, pW      ! 3 ocean volume transport components 
    9598      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) ::   pt              ! tracers and RHS of tracer equation 
    9699      ! 
     100      ! TEMP: This change not necessary after trd_tra is tiled 
     101      INTEGER  ::   itile 
    97102      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    98103      REAL(wp) ::   ztra, zbtr, zcoef                       ! local scalars 
    99104      REAL(wp) ::   zfp_ui, zfm_ui, zcenut, ztak, zfp_wk, zfm_wk   !   -      - 
    100105      REAL(wp) ::   zfp_vj, zfm_vj, zcenvt, zeeu, zeev, z_hdivn    !   -      - 
    101       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztu, ztv, zltu, zltv, zti, ztw   ! 3D workspace 
    102       !!---------------------------------------------------------------------- 
    103       ! 
    104       IF( kt == kit000 )  THEN 
    105          IF(lwp) WRITE(numout,*) 
    106          IF(lwp) WRITE(numout,*) 'tra_adv_ubs :  horizontal UBS advection scheme on ', cdtype 
    107          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
     106      REAL(wp), DIMENSION(ST_2D(nn_hls),jpk) ::   ztu, ztv, zltu, zltv, zti, ztw     ! 3D workspace 
     107      ! TEMP: This change not necessary after trd_tra is tiled 
     108      REAL(wp), DIMENSION(:,:,:), SAVE, ALLOCATABLE ::   ztrdx, ztrdy, ztrdz 
     109      !!---------------------------------------------------------------------- 
     110      ! TEMP: This change not necessary after trd_tra is tiled 
     111      itile = ntile 
     112      ! 
     113      IF( ntile == 0 .OR. ntile == 1 )  THEN                       ! Do only on the first tile 
     114         IF( kt == kit000 )  THEN 
     115            IF(lwp) WRITE(numout,*) 
     116            IF(lwp) WRITE(numout,*) 'tra_adv_ubs :  horizontal UBS advection scheme on ', cdtype 
     117            IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
     118         ENDIF 
     119         ! 
     120         l_trd = .FALSE. 
     121         l_hst = .FALSE. 
     122         l_ptr = .FALSE. 
     123         IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     124         IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) )  )   l_ptr = .TRUE. 
     125         IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     126            &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
     127 
     128         ! TEMP: This can be ST_2D(nn_hls) after trd_tra is tiled 
     129         IF( kt == kit000 .AND. l_trd ) THEN 
     130            ALLOCATE( ztrdx(jpi,jpj,jpk), ztrdy(jpi,jpj,jpk), ztrdz(jpi,jpj,jpk) ) 
     131         ENDIF 
    108132      ENDIF 
    109       ! 
    110       l_trd = .FALSE. 
    111       l_hst = .FALSE. 
    112       l_ptr = .FALSE. 
    113       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
    114       IF(   cdtype == 'TRA' .AND. ( iom_use( 'sophtadv' ) .OR. iom_use( 'sophtadv' ) )  )   l_ptr = .TRUE.  
    115       IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    116          &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
    117133      ! 
    118134      ztw (:,:, 1 ) = 0._wp      ! surface & bottom value : set to zero for all tracers 
     
    153169         END_3D 
    154170         ! 
    155          zltu(:,:,:) = pt(:,:,:,jn,Krhs)      ! store the initial trends before its update 
     171         DO_3D( 1, 1, 1, 1, 1, jpk ) 
     172            zltu(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs)      ! store the initial trends before its update 
     173         END_3D 
    156174         ! 
    157175         DO jk = 1, jpkm1        !==  add the horizontal advective trend  ==! 
     
    165183         END DO 
    166184         ! 
    167          zltu(:,:,:) = pt(:,:,:,jn,Krhs) - zltu(:,:,:)    ! Horizontal advective trend used in vertical 2nd order FCT case 
    168          !                                            ! and/or in trend diagnostic (l_trd=T)  
    169          !                 
     185         DO_3D( 1, 1, 1, 1, 1, jpk ) 
     186            zltu(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs) - zltu(ji,jj,jk)  ! Horizontal advective trend used in vertical 2nd order FCT case 
     187         END_3D                                                     ! and/or in trend diagnostic (l_trd=T) 
     188         ! 
     189         ! TEMP: These changes not necessary after trd_tra is tiled 
    170190         IF( l_trd ) THEN                  ! trend diagnostics 
    171              CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztu, pU, pt(:,:,:,jn,Kmm) ) 
    172              CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztv, pV, pt(:,:,:,jn,Kmm) ) 
     191            DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
     192               ztrdx(ji,jj,jk) = ztu(ji,jj,jk) 
     193               ztrdy(ji,jj,jk) = ztv(ji,jj,jk) 
     194            END_3D 
     195 
     196            IF( ntile == 0 .OR. ntile == nijtile )  THEN                ! Do only for the full domain 
     197               IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 )         ! Use full domain 
     198 
     199               ! TODO: TO BE TILED- trd_tra 
     200               CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztrdx, pU, pt(:,:,:,jn,Kmm) ) 
     201               CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztrdy, pV, pt(:,:,:,jn,Kmm) ) 
     202 
     203               IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = itile )     ! Revert to tile domain 
     204            ENDIF 
    173205         END IF 
    174206         !      
     
    185217         CASE(  2  )                   ! 2nd order FCT  
    186218            !          
    187             IF( l_trd )   zltv(:,:,:) = pt(:,:,:,jn,Krhs)          ! store pt(:,:,:,:,Krhs) if trend diag. 
     219            IF( l_trd ) THEN 
     220               DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     221                  zltv(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs)          ! store pt(:,:,:,:,Krhs) if trend diag. 
     222               END_3D 
     223            ENDIF 
    188224            ! 
    189225            !                          !*  upstream advection with initial mass fluxes & intermediate update  ==! 
     
    194230            END_3D 
    195231            IF( ln_linssh ) THEN             ! top ocean value (only in linear free surface as ztw has been w-masked) 
     232               ! TODO: NOT TESTED- requires isf 
    196233               IF( ln_isfcav ) THEN                ! top of the ice-shelf cavities and at the ocean surface 
    197234                  DO_2D( 1, 1, 1, 1 ) 
     
    199236                  END_2D 
    200237               ELSE                                ! no cavities: only at the ocean surface 
    201                   ztw(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 
     238                  DO_2D( 1, 1, 1, 1 ) 
     239                     ztw(ji,jj,1) = pW(ji,jj,1) * pt(ji,jj,1,jn,Kbb) 
     240                  END_2D 
    202241               ENDIF 
    203242            ENDIF 
     
    226265               ztw(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
    227266            END_3D 
    228             IF( ln_linssh )   ztw(:,:, 1 ) = pW(:,:,1) * pt(:,:,1,jn,Kmm)     !!gm ISF & 4th COMPACT doesn't work 
     267            IF( ln_linssh ) THEN 
     268               DO_2D( 1, 1, 1, 1 ) 
     269                  ztw(ji,jj,1) = pW(ji,jj,1) * pt(ji,jj,1,jn,Kmm)     !!gm ISF & 4th COMPACT doesn't work 
     270               END_2D 
     271            ENDIF 
    229272            ! 
    230273         END SELECT 
     
    235278         END_3D 
    236279         ! 
     280         ! TEMP: These changes not necessary after trd_tra is tiled 
    237281         IF( l_trd )  THEN       ! vertical advective trend diagnostics 
    238282            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    239                zltv(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs) - zltv(ji,jj,jk)                          & 
     283               ztrdz(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs) - zltv(ji,jj,jk)                          & 
    240284                  &           + pt(ji,jj,jk,jn,Kmm) * (  pW(ji,jj,jk) - pW(ji,jj,jk+1)  )   & 
    241285                  &                              * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    242286            END_3D 
    243             CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zltv ) 
     287 
     288            IF( ntile == 0 .OR. ntile == nijtile )  THEN                ! Do only for the full domain 
     289               IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 )         ! Use full domain 
     290 
     291               ! TODO: TO BE TILED- trd_tra 
     292               CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, ztrdz ) 
     293 
     294               IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = itile )     ! Revert to tile domain 
     295            ENDIF 
    244296         ENDIF 
    245297         ! 
     
    262314      !!       in-space based differencing for fluid 
    263315      !!---------------------------------------------------------------------- 
    264       INTEGER , INTENT(in   )                          ::   Kmm    ! time level index 
    265       REAL(wp), INTENT(in   )                          ::   p2dt   ! tracer time-step 
    266       REAL(wp),                DIMENSION (jpi,jpj,jpk) ::   pbef   ! before field 
    267       REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   paft   ! after field 
    268       REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   pcc    ! monotonic flux in the k direction 
     316      INTEGER , INTENT(in   )                         ::   Kmm    ! time level index 
     317      REAL(wp), INTENT(in   )                         ::   p2dt   ! tracer time-step 
     318      REAL(wp),                DIMENSION(jpi,jpj,jpk) ::   pbef   ! before field 
     319      REAL(wp), INTENT(inout), DIMENSION(ST_2D(nn_hls)    ,jpk) ::   paft   ! after field 
     320      REAL(wp), INTENT(inout), DIMENSION(ST_2D(nn_hls)    ,jpk) ::   pcc    ! monotonic flux in the k direction 
    269321      ! 
    270322      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    271323      INTEGER  ::   ikm1         ! local integer 
    272324      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn   ! local scalars 
    273       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zbetup, zbetdo     ! 3D workspace 
     325      REAL(wp), DIMENSION(ST_2D(nn_hls),jpk) ::   zbetup, zbetdo         ! 3D workspace 
    274326      !!---------------------------------------------------------------------- 
    275327      ! 
     
    281333      ! -------------------- 
    282334      !                    ! large negative value (-zbig) inside land 
    283       pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:) - zbig * ( 1.e0 - tmask(:,:,:) ) 
    284       paft(:,:,:) = paft(:,:,:) * tmask(:,:,:) - zbig * ( 1.e0 - tmask(:,:,:) ) 
     335      DO_3D( 0, 0, 0, 0, 1, jpk ) 
     336         pbef(ji,jj,jk) = pbef(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1.e0 - tmask(ji,jj,jk) ) 
     337         paft(ji,jj,jk) = paft(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1.e0 - tmask(ji,jj,jk) ) 
     338      END_3D 
    285339      ! 
    286340      DO jk = 1, jpkm1     ! search maximum in neighbourhood 
     
    293347      END DO 
    294348      !                    ! large positive value (+zbig) inside land 
    295       pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:) + zbig * ( 1.e0 - tmask(:,:,:) ) 
    296       paft(:,:,:) = paft(:,:,:) * tmask(:,:,:) + zbig * ( 1.e0 - tmask(:,:,:) ) 
     349      DO_3D( 0, 0, 0, 0, 1, jpk ) 
     350         pbef(ji,jj,jk) = pbef(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1.e0 - tmask(ji,jj,jk) ) 
     351         paft(ji,jj,jk) = paft(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1.e0 - tmask(ji,jj,jk) ) 
     352      END_3D 
    297353      ! 
    298354      DO jk = 1, jpkm1     ! search minimum in neighbourhood 
     
    305361      END DO 
    306362      !                    ! restore masked values to zero 
    307       pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:) 
    308       paft(:,:,:) = paft(:,:,:) * tmask(:,:,:) 
     363      DO_3D( 0, 0, 0, 0, 1, jpk ) 
     364         pbef(ji,jj,jk) = pbef(ji,jj,jk) * tmask(ji,jj,jk) 
     365         paft(ji,jj,jk) = paft(ji,jj,jk) * tmask(ji,jj,jk) 
     366      END_3D 
    309367      ! 
    310368      ! Positive and negative part of fluxes and beta terms 
Note: See TracChangeset for help on using the changeset viewer.