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

Ignore:
Timestamp:
2016-06-22T13:43:26+02:00 (8 years ago)
Author:
malcolmroberts
Message:

Merged in the code from v3_6_extra_CMIP6_diagnostics, incorporating some further
changes to field_def.xml, some bug fixes in traadv_eiv from Daley Calvert

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

    r6487 r6731  
    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 * u_eiv(:,:,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 
    163             zztmp = 0.5 * rau0 * rcp  
     183            zztmp = 0.5 * rcp  
    164184            z2d(:,:) = 0.e0  
    165185            DO jk = 1, jpkm1 
    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 * v_eiv(:,:,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  
     206            zztmp = 0.5 * rcp  
    179207            z2d(:,:) = 0.e0  
    180208            DO jk = 1, jpkm1 
    181209               DO jj = 2, jpjm1 
    182210                  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)  
     211                     z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 
    185212                  END DO 
    186213               END DO 
     
    190217         ENDIF 
    191218    END IF 
     219! 
     220    IF( ln_diaptr .AND. cdtype == 'TRA' ) THEN 
     221       z3d(:,:,:) = 0._wp 
     222       DO jk = 1, jpkm1 
     223          DO jj = 2, jpjm1 
     224             DO ji = fs_2, fs_jpim1   ! vector opt. 
     225                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) & 
     226                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     227             END DO 
     228          END DO 
     229       END DO 
     230       CALL dia_ptr_ohst_components( jp_tem, 'eiv', z3d ) 
     231       z3d(:,:,:) = 0._wp 
     232       DO jk = 1, jpkm1 
     233          DO jj = 2, jpjm1 
     234             DO ji = fs_2, fs_jpim1   ! vector opt. 
     235                z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) & 
     236                &             * e1v(ji,jj) * fse3v(ji,jj,jk) 
     237             END DO 
     238          END DO 
     239       END DO 
     240       CALL dia_ptr_ohst_components( jp_sal, 'eiv', z3d ) 
     241    ENDIF 
    192242# endif   
    193       !  
     243 
    194244# if defined key_diaeiv  
    195245      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 
     246      IF( ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, z3d ) 
    196247# else 
    197248      CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) 
Note: See TracChangeset for help on using the changeset viewer.