Changeset 6428
- Timestamp:
- 2016-04-05T16:48:36+02:00 (8 years ago)
- Location:
- branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
r6427 r6428 40 40 41 41 ! !!** namelist namptr ** 42 REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(: ) :: htr_adv, htr_ldf !: Heat TRansports (adv, diff, overturn.)43 REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(: ) :: str_adv, str_ldf !: Salt TRansports (adv, diff, overturn.)42 REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: htr_adv, htr_ldf !: Heat TRansports (adv, diff, overturn.) 43 REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: str_adv, str_ldf !: Salt TRansports (adv, diff, overturn.) 44 44 45 45 … … 256 256 ! Initialise arrays to zero because diatpr is called before they are first calculated 257 257 ! Note that this means diagnostics will not be exactly correct when model run is restarted. 258 htr_adv(: ) = 0._wp ; str_adv(:) = 0._wp259 htr_ldf(: ) = 0._wp ; str_ldf(:) = 0._wp258 htr_adv(:,:) = 0._wp ; str_adv(:,:) = 0._wp 259 htr_ldf(:,:) = 0._wp ; str_ldf(:,:) = 0._wp 260 260 ! 261 261 ENDIF … … 263 263 END SUBROUTINE dia_ptr_init 264 264 265 SUBROUTINE dia_ptr_ohst_components( pva, ptr ) 266 !!---------------------------------------------------------------------- 267 !! *** ROUTINE dia_ptr_oht_components *** 268 !!---------------------------------------------------------------------- 269 !! Wrapper for heat and salt transport calculations to calculate them 270 !! for each basin 271 !! Called from all advection and/or diffusion routines 272 INTEGER :: jn 273 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: pva ! 3D input array of advection/diffusion 274 REAL(wp), DIMENSION(jpi,nptr), INTENT(OUT) :: ptr ! zonal & vertical sum 275 276 ptr(:, 1) = ptr_sj( pva(:,:,:) ) 277 IF( ln_subbas ) THEN 278 DO jn=2,nptr 279 ptr(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 280 END DO 281 ENDIF 282 283 END SUBROUTINE 284 265 285 266 286 FUNCTION dia_ptr_alloc() … … 274 294 ! 275 295 ALLOCATE( btmsk(jpi,jpj,nptr) , & 276 & htr_adv(jpj ) , str_adv(jpj) , &277 & htr_ldf(jpj ) , str_ldf(jpj) , STAT=ierr(1) )296 & htr_adv(jpj,nptr) , str_adv(jpj,nptr) , & 297 & htr_ldf(jpj,nptr) , str_ldf(jpj,nptr) , STAT=ierr(1) ) 278 298 ! 279 299 ALLOCATE( p_fval1d(jpj), p_fval2d(jpj,jpk), Stat=ierr(2)) -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r6427 r6428 280 280 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 281 281 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 282 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:))283 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:))282 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 283 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 284 284 ENDIF 285 285 ! -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r6427 r6428 220 220 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 221 221 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 222 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:))223 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:))222 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 223 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 224 224 ENDIF 225 225 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
r6427 r6428 201 201 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 202 202 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 203 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:))204 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:))203 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 204 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 205 205 ENDIF 206 206 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r6427 r6428 356 356 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 357 357 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 358 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:))359 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:))358 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 359 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 360 360 ENDIF 361 361 ! -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r6427 r6428 86 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwz 87 87 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz 88 REAL(wp), POINTER, DIMENSION(:,:) :: ptr_adv_tmp 88 89 !!---------------------------------------------------------------------- 89 90 ! … … 104 105 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 105 106 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 107 ENDIF 108 ! 109 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 110 CALL wrk_alloc( jpi, nptr, ptr_adv_tmp ) 111 ptr_adv_tmp(:,:) = 0._wp 106 112 ENDIF 107 113 ! … … 194 200 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 195 201 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 196 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) 197 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) 202 CALL dia_ptr_ohst_components( zwy(:,:,:), ptr_adv_tmp(:,:) ) 198 203 ENDIF 199 204 … … 265 270 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 266 271 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 267 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) + htr_adv(:) 268 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) + str_adv(:) 272 IF( jn == jp_tem ) THEN 273 CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 274 htr_adv(:,:) = htr_adv(:,:) + ptr_adv_tmp(:,:) 275 ENDIF 276 IF( jn == jp_sal ) THEN 277 CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 278 htr_adv(:,:) = htr_adv(:,:) + ptr_adv_tmp(:,:) 279 ENDIF 280 ptr_adv_tmp(:,:) = 0._wp 269 281 ENDIF 270 282 ! … … 273 285 CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz ) 274 286 IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 287 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN wrk_dealloc( jpi, nptr, ptr_adv_tmp ) 275 288 ! 276 289 IF( nn_timing == 1 ) CALL timing_stop('tra_adv_tvd') … … 342 355 ENDIF 343 356 ! 357 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 358 CALL wrk_alloc( jpi, nptr, ptr_adv_tmp ) 359 ptr_adv_tmp(:,:) = 0._wp 360 ENDIF 361 ! 344 362 zwi(:,:,:) = 0._wp 345 363 z_rzts = 1._wp / REAL( jnzts, wp ) … … 431 449 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 432 450 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 433 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) 434 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) 451 CALL dia_ptr_ohst_components( zwy(:,:,:), ptr_adv_tmp(:,:) ) 435 452 ENDIF 436 453 … … 557 574 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 558 575 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 559 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) + htr_adv(:) 560 IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) + str_adv(:) 576 IF( jn == jp_tem ) THEN 577 CALL dia_ptr_ohst_components( zwy(:,:,:), htr_adv(:,:) ) 578 htr_adv(:,:) = htr_adv(:,:) + ptr_adv_tmp(:,:) 579 ENDIF 580 IF( jn == jp_sal ) THEN 581 CALL dia_ptr_ohst_components( zwy(:,:,:), str_adv(:,:) ) 582 htr_adv(:,:) = htr_adv(:,:) + ptr_adv_tmp(:,:) 583 ENDIF 584 ptr_adv_tmp(:,:) = 0._wp 561 585 ENDIF 562 586 ! … … 567 591 CALL wrk_dealloc( jpi, jpj, zwx_sav, zwy_sav ) 568 592 IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 593 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN wrk_dealloc( jpi, nptr, ptr_adv_tmp ) 569 594 ! 570 595 IF( nn_timing == 1 ) CALL timing_stop('tra_adv_tvd_zts') -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r6427 r6428 178 178 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 179 179 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 180 IF( jn == jp_tem ) htr_adv(:) = ptr_sj( ztv(:,:,:))181 IF( jn == jp_sal ) str_adv(:) = ptr_sj( ztv(:,:,:))180 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( ztv(:,:,:), htr_adv(:,:) ) 181 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( ztv(:,:,:), str_adv(:,:) ) 182 182 ENDIF 183 183 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90
r6427 r6428 174 174 ! "zonal" mean lateral diffusive heat and salt transport 175 175 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 176 IF( jn == jp_tem ) htr_ldf(:) = ptr_sj( ztv(:,:,:) )177 IF( jn == jp_sal ) str_ldf(:) = ptr_sj( ztv(:,:,:) )176 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( ztv(:,:,:),htr_ldf(:,:) ) 177 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( ztv(:,:,:),str_ldf(:,:) ) 178 178 ENDIF 179 179 ! ! =========== -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
r6427 r6428 249 249 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( kaht == 2 ) ) THEN 250 250 ! note sign is reversed to give down-gradient diffusive transports (#1043) 251 IF( jn == jp_tem ) htr_ldf(:) = ptr_sj( -zftv(:,:,:) )252 IF( jn == jp_sal ) str_ldf(:) = ptr_sj( -zftv(:,:,:) )251 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( -zftv(:,:,:),htr_ldf(:,:) ) 252 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( -zftv(:,:,:),str_ldf(:,:) ) 253 253 ENDIF 254 254 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r6427 r6428 237 237 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 238 238 ! note sign is reversed to give down-gradient diffusive transports (#1043) 239 IF( jn == jp_tem ) htr_ldf(:) = ptr_sj( -zftv(:,:,:) )240 IF( jn == jp_sal ) str_ldf(:) = ptr_sj( -zftv(:,:,:) )239 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( -zftv(:,:,:),htr_ldf(:,:) ) 240 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( -zftv(:,:,:),str_ldf(:,:) ) 241 241 ENDIF 242 242 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
r6427 r6428 387 387 ! ! "Poleward" diffusive heat or salt transports (T-S case only) 388 388 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 389 IF( jn == jp_tem ) htr_ldf(:) = ptr_sj( zftv(:,:,:) ) ! 3.3 names390 IF( jn == jp_sal ) str_ldf(:) = ptr_sj( zftv(:,:,:) )389 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( zftv(:,:,:),htr_ldf(:,:) ) 390 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( zftv(:,:,:),str_ldf(:,:) ) 391 391 ENDIF 392 392 -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90
r6427 r6428 155 155 ! "Poleward" diffusive heat or salt transports 156 156 IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 157 IF( jn == jp_tem) htr_ldf(:) = ptr_sj( ztv(:,:,:) )158 IF( jn == jp_sal) str_ldf(:) = ptr_sj( ztv(:,:,:) )157 IF( jn == jp_tem ) CALL dia_ptr_ohst_components( ztv(:,:,:),htr_ldf(:,:) ) 158 IF( jn == jp_sal ) CALL dia_ptr_ohst_components( ztv(:,:,:),str_ldf(:,:) ) 159 159 ENDIF 160 160 ! ! ==================
Note: See TracChangeset
for help on using the changeset viewer.