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

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

Tiling for modules after tra_ldf

File:
1 edited

Legend:

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

    r13295 r13517  
    1414   USE oce            ! ocean dynamics and tracers variables 
    1515   USE dom_oce        ! ocean space and time domain variables  
     16   ! TEMP: This change not necessary after trd_tra is tiled 
     17   USE domain, ONLY : dom_tile 
    1618   USE domvvl         ! variable volume 
    1719   USE phycst         ! physical constant 
     
    5557      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts                 ! active tracers and RHS of tracer equation 
    5658      ! 
    57       INTEGER  ::   jk   ! Dummy loop indices 
    58       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdt, ztrds   ! 3D workspace 
     59      INTEGER  ::   ji, jj, jk   ! Dummy loop indices 
     60      ! TEMP: This change not necessary after trd_tra is tiled 
     61      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   ztrdt, ztrds   ! 3D workspace 
    5962      !!--------------------------------------------------------------------- 
    6063      ! 
     
    6265      ! 
    6366      IF( kt == nit000 )  THEN 
    64          IF(lwp)WRITE(numout,*) 
    65          IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 
    66          IF(lwp)WRITE(numout,*) '~~~~~~~ ' 
     67         IF( ntile == 0 .OR. ntile == 1 )  THEN                   ! Do only on the first tile 
     68            IF(lwp)WRITE(numout,*) 
     69            IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 
     70            IF(lwp)WRITE(numout,*) '~~~~~~~ ' 
     71         ENDIF 
    6772      ENDIF 
    6873      ! 
    6974      IF( l_trdtra )   THEN                  !* Save ta and sa trends 
    70          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    71          ztrdt(:,:,:) = pts(:,:,:,jp_tem,Kaa) 
    72          ztrds(:,:,:) = pts(:,:,:,jp_sal,Kaa) 
     75         IF( ntile == 0 .OR. ntile == 1 )  THEN                       ! Do only on the first tile 
     76            ! TEMP: This can be ST_2D(nn_hls) after trd_tra is tiled 
     77            ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 
     78         ENDIF 
     79 
     80         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     81            ztrdt(ji,jj,jk) = pts(ji,jj,jk,jp_tem,Kaa) 
     82            ztrds(ji,jj,jk) = pts(ji,jj,jk,jp_sal,Kaa) 
     83         END_3D 
    7384      ENDIF 
    7485      ! 
     
    8091      ! JMM avoid negative salinities near river outlet ! Ugly fix 
    8192      ! JMM : restore negative salinities to small salinities: 
    82       WHERE( pts(:,:,:,jp_sal,Kaa) < 0._wp )   pts(:,:,:,jp_sal,Kaa) = 0.1_wp 
     93      WHERE( pts(ST_2D(0),:,jp_sal,Kaa) < 0._wp )   pts(ST_2D(0),:,jp_sal,Kaa) = 0.1_wp 
    8394!!gm 
    8495 
     96      ! TEMP: These changes not necessary after trd_tra is tiled 
    8597      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    86          DO jk = 1, jpkm1 
    87             ztrdt(:,:,jk) = (   (  pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa)     & 
    88                &                 - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb)  )  & 
    89                &              / (  e3t(:,:,jk,Kmm)*rDt  )   )                 & 
    90                &          - ztrdt(:,:,jk) 
    91             ztrds(:,:,jk) = (   (  pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa)     & 
    92                &                 - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb)  )  & 
    93                &             / (   e3t(:,:,jk,Kmm)*rDt  )   )                 & 
    94                &          - ztrds(:,:,jk) 
    95          END DO 
    96 !!gm this should be moved in trdtra.F90 and done on all trends 
    97          CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1.0_wp , ztrds, 'T', 1.0_wp ) 
    98 !!gm 
    99          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 
    100          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 
    101          DEALLOCATE( ztrdt , ztrds ) 
     98         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     99            ztrdt(ji,jj,jk) = ( ( pts(ji,jj,jk,jp_tem,Kaa)*e3t(ji,jj,jk,Kaa) - pts(ji,jj,jk,jp_tem,Kbb)*e3t(ji,jj,jk,Kbb) ) & 
     100               &          / (e3t(ji,jj,jk,Kmm)*rDt) ) - ztrdt(ji,jj,jk) 
     101            ztrds(ji,jj,jk) = ( ( pts(ji,jj,jk,jp_sal,Kaa)*e3t(ji,jj,jk,Kaa) - pts(ji,jj,jk,jp_sal,Kbb)*e3t(ji,jj,jk,Kbb) ) & 
     102              &           / (e3t(ji,jj,jk,Kmm)*rDt) ) - ztrds(ji,jj,jk) 
     103         END_3D 
     104 
     105         IF( ntile == 0 .OR. ntile == nijtile )  THEN                ! Do only for the full domain 
     106            IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 )         ! Use full domain 
     107 
     108            ! TODO: TO BE TILED- trd_tra 
     109            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 
     110            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 
     111            DEALLOCATE( ztrdt , ztrds ) 
     112 
     113            IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = nijtile )   ! Revert to tile domain 
     114         ENDIF 
    102115      ENDIF 
    103116      !                                          ! print mean trends (used for debugging) 
     
    140153      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    141154      REAL(wp) ::  zrhs, zzwi, zzws ! local scalars 
    142       REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zwi, zwt, zwd, zws 
     155      REAL(wp), DIMENSION(ST_2D(nn_hls),jpk) ::  zwi, zwt, zwd, zws 
    143156      !!--------------------------------------------------------------------- 
    144157      ! 
     
    154167            ! 
    155168            ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 
    156             IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN   ;   zwt(:,:,2:jpk) = avt(:,:,2:jpk) 
    157             ELSE                                            ;   zwt(:,:,2:jpk) = avs(:,:,2:jpk) 
     169            IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN 
     170               DO_3D( 1, 1, 1, 1, 2, jpk ) 
     171                  zwt(ji,jj,jk) = avt(ji,jj,jk) 
     172               END_3D 
     173            ELSE 
     174               DO_3D( 1, 1, 1, 1, 2, jpk ) 
     175                  zwt(ji,jj,jk) = avs(ji,jj,jk) 
     176               END_3D 
    158177            ENDIF 
    159178            zwt(:,:,1) = 0._wp 
     
    222241         END_2D 
    223242         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    224             zrhs =        e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb)    &  
     243            zrhs =        e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb)    & 
    225244               & + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs)   ! zrhs=right hand side 
    226245            pt(ji,jj,jk,jn,Kaa) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt(ji,jj,jk-1,jn,Kaa) 
Note: See TracChangeset for help on using the changeset viewer.