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 6679 for branches/UKMO/dev_r5518_GC3p0_package_v2/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90 – NEMO

Ignore:
Timestamp:
2016-06-09T18:34:00+02:00 (8 years ago)
Author:
malcolmroberts
Message:

Merged in changes from v3_6_extra_CMIP6_diagnostics up to revision 6674

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GC3p0_package_v2/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90

    r6462 r6679  
    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 ) 
     
    160163         CALL iom_put( "voce_eiv", v_eiv )    ! j-eiv current 
    161164         CALL iom_put( "woce_eiv", w_eiv )    ! vert. eiv current 
     165         IF( iom_use('weiv_masstr') ) THEN   ! vertical mass transport & its square value 
     166           z2d(:,:) = rau0 * e12t(:,:) 
     167           DO jk = 1, jpk 
     168              z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:) 
     169           END DO 
     170           CALL iom_put( "weiv_masstr" , z3d )   
     171         ENDIF 
     172         IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") ) THEN 
     173            z3d(:,:,jpk) = 0.e0 
     174            z2d(:,:) = 0.e0 
     175            DO jk = 1, jpkm1 
     176               z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 
     177               z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
     178            END DO 
     179            CALL iom_put( "ueiv_masstr", z3d )                  ! mass transport in i-direction 
     180         ENDIF 
     181 
    162182         IF( iom_use('ueiv_heattr') ) THEN 
    163183            zztmp = 0.5 * rau0 * rcp  
     
    166186               DO jj = 2, jpjm1 
    167187                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    168                      z2d(ji,jj) = z2d(ji,jj) + u_eiv(ji,jj,jk) & 
    169                        &         * (tsn(ji,jj,jk,jp_tem)+tsn(ji+1,jj,jk,jp_tem)) * e2u(ji,jj) * fse3u(ji,jj,jk)  
     188                     z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    170189                  END DO 
    171190               END DO 
     
    174193            CALL iom_put( "ueiv_heattr", zztmp * z2d )                  ! heat transport in i-direction 
    175194         ENDIF 
     195 
     196         IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") ) THEN 
     197            z3d(:,:,jpk) = 0.e0 
     198            z2d(:,:) = 0.e0 
     199            DO jk = 1, jpkm1 
     200               z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) 
     201            END DO 
     202            CALL iom_put( "veiv_masstr", z3d )                  ! mass transport in j-direction 
     203         ENDIF 
    176204             
    177205         IF( iom_use('veiv_heattr') ) THEN 
    178             zztmp = 0.5 * rau0 * rcp  
    179206            z2d(:,:) = 0.e0  
    180207            DO jk = 1, jpkm1 
    181208               DO jj = 2, jpjm1 
    182209                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    183                      z2d(ji,jj) = z2d(ji,jj) + v_eiv(ji,jj,jk) & 
    184                      &           * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * e1v(ji,jj) * fse3v(ji,jj,jk)  
     210                     z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
    185211                  END DO 
    186212               END DO 
     
    190216         ENDIF 
    191217    END IF 
     218! 
     219    IF( ln_diaptr .AND. cdtype == 'TRA' ) THEN 
     220       z3d(:,:,:) = 0._wp 
     221       DO jk = 1, jpkm1 
     222          DO jj = 2, jpjm1 
     223             DO ji = fs_2, fs_jpim1   ! vector opt. 
     224                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) & 
     225                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     226             END DO 
     227          END DO 
     228       END DO 
     229       CALL dia_ptr_ohst_components( jp_tem, 'eiv', z3d ) 
     230       z3d(:,:,:) = 0._wp 
     231       DO jk = 1, jpkm1 
     232          DO jj = 2, jpjm1 
     233             DO ji = fs_2, fs_jpim1   ! vector opt. 
     234                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) & 
     235                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     236             END DO 
     237          END DO 
     238       END DO 
     239       CALL dia_ptr_ohst_components( jp_sal, 'eiv', z3d ) 
     240    ENDIF 
    192241# endif   
    193       !  
     242 
    194243# if defined key_diaeiv  
    195244      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     245      IF( ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, z3d ) 
    196246# else 
    197247      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
Note: See TracChangeset for help on using the changeset viewer.