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 6428 – NEMO

Changeset 6428


Ignore:
Timestamp:
2016-04-05T16:48:36+02:00 (8 years ago)
Author:
timgraham
Message:

Added advective and diffusive heat transport by basin to diaptr module

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  
    4040 
    4141   !                                  !!** 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.) 
    4444    
    4545 
     
    256256         ! Initialise arrays to zero because diatpr is called before they are first calculated 
    257257         ! Note that this means diagnostics will not be exactly correct when model run is restarted. 
    258          htr_adv(:) = 0._wp  ;  str_adv(:) =  0._wp   
    259          htr_ldf(:) = 0._wp  ;  str_ldf(:) =  0._wp  
     258         htr_adv(:,:) = 0._wp  ;  str_adv(:,:) =  0._wp   
     259         htr_ldf(:,:) = 0._wp  ;  str_ldf(:,:) =  0._wp  
    260260         ! 
    261261      ENDIF  
     
    263263   END SUBROUTINE dia_ptr_init 
    264264 
     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 
    265285 
    266286   FUNCTION dia_ptr_alloc() 
     
    274294      ! 
    275295      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)  ) 
    278298         ! 
    279299      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  
    280280         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    281281         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(:,:) ) 
    284284         ENDIF 
    285285         ! 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90

    r6427 r6428  
    220220         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    221221         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(:,:) ) 
    224224         ENDIF 
    225225 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90

    r6427 r6428  
    201201         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    202202         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(:,:) ) 
    205205         ENDIF 
    206206 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90

    r6427 r6428  
    356356         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    357357         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(:,:) ) 
    360360         ENDIF 
    361361         ! 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r6427 r6428  
    8686      REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwz 
    8787      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz 
     88      REAL(wp), POINTER, DIMENSION(:,:) :: ptr_adv_tmp 
    8889      !!---------------------------------------------------------------------- 
    8990      ! 
     
    104105         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
    105106         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 
    106112      ENDIF 
    107113      ! 
     
    194200         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    195201         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(:,:)  ) 
    198203         ENDIF 
    199204 
     
    265270         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    266271         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 
    269281         ENDIF 
    270282         ! 
     
    273285                   CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz ) 
    274286      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 ) 
    275288      ! 
    276289      IF( nn_timing == 1 )  CALL timing_stop('tra_adv_tvd') 
     
    342355      ENDIF 
    343356      ! 
     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      ! 
    344362      zwi(:,:,:) = 0._wp 
    345363      z_rzts = 1._wp / REAL( jnzts, wp ) 
     
    431449         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    432450         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(:,:)  ) 
    435452         ENDIF 
    436453 
     
    557574         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    558575         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 
    561585         ENDIF 
    562586         ! 
     
    567591                   CALL wrk_dealloc( jpi, jpj, zwx_sav, zwy_sav ) 
    568592      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 ) 
    569594      ! 
    570595      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  
    178178         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    179179         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(:,:) ) 
    182182         ENDIF 
    183183          
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90

    r6427 r6428  
    174174         ! "zonal" mean lateral diffusive heat and salt transport 
    175175         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(:,:) ) 
    178178         ENDIF 
    179179         !                                                ! =========== 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90

    r6427 r6428  
    249249         IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( kaht == 2 ) ) THEN 
    250250            ! 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(:,:) ) 
    253253         ENDIF 
    254254 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r6427 r6428  
    237237         IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    238238            ! 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(:,:) ) 
    241241         ENDIF 
    242242  
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90

    r6427 r6428  
    387387         !                             ! "Poleward" diffusive heat or salt transports (T-S case only) 
    388388         IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    389             IF( jn == jp_tem)   htr_ldf(:) = ptr_sj( zftv(:,:,:) )        ! 3.3  names 
    390             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(:,:) ) 
    391391         ENDIF 
    392392 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90

    r6427 r6428  
    155155         ! "Poleward" diffusive heat or salt transports 
    156156         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(:,:) ) 
    159159         ENDIF 
    160160         !                                                  ! ================== 
Note: See TracChangeset for help on using the changeset viewer.