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 13054 for NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DIA/diaar5.F90 – NEMO

Ignore:
Timestamp:
2020-06-05T18:56:01+02:00 (4 years ago)
Author:
hadcv
Message:

Tiling for dia_ar5_hst, dia_ptr routines

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DIA/diaar5.F90

    r12958 r13054  
    3434   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
    3535   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   hstr_adv, hstr_ldf 
    3637 
    3738   LOGICAL  :: l_ar5 
     
    5354      !!---------------------------------------------------------------------- 
    5455      ! 
    55       ALLOCATE( thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
     56      ALLOCATE( thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , & 
     57         &      hstr_adv(jpi,jpj,jpts,2), hstr_ldf(jpi,jpj,jpts,2), STAT=dia_ar5_alloc ) 
    5658      ! 
    5759      CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 
     
    301303   END SUBROUTINE dia_ar5 
    302304 
    303  
    304    SUBROUTINE dia_ar5_hst( ktra, cptr, puflx, pvflx )  
     305   ! TODO: These changes and lbc_lnk not necessary if using XIOS (subdomain support, will not output haloes) 
     306   SUBROUTINE dia_ar5_hst( ktra, cptr, puflx, pvflx ) 
    305307      !!---------------------------------------------------------------------- 
    306308      !!                    ***  ROUTINE dia_ar5_htr *** 
     
    311313      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
    312314      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf' 
    313       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: puflx  ! u-flux of advection/diffusion 
    314       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: pvflx  ! v-flux of advection/diffusion 
     315      REAL(wp), DIMENSION(A2D,jpk)    , INTENT(in)   :: puflx  ! u-flux of advection/diffusion 
     316      REAL(wp), DIMENSION(A2D,jpk)    , INTENT(in)   :: pvflx  ! v-flux of advection/diffusion 
    315317      ! 
    316318      INTEGER    ::  ji, jj, jk 
    317       REAL(wp), DIMENSION(jpi,jpj)  :: z2d 
    318  
    319      
    320       z2d(:,:) = puflx(:,:,1)  
    321       DO_3D_00_00( 1, jpkm1 ) 
    322          z2d(ji,jj) = z2d(ji,jj) + puflx(ji,jj,jk)  
    323       END_3D 
    324        CALL lbc_lnk( 'diaar5', z2d, 'U', -1. ) 
    325        IF( cptr == 'adv' ) THEN 
    326           IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , rho0_rcp * z2d )  ! advective heat transport in i-direction 
    327           IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , rho0     * z2d )  ! advective salt transport in i-direction 
    328        ENDIF 
    329        IF( cptr == 'ldf' ) THEN 
    330           IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in i-direction 
    331           IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , rho0     * z2d ) ! diffusive salt transport in i-direction 
    332        ENDIF 
    333        ! 
    334        z2d(:,:) = pvflx(:,:,1)  
    335        DO_3D_00_00( 1, jpkm1 ) 
    336           z2d(ji,jj) = z2d(ji,jj) + pvflx(ji,jj,jk)  
    337        END_3D 
    338        CALL lbc_lnk( 'diaar5', z2d, 'V', -1. ) 
    339        IF( cptr == 'adv' ) THEN 
    340           IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , rho0_rcp * z2d )  ! advective heat transport in j-direction 
    341           IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , rho0     * z2d )  ! advective salt transport in j-direction 
    342        ENDIF 
    343        IF( cptr == 'ldf' ) THEN 
    344           IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in j-direction 
    345           IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , rho0     * z2d ) ! diffusive salt transport in j-direction 
    346        ENDIF 
    347            
     319 
     320      IF( cptr /= 'adv' .AND. cptr /= 'ldf' ) RETURN 
     321      IF( ktra /= jp_tem .AND. ktra /= jp_sal ) RETURN 
     322 
     323      IF( cptr == 'adv' ) THEN 
     324         DO_2D_00_00 
     325            hstr_adv(ji,jj,ktra,1) = puflx(ji,jj,1) 
     326            hstr_adv(ji,jj,ktra,2) = pvflx(ji,jj,1) 
     327         END_2D 
     328         DO_3D_00_00( 1, jpkm1 ) 
     329            hstr_adv(ji,jj,ktra,1) = hstr_adv(ji,jj,ktra,1) + puflx(ji,jj,jk) 
     330            hstr_adv(ji,jj,ktra,2) = hstr_adv(ji,jj,ktra,2) + pvflx(ji,jj,jk) 
     331         END_3D 
     332      ELSE IF( cptr == 'ldf' ) THEN 
     333         DO_2D_00_00 
     334            hstr_ldf(ji,jj,ktra,1) = puflx(ji,jj,1) 
     335            hstr_ldf(ji,jj,ktra,2) = pvflx(ji,jj,1) 
     336         END_2D 
     337         DO_3D_00_00( 1, jpkm1 ) 
     338            hstr_ldf(ji,jj,ktra,1) = hstr_ldf(ji,jj,ktra,1) + puflx(ji,jj,jk) 
     339            hstr_ldf(ji,jj,ktra,2) = hstr_ldf(ji,jj,ktra,2) + pvflx(ji,jj,jk) 
     340         END_3D 
     341      ENDIF 
     342 
     343      IF( ntile == 0 .OR. ntile == nijtile ) THEN 
     344         IF( cptr == 'adv' ) THEN 
     345            CALL lbc_lnk( 'diaar5', hstr_adv(:,:,ktra,1), 'U', -1. ) 
     346            IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , rho0_rcp * hstr_adv(:,:,ktra,1) )  ! advective heat transport in i-direction 
     347            IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , rho0     * hstr_adv(:,:,ktra,1) )  ! advective salt transport in i-direction 
     348            CALL lbc_lnk( 'diaar5', hstr_adv(:,:,ktra,2), 'V', -1. ) 
     349            IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , rho0_rcp * hstr_adv(:,:,ktra,2) )  ! advective heat transport in j-direction 
     350            IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , rho0     * hstr_adv(:,:,ktra,2) )  ! advective salt transport in j-direction 
     351         ENDIF 
     352         IF( cptr == 'ldf' ) THEN 
     353            CALL lbc_lnk( 'diaar5', hstr_ldf(:,:,ktra,1), 'U', -1. ) 
     354            IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , rho0_rcp * hstr_ldf(:,:,ktra,1) ) ! diffusive heat transport in i-direction 
     355            IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , rho0     * hstr_ldf(:,:,ktra,1) ) ! diffusive salt transport in i-direction 
     356            CALL lbc_lnk( 'diaar5', hstr_ldf(:,:,ktra,2), 'V', -1. ) 
     357            IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , rho0_rcp * hstr_ldf(:,:,ktra,2) ) ! diffusive heat transport in j-direction 
     358            IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , rho0     * hstr_ldf(:,:,ktra,2) ) ! diffusive salt transport in j-direction 
     359         ENDIF 
     360      ENDIF 
    348361   END SUBROUTINE dia_ar5_hst 
    349362 
     
    367380      IF(   iom_use( 'voltot'  ) .OR. iom_use( 'sshtot'    )  .OR. iom_use( 'sshdyn' )  .OR.  &  
    368381         &  iom_use( 'masstot' ) .OR. iom_use( 'temptot'   )  .OR. iom_use( 'saltot' ) .OR.  &     
    369          &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) L_ar5 = .TRUE. 
     382         &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' ) .OR. & 
     383         &  iom_use( 'uadv_heattr' ) .OR. iom_use( 'udiff_heattr' ) .OR. & 
     384         &  iom_use( 'uadv_salttr' ) .OR. iom_use( 'udiff_salttr' ) .OR. & 
     385         &  iom_use( 'vadv_heattr' ) .OR. iom_use( 'vdiff_heattr' ) .OR. & 
     386         &  iom_use( 'vadv_salttr' ) .OR. iom_use( 'vdiff_salttr' ) ) L_ar5 = .TRUE. 
    370387   
    371388      IF( l_ar5 ) THEN 
Note: See TracChangeset for help on using the changeset viewer.