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

Ignore:
Timestamp:
2016-10-21T13:32:54+02:00 (7 years ago)
Author:
davestorkey
Message:

Enable 3D tracer trends diagnostics ,ie. diagnostics obtained for ln_tra_trd=T, in UKMO/dev_r5518_GO6_package branch.
Remove error check for VVL and implement thickness weighting.
Also implement new diagnostics:
ttrd_totad : the total trend due to advection (correct alternative to ttrd_ad!)
ttrd_iso_x/y/z1 : individual components of trend due to isopycnal diffusion. Note the "z1" diagnostic is only part of the vertical trend. The other part is ttrd_zdf minus ttrd_zdfp.
ttrd_evd : the trend due to the EVD convection term (which is contained in ttrd_zdf and ttrd_zdfp).
ttrd_tot : the total model trend.
u/v/weiv_masstr3d : the components of the mass transport due to the Gent-McWilliams? scheme.
u/v/weiv_heattr3d : the components of the heat transport due to the Gent-McWilliams? scheme.
u/v/weiv_salttr3d : the components of the salt transport due to the Gent-McWilliams? scheme.

File:
1 edited

Legend:

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

    r6487 r7061  
    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, z3d_T 
    8082      !!---------------------------------------------------------------------- 
    8183      ! 
     
    8486# if defined key_diaeiv  
    8587      CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     88      CALL wrk_alloc( jpi, jpj, jpk, z3d, z3d_T ) 
    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 
    162          IF( iom_use('ueiv_heattr') ) THEN 
    163             zztmp = 0.5 * rau0 * rcp  
     165 
     166         IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") .OR. iom_use('ueiv_heattr3d')        & 
     167                                    .OR. iom_use("ueiv_salttr") .OR. iom_use('ueiv_salttr3d') ) THEN 
     168            z3d(:,:,jpk) = 0.e0 
     169            DO jk = 1, jpkm1 
     170               z3d(:,:,jk) = rau0 * u_eiv(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 
     171            END DO 
     172            CALL iom_put( "ueiv_masstr", z3d )                  ! mass transport in i-direction 
     173         ENDIF 
     174 
     175         IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 
     176            zztmp = 0.5 * rcp  
    164177            z2d(:,:) = 0.e0  
    165             DO jk = 1, jpkm1 
    166                DO jj = 2, jpjm1 
    167                   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)  
    170                   END DO 
    171                END DO 
    172             END DO 
    173             CALL lbc_lnk( z2d, 'U', -1. ) 
    174             CALL iom_put( "ueiv_heattr", zztmp * z2d )                  ! heat transport in i-direction 
     178            z3d_T(:,:,:) = 0.e0  
     179            DO jk = 1, jpkm1 
     180               DO jj = 2, jpjm1 
     181                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     182                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 
     183                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     184                  END DO 
     185               END DO 
     186            END DO 
     187            IF (iom_use('ueiv_heattr') ) THEN 
     188               CALL lbc_lnk( z2d, 'U', -1. ) 
     189               CALL iom_put( "ueiv_heattr", zztmp * z2d )                  ! 2D heat transport in i-direction 
     190            ENDIF 
     191            IF (iom_use('ueiv_heattr3d') ) THEN 
     192               CALL lbc_lnk( z3d_T, 'U', -1. ) 
     193               CALL iom_put( "ueiv_heattr3d", zztmp * z3d_T )              ! 3D heat transport in i-direction 
     194            ENDIF 
     195         ENDIF 
     196 
     197         IF( iom_use('ueiv_salttr') .OR. iom_use('ueiv_salttr3d') ) THEN 
     198            zztmp = 0.5 * 0.001 
     199            z2d(:,:) = 0.e0  
     200            z3d_T(:,:,:) = 0.e0  
     201            DO jk = 1, jpkm1 
     202               DO jj = 2, jpjm1 
     203                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     204                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 
     205                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     206                  END DO 
     207               END DO 
     208            END DO 
     209            IF (iom_use('ueiv_salttr') ) THEN 
     210               CALL lbc_lnk( z2d, 'U', -1. ) 
     211               CALL iom_put( "ueiv_salttr", zztmp * z2d )                  ! 2D salt transport in i-direction 
     212            ENDIF 
     213            IF (iom_use('ueiv_salttr3d') ) THEN 
     214               CALL lbc_lnk( z3d_T, 'U', -1. ) 
     215               CALL iom_put( "ueiv_salttr3d", zztmp * z3d_T )              ! 3D salt transport in i-direction 
     216            ENDIF 
     217         ENDIF 
     218 
     219         IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") .OR. iom_use('veiv_heattr3d')       & 
     220                                    .OR. iom_use("veiv_salttr") .OR. iom_use('veiv_salttr3d') ) THEN 
     221            z3d(:,:,jpk) = 0.e0 
     222            DO jk = 1, jpkm1 
     223               z3d(:,:,jk) = rau0 * v_eiv(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) 
     224            END DO 
     225            CALL iom_put( "veiv_masstr", z3d )                  ! mass transport in j-direction 
    175226         ENDIF 
    176227             
    177          IF( iom_use('veiv_heattr') ) THEN 
    178             zztmp = 0.5 * rau0 * rcp  
     228         IF( iom_use('veiv_heattr') .OR. iom_use('veiv_heattr3d') ) THEN 
     229            zztmp = 0.5 * rcp  
    179230            z2d(:,:) = 0.e0  
    180             DO jk = 1, jpkm1 
    181                DO jj = 2, jpjm1 
    182                   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)  
    185                   END DO 
    186                END DO 
    187             END DO 
    188             CALL lbc_lnk( z2d, 'V', -1. ) 
    189             CALL iom_put( "veiv_heattr", zztmp * z2d )                  !  heat transport in i-direction 
    190          ENDIF 
     231            z3d_T(:,:,:) = 0.e0  
     232            DO jk = 1, jpkm1 
     233               DO jj = 2, jpjm1 
     234                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     235                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
     236                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)  
     237                  END DO 
     238               END DO 
     239            END DO 
     240            IF (iom_use('veiv_heattr') ) THEN 
     241               CALL lbc_lnk( z2d, 'V', -1. ) 
     242               CALL iom_put( "veiv_heattr", zztmp * z2d )                  ! 2D heat transport in j-direction 
     243            ENDIF 
     244            IF (iom_use('veiv_heattr3d') ) THEN 
     245               CALL lbc_lnk( z3d_T, 'V', -1. ) 
     246               CALL iom_put( "veiv_heattr3d", zztmp * z3d_T )              ! 3D heat transport in j-direction 
     247            ENDIF 
     248         ENDIF 
     249 
     250         IF( iom_use('veiv_salttr') .OR. iom_use('veiv_salttr3d') ) THEN 
     251            zztmp = 0.5 * 0.001 
     252            z2d(:,:) = 0.e0  
     253            z3d_T(:,:,:) = 0.e0  
     254            DO jk = 1, jpkm1 
     255               DO jj = 2, jpjm1 
     256                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     257                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 
     258                     z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 
     259                  END DO 
     260               END DO 
     261            END DO 
     262            IF (iom_use('veiv_salttr') ) THEN 
     263               CALL lbc_lnk( z2d, 'V', -1. ) 
     264               CALL iom_put( "veiv_salttr", zztmp * z2d )                  ! 2D salt transport in i-direction 
     265            ENDIF 
     266            IF (iom_use('veiv_salttr3d') ) THEN 
     267               CALL lbc_lnk( z3d_T, 'V', -1. ) 
     268               CALL iom_put( "veiv_salttr3d", zztmp * z3d_T )              ! 3D salt transport in i-direction 
     269            ENDIF 
     270         ENDIF 
     271 
     272         IF( iom_use('weiv_masstr') .OR. iom_use('weiv_heattr3d') .OR. iom_use('weiv_salttr3d')) THEN   ! vertical mass transport & its square value 
     273           z2d(:,:) = rau0 * e12t(:,:) 
     274           DO jk = 1, jpk 
     275              z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:) 
     276           END DO 
     277           CALL iom_put( "weiv_masstr" , z3d )                  ! mass transport in k-direction 
     278         ENDIF 
     279 
     280         IF( iom_use('weiv_heattr3d') ) THEN 
     281            zztmp = 0.5 * rcp  
     282            DO jk = 1, jpkm1 
     283               DO jj = 2, jpjm1 
     284                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     285                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj,jk+1,jp_tem) ) 
     286                  END DO 
     287               END DO 
     288            END DO 
     289            CALL lbc_lnk( z3d_T, 'T', 1. ) 
     290            CALL iom_put( "weiv_heattr3d", zztmp * z3d_T )                 ! 3D heat transport in k-direction 
     291         ENDIF 
     292 
     293         IF( iom_use('weiv_salttr3d') ) THEN 
     294            zztmp = 0.5 * 0.001  
     295            DO jk = 1, jpkm1 
     296               DO jj = 2, jpjm1 
     297                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     298                     z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj,jk+1,jp_sal) ) 
     299                  END DO 
     300               END DO 
     301            END DO 
     302            CALL lbc_lnk( z3d_T, 'T', 1. ) 
     303            CALL iom_put( "weiv_salttr3d", zztmp * z3d_T )                 ! 3D salt transport in k-direction 
     304         ENDIF 
     305 
    191306    END IF 
    192307# endif   
    193       !  
     308 
    194309# if defined key_diaeiv  
    195310      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     311      CALL wrk_dealloc( jpi, jpj, jpk, z3d, z3d_T ) 
    196312# else 
    197313      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
Note: See TracChangeset for help on using the changeset viewer.