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 12765 for NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_public/src/OCE/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2020-04-17T14:45:04+02:00 (4 years ago)
Author:
hadcv
Message:

tra_ldf_iso trial using public variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/dev_r12745_HPC-02_Daley_Tiling_trial_public/src/OCE/TRA/traldf_iso.F90

    r12489 r12765  
    3636   PUBLIC   tra_ldf_iso   ! routine called by step.F90 
    3737 
    38    LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
    39    LOGICAL  ::   l_hst   ! flag to compute heat transport 
    40  
    4138   !! * Substitutions 
    4239#  include "do_loop_substitute.h90" 
     
    104101      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs     ! tracer trend 
    105102      ! 
     103      LOGICAL  ::  l_ptr                                 ! flag to compute poleward transport 
     104      LOGICAL  ::  l_hst                                 ! flag to compute heat transport 
    106105      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    107106      INTEGER  ::  ikt 
     
    110109      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
    111110      REAL(wp) ::  zcoef0, ze3w_2, zsign                 !   -      - 
    112       REAL(wp), DIMENSION(jpi,jpj)     ::   zdkt, zdk1t, z2d 
    113       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, zftu, zftv, ztfw  
     111      REAL(wp), DIMENSION(IND_2D)     ::   zdkt, zdk1t, z2d 
     112      REAL(wp), DIMENSION(IND_2D,jpk) ::   zdit, zdjt, zftu, zftv, ztfw 
    114113      !!---------------------------------------------------------------------- 
    115114      ! 
    116115      IF( kpass == 1 .AND. kt == kit000 )  THEN 
    117          IF(lwp) WRITE(numout,*) 
    118          IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype 
    119          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    120          ! 
    121          akz     (:,:,:) = 0._wp       
    122          ah_wslp2(:,:,:) = 0._wp 
     116         IF( ntile == 1 )  THEN                       ! Do only on the first tile 
     117            ! TODO: TO BE TILED 
     118            IF(lwp) WRITE(numout,*) 
     119            IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype 
     120            IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     121         ENDIF 
     122         ! 
     123         DO_3D_11_11( 1, jpk ) 
     124            akz     (ji,jj,jk) = 0._wp 
     125            ah_wslp2(ji,jj,jk) = 0._wp 
     126         END_3D 
    123127      ENDIF 
    124128      !    
     
    179183           ! 
    180184         ELSE                                    ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 
    181             akz(:,:,:) = ah_wslp2(:,:,:)       
     185            DO_3D_11_11( 1, jpk ) 
     186               akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 
     187            END_3D 
    182188         ENDIF 
    183189      ENDIF 
     
    219225         DO jk = 1, jpkm1                                 ! Horizontal slab 
    220226            ! 
    221             !                             !== Vertical tracer gradient 
    222             zdk1t(:,:) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * wmask(:,:,jk+1)     ! level jk+1 
    223             ! 
    224             IF( jk == 1 ) THEN   ;   zdkt(:,:) = zdk1t(:,:)                          ! surface: zdkt(jk=1)=zdkt(jk=2) 
    225             ELSE                 ;   zdkt(:,:) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * wmask(:,:,jk) 
    226             ENDIF 
     227            DO_2D_11_11 
     228               !                             !== Vertical tracer gradient 
     229               zdk1t(ji,jj) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1)     ! level jk+1 
     230               ! 
     231               IF( jk == 1 ) THEN   ;   zdkt(ji,jj) = zdk1t(ji,jj)                          ! surface: zdkt(jk=1)=zdkt(jk=2) 
     232               ELSE                 ;   zdkt(ji,jj) = ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) * wmask(ji,jj,jk) 
     233               ENDIF 
     234            END_2D 
     235            ! 
    227236            DO_2D_10_10 
    228237               zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 
     
    312321         END_3D 
    313322         ! 
    314          IF( ( kpass == 1 .AND. ln_traldf_lap ) .OR.  &     !==  first pass only (  laplacian)  ==! 
    315              ( kpass == 2 .AND. ln_traldf_blp ) ) THEN      !==  2nd   pass      (bilaplacian)  ==! 
    316             ! 
    317             !                             ! "Poleward" diffusive heat or salt transports (T-S case only) 
    318                ! note sign is reversed to give down-gradient diffusive transports ) 
    319             IF( l_ptr )  CALL dia_ptr_hst( jn, 'ldf', -zftv(:,:,:)  ) 
    320             !                          ! Diffusive heat transports 
    321             IF( l_hst )  CALL dia_ar5_hst( jn, 'ldf', -zftu(:,:,:), -zftv(:,:,:) ) 
    322             ! 
    323          ENDIF                                                    !== end pass selection  ==! 
     323         IF( ntile == jpnijtile )  THEN                        ! Do only after all tiles finish 
     324            IF( ( kpass == 1 .AND. ln_traldf_lap ) .OR.  &     !==  first pass only (  laplacian)  ==! 
     325                ( kpass == 2 .AND. ln_traldf_blp ) ) THEN      !==  2nd   pass      (bilaplacian)  ==! 
     326               ! 
     327               !                             ! "Poleward" diffusive heat or salt transports (T-S case only) 
     328                  ! note sign is reversed to give down-gradient diffusive transports ) 
     329               ! TODO: TO BE TILED 
     330               IF( l_ptr )  CALL dia_ptr_hst( jn, 'ldf', -zftv(:,:,:)  ) 
     331               !                          ! Diffusive heat transports 
     332               ! TODO: TO BE TILED 
     333               IF( l_hst )  CALL dia_ar5_hst( jn, 'ldf', -zftu(:,:,:), -zftv(:,:,:) ) 
     334               ! 
     335            ENDIF                                                    !== end pass selection  ==! 
     336         ENDIF 
    324337         ! 
    325338         !                                                        ! =============== 
Note: See TracChangeset for help on using the changeset viewer.