- Timestamp:
- 2020-09-24T20:32:14+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/TRA/zpshde.F90
r13295 r13515 17 17 USE oce ! ocean: dynamics and tracers variables 18 18 USE dom_oce ! domain: ocean variables 19 USE domutl, ONLY : is_tile 19 20 USE phycst ! physical constants 20 21 USE eosbn2 ! ocean equation of state … … 40 41 CONTAINS 41 42 42 SUBROUTINE zps_hde( kt, Kmm, kjpt, pta, pgtu, pgtv, & 43 & prd, pgru, pgrv ) 43 ! TODO: NOT TESTED- requires zps 44 SUBROUTINE zps_hde( kt, Kmm, kjpt, pta, pgtu, pgtv, & 45 & prd, pgru, pgrv ) 46 !! 47 INTEGER , INTENT(in ) :: kt ! ocean time-step index 48 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 49 INTEGER , INTENT(in ) :: kjpt ! number of tracers 50 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pta ! 4D tracers fields 51 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 52 REAL(wp), DIMENSION(:,:,:) , INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 53 REAL(wp), DIMENSION(:,:) , INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 54 ! 55 INTEGER :: itrd, itgr 56 !! 57 IF( PRESENT(prd) ) THEN ; itrd = is_tile(prd) ; ELSE ; itrd = 0 ; ENDIF 58 IF( PRESENT(pgru) ) THEN ; itgr = is_tile(pgru) ; ELSE ; itgr = 0 ; ENDIF 59 60 CALL zps_hde_t( kt, Kmm, kjpt, pta, is_tile(pta), pgtu, pgtv, is_tile(pgtu), & 61 & prd, itrd, pgru, pgrv, itgr ) 62 END SUBROUTINE zps_hde 63 64 65 SUBROUTINE zps_hde_t( kt, Kmm, kjpt, pta, ktta, pgtu, pgtv, ktgt, & 66 & prd, ktrd, pgru, pgrv, ktgr ) 44 67 !!---------------------------------------------------------------------- 45 68 !! *** ROUTINE zps_hde *** … … 85 108 !! - pgru, pgrv: horizontal gradient of rho (if present) at u- & v-points 86 109 !!---------------------------------------------------------------------- 87 INTEGER , INTENT(in ) :: kt ! ocean time-step index 88 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 89 INTEGER , INTENT(in ) :: kjpt ! number of tracers 90 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pta ! 4D tracers fields 91 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 92 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 93 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 110 INTEGER , INTENT(in ) :: kt ! ocean time-step index 111 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 112 INTEGER , INTENT(in ) :: kjpt ! number of tracers 113 INTEGER , INTENT(in ) :: ktta, ktgt, ktrd, ktgr 114 REAL(wp), DIMENSION(ST_2DT(ktta),jpk,kjpt), INTENT(in ) :: pta ! 4D tracers fields 115 REAL(wp), DIMENSION(ST_2DT(ktgt) ,kjpt), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 116 REAL(wp), DIMENSION(ST_2DT(ktrd),jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 117 REAL(wp), DIMENSION(ST_2DT(ktgr) ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 94 118 ! 95 119 INTEGER :: ji, jj, jn ! Dummy loop indices 96 120 INTEGER :: iku, ikv, ikum1, ikvm1 ! partial step level (ocean bottom level) at u- and v-points 97 121 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! local scalars 98 REAL(wp), DIMENSION( jpi,jpj) :: zri, zrj, zhi, zhj ! NB: 3rd dim=1 to use eos99 REAL(wp), DIMENSION( jpi,jpj,kjpt) :: zti, ztj !122 REAL(wp), DIMENSION(ST_2D(nn_hls)) :: zri, zrj, zhi, zhj ! NB: 3rd dim=1 to use eos 123 REAL(wp), DIMENSION(ST_2D(nn_hls),kjpt) :: zti, ztj ! 100 124 !!---------------------------------------------------------------------- 101 125 ! … … 185 209 IF( ln_timing ) CALL timing_stop( 'zps_hde') 186 210 ! 187 END SUBROUTINE zps_hde 188 189 211 END SUBROUTINE zps_hde_t 212 213 214 ! TODO: NOT TESTED- requires zps 190 215 SUBROUTINE zps_hde_isf( kt, Kmm, kjpt, pta, pgtu, pgtv, pgtui, pgtvi, & 191 & prd, pgru, pgrv, pgrui, pgrvi ) 216 & prd, pgru, pgrv, pgrui, pgrvi ) 217 !! 218 INTEGER , INTENT(in ) :: kt ! ocean time-step index 219 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 220 INTEGER , INTENT(in ) :: kjpt ! number of tracers 221 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pta ! 4D tracers fields 222 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 223 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 224 REAL(wp), DIMENSION(:,:,:) , INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 225 REAL(wp), DIMENSION(:,:) , INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 226 REAL(wp), DIMENSION(:,:) , INTENT( out), OPTIONAL :: pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 227 ! 228 INTEGER :: itrd, itgr, itgri 229 !! 230 IF( PRESENT(prd) ) THEN ; itrd = is_tile(prd) ; ELSE ; itrd = 0 ; ENDIF 231 IF( PRESENT(pgru) ) THEN ; itgr = is_tile(pgru) ; ELSE ; itgr = 0 ; ENDIF 232 IF( PRESENT(pgrui) ) THEN ; itgri = is_tile(pgrui) ; ELSE ; itgri = 0 ; ENDIF 233 234 CALL zps_hde_isf_t( kt, Kmm, kjpt, pta, is_tile(pta), pgtu, pgtv, is_tile(pgtu), pgtui, pgtvi, is_tile(pgtui), & 235 & prd, itrd, pgru, pgrv, itgr, pgrui, pgrvi, itgri ) 236 END SUBROUTINE zps_hde_isf 237 238 239 SUBROUTINE zps_hde_isf_t( kt, Kmm, kjpt, pta, ktta, pgtu, pgtv, ktgt, pgtui, pgtvi, ktgti, & 240 & prd, ktrd, pgru, pgrv, ktgr, pgrui, pgrvi, ktgri ) 192 241 !!---------------------------------------------------------------------- 193 242 !! *** ROUTINE zps_hde_isf *** … … 236 285 !! - pgru, pgrv, pgrui, pgtvi: horizontal gradient of rho (if present) at u- & v-points 237 286 !!---------------------------------------------------------------------- 238 INTEGER , INTENT(in ) :: kt ! ocean time-step index 239 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 240 INTEGER , INTENT(in ) :: kjpt ! number of tracers 241 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pta ! 4D tracers fields 242 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 243 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT( out) :: pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 244 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 245 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 246 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out), OPTIONAL :: pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 287 INTEGER , INTENT(in ) :: kt ! ocean time-step index 288 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 289 INTEGER , INTENT(in ) :: kjpt ! number of tracers 290 INTEGER , INTENT(in ) :: ktta, ktgt, ktgti, ktrd, ktgr, ktgri 291 REAL(wp), DIMENSION(ST_2DT(ktta),jpk,kjpt), INTENT(in ) :: pta ! 4D tracers fields 292 REAL(wp), DIMENSION(ST_2DT(ktgt) ,kjpt), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 293 REAL(wp), DIMENSION(ST_2DT(ktgti) ,kjpt), INTENT( out) :: pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) 294 REAL(wp), DIMENSION(ST_2DT(ktrd),jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 295 REAL(wp), DIMENSION(ST_2DT(ktgr) ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad of prd at u- & v-pts (bottom) 296 REAL(wp), DIMENSION(ST_2DT(ktgri) ), INTENT( out), OPTIONAL :: pgrui, pgrvi ! hor. grad of prd at u- & v-pts (top) 247 297 ! 248 298 INTEGER :: ji, jj, jn ! Dummy loop indices 249 299 INTEGER :: iku, ikv, ikum1, ikvm1,ikup1, ikvp1 ! partial step level (ocean bottom level) at u- and v-points 250 300 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! temporary scalars 251 REAL(wp), DIMENSION( jpi,jpj) :: zri, zrj, zhi, zhj ! NB: 3rd dim=1 to use eos252 REAL(wp), DIMENSION( jpi,jpj,kjpt) :: zti, ztj !301 REAL(wp), DIMENSION(ST_2D(nn_hls)) :: zri, zrj, zhi, zhj ! NB: 3rd dim=1 to use eos 302 REAL(wp), DIMENSION(ST_2D(nn_hls),kjpt) :: zti, ztj ! 253 303 !!---------------------------------------------------------------------- 254 304 ! … … 440 490 IF( ln_timing ) CALL timing_stop( 'zps_hde_isf') 441 491 ! 442 END SUBROUTINE zps_hde_isf 492 END SUBROUTINE zps_hde_isf_t 443 493 444 494 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.