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/LDF/ldftra.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/LDF/ldftra.F90

    r11536 r11949  
    382382 
    383383 
    384    SUBROUTINE ldf_tra( kt ) 
     384   SUBROUTINE ldf_tra( kt, Kbb, Kmm ) 
    385385      !!---------------------------------------------------------------------- 
    386386      !!                  ***  ROUTINE ldf_tra  *** 
     
    403403      !!---------------------------------------------------------------------- 
    404404      INTEGER, INTENT(in) ::   kt   ! time step 
     405      INTEGER, INTENT(in) ::   Kbb, Kmm   ! ocean time level indices 
    405406      ! 
    406407      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    411412         !                                ! =F(growth rate of baroclinic instability) 
    412413         !                                ! max value aeiv_0 ; decreased to 0 within 20N-20S 
    413          CALL ldf_eiv( kt, aei0, aeiu, aeiv ) 
     414         CALL ldf_eiv( kt, aei0, aeiu, aeiv, Kmm ) 
    414415      ENDIF 
    415416      ! 
     
    424425            ahtv(:,:,1) = aeiv(:,:,1) 
    425426         ELSE                                            ! compute aht.  
    426             CALL ldf_eiv( kt, aht0, ahtu, ahtv ) 
     427            CALL ldf_eiv( kt, aht0, ahtu, ahtv, Kmm ) 
    427428         ENDIF 
    428429         ! 
     
    448449         IF( ln_traldf_lap     ) THEN          !   laplacian operator |u| e /12 
    449450            DO jk = 1, jpkm1 
    450                ahtu(:,:,jk) = ABS( ub(:,:,jk) ) * e1u(:,:) * r1_12   ! n.b. ub,vb are masked 
    451                ahtv(:,:,jk) = ABS( vb(:,:,jk) ) * e2v(:,:) * r1_12 
     451               ahtu(:,:,jk) = ABS( uu(:,:,jk,Kbb) ) * e1u(:,:) * r1_12   ! n.b. uu,vv are masked 
     452               ahtv(:,:,jk) = ABS( vv(:,:,jk,Kbb) ) * e2v(:,:) * r1_12 
    452453            END DO 
    453454         ELSEIF( ln_traldf_blp ) THEN      ! bilaplacian operator      sqrt( |u| e^3 /12 ) = sqrt( |u| e /12 ) * e 
    454455            DO jk = 1, jpkm1 
    455                ahtu(:,:,jk) = SQRT(  ABS( ub(:,:,jk) ) * e1u(:,:) * r1_12  ) * e1u(:,:) 
    456                ahtv(:,:,jk) = SQRT(  ABS( vb(:,:,jk) ) * e2v(:,:) * r1_12  ) * e2v(:,:) 
     456               ahtu(:,:,jk) = SQRT(  ABS( uu(:,:,jk,Kbb) ) * e1u(:,:) * r1_12  ) * e1u(:,:) 
     457               ahtv(:,:,jk) = SQRT(  ABS( vv(:,:,jk,Kbb) ) * e2v(:,:) * r1_12  ) * e2v(:,:) 
    457458            END DO 
    458459         ENDIF 
     
    625626 
    626627 
    627    SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv ) 
     628   SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv, Kmm ) 
    628629      !!---------------------------------------------------------------------- 
    629630      !!                  ***  ROUTINE ldf_eiv  *** 
     
    637638      !!---------------------------------------------------------------------- 
    638639      INTEGER                         , INTENT(in   ) ::   kt             ! ocean time-step index 
     640      INTEGER                         , INTENT(in   ) ::   Kmm            ! ocean time level indices 
    639641      REAL(wp)                        , INTENT(inout) ::   paei0          ! max value            [m2/s] 
    640642      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   paeiu, paeiv   ! eiv coefficient      [m2/s] 
     
    658660                  ! internal Rossby radius Ro = .5 * sum_jpk(N) / f  
    659661                  zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 
    660                   zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w_n(ji,jj,jk) 
     662                  zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w(ji,jj,jk,Kmm) 
    661663                  ! Compute elements required for the inverse time scale of baroclinic 
    662664                  ! eddies using the isopycnal slopes calculated in ldfslp.F :  
    663665                  ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 
    664                   ze3w = e3w_n(ji,jj,jk) * tmask(ji,jj,jk) 
     666                  ze3w = e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
    665667                  zah(ji,jj) = zah(ji,jj) + zn2 * wslp2(ji,jj,jk) * ze3w 
    666668                  zhw(ji,jj) = zhw(ji,jj) + ze3w 
     
    676678                  ! internal Rossby radius Ro = .5 * sum_jpk(N) / f  
    677679                  zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 
    678                   zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w_n(ji,jj,jk) 
     680                  zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w(ji,jj,jk,Kmm) 
    679681                  ! Compute elements required for the inverse time scale of baroclinic 
    680682                  ! eddies using the isopycnal slopes calculated in ldfslp.F :  
    681683                  ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 
    682                   ze3w = e3w_n(ji,jj,jk) * tmask(ji,jj,jk) 
     684                  ze3w = e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
    683685                  zah(ji,jj) = zah(ji,jj) + zn2 * ( wslpi(ji,jj,jk) * wslpi(ji,jj,jk)   & 
    684686                     &                            + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) ) * ze3w 
     
    725727 
    726728 
    727    SUBROUTINE ldf_eiv_trp( kt, kit000, pun, pvn, pwn, cdtype ) 
     729   SUBROUTINE ldf_eiv_trp( kt, kit000, pu, pv, pw, cdtype, Kmm, Krhs ) 
    728730      !!---------------------------------------------------------------------- 
    729731      !!                  ***  ROUTINE ldf_eiv_trp  *** 
     
    741743      !!                                    velocity and heat transport (call ldf_eiv_dia) 
    742744      !! 
    743       !! ** Action  : pun, pvn increased by the eiv transport 
    744       !!---------------------------------------------------------------------- 
    745       INTEGER                         , INTENT(in   ) ::   kt       ! ocean time-step index 
    746       INTEGER                         , INTENT(in   ) ::   kit000   ! first time step index 
    747       CHARACTER(len=3)                , INTENT(in   ) ::   cdtype   ! =TRA or TRC (tracer indicator) 
    748       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pun      ! in : 3 ocean transport components   [m3/s] 
    749       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pvn      ! out: 3 ocean transport components   [m3/s] 
    750       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pwn      ! increased by the eiv                [m3/s] 
     745      !! ** Action  : pu, pv increased by the eiv transport 
     746      !!---------------------------------------------------------------------- 
     747      INTEGER                         , INTENT(in   ) ::   kt        ! ocean time-step index 
     748      INTEGER                         , INTENT(in   ) ::   kit000    ! first time step index 
     749      INTEGER                         , INTENT(in   ) ::   Kmm, Krhs ! ocean time level indices 
     750      CHARACTER(len=3)                , INTENT(in   ) ::   cdtype    ! =TRA or TRC (tracer indicator) 
     751      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pu      ! in : 3 ocean transport components   [m3/s] 
     752      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pv      ! out: 3 ocean transport components   [m3/s] 
     753      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pw      ! increased by the eiv                [m3/s] 
    751754      !! 
    752755      INTEGER  ::   ji, jj, jk                 ! dummy loop indices 
     
    780783         DO jj = 1, jpjm1 
    781784            DO ji = 1, fs_jpim1   ! vector opt.                
    782                pun(ji,jj,jk) = pun(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 
    783                pvn(ji,jj,jk) = pvn(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 
     785               pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 
     786               pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 
    784787            END DO 
    785788         END DO 
     
    788791         DO jj = 2, jpjm1 
    789792            DO ji = fs_2, fs_jpim1   ! vector opt. 
    790                pwn(ji,jj,jk) = pwn(ji,jj,jk) + (  zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk)   & 
     793               pw(ji,jj,jk) = pw(ji,jj,jk) + (  zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk)   & 
    791794                  &                             + zpsi_vw(ji,jj,jk) - zpsi_vw(ji  ,jj-1,jk) ) 
    792795            END DO 
     
    795798      ! 
    796799      !                              ! diagnose the eddy induced velocity and associated heat transport 
    797       IF( ln_ldfeiv_dia .AND. cdtype == 'TRA' )   CALL ldf_eiv_dia( zpsi_uw, zpsi_vw ) 
     800      IF( ln_ldfeiv_dia .AND. cdtype == 'TRA' )   CALL ldf_eiv_dia( zpsi_uw, zpsi_vw, Kmm ) 
    798801      ! 
    799802    END SUBROUTINE ldf_eiv_trp 
    800803 
    801804 
    802    SUBROUTINE ldf_eiv_dia( psi_uw, psi_vw ) 
     805   SUBROUTINE ldf_eiv_dia( psi_uw, psi_vw, Kmm ) 
    803806      !!---------------------------------------------------------------------- 
    804807      !!                  ***  ROUTINE ldf_eiv_dia  *** 
     
    811814      !!---------------------------------------------------------------------- 
    812815      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   psi_uw, psi_vw   ! streamfunction   [m3/s] 
     816      INTEGER                         , INTENT(in   ) ::   Kmm   ! ocean time level indices 
    813817      ! 
    814818      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
     
    831835      ! 
    832836      DO jk = 1, jpkm1                                         ! e2u e3u u_eiv = -dk[psi_uw] 
    833          zw3d(:,:,jk) = ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) / ( e2u(:,:) * e3u_n(:,:,jk) ) 
     837         zw3d(:,:,jk) = ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) / ( e2u(:,:) * e3u(:,:,jk,Kmm) ) 
    834838      END DO 
    835839      CALL iom_put( "uoce_eiv", zw3d ) 
    836840      ! 
    837841      DO jk = 1, jpkm1                                         ! e1v e3v v_eiv = -dk[psi_vw] 
    838          zw3d(:,:,jk) = ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) / ( e1v(:,:) * e3v_n(:,:,jk) ) 
     842         zw3d(:,:,jk) = ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) / ( e1v(:,:) * e3v(:,:,jk,Kmm) ) 
    839843      END DO 
    840844      CALL iom_put( "voce_eiv", zw3d ) 
     
    859863           DO jj = 2, jpjm1 
    860864              DO ji = fs_2, fs_jpim1   ! vector opt. 
    861                  zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1)      - psi_uw(ji,jj,jk)          )   & 
    862                     &                            * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji+1,jj,jk,jp_tem) )  
     865                 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
     866                    &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji+1,jj,jk,jp_tem,Kmm) )  
    863867                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    864868              END DO 
     
    875879         DO jj = 2, jpjm1 
    876880            DO ji = fs_2, fs_jpim1   ! vector opt. 
    877                zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)      - psi_vw(ji,jj,jk)          )   & 
    878                   &                            * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji,jj+1,jk,jp_tem) )  
     881               zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
     882                  &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji,jj+1,jk,jp_tem,Kmm) )  
    879883               zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    880884            END DO 
     
    894898           DO jj = 2, jpjm1 
    895899              DO ji = fs_2, fs_jpim1   ! vector opt. 
    896                  zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1)      - psi_uw(ji,jj,jk)          )   & 
    897                     &                            * ( tsn   (ji,jj,jk,jp_sal) + tsn   (ji+1,jj,jk,jp_sal) )  
     900                 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
     901                    &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji+1,jj,jk,jp_sal,Kmm) )  
    898902                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    899903              END DO 
     
    903907        CALL lbc_lnk( 'ldftra', zw3d, 'U', -1. ) 
    904908        CALL iom_put( "ueiv_salttr", zztmp * zw2d )                  ! salt transport in i-direction 
    905         CALL iom_put( "ueiv_salttr3d", zztmp * zw3d )                  ! salt transport in i-direction 
     909        CALL iom_put( "ueiv_salttr3d", zztmp * zw3d )                ! salt transport in i-direction 
    906910      ENDIF 
    907911      zw2d(:,:) = 0._wp  
     
    910914         DO jj = 2, jpjm1 
    911915            DO ji = fs_2, fs_jpim1   ! vector opt. 
    912                zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)      - psi_vw(ji,jj,jk)          )   & 
    913                   &                            * ( tsn   (ji,jj,jk,jp_sal) + tsn   (ji,jj+1,jk,jp_sal) )  
     916               zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
     917                  &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji,jj+1,jk,jp_sal,Kmm) )  
    914918               zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    915919            END DO 
Note: See TracChangeset for help on using the changeset viewer.