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 11949 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/TRD/trdken.F90 – NEMO

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (4 years ago)
Author:
acc
Message:

Merge in changes from 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. This just creates a fresh copy of this branch to use as the merge base. See ticket #2341

Location:
NEMO/branches/2019/dev_r11943_MERGE_2019/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src

    • Property svn:mergeinfo deleted
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/TRD/trdken.F90

    r10425 r11949  
    5959 
    6060 
    61    SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt ) 
     61   SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 
    6262      !!--------------------------------------------------------------------- 
    6363      !!                  ***  ROUTINE trd_ken  *** 
     
    6767      !! ** Method  : - apply lbc to the input masked velocity trends  
    6868      !!              - compute the associated KE trend: 
    69       !!          zke = 0.5 * (  mi-1[ un * putrd * bu ] + mj-1[ vn * pvtrd * bv]  ) / bt 
     69      !!          zke = 0.5 * (  mi-1[ uu(Kmm) * putrd * bu ] + mj-1[ vv(Kmm) * pvtrd * bv]  ) / bt 
    7070      !!      where bu, bv, bt are the volume of u-, v- and t-boxes.  
    7171      !!              - vertical diffusion case (jpdyn_zdf):  
     
    8080      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    8181      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     82      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    8283      ! 
    8384      INTEGER ::   ji, jj, jk       ! dummy loop indices 
     
    9293      nkstp = kt 
    9394      DO jk = 1, jpkm1 
    94          bu   (:,:,jk) =    e1e2u(:,:) * e3u_n(:,:,jk) 
    95          bv   (:,:,jk) =    e1e2v(:,:) * e3v_n(:,:,jk) 
    96          r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t_n(:,:,jk) * tmask(:,:,jk) 
     95         bu   (:,:,jk) =    e1e2u(:,:) * e3u(:,:,jk,Kmm) 
     96         bv   (:,:,jk) =    e1e2v(:,:) * e3v(:,:,jk,Kmm) 
     97         r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
    9798      END DO 
    9899      ! 
     
    103104         DO jj = 2, jpj 
    104105            DO ji = 2, jpi 
    105                zke(ji,jj,jk) = 0.5_wp * rau0 *( un(ji  ,jj,jk) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
    106                   &                           + un(ji-1,jj,jk) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
    107                   &                           + vn(ji,jj  ,jk) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
    108                   &                           + vn(ji,jj-1,jk) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk)  ) * r1_bt(ji,jj,jk) 
     106               zke(ji,jj,jk) = 0.5_wp * rau0 *( uu(ji  ,jj,jk,Kmm) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
     107                  &                           + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
     108                  &                           + vv(ji,jj  ,jk,Kmm) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
     109                  &                           + vv(ji,jj-1,jk,Kmm) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk)  ) * r1_bt(ji,jj,jk) 
    109110            END DO 
    110111         END DO 
     
    122123         !                   !                                          ! wind stress trends 
    123124                                 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) , zke2d(jpi,jpj) ) 
    124                            z2dx(:,:) = un(:,:,1) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 
    125                            z2dy(:,:) = vn(:,:,1) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 
     125                           z2dx(:,:) = uu(:,:,1,Kmm) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 
     126                           z2dy(:,:) = vv(:,:,1,Kmm) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 
    126127                           zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
    127128                           DO jj = 2, jpj 
     
    141142!                  ikbu = mbku(ji,jj)         ! deepest ocean u- & v-levels 
    142143!                  ikbv = mbkv(ji,jj)    
    143 !                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) 
    144 !                  z2dy(ji,jj) = vn(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) 
     144!                  z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) 
     145!                  z2dy(ji,jj) = vv(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) 
    145146!               END DO 
    146147!            END DO 
     
    157158         CASE( jpdyn_atf )   ;   CALL iom_put( "ketrd_atf"   , zke )    ! asselin filter trends  
    158159!! a faire !!!!  idee changer dynnxt pour avoir un appel a jpdyn_bfr avant le swap !!! 
    159 !! reflechir a une possible sauvegarde du "vrai" un,vn pour le calcul de atf.... 
     160!! reflechir a une possible sauvegarde du "vrai" uu(Kmm),vv(Kmm) pour le calcul de atf.... 
    160161! 
    161162!         IF( ln_drgimp ) THEN                                          ! bottom friction (implicit case) 
     
    164165!                  ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    165166!                  ikbv = mbkv(ji,jj) 
    166 !                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu) 
    167 !                  z2dy(ji,jj) = un(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv) 
     167!                  z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 
     168!                  z2dy(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 
    168169!               END DO 
    169170!            END DO 
     
    179180        CASE( jpdyn_ken )   ;   ! kinetic energy 
    180181                    ! called in dynnxt.F90 before asselin time filter 
    181                     ! with putrd=ua and pvtrd=va 
     182                    ! with putrd=uu(Krhs) and pvtrd=vv(Krhs) 
    182183                    zke(:,:,:) = 0.5_wp * zke(:,:,:) 
    183184                    CALL iom_put( "KE", zke ) 
    184185                    ! 
    185                     CALL ken_p2k( kt , zke ) 
     186                    CALL ken_p2k( kt , zke, Kmm ) 
    186187                      CALL iom_put( "ketrd_convP2K", zke )     ! conversion -rau*g*w 
    187188         ! 
     
    191192 
    192193 
    193    SUBROUTINE ken_p2k( kt , pconv ) 
     194   SUBROUTINE ken_p2k( kt , pconv, Kmm ) 
    194195      !!--------------------------------------------------------------------- 
    195196      !!                 ***  ROUTINE ken_p2k  *** 
     
    202203      !!----------------------------------------------------------------------  
    203204      INTEGER                   , INTENT(in   ) ::   kt      ! ocean time-step index 
     205      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
    204206      REAL(wp), DIMENSION(:,:,:), INTENT(  out) ::   pconv   !  
    205207      ! 
     
    214216       
    215217      !  Surface value (also valid in partial step case) 
    216       zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * wn(:,:,1) * e3w_n(:,:,1) 
     218      zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * ww(:,:,1) * e3w(:,:,1,Kmm) 
    217219 
    218220      ! interior value (2=<jk=<jpkm1) 
    219221      DO jk = 2, jpk 
    220          zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * wn(:,:,jk) * e3w_n(:,:,jk) 
     222         zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * ww(:,:,jk) * e3w(:,:,jk,Kmm) 
    221223      END DO 
    222224 
     
    225227         DO jj = 1, jpj 
    226228            DO ji = 1, jpi 
    227                zcoef = 0.5_wp / e3t_n(ji,jj,jk) 
     229               zcoef = 0.5_wp / e3t(ji,jj,jk,Kmm) 
    228230               pconv(ji,jj,jk) = zcoef * ( zconv(ji,jj,jk) + zconv(ji,jj,jk+1) ) * tmask(ji,jj,jk) 
    229231            END DO 
Note: See TracChangeset for help on using the changeset viewer.