Changeset 13054 for NEMO/branches/UKMO/dev_r12866_HPC-02_Daley_Tiling_trial_extra_halo/src/OCE/DIA/diaar5.F90
- Timestamp:
- 2020-06-05T18:56:01+02:00 (4 years ago)
- 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 34 34 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,: ) :: thick0 ! ocean thickness (interior domain) 35 35 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sn0 ! initial salinity 36 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: hstr_adv, hstr_ldf 36 37 37 38 LOGICAL :: l_ar5 … … 53 54 !!---------------------------------------------------------------------- 54 55 ! 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 ) 56 58 ! 57 59 CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) … … 301 303 END SUBROUTINE dia_ar5 302 304 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 ) 305 307 !!---------------------------------------------------------------------- 306 308 !! *** ROUTINE dia_ar5_htr *** … … 311 313 INTEGER , INTENT(in ) :: ktra ! tracer index 312 314 CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf' 313 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: puflx ! u-flux of advection/diffusion314 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: pvflx ! v-flux of advection/diffusion315 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 315 317 ! 316 318 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 348 361 END SUBROUTINE dia_ar5_hst 349 362 … … 367 380 IF( iom_use( 'voltot' ) .OR. iom_use( 'sshtot' ) .OR. iom_use( 'sshdyn' ) .OR. & 368 381 & 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. 370 387 371 388 IF( l_ar5 ) THEN
Note: See TracChangeset
for help on using the changeset viewer.