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

Changeset 6652


Ignore:
Timestamp:
2016-06-01T17:06:23+02:00 (8 years ago)
Author:
timgraham
Message:

Added heat transport from Bolus advection to diaptr (global and by sub basin).

Location:
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90

    r6433 r6652  
    2121   USE dom_oce          ! ocean space and time domain 
    2222   USE phycst           ! physical constants 
     23   USE ldftra_oce  
    2324   ! 
    2425   USE iom              ! IOM library 
     
    4142 
    4243   !                                  !!** namelist  namptr  ** 
    43    REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   htr_adv, htr_ldf   !: Heat TRansports (adv, diff, overturn.) 
    44    REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   str_adv, str_ldf   !: Salt TRansports (adv, diff, overturn.) 
    45     
     44   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   htr_adv, htr_ldf, htr_eiv   !: Heat TRansports (adv, diff, Bolus.) 
     45   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   str_adv, str_ldf, str_eiv   !: Salt TRansports (adv, diff, Bolus.) 
    4646 
    4747   LOGICAL, PUBLIC ::   ln_diaptr   !  Poleward transport flag (T) or not (F) 
     
    210210              ENDDO 
    211211            ENDIF 
    212  
    213          ENDIF 
     212         ENDIF 
     213 
     214#ifdef key_diaeiv 
     215         IF(lk_traldf_eiv) THEN 
     216            IF( iom_use("sophteiv") .OR. iom_use("sopsteiv") ) THEN  
     217               z2d(1,:) = htr_eiv(:,1) * rc_pwatt        !  (conversion in PW)  
     218               DO ji = 1, jpi 
     219                  z2d(ji,:) = z2d(1,:) 
     220               ENDDO 
     221               cl1 = 'sophteiv' 
     222               CALL iom_put( TRIM(cl1), z2d ) 
     223               z2d(1,:) = str_eiv(:,1) * rc_ggram        !  (conversion in Gg) 
     224               DO ji = 1, jpi 
     225                  z2d(ji,:) = z2d(1,:) 
     226               ENDDO 
     227               cl1 = 'sopsteiv' 
     228               CALL iom_put( TRIM(cl1), z2d ) 
     229               IF( ln_subbas ) THEN 
     230                  DO jn=2,nptr 
     231                     z2d(1,:) = htr_eiv(:,jn) * rc_pwatt        !  (conversion in PW) 
     232                     DO ji = 1, jpi 
     233                        z2d(ji,:) = z2d(1,:) 
     234                     ENDDO 
     235                     cl1 = TRIM('sophteiv_'//clsubb(jn))                  
     236                     CALL iom_put( cl1, z2d ) 
     237                     z2d(1,:) = str_eiv(:,jn) * rc_ggram        ! (conversion in Gg) 
     238                     DO ji = 1, jpi 
     239                        z2d(ji,:) = z2d(1,:) 
     240                     ENDDO 
     241                     cl1 = TRIM('sopsteiv_'//clsubb(jn))  
     242                     CALL iom_put( cl1, z2d )               
     243                  ENDDO 
     244               ENDIF 
     245            ENDIF 
     246         ENDIF 
     247#endif 
    214248         ! 
    215249      ENDIF 
     
    292326         htr_adv(:,:) = 0._wp  ;  str_adv(:,:) =  0._wp   
    293327         htr_ldf(:,:) = 0._wp  ;  str_ldf(:,:) =  0._wp  
     328         htr_eiv(:,:) = 0._wp  ;  str_eiv(:,:) =  0._wp  
    294329         ! 
    295330      ENDIF  
     
    305340      !!---------------------------------------------------------------------- 
    306341      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
    307       CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf' 
     342      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf'/'eiv' 
    308343      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: pva   ! 3D input array of advection/diffusion 
    309344      INTEGER                                        :: jn    ! 
     
    317352         IF( ktra == jp_tem )  htr_ldf(:,1) = ptr_sj( pva(:,:,:) ) 
    318353         IF( ktra == jp_sal )  str_ldf(:,1) = ptr_sj( pva(:,:,:) ) 
     354      ENDIF 
     355      IF( cptr == 'eiv' ) THEN 
     356         IF( ktra == jp_tem )  htr_eiv(:,1) = ptr_sj( pva(:,:,:) ) 
     357         IF( ktra == jp_sal )  str_eiv(:,1) = ptr_sj( pva(:,:,:) ) 
    319358      ENDIF 
    320359      ! 
     
    345384             ENDIF 
    346385         ENDIF 
     386         IF( cptr == 'eiv' ) THEN 
     387             IF( ktra == jp_tem ) THEN  
     388                DO jn = 2, nptr 
     389                    htr_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     390                 END DO 
     391             ENDIF 
     392             IF( ktra == jp_sal ) THEN  
     393                DO jn = 2, nptr 
     394                   str_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     395                END DO 
     396             ENDIF 
     397         ENDIF 
    347398         ! 
    348399      ENDIF 
     
    362413      ALLOCATE( btmsk(jpi,jpj,nptr) ,           & 
    363414         &      htr_adv(jpj,nptr) , str_adv(jpj,nptr) ,   & 
     415         &      htr_eiv(jpj,nptr) , str_eiv(jpj,nptr) ,   & 
    364416         &      htr_ldf(jpj,nptr) , str_ldf(jpj,nptr) , STAT=ierr(1)  ) 
    365417         ! 
  • branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90

    r6427 r6652  
    2828   USE wrk_nemo        ! Memory Allocation 
    2929   USE timing          ! Timing 
     30   USE diaptr         ! Heat/Salt transport diagnostics 
    3031 
    3132   IMPLICIT NONE 
     
    7879# endif   
    7980      REAL(wp), POINTER, DIMENSION(:,:) :: zu_eiv, zv_eiv, zw_eiv, z2d 
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d 
    8082      !!---------------------------------------------------------------------- 
    8183      ! 
     
    8486# if defined key_diaeiv  
    8587      CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     88      IF( ln_diaptr ) CALL wrk_alloc( jpi, jpj, jpk, z3d ) 
    8689# else 
    8790      CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
     
    190193         ENDIF 
    191194    END IF 
     195! 
     196    IF( ln_diaptr .AND. cdtype == 'TRA' ) THEN 
     197       z3d(:,:,:) = 0._wp 
     198       DO jk = 1, jpkm1 
     199          DO jj = 2, jpjm1 
     200             DO ji = fs_2, fs_jpim1   ! vector opt. 
     201                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) & 
     202                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     203             END DO 
     204          END DO 
     205       END DO 
     206       CALL dia_ptr_ohst_components( jp_tem, 'eiv', z3d ) 
     207       z3d(:,:,:) = 0._wp 
     208       DO jk = 1, jpkm1 
     209          DO jj = 2, jpjm1 
     210             DO ji = fs_2, fs_jpim1   ! vector opt. 
     211                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) & 
     212                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     213             END DO 
     214          END DO 
     215       END DO 
     216       CALL dia_ptr_ohst_components( jp_sal, 'eiv', z3d ) 
     217    ENDIF 
    192218# endif   
    193       !  
     219 
    194220# if defined key_diaeiv  
    195221      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     222      IF( ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, z3d ) 
    196223# else 
    197224      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
Note: See TracChangeset for help on using the changeset viewer.