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 10946 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdken.F90 – NEMO

Ignore:
Timestamp:
2019-05-08T10:56:14+02:00 (5 years ago)
Author:
acc
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdken.F90

    r10425 r10946  
    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.