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 8627 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90 – NEMO

Ignore:
Timestamp:
2017-10-16T16:19:11+02:00 (6 years ago)
Author:
gm
Message:

#1963 : Correct implementation of CMIP6 KE dissipation + move EKE<=>PE diag in traadv_eiv (in both cases, no more need of ln_trd_KE=T)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r4990 r8627  
    1717   USE oce             ! ocean dynamics and tracers 
    1818   USE dom_oce         ! ocean space and time domain 
     19   USE phycst          ! physical constants 
    1920   USE ldfdyn_oce      ! ocean dynamics: lateral physics 
    2021   USE zdf_oce         ! ocean vertical physics 
    2122   ! 
    2223   USE in_out_manager  ! I/O manager 
     24   USE iom             ! I/O library 
    2325   USE timing          ! Timing 
    2426 
     
    6264      INTEGER  ::   ji, jj, jk             ! dummy loop indices 
    6365      REAL(wp) ::   zua, zva, ze2u, ze1v   ! local scalars 
     66      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   z2d   ! 2D workspace  
    6467      !!---------------------------------------------------------------------- 
    6568      ! 
     
    9396      END DO                                           !   End of slab 
    9497      !                                                ! =============== 
     98       
     99      IF( iom_use('dispkexyfo') ) THEN   ! ocean Kinetic Energy dissipation per unit area 
     100         !                               ! due to lateral friction (xy=lateral)  
     101         !   see NEMO_book appendix C, §C.7.2 (N.B. here averaged at t-points) 
     102         !   local dissipation of KE at t-point due to laplacian operator is given by : 
     103         !      - ahmt hdivb**2 - mi( mj(ahmf rotb**2 e1f*e2f*e3t) ) / (e1e2t*e3t) 
     104         ! 
     105         ALLOCATE( z2d(jpi,jpj) ) 
     106         z2d(:,:) = 0._wp 
     107         DO jk = 1, jpkm1 
     108            DO jj = 2, jpjm1 
     109               DO ji = 2, jpim1 
     110                  z2d(ji,jj) = z2d(ji,jj)          -   (                                                         & 
     111                     &   hdivb(ji,jj,jk)**2 * fsahmt(ji,jj,jk) * fse3t_n(ji,jj,jk)                               & 
     112                     & + 0.25_wp * (                                                                             & 
     113                     &   rotb (ji  ,jj  ,jk)**2 * fsahmf(ji  ,jj  ,jk) * e12f(ji  ,jj  ) * fse3f(ji  ,jj  ,jk)   & 
     114                     & + rotb (ji-1,jj  ,jk)**2 * fsahmf(ji-1,jj  ,jk) * e12f(ji-1,jj  ) * fse3f(ji-1,jj  ,jk)   & 
     115                     & + rotb (ji  ,jj-1,jk)**2 * fsahmf(ji  ,jj-1,jk) * e12f(ji  ,jj-1) * fse3f(ji  ,jj-1,jk)   & 
     116                     & + rotb (ji-1,jj-1,jk)**2 * fsahmf(ji-1,jj-1,jk) * e12f(ji-1,jj-1) * fse3f(ji-1,jj-1,jk)   & 
     117                     &             ) * r1_e12t(ji,jj)  ) * tmask(ji,jj,jk) 
     118               END DO 
     119            END DO 
     120         END DO 
     121         z2d(:,:) = rau0 * z2d(:,:)  
     122         CALL lbc_lnk( z2d,'T', 1. ) 
     123         CALL iom_put( 'dispkexyfo', z2d ) 
     124         DEALLOCATE( z2d ) 
     125      ENDIF 
     126 
    95127      IF( nn_timing == 1 )  CALL timing_stop('dyn_ldf_lap') 
    96128      ! 
Note: See TracChangeset for help on using the changeset viewer.