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 13409 for NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/TRA/zpshde.F90 – NEMO

Ignore:
Timestamp:
2020-08-17T15:28:54+02:00 (4 years ago)
Author:
hadcv
Message:

Remaining changes prior to trunk merge

File:
1 edited

Legend:

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

    r12377 r13409  
    1717   USE oce             ! ocean: dynamics and tracers variables 
    1818   USE dom_oce         ! domain: ocean variables 
     19   USE domutl, ONLY : is_tile 
    1920   USE phycst          ! physical constants 
    2021   USE eosbn2          ! ocean equation of state 
     
    3940CONTAINS 
    4041 
    41    SUBROUTINE zps_hde( kt, Kmm, kjpt, pta, pgtu, pgtv,   & 
    42       &                          prd, pgru, pgrv    ) 
     42   ! TODO: NOT TESTED- requires zps 
     43   SUBROUTINE zps_hde( kt, Kmm, kjpt, pta, pgtu, pgtv,  & 
     44      &                               prd, pgru, pgrv ) 
     45      !! 
     46      INTEGER                     , INTENT(in   )           ::  kt          ! ocean time-step index 
     47      INTEGER                     , INTENT(in   )           ::  Kmm         ! ocean time level index 
     48      INTEGER                     , INTENT(in   )           ::  kjpt        ! number of tracers 
     49      REAL(wp), DIMENSION(:,:,:,:), INTENT(in   )           ::  pta         ! 4D tracers fields 
     50      REAL(wp), DIMENSION(:,:,:)  , INTENT(  out)           ::  pgtu, pgtv  ! hor. grad. of ptra at u- & v-pts 
     51      REAL(wp), DIMENSION(:,:,:)  , INTENT(in   ), OPTIONAL ::  prd         ! 3D density anomaly fields 
     52      REAL(wp), DIMENSION(:,:)    , INTENT(  out), OPTIONAL ::  pgru, pgrv  ! hor. grad of prd at u- & v-pts (bottom) 
     53      ! 
     54      INTEGER :: itrd, itgr 
     55      !! 
     56      IF( PRESENT(prd)  ) THEN ; itrd = is_tile(prd)  ; ELSE ; itrd = 0 ; ENDIF 
     57      IF( PRESENT(pgru) ) THEN ; itgr = is_tile(pgru) ; ELSE ; itgr = 0 ; ENDIF 
     58 
     59      CALL zps_hde_t( kt, Kmm, kjpt, pta, is_tile(pta), pgtu, pgtv, is_tile(pgtu), & 
     60         &                           prd, itrd,         pgru, pgrv, itgr ) 
     61   END SUBROUTINE zps_hde 
     62 
     63 
     64   SUBROUTINE zps_hde_t( kt, Kmm, kjpt, pta, ktta, pgtu, pgtv, ktgt,   & 
     65      &                                 prd, ktrd, pgru, pgrv, ktgr ) 
    4366      !!---------------------------------------------------------------------- 
    4467      !!                     ***  ROUTINE zps_hde  *** 
     
    84107      !!              - pgru, pgrv: horizontal gradient of rho (if present) at u- & v-points 
    85108      !!---------------------------------------------------------------------- 
    86       INTEGER                              , INTENT(in   )           ::  kt          ! ocean time-step index 
    87       INTEGER                              , INTENT(in   )           ::  Kmm         ! ocean time level index 
    88       INTEGER                              , INTENT(in   )           ::  kjpt        ! number of tracers 
    89       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   )           ::  pta         ! 4D tracers fields 
    90       REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(  out)           ::  pgtu, pgtv  ! hor. grad. of ptra at u- & v-pts  
    91       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ), OPTIONAL ::  prd         ! 3D density anomaly fields 
    92       REAL(wp), DIMENSION(jpi,jpj         ), INTENT(  out), OPTIONAL ::  pgru, pgrv  ! hor. grad of prd at u- & v-pts (bottom) 
     109      INTEGER                                , INTENT(in   )           ::  kt          ! ocean time-step index 
     110      INTEGER                                , INTENT(in   )           ::  Kmm         ! ocean time level index 
     111      INTEGER                                , INTENT(in   )           ::  kjpt        ! number of tracers 
     112      INTEGER                                , INTENT(in   )           ::  ktta, ktgt, ktrd, ktgr 
     113      REAL(wp), DIMENSION(T2D(ktta),jpk,kjpt), INTENT(in   )           ::  pta         ! 4D tracers fields 
     114      REAL(wp), DIMENSION(T2D(ktgt)    ,kjpt), INTENT(  out)           ::  pgtu, pgtv  ! hor. grad. of ptra at u- & v-pts 
     115      REAL(wp), DIMENSION(T2D(ktrd),jpk     ), INTENT(in   ), OPTIONAL ::  prd         ! 3D density anomaly fields 
     116      REAL(wp), DIMENSION(T2D(ktgr)         ), INTENT(  out), OPTIONAL ::  pgru, pgrv  ! hor. grad of prd at u- & v-pts (bottom) 
    93117      ! 
    94118      INTEGER  ::   ji, jj, jn                  ! Dummy loop indices 
    95119      INTEGER  ::   iku, ikv, ikum1, ikvm1      ! partial step level (ocean bottom level) at u- and v-points 
    96120      REAL(wp) ::   ze3wu, ze3wv, zmaxu, zmaxv  ! local scalars 
    97       REAL(wp), DIMENSION(jpi,jpj)      ::   zri, zrj, zhi, zhj   ! NB: 3rd dim=1 to use eos 
    98       REAL(wp), DIMENSION(jpi,jpj,kjpt) ::   zti, ztj             !  
     121      REAL(wp), DIMENSION(A2D)      ::   zri, zrj, zhi, zhj   ! NB: 3rd dim=1 to use eos 
     122      REAL(wp), DIMENSION(A2D,kjpt) ::   zti, ztj             ! 
    99123      !!---------------------------------------------------------------------- 
    100124      ! 
     
    184208      IF( ln_timing )   CALL timing_stop( 'zps_hde') 
    185209      ! 
    186    END SUBROUTINE zps_hde 
    187  
    188  
     210   END SUBROUTINE zps_hde_t 
     211 
     212 
     213   ! TODO: NOT TESTED- requires zps 
    189214   SUBROUTINE zps_hde_isf( kt, Kmm, kjpt, pta, pgtu, pgtv, pgtui, pgtvi,  & 
    190       &                          prd, pgru, pgrv, pgrui, pgrvi ) 
     215      &                                   prd, pgru, pgrv, pgrui, pgrvi ) 
     216      !! 
     217      INTEGER                     , INTENT(in   )           ::  kt           ! ocean time-step index 
     218      INTEGER                     , INTENT(in   )           ::  Kmm          ! ocean time level index 
     219      INTEGER                     , INTENT(in   )           ::  kjpt         ! number of tracers 
     220      REAL(wp), DIMENSION(:,:,:,:), INTENT(in   )           ::  pta          ! 4D tracers fields 
     221      REAL(wp), DIMENSION(:,:,:)  , INTENT(  out)           ::  pgtu, pgtv   ! hor. grad. of ptra at u- & v-pts 
     222      REAL(wp), DIMENSION(:,:,:)  , INTENT(  out)           ::  pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 
     223      REAL(wp), DIMENSION(:,:,:)  , INTENT(in   ), OPTIONAL ::  prd          ! 3D density anomaly fields 
     224      REAL(wp), DIMENSION(:,:)    , INTENT(  out), OPTIONAL ::  pgru, pgrv   ! hor. grad of prd at u- & v-pts (bottom) 
     225      REAL(wp), DIMENSION(:,:)    , INTENT(  out), OPTIONAL ::  pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 
     226      ! 
     227      INTEGER :: itrd, itgr, itgri 
     228      !! 
     229      IF( PRESENT(prd)   ) THEN ; itrd  = is_tile(prd)   ; ELSE ; itrd  = 0 ; ENDIF 
     230      IF( PRESENT(pgru)  ) THEN ; itgr  = is_tile(pgru)  ; ELSE ; itgr  = 0 ; ENDIF 
     231      IF( PRESENT(pgrui) ) THEN ; itgri = is_tile(pgrui) ; ELSE ; itgri = 0 ; ENDIF 
     232 
     233      CALL zps_hde_isf_t( kt, Kmm, kjpt, pta, is_tile(pta), pgtu, pgtv, is_tile(pgtu), pgtui, pgtvi, is_tile(pgtui),  & 
     234      &                                  prd, itrd,         pgru, pgrv, itgr,          pgrui, pgrvi, itgri ) 
     235   END SUBROUTINE zps_hde_isf 
     236 
     237 
     238   SUBROUTINE zps_hde_isf_t( kt, Kmm, kjpt, pta, ktta, pgtu, pgtv, ktgt, pgtui, pgtvi, ktgti,  & 
     239      &                                     prd, ktrd, pgru, pgrv, ktgr, pgrui, pgrvi, ktgri ) 
    191240      !!---------------------------------------------------------------------- 
    192241      !!                     ***  ROUTINE zps_hde_isf  *** 
     
    235284      !!              - pgru, pgrv, pgrui, pgtvi: horizontal gradient of rho (if present) at u- & v-points 
    236285      !!---------------------------------------------------------------------- 
    237       INTEGER                              , INTENT(in   )           ::  kt           ! ocean time-step index 
    238       INTEGER                              , INTENT(in   )           ::  Kmm          ! ocean time level index 
    239       INTEGER                              , INTENT(in   )           ::  kjpt         ! number of tracers 
    240       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   )           ::  pta          ! 4D tracers fields 
    241       REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(  out)           ::  pgtu, pgtv   ! hor. grad. of ptra at u- & v-pts  
    242       REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(  out)           ::  pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 
    243       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ), OPTIONAL ::  prd          ! 3D density anomaly fields 
    244       REAL(wp), DIMENSION(jpi,jpj         ), INTENT(  out), OPTIONAL ::  pgru, pgrv   ! hor. grad of prd at u- & v-pts (bottom) 
    245       REAL(wp), DIMENSION(jpi,jpj         ), INTENT(  out), OPTIONAL ::  pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 
     286      INTEGER                                , INTENT(in   )           ::  kt           ! ocean time-step index 
     287      INTEGER                                , INTENT(in   )           ::  Kmm          ! ocean time level index 
     288      INTEGER                                , INTENT(in   )           ::  kjpt         ! number of tracers 
     289      INTEGER                                , INTENT(in   )           ::  ktta, ktgt, ktgti, ktrd, ktgr, ktgri 
     290      REAL(wp), DIMENSION(T2D(ktta),jpk,kjpt), INTENT(in   )           ::  pta          ! 4D tracers fields 
     291      REAL(wp), DIMENSION(T2D(ktgt)    ,kjpt), INTENT(  out)           ::  pgtu, pgtv   ! hor. grad. of ptra at u- & v-pts 
     292      REAL(wp), DIMENSION(T2D(ktgti)   ,kjpt), INTENT(  out)           ::  pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 
     293      REAL(wp), DIMENSION(T2D(ktrd),jpk     ), INTENT(in   ), OPTIONAL ::  prd          ! 3D density anomaly fields 
     294      REAL(wp), DIMENSION(T2D(ktgr)         ), INTENT(  out), OPTIONAL ::  pgru, pgrv   ! hor. grad of prd at u- & v-pts (bottom) 
     295      REAL(wp), DIMENSION(T2D(ktgri)        ), INTENT(  out), OPTIONAL ::  pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 
    246296      ! 
    247297      INTEGER  ::   ji, jj, jn      ! Dummy loop indices 
    248298      INTEGER  ::   iku, ikv, ikum1, ikvm1,ikup1, ikvp1   ! partial step level (ocean bottom level) at u- and v-points 
    249299      REAL(wp) ::  ze3wu, ze3wv, zmaxu, zmaxv             ! temporary scalars 
    250       REAL(wp), DIMENSION(jpi,jpj)      ::  zri, zrj, zhi, zhj   ! NB: 3rd dim=1 to use eos 
    251       REAL(wp), DIMENSION(jpi,jpj,kjpt) ::  zti, ztj             !  
     300      REAL(wp), DIMENSION(A2D)      ::  zri, zrj, zhi, zhj   ! NB: 3rd dim=1 to use eos 
     301      REAL(wp), DIMENSION(A2D,kjpt) ::  zti, ztj             ! 
    252302      !!---------------------------------------------------------------------- 
    253303      ! 
     
    439489      IF( ln_timing )   CALL timing_stop( 'zps_hde_isf') 
    440490      ! 
    441    END SUBROUTINE zps_hde_isf 
     491   END SUBROUTINE zps_hde_isf_t 
    442492 
    443493   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.