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 10954 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2019-05-09T18:12:29+02:00 (5 years ago)
Author:
acc
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert TRA modules and all knock on effects of these conversions. SETTE tested

File:
1 edited

Legend:

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

    r10946 r10954  
    6464CONTAINS 
    6565 
    66    SUBROUTINE tra_nxt( kt, Kmm, Krhs ) 
     66   SUBROUTINE tra_nxt( kt, Kbb, Kmm, Krhs ) 
    6767      !!---------------------------------------------------------------------- 
    6868      !!                   ***  ROUTINE tranxt  *** 
     
    8484      !!             domains (lk_agrif=T) 
    8585      !! 
    86       !! ** Action  : - tsb & tsn ready for the next time step 
     86      !! ** Action  : - ts(Kbb) & ts(Kmm) ready for the next time step 
    8787      !!---------------------------------------------------------------------- 
    8888      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
    89       INTEGER, INTENT(in) ::   Kmm, Krhs  ! time level indices 
     89      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices 
    9090      !! 
    9191      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    108108#endif 
    109109      !                                              ! local domain boundaries  (T-point, unchanged sign) 
    110       CALL lbc_lnk_multi( 'tranxt', tsa(:,:,:,jp_tem), 'T', 1., tsa(:,:,:,jp_sal), 'T', 1. ) 
     110      CALL lbc_lnk_multi( 'tranxt', ts(:,:,:,jp_tem,Krhs), 'T', 1., ts(:,:,:,jp_sal,Krhs), 'T', 1. ) 
    111111      ! 
    112112      IF( ln_bdy )   CALL bdy_tra( kt )  ! BDY open boundaries 
     
    128128         ! total trend for the non-time-filtered variables.  
    129129         zfact = 1.0 / rdt 
    130          ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
     130         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from ts(Kmm) terms 
    131131         DO jk = 1, jpkm1 
    132             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 
    133             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 
     132            ztrdt(:,:,jk) = ( ts(:,:,jk,jp_tem,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - ts(:,:,jk,jp_tem,Kmm)) * zfact 
     133            ztrds(:,:,jk) = ( ts(:,:,jk,jp_sal,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - ts(:,:,jk,jp_sal,Kmm)) * zfact 
    134134         END DO 
    135135         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_tot, ztrdt ) 
     
    138138            ! Store now fields before applying the Asselin filter  
    139139            ! in order to calculate Asselin filter trend later. 
    140             ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    141             ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     140            ztrdt(:,:,:) = ts(:,:,:,jp_tem,Kmm)  
     141            ztrds(:,:,:) = ts(:,:,:,jp_sal,Kmm) 
    142142         ENDIF 
    143143      ENDIF 
     
    146146         DO jn = 1, jpts 
    147147            DO jk = 1, jpkm1 
    148                tsn(:,:,jk,jn) = tsa(:,:,jk,jn)     
     148               ts(:,:,jk,jn,Kmm) = ts(:,:,jk,jn,Krhs)     
    149149            END DO 
    150150         END DO 
     
    159159      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    160160         ! 
    161          IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt, nit000,      'TRA', tsb, tsn, tsa, jpts )  ! linear free surface  
    162          ELSE                   ;   CALL tra_nxt_vvl( kt, Kmm, Krhs, nit000, rdt, 'TRA', tsb, tsn, tsa,   & 
    163            &                                                                sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
    164          ENDIF 
    165          ! 
    166          CALL lbc_lnk_multi( 'tranxt', tsb(:,:,:,jp_tem), 'T', 1., tsb(:,:,:,jp_sal), 'T', 1., & 
    167                   &          tsn(:,:,:,jp_tem), 'T', 1., tsn(:,:,:,jp_sal), 'T', 1., & 
    168                   &          tsa(:,:,:,jp_tem), 'T', 1., tsa(:,:,:,jp_sal), 'T', 1.  ) 
     161         IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nit000,      'TRA',                           & 
     162           &                                                   ts(:,:,:,:,Kbb), ts(:,:,:,:,Kmm), ts(:,:,:,:,Krhs), jpts )  ! linear free surface  
     163         ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nit000, rdt, 'TRA',                           & 
     164           &                                                   ts(:,:,:,:,Kbb), ts(:,:,:,:,Kmm), ts(:,:,:,:,Krhs),      & 
     165           &                                                   sbc_tsc        , sbc_tsc_b                        , jpts )  ! non-linear free surface 
     166         ENDIF 
     167         ! 
     168         CALL lbc_lnk_multi( 'tranxt', ts(:,:,:,jp_tem,Kbb) , 'T', 1., ts(:,:,:,jp_sal,Kbb) , 'T', 1., & 
     169                  &                    ts(:,:,:,jp_tem,Kmm) , 'T', 1., ts(:,:,:,jp_sal,Kmm) , 'T', 1., & 
     170                  &                    ts(:,:,:,jp_tem,Krhs), 'T', 1., ts(:,:,:,jp_sal,Krhs), 'T', 1.  ) 
    169171         ! 
    170172      ENDIF      
     
    173175         zfact = 1._wp / r2dt              
    174176         DO jk = 1, jpkm1 
    175             ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    176             ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
     177            ztrdt(:,:,jk) = ( ts(:,:,jk,jp_tem,Kbb) - ztrdt(:,:,jk) ) * zfact 
     178            ztrds(:,:,jk) = ( ts(:,:,jk,jp_sal,Kbb) - ztrds(:,:,jk) ) * zfact 
    177179         END DO 
    178180         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     
    182184      ! 
    183185      !                        ! control print 
    184       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsn(:,:,:,jp_tem), clinfo1=' nxt  - Tn: ', mask1=tmask,   & 
    185          &                       tab3d_2=tsn(:,:,:,jp_sal), clinfo2=       ' Sn: ', mask2=tmask ) 
     186      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Kmm), clinfo1=' nxt  - Tn: ', mask1=tmask,   & 
     187         &                       tab3d_2=ts(:,:,:,jp_sal,Kmm), clinfo2=       ' Sn: ', mask2=tmask ) 
    186188      ! 
    187189      IF( ln_timing )   CALL timing_stop('tra_nxt') 
     
    190192 
    191193 
    192    SUBROUTINE tra_nxt_fix( kt, kit000, cdtype, ptb, ptn, pta, kjpt ) 
     194   SUBROUTINE tra_nxt_fix( kt, Kmm, kit000, cdtype, ptb, ptn, pta, kjpt ) 
    193195      !!---------------------------------------------------------------------- 
    194196      !!                   ***  ROUTINE tra_nxt_fix  *** 
     
    200202      !!              - swap tracer fields to prepare the next time_step. 
    201203      !! 
    202       !! ** Action  : - tsb & tsn ready for the next time step 
     204      !! ** Action  : - ptb & ptn ready for the next time step 
    203205      !!---------------------------------------------------------------------- 
    204206      INTEGER                              , INTENT(in   ) ::  kt        ! ocean time-step index 
     207      INTEGER                              , INTENT(in   ) ::  Kmm       ! time level index 
    205208      INTEGER                              , INTENT(in   ) ::  kit000    ! first time step index 
    206209      CHARACTER(len=3)                     , INTENT(in   ) ::  cdtype    ! =TRA or TRC (tracer indicator) 
     
    239242 
    240243 
    241    SUBROUTINE tra_nxt_vvl( kt, Kmm, Krhs, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
     244   SUBROUTINE tra_nxt_vvl( kt, Kbb, Kmm, Krhs, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    242245      !!---------------------------------------------------------------------- 
    243246      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    248251      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
    249252      !!              - swap tracer fields to prepare the next time_step. 
    250       !!             tb  = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
    251       !!                  /( e3t_n    + atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
     253      !!             tb  = ( e3t(Kmm)*tn + atfp*[ e3t(Kbb)*tb - 2 e3t(Kmm)*tn + e3t_a*ta ] ) 
     254      !!                  /( e3t(Kmm)    + atfp*[ e3t(Kbb)    - 2 e3t(Kmm)    + e3t(Krhs)    ] ) 
    252255      !!             tn  = ta  
    253256      !! 
    254       !! ** Action  : - tsb & tsn ready for the next time step 
     257      !! ** Action  : - ptb & ptn ready for the next time step 
    255258      !!---------------------------------------------------------------------- 
    256259      INTEGER                              , INTENT(in   ) ::  kt        ! ocean time-step index 
    257       INTEGER                              , INTENT(in   ) ::  Kmm, Krhs ! time level indices 
     260      INTEGER                              , INTENT(in   ) ::  Kbb, Kmm, Krhs ! time level indices 
    258261      INTEGER                              , INTENT(in   ) ::  kit000    ! first time step index 
    259262      REAL(wp)                             , INTENT(in   ) ::  p2dt      ! time-step 
     
    300303            DO jj = 2, jpjm1 
    301304               DO ji = fs_2, fs_jpim1 
    302                   ze3t_b = e3t_b(ji,jj,jk) 
    303                   ze3t_n = e3t_n(ji,jj,jk) 
    304                   ze3t_a = e3t_a(ji,jj,jk) 
     305                  ze3t_b = e3t(ji,jj,jk,Kbb) 
     306                  ze3t_n = e3t(ji,jj,jk,Kmm) 
     307                  ze3t_a = e3t(ji,jj,jk,Krhs) 
    305308                  !                                         ! tracer content at Before, now and after 
    306309                  ztc_b  = ptb(ji,jj,jk,jn) * ze3t_b 
     
    323326                     IF( mikt(ji,jj) <=jk .and. jk <= nk_rnf(ji,jj)  ) THEN 
    324327                        ze3t_f = ze3t_f - zfact2 * ( - (rnf_b(ji,jj) - rnf(ji,jj)   )  ) & 
    325                     &                            * ( e3t_n(ji,jj,jk) / h_rnf(ji,jj) )  
     328                    &                            * ( e3t(ji,jj,jk,Kmm) / h_rnf(ji,jj) )  
    326329                     ENDIF 
    327330                  ELSE 
     
    339342                  IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )                                          & 
    340343                     &     ztc_f  = ztc_f  - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) &  
    341                      &                              * e3t_n(ji,jj,jk) / h_rnf(ji,jj) 
     344                     &                              * e3t(ji,jj,jk,Kmm) / h_rnf(ji,jj) 
    342345                     ! 
    343346                  ! ice shelf 
     
    346349                     IF ( jk >= misfkt(ji,jj) .AND. jk < misfkb(ji,jj) )                          & 
    347350                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) )  & 
    348                                &                 * e3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 
     351                               &                 * e3t(ji,jj,jk,Kmm) * r1_hisf_tbl (ji,jj) 
    349352                     ! level partially include in Losch_2008 ice shelf boundary layer  
    350353                     IF ( jk == misfkb(ji,jj) )                                                   & 
    351354                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) )  & 
    352                                &                 * e3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj) 
     355                               &                 * e3t(ji,jj,jk,Kmm) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj) 
    353356                  END IF 
    354357                  ! 
Note: See TracChangeset for help on using the changeset viewer.