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

Ignore:
Timestamp:
2016-10-25T12:12:41+02:00 (8 years ago)
Author:
malcolmroberts
Message:

Merged in dev_r5518_GO6_package up to revision 7076

File:
1 edited

Legend:

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

    r6919 r7083  
    7979# endif   
    8080      REAL(wp), POINTER, DIMENSION(:,:) :: zu_eiv, zv_eiv, zw_eiv, z2d 
    81       REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d 
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d, z3d_T 
    8282      !!---------------------------------------------------------------------- 
    8383      ! 
     
    8686# if defined key_diaeiv  
    8787      CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
    88       IF( ln_diaptr ) CALL wrk_alloc( jpi, jpj, jpk, z3d ) 
     88      CALL wrk_alloc( jpi, jpj, jpk, z3d, z3d_T ) 
    8989# else 
    9090      CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
     
    170170           CALL iom_put( "weiv_masstr" , z3d )   
    171171         ENDIF 
    172          IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") ) THEN 
     172         IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") .OR. iom_use('ueiv_heattr3d')        & 
     173                                    .OR. iom_use("ueiv_salttr") .OR. iom_use('ueiv_salttr3d') ) THEN 
    173174            z3d(:,:,jpk) = 0.e0 
    174             z2d(:,:) = 0.e0 
    175175            DO jk = 1, jpkm1 
    176176               z3d(:,:,jk) = rau0 * u_eiv(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 
    177                z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
    178177            END DO 
    179178            CALL iom_put( "ueiv_masstr", z3d )                  ! mass transport in i-direction 
    180179         ENDIF 
    181180 
    182          IF( iom_use('ueiv_heattr') ) THEN 
     181         IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 
    183182            zztmp = 0.5 * rcp  
    184183            z2d(:,:) = 0.e0  
    185             DO jk = 1, jpkm1 
    186                DO jj = 2, jpjm1 
    187                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    188                      z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
    189                   END DO 
    190                END DO 
    191             END DO 
    192             CALL lbc_lnk( z2d, 'U', -1. ) 
    193             CALL iom_put( "ueiv_heattr", zztmp * z2d )                  ! heat transport in i-direction 
    194          ENDIF 
    195  
    196          IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") ) THEN 
     184            z3d_T(:,:,:) = 0.e0  
     185            DO jk = 1, jpkm1 
     186               DO jj = 2, jpjm1 
     187                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     188                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
     189                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     190                  END DO 
     191               END DO 
     192            END DO 
     193            IF (iom_use('ueiv_heattr') ) THEN 
     194               CALL lbc_lnk( z2d, 'U', -1. ) 
     195               CALL iom_put( "ueiv_heattr", zztmp * z2d )                  ! 2D heat transport in i-direction 
     196            ENDIF 
     197            IF (iom_use('ueiv_heattr3d') ) THEN 
     198               CALL lbc_lnk( z3d_T, 'U', -1. ) 
     199               CALL iom_put( "ueiv_heattr3d", zztmp * z3d_T )              ! 3D heat transport in i-direction 
     200            ENDIF 
     201         ENDIF 
     202 
     203         IF( iom_use('ueiv_salttr') .OR. iom_use('ueiv_salttr3d') ) THEN 
     204            zztmp = 0.5 * 0.001 
     205            z2d(:,:) = 0.e0  
     206            z3d_T(:,:,:) = 0.e0  
     207            DO jk = 1, jpkm1 
     208               DO jj = 2, jpjm1 
     209                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     210                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
     211                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     212                  END DO 
     213               END DO 
     214            END DO 
     215            IF (iom_use('ueiv_salttr') ) THEN 
     216               CALL lbc_lnk( z2d, 'U', -1. ) 
     217               CALL iom_put( "ueiv_salttr", zztmp * z2d )                  ! 2D salt transport in i-direction 
     218            ENDIF 
     219            IF (iom_use('ueiv_salttr3d') ) THEN 
     220               CALL lbc_lnk( z3d_T, 'U', -1. ) 
     221               CALL iom_put( "ueiv_salttr3d", zztmp * z3d_T )              ! 3D salt transport in i-direction 
     222            ENDIF 
     223         ENDIF 
     224 
     225         IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") .OR. iom_use('veiv_heattr3d')       & 
     226                                    .OR. iom_use("veiv_salttr") .OR. iom_use('veiv_salttr3d') ) THEN 
    197227            z3d(:,:,jpk) = 0.e0 
    198             z2d(:,:) = 0.e0 
    199228            DO jk = 1, jpkm1 
    200229               z3d(:,:,jk) = rau0 * v_eiv(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) 
     
    202231            CALL iom_put( "veiv_masstr", z3d )                  ! mass transport in j-direction 
    203232         ENDIF 
    204              
    205          IF( iom_use('veiv_heattr') ) THEN 
     233         IF( iom_use('veiv_heattr') .OR. iom_use('veiv_heattr3d') ) THEN 
    206234            zztmp = 0.5 * rcp  
    207235            z2d(:,:) = 0.e0  
    208             DO jk = 1, jpkm1 
    209                DO jj = 2, jpjm1 
    210                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    211                      z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
    212                   END DO 
    213                END DO 
    214             END DO 
    215             CALL lbc_lnk( z2d, 'V', -1. ) 
    216             CALL iom_put( "veiv_heattr", zztmp * z2d )                  !  heat transport in j-direction 
    217          ENDIF 
     236            z3d_T(:,:,:) = 0.e0  
     237            DO jk = 1, jpkm1 
     238               DO jj = 2, jpjm1 
     239                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     240                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
     241                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     242                  END DO 
     243               END DO 
     244            END DO 
     245            IF (iom_use('veiv_heattr') ) THEN 
     246               CALL lbc_lnk( z2d, 'V', -1. ) 
     247               CALL iom_put( "veiv_heattr", zztmp * z2d )                  ! 2D heat transport in j-direction 
     248            ENDIF 
     249            IF (iom_use('veiv_heattr3d') ) THEN 
     250               CALL lbc_lnk( z3d_T, 'V', -1. ) 
     251               CALL iom_put( "veiv_heattr3d", zztmp * z3d_T )              ! 3D heat transport in j-direction 
     252            ENDIF 
     253         ENDIF 
     254 
     255         IF( iom_use('veiv_salttr') .OR. iom_use('veiv_salttr3d') ) THEN 
     256            zztmp = 0.5 * 0.001 
     257            z2d(:,:) = 0.e0  
     258            z3d_T(:,:,:) = 0.e0  
     259            DO jk = 1, jpkm1 
     260               DO jj = 2, jpjm1 
     261                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     262                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 
     263                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 
     264                  END DO 
     265               END DO 
     266            END DO 
     267            IF (iom_use('veiv_salttr') ) THEN 
     268               CALL lbc_lnk( z2d, 'V', -1. ) 
     269               CALL iom_put( "veiv_salttr", zztmp * z2d )                  ! 2D salt transport in i-direction 
     270            ENDIF 
     271            IF (iom_use('veiv_salttr3d') ) THEN 
     272               CALL lbc_lnk( z3d_T, 'V', -1. ) 
     273               CALL iom_put( "veiv_salttr3d", zztmp * z3d_T )              ! 3D salt transport in i-direction 
     274            ENDIF 
     275         ENDIF 
     276 
     277         IF( iom_use('weiv_masstr') .OR. iom_use('weiv_heattr3d') .OR. iom_use('weiv_salttr3d')) THEN   ! vertical mass transport & its square value 
     278           z2d(:,:) = rau0 * e12t(:,:) 
     279           DO jk = 1, jpk 
     280              z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:) 
     281           END DO 
     282           CALL iom_put( "weiv_masstr" , z3d )                  ! mass transport in k-direction 
     283         ENDIF 
     284 
     285         IF( iom_use('weiv_heattr3d') ) THEN 
     286            zztmp = 0.5 * rcp  
     287            DO jk = 1, jpkm1 
     288               DO jj = 2, jpjm1 
     289                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     290                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj,jk+1,jp_tem) ) 
     291                  END DO 
     292               END DO 
     293            END DO 
     294            CALL lbc_lnk( z3d_T, 'T', 1. ) 
     295            CALL iom_put( "weiv_heattr3d", zztmp * z3d_T )                 ! 3D heat transport in k-direction 
     296         ENDIF 
     297 
     298         IF( iom_use('weiv_salttr3d') ) THEN 
     299            zztmp = 0.5 * 0.001  
     300            DO jk = 1, jpkm1 
     301               DO jj = 2, jpjm1 
     302                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     303                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj,jk+1,jp_sal) ) 
     304                  END DO 
     305               END DO 
     306            END DO 
     307            CALL lbc_lnk( z3d_T, 'T', 1. ) 
     308            CALL iom_put( "weiv_salttr3d", zztmp * z3d_T )                 ! 3D salt transport in k-direction 
     309         ENDIF 
     310 
    218311    END IF 
    219312! 
     
    244337# if defined key_diaeiv  
    245338      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
    246       IF( ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, z3d ) 
     339      CALL wrk_dealloc( jpi, jpj, jpk, z3d, z3d_T ) 
    247340# else 
    248341      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
Note: See TracChangeset for help on using the changeset viewer.