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

Ignore:
Timestamp:
2019-04-15T15:57:37+02:00 (5 years ago)
Author:
davestorkey
Message:

branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Revert all changes so far in preparation for implementation of new design.

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA
Files:
16 edited

Legend:

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

    r10806 r10874  
    7575CONTAINS 
    7676 
    77    SUBROUTINE tra_adv( kt, ktlev1, ktlev2, ktlev3, kt2lev, pts_rhs ) 
     77   SUBROUTINE tra_adv( kt ) 
    7878      !!---------------------------------------------------------------------- 
    7979      !!                  ***  ROUTINE tra_adv  *** 
     
    8181      !! ** Purpose :   compute the ocean tracer advection trend. 
    8282      !! 
    83       !! ** Method  : - Update (pu_rhs,pv_rhs) with the advection term following nadv 
    84       !!---------------------------------------------------------------------- 
    85       INTEGER, INTENT(in) ::   kt                       ! ocean time-step index 
    86       INTEGER, INTENT(in) ::   ktlev1, ktlev2, ktlev3   ! time level indices for 3-time-level source terms 
    87       INTEGER, INTENT(in) ::   kt2lev                   ! time level index for 2-time-level source terms 
    88       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
     83      !! ** Method  : - Update (ua,va) with the advection term following nadv 
     84      !!---------------------------------------------------------------------- 
     85      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    8986      ! 
    9087      INTEGER ::   jk   ! dummy loop index 
     
    106103      IF( ln_wave .AND. ln_sdw )  THEN 
    107104         DO jk = 1, jpkm1                                                       ! eulerian transport + Stokes Drift 
    108             zun(:,:,jk) = e2u  (:,:) * e3u(:,:,jk,ktlev2) * ( uu(:,:,jk,ktlev2) + usd(:,:,jk) ) 
    109             zvn(:,:,jk) = e1v  (:,:) * e3v(:,:,jk,ktlev2) * ( vv(:,:,jk,ktlev2) + vsd(:,:,jk) ) 
    110             zwn(:,:,jk) = e1e2t(:,:)                 * ( ww(:,:,jk) + wsd(:,:,jk) ) 
     105            zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * ( un(:,:,jk) + usd(:,:,jk) ) 
     106            zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * ( vn(:,:,jk) + vsd(:,:,jk) ) 
     107            zwn(:,:,jk) = e1e2t(:,:)                 * ( wn(:,:,jk) + wsd(:,:,jk) ) 
    111108         END DO 
    112109      ELSE 
    113110         DO jk = 1, jpkm1 
    114             zun(:,:,jk) = e2u  (:,:) * e3u(:,:,jk,ktlev2) * uu(:,:,jk,ktlev2)               ! eulerian transport only 
    115             zvn(:,:,jk) = e1v  (:,:) * e3v(:,:,jk,ktlev2) * vv(:,:,jk,ktlev2) 
    116             zwn(:,:,jk) = e1e2t(:,:)                 * ww(:,:,jk) 
     111            zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)               ! eulerian transport only 
     112            zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     113            zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
    117114         END DO 
    118115      ENDIF 
     
    142139      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    143140         ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 
    144          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
    145          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 
     141         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     142         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    146143      ENDIF 
    147144      ! 
     
    149146      ! 
    150147      CASE ( np_CEN )                                 ! Centered scheme : 2nd / 4th order 
    151          CALL tra_adv_cen    ( kt, nit000, ktlev2, 'TRA',         zun, zvn, zwn     , ts(:,:,:,:,ktlev2), pts_rhs, jpts, nn_cen_h, nn_cen_v ) 
     148         CALL tra_adv_cen    ( kt, nit000, 'TRA',         zun, zvn, zwn     , tsn, tsa, jpts, nn_cen_h, nn_cen_v ) 
    152149      CASE ( np_FCT )                                 ! FCT scheme      : 2nd / 4th order 
    153          CALL tra_adv_fct    ( kt, nit000, ktlev1, ktlev2, ktlev3, 'TRA', r2dt, zun, zvn, zwn,                      & 
    154      &                         ts(:,:,:,:,ktlev1), ts(:,:,:,:,ktlev2), pts_rhs, jpts, nn_fct_h, nn_fct_v ) 
     150         CALL tra_adv_fct    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts, nn_fct_h, nn_fct_v ) 
    155151      CASE ( np_MUS )                                 ! MUSCL 
    156          CALL tra_adv_mus    ( kt, nit000, ktlev2, kt2lev, 'TRA', r2dt, zun, zvn, zwn, ts(:,:,:,:,ktlev1),      pts_rhs, jpts        , ln_mus_ups )  
     152         CALL tra_adv_mus    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb,      tsa, jpts        , ln_mus_ups )  
    157153      CASE ( np_UBS )                                 ! UBS 
    158          CALL tra_adv_ubs    ( kt, nit000, ktlev2, 'TRA', r2dt, zun, zvn, zwn, ts(:,:,:,:,ktlev1), ts(:,:,:,:,ktlev2), pts_rhs, jpts        , nn_ubs_v   ) 
     154         CALL tra_adv_ubs    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts        , nn_ubs_v   ) 
    159155      CASE ( np_QCK )                                 ! QUICKEST 
    160          CALL tra_adv_qck    ( kt, nit000, ktlev2, 'TRA', r2dt, zun, zvn, zwn, ts(:,:,:,:,ktlev1), ts(:,:,:,:,ktlev2), pts_rhs, jpts                     ) 
     156         CALL tra_adv_qck    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts                     ) 
    161157      ! 
    162158      END SELECT 
     
    164160      IF( l_trdtra )   THEN                      ! save the advective trends for further diagnostics 
    165161         DO jk = 1, jpkm1 
    166             ztrdt(:,:,jk) = pts_rhs(:,:,jk,jp_tem) - ztrdt(:,:,jk) 
    167             ztrds(:,:,jk) = pts_rhs(:,:,jk,jp_sal) - ztrds(:,:,jk) 
     162            ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk) 
     163            ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk) 
    168164         END DO 
    169165         CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_cen.F90

    r10806 r10874  
    4444CONTAINS 
    4545 
    46    SUBROUTINE tra_adv_cen( kt, kit000, ktlev, cdtype, pu, pv, pw,     & 
    47       &                                               pt, pt_rhs, kjpt, kn_cen_h, kn_cen_v )  
     46   SUBROUTINE tra_adv_cen( kt, kit000, cdtype, pun, pvn, pwn,     & 
     47      &                                        ptn, pta, kjpt, kn_cen_h, kn_cen_v )  
    4848      !!---------------------------------------------------------------------- 
    4949      !!                  ***  ROUTINE tra_adv_cen  *** 
     
    5959      !!                = 4  ==>> 4th order COMPACT  scheme     -      - 
    6060      !! 
    61       !! ** Action : - update pt_rhs  with the now advective tracer trends 
     61      !! ** Action : - update pta  with the now advective tracer trends 
    6262      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    6363      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     
    6565      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
    6666      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    67       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for source terms 
    6867      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
    6968      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
    7069      INTEGER                              , INTENT(in   ) ::   kn_cen_h        ! =2/4 (2nd or 4th order scheme) 
    7170      INTEGER                              , INTENT(in   ) ::   kn_cen_v        ! =2/4 (2nd or 4th order scheme) 
    72       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu, pv, pw   ! 3 ocean velocity components 
    73       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt             ! now tracer fields 
    74       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs             ! tracer trend  
     71      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
     72      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptn             ! now tracer fields 
     73      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend  
    7574      ! 
    7675      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    107106               DO jj = 1, jpjm1 
    108107                  DO ji = 1, fs_jpim1   ! vector opt. 
    109                      zwx(ji,jj,jk) = 0.5_wp * pu(ji,jj,jk) * ( pt(ji,jj,jk,jn) + pt(ji+1,jj  ,jk,jn) ) 
    110                      zwy(ji,jj,jk) = 0.5_wp * pv(ji,jj,jk) * ( pt(ji,jj,jk,jn) + pt(ji  ,jj+1,jk,jn) ) 
     108                     zwx(ji,jj,jk) = 0.5_wp * pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn) ) 
     109                     zwy(ji,jj,jk) = 0.5_wp * pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) ) 
    111110                  END DO 
    112111               END DO 
     
    119118               DO jj = 2, jpjm1 
    120119                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    121                      ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    122                      ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     120                     ztu(ji,jj,jk) = ( ptn(ji+1,jj  ,jk,jn) - ptn(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     121                     ztv(ji,jj,jk) = ( ptn(ji  ,jj+1,jk,jn) - ptn(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    123122                  END DO 
    124123               END DO 
     
    129128               DO jj = 2, jpjm1 
    130129                  DO ji = 1, fs_jpim1   ! vector opt. 
    131                      zC2t_u = pt(ji,jj,jk,jn) + pt(ji+1,jj  ,jk,jn)   ! C2 interpolation of T at u- & v-points (x2) 
    132                      zC2t_v = pt(ji,jj,jk,jn) + pt(ji  ,jj+1,jk,jn) 
     130                     zC2t_u = ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn)   ! C2 interpolation of T at u- & v-points (x2) 
     131                     zC2t_v = ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) 
    133132                     !                                                  ! C4 interpolation of T at u- & v-points (x2) 
    134133                     zC4t_u =  zC2t_u + r1_6 * ( ztu(ji-1,jj,jk) - ztu(ji+1,jj,jk) ) 
    135134                     zC4t_v =  zC2t_v + r1_6 * ( ztv(ji,jj-1,jk) - ztv(ji,jj+1,jk) ) 
    136135                     !                                                  ! C4 fluxes 
    137                      zwx(ji,jj,jk) =  0.5_wp * pu(ji,jj,jk) * zC4t_u 
    138                      zwy(ji,jj,jk) =  0.5_wp * pv(ji,jj,jk) * zC4t_v 
     136                     zwx(ji,jj,jk) =  0.5_wp * pun(ji,jj,jk) * zC4t_u 
     137                     zwy(ji,jj,jk) =  0.5_wp * pvn(ji,jj,jk) * zC4t_v 
    139138                  END DO 
    140139               END DO 
     
    151150               DO jj = 2, jpjm1 
    152151                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    153                      zwz(ji,jj,jk) = 0.5 * pw(ji,jj,jk) * ( pt(ji,jj,jk,jn) + pt(ji,jj,jk-1,jn) ) * wmask(ji,jj,jk) 
     152                     zwz(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) ) * wmask(ji,jj,jk) 
    154153                  END DO 
    155154               END DO 
     
    157156            ! 
    158157         CASE(  4  )                         !* 4th order compact 
    159             CALL interp_4th_cpt( pt(:,:,:,jn) , ztw )      ! ztw = interpolated value of T at w-point 
     158            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )      ! ztw = interpolated value of T at w-point 
    160159            DO jk = 2, jpkm1 
    161160               DO jj = 2, jpjm1 
    162161                  DO ji = fs_2, fs_jpim1 
    163                      zwz(ji,jj,jk) = pw(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
     162                     zwz(ji,jj,jk) = pwn(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
    164163                  END DO 
    165164               END DO 
     
    172171               DO jj = 1, jpj 
    173172                  DO ji = 1, jpi 
    174                      zwz(ji,jj, mikt(ji,jj) ) = pw(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn)  
     173                     zwz(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptn(ji,jj,mikt(ji,jj),jn)  
    175174                  END DO 
    176175               END DO    
    177176            ELSE                                   ! no ice-shelf cavities (only ocean surface) 
    178                zwz(:,:,1) = pw(:,:,1) * pt(:,:,1,jn) 
     177               zwz(:,:,1) = pwn(:,:,1) * ptn(:,:,1,jn) 
    179178            ENDIF 
    180179         ENDIF 
     
    183182            DO jj = 2, jpjm1 
    184183               DO ji = fs_2, fs_jpim1   ! vector opt. 
    185                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)    & 
     184                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn)    & 
    186185                     &             - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )    & 
    187186                     &                + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )    & 
    188                      &                + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1)  ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     187                     &                + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1)  ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    189188               END DO 
    190189            END DO 
     
    192191         !                             ! trend diagnostics 
    193192         IF( l_trd ) THEN 
    194             CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pu, pt(:,:,:,jn) ) 
    195             CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pv, pt(:,:,:,jn) ) 
    196             CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pw, pt(:,:,:,jn) ) 
     193            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
     194            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
     195            CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 
    197196         END IF 
    198197         !                                 ! "Poleward" heat and salt transports  
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_fct.F90

    r10806 r10874  
    5252CONTAINS 
    5353 
    54    SUBROUTINE tra_adv_fct( kt, kit000, ktlev1, ktlev2, ktlev3, cdtype, p2dt, pu, pv, pw,       & 
    55       &                                                                pt_lev1, pt_lev2, pt_rhs, kjpt, kn_fct_h, kn_fct_v ) 
     54   SUBROUTINE tra_adv_fct( kt, kit000, cdtype, p2dt, pun, pvn, pwn,       & 
     55      &                                              ptb, ptn, pta, kjpt, kn_fct_h, kn_fct_v ) 
    5656      !!---------------------------------------------------------------------- 
    5757      !!                  ***  ROUTINE tra_adv_fct  *** 
     
    6565      !!               - corrected flux (monotonic correction)  
    6666      !! 
    67       !! ** Action : - update pt_rhs  with the now advective tracer trends 
     67      !! ** Action : - update pta  with the now advective tracer trends 
    6868      !!             - send trends to trdtra module for further diagnostics (l_trdtra=T) 
    6969      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
    7070      !!---------------------------------------------------------------------- 
    7171      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
    72       INTEGER                              , INTENT(in   ) ::   ktlev1, ktlev2, ktlev3   ! time level indices for source terms 
    7372      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    7473      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
     
    7776      INTEGER                              , INTENT(in   ) ::   kn_fct_v        ! order of the FCT scheme (=2 or 4) 
    7877      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    79       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu, pv, pw   ! 3 ocean velocity components 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev1, pt_lev2        ! before and now tracer fields 
    81       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs             ! tracer trend  
     78      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
     79      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields 
     80      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend  
    8281      ! 
    8382      INTEGER  ::   ji, jj, jk, jn                           ! dummy loop indices   
     
    126125               DO ji = 1, fs_jpim1   ! vector opt. 
    127126                  ! upstream scheme 
    128                   zfp_ui = pu(ji,jj,jk) + ABS( pu(ji,jj,jk) ) 
    129                   zfm_ui = pu(ji,jj,jk) - ABS( pu(ji,jj,jk) ) 
    130                   zfp_vj = pv(ji,jj,jk) + ABS( pv(ji,jj,jk) ) 
    131                   zfm_vj = pv(ji,jj,jk) - ABS( pv(ji,jj,jk) ) 
    132                   zwx(ji,jj,jk) = 0.5 * ( zfp_ui * pt_lev1(ji,jj,jk,jn) + zfm_ui * pt_lev1(ji+1,jj  ,jk,jn) ) 
    133                   zwy(ji,jj,jk) = 0.5 * ( zfp_vj * pt_lev1(ji,jj,jk,jn) + zfm_vj * pt_lev1(ji  ,jj+1,jk,jn) ) 
     127                  zfp_ui = pun(ji,jj,jk) + ABS( pun(ji,jj,jk) ) 
     128                  zfm_ui = pun(ji,jj,jk) - ABS( pun(ji,jj,jk) ) 
     129                  zfp_vj = pvn(ji,jj,jk) + ABS( pvn(ji,jj,jk) ) 
     130                  zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) ) 
     131                  zwx(ji,jj,jk) = 0.5 * ( zfp_ui * ptb(ji,jj,jk,jn) + zfm_ui * ptb(ji+1,jj  ,jk,jn) ) 
     132                  zwy(ji,jj,jk) = 0.5 * ( zfp_vj * ptb(ji,jj,jk,jn) + zfm_vj * ptb(ji  ,jj+1,jk,jn) ) 
    134133               END DO 
    135134            END DO 
     
    139138            DO jj = 1, jpj 
    140139               DO ji = 1, jpi 
    141                   zfp_wk = pw(ji,jj,jk) + ABS( pw(ji,jj,jk) ) 
    142                   zfm_wk = pw(ji,jj,jk) - ABS( pw(ji,jj,jk) ) 
    143                   zwz(ji,jj,jk) = 0.5 * ( zfp_wk * pt_lev1(ji,jj,jk,jn) + zfm_wk * pt_lev1(ji,jj,jk-1,jn) ) * wmask(ji,jj,jk) 
     140                  zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 
     141                  zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 
     142                  zwz(ji,jj,jk) = 0.5 * ( zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn) ) * wmask(ji,jj,jk) 
    144143               END DO 
    145144            END DO 
     
    149148               DO jj = 1, jpj 
    150149                  DO ji = 1, jpi 
    151                      zwz(ji,jj, mikt(ji,jj) ) = pw(ji,jj,mikt(ji,jj)) * pt_lev1(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
     150                     zwz(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptb(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
    152151                  END DO 
    153152               END DO    
    154153            ELSE                             ! no cavities: only at the ocean surface 
    155                zwz(:,:,1) = pw(:,:,1) * pt_lev1(:,:,1,jn) 
     154               zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
    156155            ENDIF 
    157156         ENDIF 
     
    165164                     &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj) 
    166165                  !                             ! update and guess with monotonic sheme 
    167                   pt_rhs(ji,jj,jk,jn) =                     pt_rhs(ji,jj,jk,jn) +        ztra   / e3t(ji,jj,jk,ktlev2) * tmask(ji,jj,jk) 
    168                   zwi(ji,jj,jk)    = ( e3t(ji,jj,jk,ktlev1) * pt_lev1(ji,jj,jk,jn) + p2dt * ztra ) / e3t(ji,jj,jk,ktlev3) * tmask(ji,jj,jk) 
     166                  pta(ji,jj,jk,jn) =                     pta(ji,jj,jk,jn) +        ztra   / e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
     167                  zwi(ji,jj,jk)    = ( e3t_b(ji,jj,jk) * ptb(ji,jj,jk,jn) + p2dt * ztra ) / e3t_a(ji,jj,jk) * tmask(ji,jj,jk) 
    169168               END DO 
    170169            END DO 
     
    185184               DO jj = 1, jpjm1 
    186185                  DO ji = 1, fs_jpim1   ! vector opt. 
    187                      zwx(ji,jj,jk) = 0.5_wp * pu(ji,jj,jk) * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji+1,jj,jk,jn) ) - zwx(ji,jj,jk) 
    188                      zwy(ji,jj,jk) = 0.5_wp * pv(ji,jj,jk) * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji,jj+1,jk,jn) ) - zwy(ji,jj,jk) 
     186                     zwx(ji,jj,jk) = 0.5_wp * pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj,jk,jn) ) - zwx(ji,jj,jk) 
     187                     zwy(ji,jj,jk) = 0.5_wp * pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj+1,jk,jn) ) - zwy(ji,jj,jk) 
    189188                  END DO 
    190189               END DO 
     
    197196               DO jj = 1, jpjm1                    ! 1st derivative (gradient) 
    198197                  DO ji = 1, fs_jpim1   ! vector opt. 
    199                      ztu(ji,jj,jk) = ( pt_lev2(ji+1,jj  ,jk,jn) - pt_lev2(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    200                      ztv(ji,jj,jk) = ( pt_lev2(ji  ,jj+1,jk,jn) - pt_lev2(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     198                     ztu(ji,jj,jk) = ( ptn(ji+1,jj  ,jk,jn) - ptn(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     199                     ztv(ji,jj,jk) = ( ptn(ji  ,jj+1,jk,jn) - ptn(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    201200                  END DO 
    202201               END DO 
     
    213212               DO jj = 1, jpjm1 
    214213                  DO ji = 1, fs_jpim1   ! vector opt. 
    215                      zC2t_u = pt_lev2(ji,jj,jk,jn) + pt_lev2(ji+1,jj  ,jk,jn)   ! 2 x C2 interpolation of T at u- & v-points 
    216                      zC2t_v = pt_lev2(ji,jj,jk,jn) + pt_lev2(ji  ,jj+1,jk,jn) 
     214                     zC2t_u = ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn)   ! 2 x C2 interpolation of T at u- & v-points 
     215                     zC2t_v = ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) 
    217216                     !                                                  ! C4 minus upstream advective fluxes  
    218                      zwx(ji,jj,jk) =  0.5_wp * pu(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 
    219                      zwy(ji,jj,jk) =  0.5_wp * pv(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 
     217                     zwx(ji,jj,jk) =  0.5_wp * pun(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 
     218                     zwy(ji,jj,jk) =  0.5_wp * pvn(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 
    220219                  END DO 
    221220               END DO 
     
    228227               DO jj = 1, jpjm1 
    229228                  DO ji = 1, fs_jpim1   ! vector opt. 
    230                      ztu(ji,jj,jk) = ( pt_lev2(ji+1,jj  ,jk,jn) - pt_lev2(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    231                      ztv(ji,jj,jk) = ( pt_lev2(ji  ,jj+1,jk,jn) - pt_lev2(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     229                     ztu(ji,jj,jk) = ( ptn(ji+1,jj  ,jk,jn) - ptn(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     230                     ztv(ji,jj,jk) = ( ptn(ji  ,jj+1,jk,jn) - ptn(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    232231                  END DO 
    233232               END DO 
     
    238237               DO jj = 2, jpjm1 
    239238                  DO ji = 2, fs_jpim1   ! vector opt. 
    240                      zC2t_u = pt_lev2(ji,jj,jk,jn) + pt_lev2(ji+1,jj  ,jk,jn)   ! 2 x C2 interpolation of T at u- & v-points (x2) 
    241                      zC2t_v = pt_lev2(ji,jj,jk,jn) + pt_lev2(ji  ,jj+1,jk,jn) 
     239                     zC2t_u = ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn)   ! 2 x C2 interpolation of T at u- & v-points (x2) 
     240                     zC2t_v = ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) 
    242241                     !                                                  ! C4 interpolation of T at u- & v-points (x2) 
    243242                     zC4t_u =  zC2t_u + r1_6 * ( ztu(ji-1,jj  ,jk) - ztu(ji+1,jj  ,jk) ) 
    244243                     zC4t_v =  zC2t_v + r1_6 * ( ztv(ji  ,jj-1,jk) - ztv(ji  ,jj+1,jk) ) 
    245244                     !                                                  ! C4 minus upstream advective fluxes  
    246                      zwx(ji,jj,jk) =  0.5_wp * pu(ji,jj,jk) * zC4t_u - zwx(ji,jj,jk) 
    247                      zwy(ji,jj,jk) =  0.5_wp * pv(ji,jj,jk) * zC4t_v - zwy(ji,jj,jk) 
     245                     zwx(ji,jj,jk) =  0.5_wp * pun(ji,jj,jk) * zC4t_u - zwx(ji,jj,jk) 
     246                     zwy(ji,jj,jk) =  0.5_wp * pvn(ji,jj,jk) * zC4t_v - zwy(ji,jj,jk) 
    248247                  END DO 
    249248               END DO 
     
    258257               DO jj = 2, jpjm1 
    259258                  DO ji = fs_2, fs_jpim1 
    260                      zwz(ji,jj,jk) =  (  pw(ji,jj,jk) * 0.5_wp * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji,jj,jk-1,jn) )   & 
     259                     zwz(ji,jj,jk) =  (  pwn(ji,jj,jk) * 0.5_wp * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) )   & 
    261260                        &              - zwz(ji,jj,jk)  ) * wmask(ji,jj,jk) 
    262261                  END DO 
     
    265264            ! 
    266265         CASE(  4  )                   !- 4th order COMPACT 
    267             CALL interp_4th_cpt( pt_lev2(:,:,:,jn) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
     266            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
    268267            DO jk = 2, jpkm1 
    269268               DO jj = 2, jpjm1 
    270269                  DO ji = fs_2, fs_jpim1 
    271                      zwz(ji,jj,jk) = ( pw(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 
     270                     zwz(ji,jj,jk) = ( pwn(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 
    272271                  END DO 
    273272               END DO 
     
    283282         !        !==  monotonicity algorithm  ==! 
    284283         ! 
    285          CALL nonosc( pt_lev1(:,:,:,jn), zwx, zwy, zwz, zwi, p2dt, e3t(:,:,:,ktlev2) ) 
     284         CALL nonosc( ptb(:,:,:,jn), zwx, zwy, zwz, zwi, p2dt ) 
    286285         ! 
    287286         !        !==  final trend with corrected fluxes  ==! 
     
    290289            DO jj = 2, jpjm1 
    291290               DO ji = fs_2, fs_jpim1   ! vector opt.   
    292                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
     291                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    293292                     &                                   + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
    294293                     &                                   + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) & 
    295                      &                                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev2) 
     294                     &                                * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    296295               END DO 
    297296            END DO 
     
    304303            ! 
    305304            IF( l_trd ) THEN              ! trend diagnostics 
    306                CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pu, pt_lev2(:,:,:,jn) ) 
    307                CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pv, pt_lev2(:,:,:,jn) ) 
    308                CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pw, pt_lev2(:,:,:,jn) ) 
     305               CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 
     306               CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) ) 
     307               CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) ) 
    309308            ENDIF 
    310309            !                             ! heat/salt transport 
     
    329328 
    330329 
    331    SUBROUTINE nonosc( pbef, paa, pbb, pcc, paft, p2dt, pe3t ) 
     330   SUBROUTINE nonosc( pbef, paa, pbb, pcc, paft, p2dt ) 
    332331      !!--------------------------------------------------------------------- 
    333332      !!                    ***  ROUTINE nonosc  *** 
     
    342341      !!       in-space based differencing for fluid 
    343342      !!---------------------------------------------------------------------- 
    344       REAL(wp)                         , INTENT(in   ) ::   p2dt             ! tracer time-step 
    345       REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in   ) ::   pbef, paft, pe3t ! before & after field, now e3t field 
    346       REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) ::   paa, pbb, pcc    ! monotonic fluxes in the 3 directions 
     343      REAL(wp)                         , INTENT(in   ) ::   p2dt            ! tracer time-step 
     344      REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in   ) ::   pbef, paft      ! before & after field 
     345      REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) ::   paa, pbb, pcc   ! monotonic fluxes in the 3 directions 
    347346      ! 
    348347      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    393392 
    394393               ! up & down beta terms 
    395                zbt = e1e2t(ji,jj) * pe3t(ji,jj,jk) / p2dt 
     394               zbt = e1e2t(ji,jj) * e3t_n(ji,jj,jk) / p2dt 
    396395               zbetup(ji,jj,jk) = ( zup            - paft(ji,jj,jk) ) / ( zpos + zrtrn ) * zbt 
    397396               zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zdo            ) / ( zneg + zrtrn ) * zbt 
     
    635634      !!        The tri-diagonals matrix is given as input 3D arrays:   pD, pU, pL  
    636635      !!        (i.e. the Diagonal, the Upper diagonal, and the Lower diagonal). 
    637       !!        The solution is pt_rhs. 
     636      !!        The solution is pta. 
    638637      !!        The 3d array zwt is used as a work space array. 
    639638      !!---------------------------------------------------------------------- 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_mus.F90

    r10806 r10874  
    5454CONTAINS 
    5555 
    56    SUBROUTINE tra_adv_mus( kt, kit000, ktlev, kt2lev, cdtype, p2dt, pu, pv, pw,             & 
    57       &                                                             pt, pt_rhs, kjpt, ld_msc_ups ) 
     56   SUBROUTINE tra_adv_mus( kt, kit000, cdtype, p2dt, pun, pvn, pwn,             & 
     57      &                                              ptb, pta, kjpt, ld_msc_ups ) 
    5858      !!---------------------------------------------------------------------- 
    5959      !!                    ***  ROUTINE tra_adv_mus  *** 
     
    6666      !!              ld_msc_ups=T :  
    6767      !! 
    68       !! ** Action : - update pt_rhs  with the now advective tracer trends 
     68      !! ** Action : - update pta  with the now advective tracer trends 
    6969      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    7070      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     
    7575      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
    7676      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    77       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for 3-time-level source terms 
    78       INTEGER                              , INTENT(in   ) ::   kt2lev          ! time level index for 2-time-level source terms 
    7977      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
    8078      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
    8179      LOGICAL                              , INTENT(in   ) ::   ld_msc_ups      ! use upstream scheme within muscl 
    8280      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    83       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu, pv, pw   ! 3 ocean velocity components 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt             ! before tracer field 
    85       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs             ! tracer trend  
     81      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
     82      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb             ! before tracer field 
     83      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend  
    8684      ! 
    8785      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    136134            DO jj = 1, jpjm1       
    137135               DO ji = 1, fs_jpim1   ! vector opt. 
    138                   zwx(ji,jj,jk) = umask(ji,jj,jk) * ( pt(ji+1,jj,jk,jn) - pt(ji,jj,jk,jn) ) 
    139                   zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( pt(ji,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 
     136                  zwx(ji,jj,jk) = umask(ji,jj,jk) * ( ptb(ji+1,jj,jk,jn) - ptb(ji,jj,jk,jn) ) 
     137                  zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( ptb(ji,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 
    140138               END DO 
    141139           END DO 
     
    174172               DO ji = fs_2, fs_jpim1   ! vector opt. 
    175173                  ! MUSCL fluxes 
    176                   z0u = SIGN( 0.5, pu(ji,jj,jk) ) 
     174                  z0u = SIGN( 0.5, pun(ji,jj,jk) ) 
    177175                  zalpha = 0.5 - z0u 
    178                   zu  = z0u - 0.5 * pu(ji,jj,jk) * p2dt * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,ktlev) 
    179                   zzwx = pt(ji+1,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji+1,jj,jk) 
    180                   zzwy = pt(ji  ,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji  ,jj,jk) 
    181                   zwx(ji,jj,jk) = pu(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
     176                  zu  = z0u - 0.5 * pun(ji,jj,jk) * p2dt * r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk) 
     177                  zzwx = ptb(ji+1,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji+1,jj,jk) 
     178                  zzwy = ptb(ji  ,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji  ,jj,jk) 
     179                  zwx(ji,jj,jk) = pun(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    182180                  ! 
    183                   z0v = SIGN( 0.5, pv(ji,jj,jk) ) 
     181                  z0v = SIGN( 0.5, pvn(ji,jj,jk) ) 
    184182                  zalpha = 0.5 - z0v 
    185                   zv  = z0v - 0.5 * pv(ji,jj,jk) * p2dt * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,ktlev) 
    186                   zzwx = pt(ji,jj+1,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj+1,jk) 
    187                   zzwy = pt(ji,jj  ,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj  ,jk) 
    188                   zwy(ji,jj,jk) = pv(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
     183                  zv  = z0v - 0.5 * pvn(ji,jj,jk) * p2dt * r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk) 
     184                  zzwx = ptb(ji,jj+1,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj+1,jk) 
     185                  zzwy = ptb(ji,jj  ,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj  ,jk) 
     186                  zwy(ji,jj,jk) = pvn(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    189187               END DO 
    190188            END DO 
     
    195193            DO jj = 2, jpjm1       
    196194               DO ji = fs_2, fs_jpim1   ! vector opt. 
    197                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) - ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )       & 
     195                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )       & 
    198196                  &                                     + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )     & 
    199                   &                                   * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     197                  &                                   * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    200198               END DO 
    201199           END DO 
     
    203201         !                                ! trend diagnostics 
    204202         IF( l_trd )  THEN 
    205             CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pu, pt(:,:,:,jn) ) 
    206             CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pv, pt(:,:,:,jn) ) 
     203            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptb(:,:,:,jn) ) 
     204            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptb(:,:,:,jn) ) 
    207205         END IF 
    208206         !                                 ! "Poleward" heat and salt transports  
     
    217215         zwx(:,:,jpk) = 0._wp 
    218216         DO jk = 2, jpkm1                       ! interior values 
    219             zwx(:,:,jk) = tmask(:,:,jk) * ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) 
     217            zwx(:,:,jk) = tmask(:,:,jk) * ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) 
    220218         END DO 
    221219         !                                !-- Slopes of tracer 
     
    241239            DO jj = 2, jpjm1       
    242240               DO ji = fs_2, fs_jpim1   ! vector opt. 
    243                   z0w = SIGN( 0.5, pw(ji,jj,jk+1) ) 
     241                  z0w = SIGN( 0.5, pwn(ji,jj,jk+1) ) 
    244242                  zalpha = 0.5 + z0w 
    245                   zw  = z0w - 0.5 * pw(ji,jj,jk+1) * p2dt * r1_e1e2t(ji,jj) / e3w(ji,jj,jk+1,kt2lev) 
    246                   zzwx = pt(ji,jj,jk+1,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk+1) 
    247                   zzwy = pt(ji,jj,jk  ,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk  ) 
    248                   zwx(ji,jj,jk+1) = pw(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) * wmask(ji,jj,jk) 
     243                  zw  = z0w - 0.5 * pwn(ji,jj,jk+1) * p2dt * r1_e1e2t(ji,jj) / e3w_n(ji,jj,jk+1) 
     244                  zzwx = ptb(ji,jj,jk+1,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk+1) 
     245                  zzwy = ptb(ji,jj,jk  ,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk  ) 
     246                  zwx(ji,jj,jk+1) = pwn(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) * wmask(ji,jj,jk) 
    249247               END DO  
    250248            END DO 
     
    254252               DO jj = 1, jpj 
    255253                  DO ji = 1, jpi 
    256                      zwx(ji,jj, mikt(ji,jj) ) = pw(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn) 
     254                     zwx(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptb(ji,jj,mikt(ji,jj),jn) 
    257255                  END DO 
    258256               END DO    
    259257            ELSE                                      ! no cavities: only at the ocean surface 
    260                zwx(:,:,1) = pw(:,:,1) * pt(:,:,1,jn) 
     258               zwx(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
    261259            ENDIF 
    262260         ENDIF 
     
    265263            DO jj = 2, jpjm1       
    266264               DO ji = fs_2, fs_jpim1   ! vector opt. 
    267                   pt_rhs(ji,jj,jk,jn) =  pt_rhs(ji,jj,jk,jn) - ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     265                  pta(ji,jj,jk,jn) =  pta(ji,jj,jk,jn) - ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    268266               END DO 
    269267            END DO 
    270268         END DO 
    271269         !                                ! send trends for diagnostic 
    272          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pw, pt(:,:,:,jn) ) 
     270         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pwn, ptb(:,:,:,jn) ) 
    273271         ! 
    274272      END DO                     ! end of tracer loop 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_qck.F90

    r10806 r10874  
    4747CONTAINS 
    4848 
    49    SUBROUTINE tra_adv_qck ( kt, kit000, ktlev, cdtype, p2dt, pu, pv, pw,      & 
    50       &                                                pt_lev1, pt_lev2, pt_rhs, kjpt ) 
     49   SUBROUTINE tra_adv_qck ( kt, kit000, cdtype, p2dt, pun, pvn, pwn,      & 
     50      &                                       ptb, ptn, pta, kjpt ) 
    5151      !!---------------------------------------------------------------------- 
    5252      !!                  ***  ROUTINE tra_adv_qck  *** 
     
    7272      !!         dt = 2*rdtra and the scalar values are tb and sb 
    7373      !! 
    74       !!       On the vertical, the simple centered scheme used pt_lev2 
     74      !!       On the vertical, the simple centered scheme used ptn 
    7575      !! 
    7676      !!               The fluxes are bounded by the ULTIMATE limiter to 
     
    7878      !!            prevent the appearance of spurious numerical oscillations 
    7979      !! 
    80       !! ** Action : - update pt_rhs  with the now advective tracer trends 
     80      !! ** Action : - update pta  with the now advective tracer trends 
    8181      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    8282      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     
    8686      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
    8787      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    88       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for source terms 
    8988      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
    9089      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
    9190      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    92       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu, pv, pw   ! 3 ocean velocity components 
    93       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev1, pt_lev2        ! before and now tracer fields 
    94       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs             ! tracer trend  
     91      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
     92      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields 
     93      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend  
    9594      !!---------------------------------------------------------------------- 
    9695      ! 
     
    109108      ! 
    110109      !        ! horizontal fluxes are computed with the QUICKEST + ULTIMATE scheme 
    111       CALL tra_adv_qck_i( kt, ktlev, cdtype, p2dt, pu, pt_lev1, pt_lev2, pt_rhs, kjpt )  
    112       CALL tra_adv_qck_j( kt, ktlev, cdtype, p2dt, pv, pt_lev1, pt_lev2, pt_rhs, kjpt )  
     110      CALL tra_adv_qck_i( kt, cdtype, p2dt, pun, ptb, ptn, pta, kjpt )  
     111      CALL tra_adv_qck_j( kt, cdtype, p2dt, pvn, ptb, ptn, pta, kjpt )  
    113112 
    114113      !        ! vertical fluxes are computed with the 2nd order centered scheme 
    115       CALL tra_adv_cen2_k( kt, ktlev, cdtype, pw,         pt_lev2, pt_rhs, kjpt ) 
     114      CALL tra_adv_cen2_k( kt, cdtype, pwn,         ptn, pta, kjpt ) 
    116115      ! 
    117116   END SUBROUTINE tra_adv_qck 
    118117 
    119118 
    120    SUBROUTINE tra_adv_qck_i( kt, ktlev, cdtype, p2dt, pu,                  & 
    121       &                                        pt_lev1, pt_lev2, pt_rhs, kjpt   ) 
     119   SUBROUTINE tra_adv_qck_i( kt, cdtype, p2dt, pun,                  & 
     120      &                                        ptb, ptn, pta, kjpt   ) 
    122121      !!---------------------------------------------------------------------- 
    123122      !! 
    124123      !!---------------------------------------------------------------------- 
    125124      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    126       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for source terms 
    127125      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    128126      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
    129127      REAL(wp)                             , INTENT(in   ) ::   p2dt       ! tracer time-step 
    130       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu        ! i-velocity components 
    131       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev1, pt_lev2   ! before and now tracer fields 
    132       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend  
     128      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun        ! i-velocity components 
     129      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn   ! before and now tracer fields 
     130      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend  
    133131      !! 
    134132      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    147145            DO jj = 2, jpjm1 
    148146               DO ji = fs_2, fs_jpim1   ! vector opt. 
    149                   zfc(ji,jj,jk) = pt_lev1(ji-1,jj,jk,jn)        ! Upstream   in the x-direction for the tracer 
    150                   zfd(ji,jj,jk) = pt_lev1(ji+1,jj,jk,jn)        ! Downstream in the x-direction for the tracer 
     147                  zfc(ji,jj,jk) = ptb(ji-1,jj,jk,jn)        ! Upstream   in the x-direction for the tracer 
     148                  zfd(ji,jj,jk) = ptb(ji+1,jj,jk,jn)        ! Downstream in the x-direction for the tracer 
    151149               END DO 
    152150            END DO 
     
    160158            DO jj = 2, jpjm1 
    161159               DO ji = fs_2, fs_jpim1   ! vector opt.          
    162                   zdir = 0.5 + SIGN( 0.5, pu(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
     160                  zdir = 0.5 + SIGN( 0.5, pun(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
    163161                  zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji+1,jj,jk)  ! FU in the x-direction for T  
    164162               END DO 
     
    169167            DO jj = 2, jpjm1 
    170168               DO ji = fs_2, fs_jpim1   ! vector opt.    
    171                   zdir = 0.5 + SIGN( 0.5, pu(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
    172                   zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
    173                   zwx(ji,jj,jk)  = ABS( pu(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
    174                   zfc(ji,jj,jk)  = zdir * pt_lev1(ji  ,jj,jk,jn) + ( 1. - zdir ) * pt_lev1(ji+1,jj,jk,jn)  ! FC in the x-direction for T 
    175                   zfd(ji,jj,jk)  = zdir * pt_lev1(ji+1,jj,jk,jn) + ( 1. - zdir ) * pt_lev1(ji  ,jj,jk,jn)  ! FD in the x-direction for T 
     169                  zdir = 0.5 + SIGN( 0.5, pun(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
     170                  zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u_n(ji,jj,jk) 
     171                  zwx(ji,jj,jk)  = ABS( pun(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
     172                  zfc(ji,jj,jk)  = zdir * ptb(ji  ,jj,jk,jn) + ( 1. - zdir ) * ptb(ji+1,jj,jk,jn)  ! FC in the x-direction for T 
     173                  zfd(ji,jj,jk)  = zdir * ptb(ji+1,jj,jk,jn) + ( 1. - zdir ) * ptb(ji  ,jj,jk,jn)  ! FD in the x-direction for T 
    176174               END DO 
    177175            END DO 
     
    199197            DO jj = 2, jpjm1 
    200198               DO ji = fs_2, fs_jpim1   ! vector opt.                
    201                   zdir = 0.5 + SIGN( 0.5, pu(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
     199                  zdir = 0.5 + SIGN( 0.5, pun(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
    202200                  !--- If the second ustream point is a land point 
    203201                  !--- the flux is computed by the 1st order UPWIND scheme 
    204202                  zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji+1,jj,jk) 
    205203                  zwx(ji,jj,jk) = zmsk * zwx(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 
    206                   zwx(ji,jj,jk) = zwx(ji,jj,jk) * pu(ji,jj,jk) 
     204                  zwx(ji,jj,jk) = zwx(ji,jj,jk) * pun(ji,jj,jk) 
    207205               END DO 
    208206            END DO 
     
    215213            DO jj = 2, jpjm1 
    216214               DO ji = fs_2, fs_jpim1   ! vector opt.   
    217                   zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     215                  zbtr = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    218216                  ! horizontal advective trends 
    219217                  ztra = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj,jk) ) 
    220218                  !--- add it to the general tracer trends 
    221                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ztra 
     219                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
    222220               END DO 
    223221            END DO 
    224222         END DO 
    225223         !                                 ! trend diagnostics 
    226          IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pu, pt_lev2(:,:,:,jn) ) 
     224         IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
    227225         ! 
    228226      END DO 
     
    231229 
    232230 
    233    SUBROUTINE tra_adv_qck_j( kt, ktlev, cdtype, p2dt, pv,                & 
    234       &                                        pt_lev1, pt_lev2, pt_rhs, kjpt ) 
     231   SUBROUTINE tra_adv_qck_j( kt, cdtype, p2dt, pvn,                & 
     232      &                                        ptb, ptn, pta, kjpt ) 
    235233      !!---------------------------------------------------------------------- 
    236234      !! 
    237235      !!---------------------------------------------------------------------- 
    238236      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    239       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for source terms 
    240237      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    241238      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
    242239      REAL(wp)                             , INTENT(in   ) ::   p2dt       ! tracer time-step 
    243       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pv        ! j-velocity components 
    244       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev1, pt_lev2   ! before and now tracer fields 
    245       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend  
     240      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pvn        ! j-velocity components 
     241      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn   ! before and now tracer fields 
     242      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend  
    246243      !! 
    247244      INTEGER  :: ji, jj, jk, jn                ! dummy loop indices 
     
    262259               DO ji = fs_2, fs_jpim1   ! vector opt. 
    263260                  ! Upstream in the x-direction for the tracer 
    264                   zfc(ji,jj,jk) = pt_lev1(ji,jj-1,jk,jn) 
     261                  zfc(ji,jj,jk) = ptb(ji,jj-1,jk,jn) 
    265262                  ! Downstream in the x-direction for the tracer 
    266                   zfd(ji,jj,jk) = pt_lev1(ji,jj+1,jk,jn) 
     263                  zfd(ji,jj,jk) = ptb(ji,jj+1,jk,jn) 
    267264               END DO 
    268265            END DO 
     
    278275            DO jj = 2, jpjm1 
    279276               DO ji = fs_2, fs_jpim1   ! vector opt.          
    280                   zdir = 0.5 + SIGN( 0.5, pv(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
     277                  zdir = 0.5 + SIGN( 0.5, pvn(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
    281278                  zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji,jj+1,jk)  ! FU in the x-direction for T  
    282279               END DO 
     
    287284            DO jj = 2, jpjm1 
    288285               DO ji = fs_2, fs_jpim1   ! vector opt.    
    289                   zdir = 0.5 + SIGN( 0.5, pv(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
    290                   zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v(ji,jj,jk,ktlev) 
    291                   zwy(ji,jj,jk)  = ABS( pv(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
    292                   zfc(ji,jj,jk)  = zdir * pt_lev1(ji,jj  ,jk,jn) + ( 1. - zdir ) * pt_lev1(ji,jj+1,jk,jn)  ! FC in the x-direction for T 
    293                   zfd(ji,jj,jk)  = zdir * pt_lev1(ji,jj+1,jk,jn) + ( 1. - zdir ) * pt_lev1(ji,jj  ,jk,jn)  ! FD in the x-direction for T 
     286                  zdir = 0.5 + SIGN( 0.5, pvn(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
     287                  zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v_n(ji,jj,jk) 
     288                  zwy(ji,jj,jk)  = ABS( pvn(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
     289                  zfc(ji,jj,jk)  = zdir * ptb(ji,jj  ,jk,jn) + ( 1. - zdir ) * ptb(ji,jj+1,jk,jn)  ! FC in the x-direction for T 
     290                  zfd(ji,jj,jk)  = zdir * ptb(ji,jj+1,jk,jn) + ( 1. - zdir ) * ptb(ji,jj  ,jk,jn)  ! FD in the x-direction for T 
    294291               END DO 
    295292            END DO 
     
    317314            DO jj = 2, jpjm1 
    318315               DO ji = fs_2, fs_jpim1   ! vector opt.                
    319                   zdir = 0.5 + SIGN( 0.5, pv(ji,jj,jk) )   ! if pu > 0 : zdir = 1 otherwise zdir = 0  
     316                  zdir = 0.5 + SIGN( 0.5, pvn(ji,jj,jk) )   ! if pun > 0 : zdir = 1 otherwise zdir = 0  
    320317                  !--- If the second ustream point is a land point 
    321318                  !--- the flux is computed by the 1st order UPWIND scheme 
    322319                  zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji,jj+1,jk) 
    323320                  zwy(ji,jj,jk) = zmsk * zwy(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 
    324                   zwy(ji,jj,jk) = zwy(ji,jj,jk) * pv(ji,jj,jk) 
     321                  zwy(ji,jj,jk) = zwy(ji,jj,jk) * pvn(ji,jj,jk) 
    325322               END DO 
    326323            END DO 
     
    333330            DO jj = 2, jpjm1 
    334331               DO ji = fs_2, fs_jpim1   ! vector opt.   
    335                   zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     332                  zbtr = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    336333                  ! horizontal advective trends 
    337334                  ztra = - zbtr * ( zwy(ji,jj,jk) - zwy(ji,jj-1,jk) ) 
    338335                  !--- add it to the general tracer trends 
    339                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ztra 
     336                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
    340337               END DO 
    341338            END DO 
    342339         END DO 
    343340         !                                 ! trend diagnostics 
    344          IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pv, pt_lev2(:,:,:,jn) ) 
     341         IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    345342         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    346343         IF( l_ptr )   CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) 
     
    351348 
    352349 
    353    SUBROUTINE tra_adv_cen2_k( kt, ktlev, cdtype, pw,           & 
    354      &                                    pt_lev2, pt_rhs, kjpt ) 
     350   SUBROUTINE tra_adv_cen2_k( kt, cdtype, pwn,           & 
     351     &                                    ptn, pta, kjpt ) 
    355352      !!---------------------------------------------------------------------- 
    356353      !! 
    357354      !!---------------------------------------------------------------------- 
    358355      INTEGER                              , INTENT(in   ) ::   kt       ! ocean time-step index 
    359       INTEGER                              , INTENT(in   ) ::   ktlev    ! time level index for source terms 
    360356      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype   ! =TRA or TRC (tracer indicator) 
    361357      INTEGER                              , INTENT(in   ) ::   kjpt     ! number of tracers 
    362       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pw      ! vertical velocity  
    363       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev2      ! before and now tracer fields 
    364       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs      ! tracer trend  
     358      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pwn      ! vertical velocity  
     359      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptn      ! before and now tracer fields 
     360      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta      ! tracer trend  
    365361      ! 
    366362      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    378374            DO jj = 2, jpjm1 
    379375               DO ji = fs_2, fs_jpim1   ! vector opt. 
    380                   zwz(ji,jj,jk) = 0.5 * pw(ji,jj,jk) * ( pt_lev2(ji,jj,jk-1,jn) + pt_lev2(ji,jj,jk,jn) ) * wmask(ji,jj,jk) 
     376                  zwz(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk-1,jn) + ptn(ji,jj,jk,jn) ) * wmask(ji,jj,jk) 
    381377               END DO 
    382378            END DO 
     
    386382               DO jj = 1, jpj 
    387383                  DO ji = 1, jpi 
    388                      zwz(ji,jj, mikt(ji,jj) ) = pw(ji,jj,mikt(ji,jj)) * pt_lev2(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
     384                     zwz(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptn(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
    389385                  END DO 
    390386               END DO    
    391387            ELSE                                   ! no ocean cavities (only ocean surface) 
    392                zwz(:,:,1) = pw(:,:,1) * pt_lev2(:,:,1,jn) 
     388               zwz(:,:,1) = pwn(:,:,1) * ptn(:,:,1,jn) 
    393389            ENDIF 
    394390         ENDIF 
     
    397393            DO jj = 2, jpjm1 
    398394               DO ji = fs_2, fs_jpim1   ! vector opt. 
    399                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) - ( zwz(ji,jj,jk) - zwz(ji,jj,jk+1) )   & 
    400                      &                                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     395                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - ( zwz(ji,jj,jk) - zwz(ji,jj,jk+1) )   & 
     396                     &                                * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    401397               END DO 
    402398            END DO 
    403399         END DO 
    404400         !                                 ! Send trends for diagnostic 
    405          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pw, pt_lev2(:,:,:,jn) ) 
     401         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 
    406402         ! 
    407403      END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_ubs.F90

    r10806 r10874  
    4646CONTAINS 
    4747 
    48    SUBROUTINE tra_adv_ubs( kt, kit000, ktlev, cdtype, p2dt, pu, pv, pw,          & 
    49       &                                                pt_lev1, pt_lev2, pt_rhs, kjpt, kn_ubs_v ) 
     48   SUBROUTINE tra_adv_ubs( kt, kit000, cdtype, p2dt, pun, pvn, pwn,          & 
     49      &                                                ptb, ptn, pta, kjpt, kn_ubs_v ) 
    5050      !!---------------------------------------------------------------------- 
    5151      !!                  ***  ROUTINE tra_adv_ubs  *** 
     
    5858      !!      It is only used in the horizontal direction. 
    5959      !!      For example the i-component of the advective fluxes are given by : 
    60       !!                !  e2u e3u uu ( mi(Tn) - zltu(i  ) ,ktlev)   if uu(i,ktlev) >= 0 
     60      !!                !  e2u e3u un ( mi(Tn) - zltu(i  ) )   if un(i) >= 0 
    6161      !!          ztu = !  or  
    62       !!                !  e2u e3u uu ( mi(Tn) - zltu(i+1) ,ktlev)   if uu(i,ktlev) < 0 
     62      !!                !  e2u e3u un ( mi(Tn) - zltu(i+1) )   if un(i) < 0 
    6363      !!      where zltu is the second derivative of the before temperature field: 
    6464      !!          zltu = 1/e3t di[ e2u e3u / e1u di[Tb] ] 
     
    7777      !!      scheme (kn_ubs_v=4). 
    7878      !! 
    79       !! ** Action : - update pt_rhs  with the now advective tracer trends 
     79      !! ** Action : - update pta  with the now advective tracer trends 
    8080      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T) 
    8181      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 
     
    8686      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
    8787      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    88       INTEGER                              , INTENT(in   ) ::   ktlev           ! time level index for source terms 
    8988      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
    9089      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
    9190      INTEGER                              , INTENT(in   ) ::   kn_ubs_v        ! number of tracers 
    9291      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    93       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pu, pv, pw   ! 3 ocean transport components 
    94       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev1, pt_lev2        ! before and now tracer fields 
    95       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs             ! tracer trend  
     92      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean transport components 
     93      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields 
     94      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend  
    9695      ! 
    9796      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    127126            DO jj = 1, jpjm1              ! First derivative (masked gradient) 
    128127               DO ji = 1, fs_jpim1   ! vector opt. 
    129                   zeeu = e2_e1u(ji,jj) * e3u(ji,jj,jk,ktlev) * umask(ji,jj,jk) 
    130                   zeev = e1_e2v(ji,jj) * e3v(ji,jj,jk,ktlev) * vmask(ji,jj,jk) 
    131                   ztu(ji,jj,jk) = zeeu * ( pt_lev1(ji+1,jj  ,jk,jn) - pt_lev1(ji,jj,jk,jn) ) 
    132                   ztv(ji,jj,jk) = zeev * ( pt_lev1(ji  ,jj+1,jk,jn) - pt_lev1(ji,jj,jk,jn) ) 
     128                  zeeu = e2_e1u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) 
     129                  zeev = e1_e2v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) 
     130                  ztu(ji,jj,jk) = zeeu * ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) 
     131                  ztv(ji,jj,jk) = zeev * ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 
    133132               END DO 
    134133            END DO 
    135134            DO jj = 2, jpjm1              ! Second derivative (divergence) 
    136135               DO ji = fs_2, fs_jpim1   ! vector opt. 
    137                   zcoef = 1._wp / ( 6._wp * e3t(ji,jj,jk,ktlev) ) 
     136                  zcoef = 1._wp / ( 6._wp * e3t_n(ji,jj,jk) ) 
    138137                  zltu(ji,jj,jk) = (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)  ) * zcoef 
    139138                  zltv(ji,jj,jk) = (  ztv(ji,jj,jk) - ztv(ji,jj-1,jk)  ) * zcoef 
     
    147146            DO jj = 1, jpjm1 
    148147               DO ji = 1, fs_jpim1   ! vector opt. 
    149                   zfp_ui = pu(ji,jj,jk) + ABS( pu(ji,jj,jk) )      ! upstream transport (x2) 
    150                   zfm_ui = pu(ji,jj,jk) - ABS( pu(ji,jj,jk) ) 
    151                   zfp_vj = pv(ji,jj,jk) + ABS( pv(ji,jj,jk) ) 
    152                   zfm_vj = pv(ji,jj,jk) - ABS( pv(ji,jj,jk) ) 
     148                  zfp_ui = pun(ji,jj,jk) + ABS( pun(ji,jj,jk) )      ! upstream transport (x2) 
     149                  zfm_ui = pun(ji,jj,jk) - ABS( pun(ji,jj,jk) ) 
     150                  zfp_vj = pvn(ji,jj,jk) + ABS( pvn(ji,jj,jk) ) 
     151                  zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) ) 
    153152                  !                                                  ! 2nd order centered advective fluxes (x2) 
    154                   zcenut = pu(ji,jj,jk) * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji+1,jj  ,jk,jn) ) 
    155                   zcenvt = pv(ji,jj,jk) * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji  ,jj+1,jk,jn) ) 
     153                  zcenut = pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn) ) 
     154                  zcenvt = pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) ) 
    156155                  !                                                  ! UBS advective fluxes 
    157156                  ztu(ji,jj,jk) = 0.5 * ( zcenut - zfp_ui * zltu(ji,jj,jk) - zfm_ui * zltu(ji+1,jj,jk) ) 
     
    161160         END DO          
    162161         ! 
    163          zltu(:,:,:) = pt_rhs(:,:,:,jn)      ! store the initial trends before its update 
     162         zltu(:,:,:) = pta(:,:,:,jn)      ! store the initial trends before its update 
    164163         ! 
    165164         DO jk = 1, jpkm1        !==  add the horizontal advective trend  ==! 
    166165            DO jj = 2, jpjm1 
    167166               DO ji = fs_2, fs_jpim1   ! vector opt. 
    168                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)                        & 
     167                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn)                        & 
    169168                     &             - (  ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk)    & 
    170                      &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     169                     &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    171170               END DO 
    172171            END DO 
     
    174173         END DO 
    175174         ! 
    176          zltu(:,:,:) = pt_rhs(:,:,:,jn) - zltu(:,:,:)    ! Horizontal advective trend used in vertical 2nd order FCT case 
     175         zltu(:,:,:) = pta(:,:,:,jn) - zltu(:,:,:)    ! Horizontal advective trend used in vertical 2nd order FCT case 
    177176         !                                            ! and/or in trend diagnostic (l_trd=T)  
    178177         !                 
    179178         IF( l_trd ) THEN                  ! trend diagnostics 
    180              CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, pu, pt_lev2(:,:,:,jn) ) 
    181              CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pv, pt_lev2(:,:,:,jn) ) 
     179             CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, pun, ptn(:,:,:,jn) ) 
     180             CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pvn, ptn(:,:,:,jn) ) 
    182181         END IF 
    183182         !      
     
    194193         CASE(  2  )                   ! 2nd order FCT  
    195194            !          
    196             IF( l_trd )   zltv(:,:,:) = pt_rhs(:,:,:,jn)          ! store pt_rhs if trend diag. 
     195            IF( l_trd )   zltv(:,:,:) = pta(:,:,:,jn)          ! store pta if trend diag. 
    197196            ! 
    198197            !                          !*  upstream advection with initial mass fluxes & intermediate update  ==! 
     
    200199               DO jj = 1, jpj 
    201200                  DO ji = 1, jpi 
    202                      zfp_wk = pw(ji,jj,jk) + ABS( pw(ji,jj,jk) ) 
    203                      zfm_wk = pw(ji,jj,jk) - ABS( pw(ji,jj,jk) ) 
    204                      ztw(ji,jj,jk) = 0.5_wp * (  zfp_wk * pt_lev1(ji,jj,jk,jn) + zfm_wk * pt_lev1(ji,jj,jk-1,jn)  ) * wmask(ji,jj,jk) 
     201                     zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 
     202                     zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 
     203                     ztw(ji,jj,jk) = 0.5_wp * (  zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn)  ) * wmask(ji,jj,jk) 
    205204                  END DO 
    206205               END DO 
     
    210209                  DO jj = 1, jpj 
    211210                     DO ji = 1, jpi 
    212                         ztw(ji,jj, mikt(ji,jj) ) = pw(ji,jj,mikt(ji,jj)) * pt_lev1(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
     211                        ztw(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptb(ji,jj,mikt(ji,jj),jn)   ! linear free surface  
    213212                     END DO 
    214213                  END DO    
    215214               ELSE                                ! no cavities: only at the ocean surface 
    216                   ztw(:,:,1) = pw(:,:,1) * pt_lev1(:,:,1,jn) 
     215                  ztw(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
    217216               ENDIF 
    218217            ENDIF 
     
    221220               DO jj = 2, jpjm1 
    222221                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    223                      ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
    224                      pt_rhs(ji,jj,jk,jn) =   pt_rhs(ji,jj,jk,jn) +  ztak  
    225                      zti(ji,jj,jk)    = ( pt_lev1(ji,jj,jk,jn) + p2dt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk) 
     222                     ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
     223                     pta(ji,jj,jk,jn) =   pta(ji,jj,jk,jn) +  ztak  
     224                     zti(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + p2dt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk) 
    226225                  END DO 
    227226               END DO 
     
    233232               DO jj = 1, jpj 
    234233                  DO ji = 1, jpi 
    235                      ztw(ji,jj,jk) = (   0.5_wp * pw(ji,jj,jk) * ( pt_lev2(ji,jj,jk,jn) + pt_lev2(ji,jj,jk-1,jn) )   & 
     234                     ztw(ji,jj,jk) = (   0.5_wp * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) )   & 
    236235                        &              - ztw(ji,jj,jk)   ) * wmask(ji,jj,jk) 
    237236                  END DO 
     
    241240            IF( ln_linssh )   ztw(:,:, 1 ) = 0._wp       ! only ocean surface as interior zwz values have been w-masked 
    242241            ! 
    243             CALL nonosc_z( pt_lev1(:,:,:,jn), ztw, zti, p2dt, e3t(:,:,:,ktlev) )      !  monotonicity algorithm 
     242            CALL nonosc_z( ptb(:,:,:,jn), ztw, zti, p2dt )      !  monotonicity algorithm 
    244243            ! 
    245244         CASE(  4  )                               ! 4th order COMPACT 
    246             CALL interp_4th_cpt( pt_lev2(:,:,:,jn) , ztw )         ! 4th order compact interpolation of T at w-point 
     245            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )         ! 4th order compact interpolation of T at w-point 
    247246            DO jk = 2, jpkm1 
    248247               DO jj = 2, jpjm1 
    249248                  DO ji = fs_2, fs_jpim1 
    250                      ztw(ji,jj,jk) = pw(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
    251                   END DO 
    252                END DO 
    253             END DO 
    254             IF( ln_linssh )   ztw(:,:, 1 ) = pw(:,:,1) * pt_lev2(:,:,1,jn)     !!gm ISF & 4th COMPACT doesn't work 
     249                     ztw(ji,jj,jk) = pwn(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
     250                  END DO 
     251               END DO 
     252            END DO 
     253            IF( ln_linssh )   ztw(:,:, 1 ) = pwn(:,:,1) * ptn(:,:,1,jn)     !!gm ISF & 4th COMPACT doesn't work 
    255254            ! 
    256255         END SELECT 
     
    259258            DO jj = 2, jpjm1  
    260259               DO ji = fs_2, fs_jpim1   ! vector opt.    
    261                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     260                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    262261               END DO 
    263262            END DO 
     
    265264         ! 
    266265         IF( l_trd )  THEN       ! vertical advective trend diagnostics 
    267             DO jk = 1, jpkm1                       ! (compute -w.dk[ptn]= -dk[w.ptn] + pt_lev2.dk[w]) 
     266            DO jk = 1, jpkm1                       ! (compute -w.dk[ptn]= -dk[w.ptn] + ptn.dk[w]) 
    268267               DO jj = 2, jpjm1 
    269268                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    270                      zltv(ji,jj,jk) = pt_rhs(ji,jj,jk,jn) - zltv(ji,jj,jk)                          & 
    271                         &           + pt_lev2(ji,jj,jk,jn) * (  pw(ji,jj,jk) - pw(ji,jj,jk+1)  )   & 
    272                         &                              * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     269                     zltv(ji,jj,jk) = pta(ji,jj,jk,jn) - zltv(ji,jj,jk)                          & 
     270                        &           + ptn(ji,jj,jk,jn) * (  pwn(ji,jj,jk) - pwn(ji,jj,jk+1)  )   & 
     271                        &                              * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    273272                  END DO 
    274273               END DO 
     
    282281 
    283282 
    284    SUBROUTINE nonosc_z( pbef, pcc, paft, p2dt, pe3t ) 
     283   SUBROUTINE nonosc_z( pbef, pcc, paft, p2dt ) 
    285284      !!--------------------------------------------------------------------- 
    286285      !!                    ***  ROUTINE nonosc_z  *** 
     
    297296      REAL(wp), INTENT(in   )                          ::   p2dt   ! tracer time-step 
    298297      REAL(wp),                DIMENSION (jpi,jpj,jpk) ::   pbef   ! before field 
    299       REAL(wp), INTENT(in   ), DIMENSION (jpi,jpj,jpk) ::   pe3t   ! now cell thickness field 
    300298      REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   paft   ! after field 
    301299      REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   pcc    ! monotonic flux in the k direction 
     
    354352               zneg = MAX( 0., pcc(ji  ,jj  ,jk  ) ) - MIN( 0., pcc(ji  ,jj  ,jk+1) ) 
    355353               ! up & down beta terms 
    356                zbt = e1e2t(ji,jj) * pe3t(ji,jj,jk) / p2dt 
     354               zbt = e1e2t(ji,jj) * e3t_n(ji,jj,jk) / p2dt 
    357355               zbetup(ji,jj,jk) = ( zbetup(ji,jj,jk) - paft(ji,jj,jk) ) / (zpos+zrtrn) * zbt 
    358356               zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zbetdo(ji,jj,jk) ) / (zneg+zrtrn) * zbt 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbc.F90

    r10806 r10874  
    5151CONTAINS 
    5252 
    53    SUBROUTINE tra_bbc( kt, ktlev, pts_rhs ) 
     53   SUBROUTINE tra_bbc( kt ) 
    5454      !!---------------------------------------------------------------------- 
    5555      !!                  ***  ROUTINE tra_bbc  *** 
     
    7474      !!---------------------------------------------------------------------- 
    7575      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    76       INTEGER, INTENT(in) ::   ktlev  ! time level index for source terms 
    77       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
    7876      ! 
    7977      INTEGER  ::   ji, jj    ! dummy loop indices 
     
    8583      IF( l_trdtra )   THEN         ! Save the input temperature trend 
    8684         ALLOCATE( ztrdt(jpi,jpj,jpk) ) 
    87          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
     85         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    8886      ENDIF 
    8987      !                             !  Add the geothermal trend on temperature 
    9088      DO jj = 2, jpjm1 
    9189         DO ji = 2, jpim1 
    92             pts_rhs(ji,jj,mbkt(ji,jj),jp_tem) = pts_rhs(ji,jj,mbkt(ji,jj),jp_tem) + qgh_trd0(ji,jj) / e3t(ji,jj,mbkt(ji,jj),ktlev) 
     90            tsa(ji,jj,mbkt(ji,jj),jp_tem) = tsa(ji,jj,mbkt(ji,jj),jp_tem) + qgh_trd0(ji,jj) / e3t_n(ji,jj,mbkt(ji,jj)) 
    9391         END DO 
    9492      END DO 
    9593      ! 
    96       CALL lbc_lnk( 'trabbc', pts_rhs(:,:,:,jp_tem) , 'T', 1. ) 
     94      CALL lbc_lnk( 'trabbc', tsa(:,:,:,jp_tem) , 'T', 1. ) 
    9795      ! 
    9896      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
    99          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 
     97         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    10098         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    10199         DEALLOCATE( ztrdt ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbl.F90

    r10806 r10874  
    8989 
    9090 
    91    SUBROUTINE tra_bbl( kt, ktlev1, ktlev2, kt2lev, pts_rhs ) 
     91   SUBROUTINE tra_bbl( kt ) 
    9292      !!---------------------------------------------------------------------- 
    9393      !!                  ***  ROUTINE bbl  *** 
     
    101101      !!              is added to the general tracer trend 
    102102      !!---------------------------------------------------------------------- 
    103       INTEGER, INTENT( in ) ::   kt              ! ocean time-step 
    104       INTEGER, INTENT( in ) ::   ktlev1, ktlev2  ! time level indices for 3-time-level source terms 
    105       INTEGER, INTENT( in ) ::   kt2lev          ! time level index for 2-time-level source terms 
    106       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
     103      INTEGER, INTENT( in ) ::   kt   ! ocean time-step 
    107104      ! 
    108105      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     
    113110      IF( l_trdtra )   THEN                         !* Save the T-S input trends 
    114111         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    115          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
    116          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 
    117       ENDIF 
    118  
    119       IF( l_bbl )   CALL bbl( kt, nit000, ktlev1, ktlev2, kt2lev, 'TRA' )   !* bbl coef. and transport (only if not already done in trcbbl) 
     112         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     113         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     114      ENDIF 
     115 
     116      IF( l_bbl )   CALL bbl( kt, nit000, 'TRA' )   !* bbl coef. and transport (only if not already done in trcbbl) 
    120117 
    121118      IF( nn_bbl_ldf == 1 ) THEN                    !* Diffusive bbl 
    122119         ! 
    123          CALL tra_bbl_dif( ts(:,:,:,:,ktlev1), e3t(:,:,:,ktlev2), pts_rhs, jpts ) 
     120         CALL tra_bbl_dif( tsb, tsa, jpts ) 
    124121         IF( ln_ctl )  & 
    125122         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_ldf  - Ta: ', mask1=tmask, & 
     
    134131      IF( nn_bbl_adv /= 0 ) THEN                    !* Advective bbl 
    135132         ! 
    136          CALL tra_bbl_adv( ts(:,:,:,:,ktlev1), e3t(:,:,:,ktlev2), pts_rhs, jpts ) 
     133         CALL tra_bbl_adv( tsb, tsa, jpts ) 
    137134         IF(ln_ctl)   & 
    138135         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_adv  - Ta: ', mask1=tmask,   & 
     
    146143 
    147144      IF( l_trdtra )   THEN                      ! send the trends for further diagnostics 
    148          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 
    149          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) - ztrds(:,:,:) 
     145         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     146         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    150147         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
    151148         CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) 
     
    158155 
    159156 
    160    SUBROUTINE tra_bbl_dif( pt, pe3t, pt_rhs, kjpt ) 
     157   SUBROUTINE tra_bbl_dif( ptb, pta, kjpt ) 
    161158      !!---------------------------------------------------------------------- 
    162159      !!                  ***  ROUTINE tra_bbl_dif  *** 
     
    174171      !!      convection is satified) 
    175172      !! 
    176       !! ** Action  :   pt_rhs   increased by the bbl diffusive trend 
     173      !! ** Action  :   pta   increased by the bbl diffusive trend 
    177174      !! 
    178175      !! References : Beckmann, A., and R. Doscher, 1997, J. Phys.Oceanogr., 581-591. 
     
    180177      !!---------------------------------------------------------------------- 
    181178      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    182       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt     ! tracer fields 
    183       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   pe3t   ! thickness fields 
    184       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs ! tracer trend 
     179      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
     180      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta    ! tracer trend 
    185181      ! 
    186182      INTEGER  ::   ji, jj, jn   ! dummy loop indices 
     
    195191            DO ji = 1, jpi 
    196192               ik = mbkt(ji,jj)                             ! bottom T-level index 
    197                zptb(ji,jj) = pt(ji,jj,ik,jn)               ! bottom before T and S 
     193               zptb(ji,jj) = ptb(ji,jj,ik,jn)               ! bottom before T and S 
    198194            END DO 
    199195         END DO 
     
    202198            DO ji = 2, jpim1 
    203199               ik = mbkt(ji,jj)                            ! bottom T-level index 
    204                pt_rhs(ji,jj,ik,jn) = pt_rhs(ji,jj,ik,jn)                                                  & 
     200               pta(ji,jj,ik,jn) = pta(ji,jj,ik,jn)                                                  & 
    205201                  &             + (  ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )     & 
    206202                  &                - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )     & 
    207203                  &                + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )     & 
    208204                  &                - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )  )  & 
    209                   &             * r1_e1e2t(ji,jj) / pe3t(ji,jj,ik) 
     205                  &             * r1_e1e2t(ji,jj) / e3t_n(ji,jj,ik) 
    210206            END DO 
    211207         END DO 
     
    216212 
    217213 
    218    SUBROUTINE tra_bbl_adv( pt, pe3t, pt_rhs, kjpt ) 
     214   SUBROUTINE tra_bbl_adv( ptb, pta, kjpt ) 
    219215      !!---------------------------------------------------------------------- 
    220216      !!                  ***  ROUTINE trc_bbl  *** 
     
    232228      !!---------------------------------------------------------------------- 
    233229      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    234       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt    ! before and now tracer fields 
    235       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   pe3t   ! thickness fields 
    236       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs    ! tracer trend 
     230      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
     231      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta    ! tracer trend 
    237232      ! 
    238233      INTEGER  ::   ji, jj, jk, jn           ! dummy loop indices 
     
    255250                  ! 
    256251                  !                                               ! up  -slope T-point (shelf bottom point) 
    257                   zbtr = r1_e1e2t(iis,jj) / pe3t(iis,jj,ikus) 
    258                   ztra = zu_bbl * ( pt(iid,jj,ikus,jn) - pt(iis,jj,ikus,jn) ) * zbtr 
    259                   pt_rhs(iis,jj,ikus,jn) = pt_rhs(iis,jj,ikus,jn) + ztra 
     252                  zbtr = r1_e1e2t(iis,jj) / e3t_n(iis,jj,ikus) 
     253                  ztra = zu_bbl * ( ptb(iid,jj,ikus,jn) - ptb(iis,jj,ikus,jn) ) * zbtr 
     254                  pta(iis,jj,ikus,jn) = pta(iis,jj,ikus,jn) + ztra 
    260255                  ! 
    261256                  DO jk = ikus, ikud-1                            ! down-slope upper to down T-point (deep column) 
    262                      zbtr = r1_e1e2t(iid,jj) / pe3t(iid,jj,jk) 
    263                      ztra = zu_bbl * ( pt(iid,jj,jk+1,jn) - pt(iid,jj,jk,jn) ) * zbtr 
    264                      pt_rhs(iid,jj,jk,jn) = pt_rhs(iid,jj,jk,jn) + ztra 
     257                     zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,jk) 
     258                     ztra = zu_bbl * ( ptb(iid,jj,jk+1,jn) - ptb(iid,jj,jk,jn) ) * zbtr 
     259                     pta(iid,jj,jk,jn) = pta(iid,jj,jk,jn) + ztra 
    265260                  END DO 
    266261                  ! 
    267                   zbtr = r1_e1e2t(iid,jj) / pe3t(iid,jj,ikud) 
    268                   ztra = zu_bbl * ( pt(iis,jj,ikus,jn) - pt(iid,jj,ikud,jn) ) * zbtr 
    269                   pt_rhs(iid,jj,ikud,jn) = pt_rhs(iid,jj,ikud,jn) + ztra 
     262                  zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,ikud) 
     263                  ztra = zu_bbl * ( ptb(iis,jj,ikus,jn) - ptb(iid,jj,ikud,jn) ) * zbtr 
     264                  pta(iid,jj,ikud,jn) = pta(iid,jj,ikud,jn) + ztra 
    270265               ENDIF 
    271266               ! 
     
    277272                  ! 
    278273                  ! up  -slope T-point (shelf bottom point) 
    279                   zbtr = r1_e1e2t(ji,ijs) / pe3t(ji,ijs,ikvs) 
    280                   ztra = zv_bbl * ( pt(ji,ijd,ikvs,jn) - pt(ji,ijs,ikvs,jn) ) * zbtr 
    281                   pt_rhs(ji,ijs,ikvs,jn) = pt_rhs(ji,ijs,ikvs,jn) + ztra 
     274                  zbtr = r1_e1e2t(ji,ijs) / e3t_n(ji,ijs,ikvs) 
     275                  ztra = zv_bbl * ( ptb(ji,ijd,ikvs,jn) - ptb(ji,ijs,ikvs,jn) ) * zbtr 
     276                  pta(ji,ijs,ikvs,jn) = pta(ji,ijs,ikvs,jn) + ztra 
    282277                  ! 
    283278                  DO jk = ikvs, ikvd-1                            ! down-slope upper to down T-point (deep column) 
    284                      zbtr = r1_e1e2t(ji,ijd) / pe3t(ji,ijd,jk) 
    285                      ztra = zv_bbl * ( pt(ji,ijd,jk+1,jn) - pt(ji,ijd,jk,jn) ) * zbtr 
    286                      pt_rhs(ji,ijd,jk,jn) = pt_rhs(ji,ijd,jk,jn)  + ztra 
     279                     zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,jk) 
     280                     ztra = zv_bbl * ( ptb(ji,ijd,jk+1,jn) - ptb(ji,ijd,jk,jn) ) * zbtr 
     281                     pta(ji,ijd,jk,jn) = pta(ji,ijd,jk,jn)  + ztra 
    287282                  END DO 
    288283                  !                                               ! down-slope T-point (deep bottom point) 
    289                   zbtr = r1_e1e2t(ji,ijd) / pe3t(ji,ijd,ikvd) 
    290                   ztra = zv_bbl * ( pt(ji,ijs,ikvs,jn) - pt(ji,ijd,ikvd,jn) ) * zbtr 
    291                   pt_rhs(ji,ijd,ikvd,jn) = pt_rhs(ji,ijd,ikvd,jn) + ztra 
     284                  zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,ikvd) 
     285                  ztra = zv_bbl * ( ptb(ji,ijs,ikvs,jn) - ptb(ji,ijd,ikvd,jn) ) * zbtr 
     286                  pta(ji,ijd,ikvd,jn) = pta(ji,ijd,ikvd,jn) + ztra 
    292287               ENDIF 
    293288            END DO 
     
    300295 
    301296 
    302    SUBROUTINE bbl( kt, kit000, ktlev1, ktlev2, kt2lev, cdtype ) 
     297   SUBROUTINE bbl( kt, kit000, cdtype ) 
    303298      !!---------------------------------------------------------------------- 
    304299      !!                  ***  ROUTINE bbl  *** 
     
    328323      INTEGER         , INTENT(in   ) ::   kt       ! ocean time-step index 
    329324      INTEGER         , INTENT(in   ) ::   kit000   ! first time step index 
    330       INTEGER         , INTENT(in   ) ::   ktlev1, ktlev2  ! time level indices for 3-time-levelsource terms 
    331       INTEGER         , INTENT(in   ) ::   kt2lev          ! time level index for 2-time-level source terms 
    332325      CHARACTER(len=3), INTENT(in   ) ::   cdtype   ! =TRA or TRC (tracer indicator) 
    333326      ! 
     
    351344         DO ji = 1, jpi 
    352345            ik = mbkt(ji,jj)                             ! bottom T-level index 
    353             zts (ji,jj,jp_tem) = ts(ji,jj,ik,jp_tem,ktlev1)    ! bottom before T and S 
    354             zts (ji,jj,jp_sal) = ts(ji,jj,ik,jp_sal,ktlev1) 
     346            zts (ji,jj,jp_tem) = tsb(ji,jj,ik,jp_tem)    ! bottom before T and S 
     347            zts (ji,jj,jp_sal) = tsb(ji,jj,ik,jp_sal) 
    355348            ! 
    356             zdep(ji,jj) = gdept(ji,jj,ik,kt2lev)              ! bottom T-level reference depth 
    357             zub (ji,jj) = uu(ji,jj,mbku(ji,jj),ktlev2)          ! bottom velocity 
    358             zvb (ji,jj) = vv(ji,jj,mbkv(ji,jj),ktlev2) 
     349            zdep(ji,jj) = gdept_n(ji,jj,ik)              ! bottom T-level reference depth 
     350            zub (ji,jj) = un(ji,jj,mbku(ji,jj))          ! bottom velocity 
     351            zvb (ji,jj) = vn(ji,jj,mbkv(ji,jj)) 
    359352         END DO 
    360353      END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tradmp.F90

    r10806 r10874  
    7272 
    7373 
    74    SUBROUTINE tra_dmp( kt, ktlev, kt2lev, pts_rhs ) 
     74   SUBROUTINE tra_dmp( kt ) 
    7575      !!---------------------------------------------------------------------- 
    7676      !!                   ***  ROUTINE tra_dmp  *** 
     
    9090      !! ** Action  : - tsa: tracer trends updated with the damping trend 
    9191      !!---------------------------------------------------------------------- 
    92       INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
    93       INTEGER, INTENT(in) ::   ktlev  ! time level index for 3-time-level source terms 
    94       INTEGER, INTENT(in) ::   kt2lev ! time level index for 2-time-level source terms 
    95       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
     92      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    9693      ! 
    9794      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
     
    104101      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    105102         ALLOCATE( ztrdts(jpi,jpj,jpk,jpts) )  
    106          ztrdts(:,:,:,:) = pts_rhs(:,:,:,:)  
     103         ztrdts(:,:,:,:) = tsa(:,:,:,:)  
    107104      ENDIF 
    108105      !                           !==  input T-S data at kt  ==! 
     
    116113               DO jj = 2, jpjm1 
    117114                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    118                      pts_rhs(ji,jj,jk,jn) = pts_rhs(ji,jj,jk,jn) + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jn) - ts(ji,jj,jk,jn,ktlev) ) 
     115                     tsa(ji,jj,jk,jn) = tsa(ji,jj,jk,jn) + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jn) - tsb(ji,jj,jk,jn) ) 
    119116                  END DO 
    120117               END DO 
     
    127124               DO ji = fs_2, fs_jpim1   ! vector opt. 
    128125                  IF( avt(ji,jj,jk) <= avt_c ) THEN 
    129                      pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem)   & 
    130                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - ts(ji,jj,jk,jp_tem,ktlev) ) 
    131                      pts_rhs(ji,jj,jk,jp_sal) = pts_rhs(ji,jj,jk,jp_sal)   & 
    132                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - ts(ji,jj,jk,jp_sal,ktlev) ) 
     126                     tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
     127                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - tsb(ji,jj,jk,jp_tem) ) 
     128                     tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)   & 
     129                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - tsb(ji,jj,jk,jp_sal) ) 
    133130                  ENDIF 
    134131               END DO 
     
    140137            DO jj = 2, jpjm1 
    141138               DO ji = fs_2, fs_jpim1   ! vector opt. 
    142                   IF( gdept(ji,jj,jk,kt2lev) >= hmlp (ji,jj) ) THEN 
    143                      pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem)   & 
    144                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - ts(ji,jj,jk,jp_tem,ktlev) ) 
    145                      pts_rhs(ji,jj,jk,jp_sal) = pts_rhs(ji,jj,jk,jp_sal)   & 
    146                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - ts(ji,jj,jk,jp_sal,ktlev) ) 
     139                  IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
     140                     tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
     141                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - tsb(ji,jj,jk,jp_tem) ) 
     142                     tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)   & 
     143                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - tsb(ji,jj,jk,jp_sal) ) 
    147144                  ENDIF 
    148145               END DO 
     
    153150      ! 
    154151      IF( l_trdtra )   THEN       ! trend diagnostic 
    155          ztrdts(:,:,:,:) = pts_rhs(:,:,:,:) - ztrdts(:,:,:,:) 
     152         ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 
    156153         CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 
    157154         CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf.F90

    r10806 r10874  
    4747CONTAINS 
    4848 
    49    SUBROUTINE tra_ldf( kt, ktlev1, ktlev2, kt2lev, pts_rhs ) 
     49   SUBROUTINE tra_ldf( kt ) 
    5050      !!---------------------------------------------------------------------- 
    5151      !!                  ***  ROUTINE tra_ldf  *** 
     
    5353      !! ** Purpose :   compute the lateral ocean tracer physics. 
    5454      !!---------------------------------------------------------------------- 
    55       INTEGER, INTENT( in ) ::   kt              ! ocean time-step index 
    56       INTEGER, INTENT( in ) ::   ktlev1, ktlev2  ! time level indices for 3-time-level source terms 
    57       INTEGER, INTENT( in ) ::   kt2lev          ! time level index for 2-time-level source terms 
    58       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
     55      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    5956      !! 
    6057      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     
    6562      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    6663         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    67          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem)  
    68          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 
     64         ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
     65         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    6966      ENDIF 
    7067      ! 
    7168      SELECT CASE ( nldf_tra )                 !* compute lateral mixing trend and add it to the general trend 
    7269      CASE ( np_lap   )                                  ! laplacian: iso-level operator 
    73          CALL tra_ldf_lap  ( kt, nit000, ktlev2, kt2lev, 'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,ktlev1),      pts_rhs, jpts,  1   ) 
     70         CALL tra_ldf_lap  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb,      tsa, jpts,  1   ) 
    7471      CASE ( np_lap_i )                                  ! laplacian: standard iso-neutral operator (Madec) 
    75          CALL tra_ldf_iso  ( kt, nit000, ktlev2, kt2lev, 'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,ktlev1), ts(:,:,:,:,ktlev1), pts_rhs, jpts,  1   ) 
     72         CALL tra_ldf_iso  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb, tsb, tsa, jpts,  1   ) 
    7673      CASE ( np_lap_it )                                 ! laplacian: triad iso-neutral operator (griffies) 
    77          CALL tra_ldf_triad( kt, nit000, ktlev2, kt2lev, 'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,ktlev1), ts(:,:,:,:,ktlev1), pts_rhs, jpts,  1   ) 
     74         CALL tra_ldf_triad( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb, tsb, tsa, jpts,  1   ) 
    7875      CASE ( np_blp , np_blp_i , np_blp_it )             ! bilaplacian: iso-level & iso-neutral operators 
    79          CALL tra_ldf_blp  ( kt, nit000, ktlev2, kt2lev, 'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,ktlev1)      , pts_rhs, jpts, nldf_tra ) 
     76         CALL tra_ldf_blp  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb      , tsa, jpts, nldf_tra ) 
    8077      END SELECT 
    8178      ! 
    8279      IF( l_trdtra )   THEN                    !* save the horizontal diffusive trends for further diagnostics 
    83          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 
    84          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) - ztrds(:,:,:) 
     80         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     81         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    8582         CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrdt ) 
    8683         CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrds ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_iso.F90

    r10806 r10874  
    4848CONTAINS 
    4949 
    50   SUBROUTINE tra_ldf_iso( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu , pgv ,   & 
     50  SUBROUTINE tra_ldf_iso( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    5151      &                                                   pgui, pgvi,   & 
    52       &                                       pt , pt_lev0, pt_rhs , kjpt, kpass ) 
     52      &                                       ptb , ptbb, pta , kjpt, kpass ) 
    5353      !!---------------------------------------------------------------------- 
    5454      !!                  ***  ROUTINE tra_ldf_iso  *** 
     
    8787      !!         difft = 1/(e1e2t*e3t) dk[ zftw ] 
    8888      !!      Add this trend to the general trend (ta,sa): 
    89       !!         pt_rhs = pt_rhs + difft 
    90       !! 
    91       !! ** Action :   Update pt_rhs arrays with the before rotated diffusion 
     89      !!         pta = pta + difft 
     90      !! 
     91      !! ** Action :   Update pta arrays with the before rotated diffusion 
    9292      !!---------------------------------------------------------------------- 
    9393      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    9494      INTEGER                              , INTENT(in   ) ::   kit000     ! first time step index 
    95       INTEGER                              , INTENT(in   ) ::   ktlev      ! time level index for e3t 
    96       INTEGER                              , INTENT(in   ) ::   kt2lev     ! time level index for 2-time-level thicknesses 
    9795      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    9896      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
     
    10199      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels 
    102100      REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(in   ) ::   pgui, pgvi ! tracer gradient at top   levels 
    103       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
    104       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev0       ! tracer (only used in kpass=2) 
    105       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend 
     101      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
     102      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptbb       ! tracer (only used in kpass=2) 
     103      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend 
    106104      ! 
    107105      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
     
    184182                     DO ji = 1, fs_jpim1 
    185183                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    186                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) )  ) 
     184                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
    187185                     END DO 
    188186                  END DO 
     
    192190                  DO jj = 1, jpjm1 
    193191                     DO ji = 1, fs_jpim1 
    194                         ze3w_2 = e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) 
     192                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    195193                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    196194                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    221219            DO jj = 1, jpjm1 
    222220               DO ji = 1, fs_jpim1   ! vector opt. 
    223                   zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    224                   zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     221                  zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     222                  zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    225223               END DO 
    226224            END DO 
     
    250248            ! 
    251249            !                             !== Vertical tracer gradient 
    252             zdk1t(:,:) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * wmask(:,:,jk+1)     ! level jk+1 
     250            zdk1t(:,:) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * wmask(:,:,jk+1)     ! level jk+1 
    253251            ! 
    254252            IF( jk == 1 ) THEN   ;   zdkt(:,:) = zdk1t(:,:)                          ! surface: zdkt(jk=1)=zdkt(jk=2) 
    255             ELSE                 ;   zdkt(:,:) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * wmask(:,:,jk) 
     253            ELSE                 ;   zdkt(:,:) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * wmask(:,:,jk) 
    256254            ENDIF 
    257255            DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    258256               DO ji = 1, fs_jpim1   ! vector opt. 
    259                   zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,ktlev) 
    260                   zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     257                  zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) 
     258                  zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) 
    261259                  ! 
    262260                  zmsku = 1. / MAX(  wmask(ji+1,jj,jk  ) + wmask(ji,jj,jk+1)   & 
     
    278276            END DO 
    279277            ! 
    280             DO jj = 2 , jpjm1          !== horizontal divergence and add to pt_rhs 
     278            DO jj = 2 , jpjm1          !== horizontal divergence and add to pta 
    281279               DO ji = fs_2, fs_jpim1   ! vector opt. 
    282                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk)      & 
     280                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk)      & 
    283281                     &                                           + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )   & 
    284                      &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     282                     &                                        * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    285283               END DO 
    286284            END DO 
     
    327325               DO jj = 1, jpjm1 
    328326                  DO ji = fs_2, fs_jpim1 
    329                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * wmask(ji,jj,jk)   & 
     327                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)   & 
    330328                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    331                         &                            * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
     329                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    332330                  END DO 
    333331               END DO 
     
    342340                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk)    & 
    343341                           &           + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
    344                            &           * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) / e3w(ji,jj,jk,kt2lev) * wmask(ji,jj,jk) 
     342                           &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
    345343                     END DO 
    346344                  END DO 
    347345               END DO  
    348             CASE(  2  )                         ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt_lev0 gradients, resp. 
     346            CASE(  2  )                         ! 2nd pass : eddy flux = ah_wslp2 and akz applied on ptb  and ptbb gradients, resp. 
    349347               DO jk = 2, jpkm1  
    350348                  DO jj = 1, jpjm1 
    351349                     DO ji = fs_2, fs_jpim1 
    352                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * wmask(ji,jj,jk)                      & 
    353                            &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
    354                            &                               + akz     (ji,jj,jk) * ( pt_lev0(ji,jj,jk-1,jn) - pt_lev0(ji,jj,jk,jn) )   ) 
     350                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)                      & 
     351                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
     352                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
    355353                     END DO 
    356354                  END DO 
     
    359357         ENDIF 
    360358         !          
    361          DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pt_rhs  ==! 
     359         DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pta  ==! 
    362360            DO jj = 2, jpjm1 
    363361               DO ji = fs_2, fs_jpim1   ! vector opt. 
    364                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1)  )   & 
    365                      &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,ktlev) 
     362                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1)  )   & 
     363                     &                                        * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    366364               END DO 
    367365            END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_lap_blp.F90

    r10806 r10874  
    4545CONTAINS 
    4646 
    47    SUBROUTINE tra_ldf_lap( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu , pgv ,   & 
     47   SUBROUTINE tra_ldf_lap( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    4848      &                                                    pgui, pgvi,   & 
    49       &                                        pt , pt_rhs , kjpt, kpass )  
     49      &                                        ptb , pta , kjpt, kpass )  
    5050      !!---------------------------------------------------------------------- 
    5151      !!                  ***  ROUTINE tra_ldf_lap  *** 
     
    5959      !!          difft = 1/(e1e2t*e3t) {  di-1[ pahu e2u*e3u/e1u di(tb) ] 
    6060      !!                                 + dj-1[ pahv e1v*e3v/e2v dj(tb) ] } 
    61       !!      Add this trend to the general tracer trend pt_rhs : 
    62       !!          pt_rhs = pt_rhs + difft 
    63       !! 
    64       !! ** Action  : - Update pt_rhs arrays with the before iso-level  
     61      !!      Add this trend to the general tracer trend pta : 
     62      !!          pta = pta + difft 
     63      !! 
     64      !! ** Action  : - Update pta arrays with the before iso-level  
    6565      !!                harmonic mixing trend. 
    6666      !!---------------------------------------------------------------------- 
    6767      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    6868      INTEGER                              , INTENT(in   ) ::   kit000     ! first time step index 
    69       INTEGER                              , INTENT(in   ) ::   ktlev      ! time level index for e3t 
    70       INTEGER                              , INTENT(in   ) ::   kt2lev     ! time level index for 2-time-level thicknesses 
    7169      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    7270      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
     
    7573      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels 
    7674      REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(in   ) ::   pgui, pgvi ! tracer gradient at top   levels 
    77       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt        ! before and now tracer fields 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend  
     75      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! before and now tracer fields 
     76      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend  
    7977      ! 
    8078      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    102100         DO jj = 1, jpjm1 
    103101            DO ji = 1, fs_jpim1   ! vector opt. 
    104                zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,ktlev)   !!gm   * umask(ji,jj,jk) pah masked! 
    105                zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,ktlev)   !!gm   * vmask(ji,jj,jk) 
     102               zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk)   !!gm   * umask(ji,jj,jk) pah masked! 
     103               zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk)   !!gm   * vmask(ji,jj,jk) 
    106104            END DO 
    107105         END DO 
     
    115113            DO jj = 1, jpjm1 
    116114               DO ji = 1, fs_jpim1 
    117                   ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) 
    118                   ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 
     115                  ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) 
     116                  ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 
    119117               END DO 
    120118            END DO 
     
    140138            DO jj = 2, jpjm1 
    141139               DO ji = fs_2, fs_jpim1 
    142                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)     & 
     140                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)     & 
    143141                     &                                   + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )   & 
    144                      &                                / ( e1e2t(ji,jj) * e3t(ji,jj,jk,ktlev) ) 
     142                     &                                / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
    145143               END DO 
    146144            END DO 
     
    161159    
    162160 
    163    SUBROUTINE tra_ldf_blp( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu , pgv ,   & 
     161   SUBROUTINE tra_ldf_blp( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    164162      &                                                    pgui, pgvi,   & 
    165       &                                                    pt , pt_rhs , kjpt, kldf ) 
     163      &                                                    ptb , pta , kjpt, kldf ) 
    166164      !!---------------------------------------------------------------------- 
    167165      !!                 ***  ROUTINE tra_ldf_blp  *** 
     
    174172      !!      It is computed by two successive calls to laplacian routine 
    175173      !! 
    176       !! ** Action :   pt_rhs   updated with the before rotated bilaplacian diffusion 
     174      !! ** Action :   pta   updated with the before rotated bilaplacian diffusion 
    177175      !!---------------------------------------------------------------------- 
    178176      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    179177      INTEGER                              , INTENT(in   ) ::   kit000     ! first time step index 
    180       INTEGER                              , INTENT(in   ) ::   ktlev      ! time level index for e3t 
    181       INTEGER                              , INTENT(in   ) ::   kt2lev     ! time level index for 2-time-level thicknesses 
    182178      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    183179      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
     
    186182      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels 
    187183      REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(in   ) ::   pgui, pgvi ! tracer gradient at top levels 
    188       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt        ! before and now tracer fields 
    189       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend 
     184      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! before and now tracer fields 
     185      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend 
    190186      ! 
    191187      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
     
    207203      zlap(:,:,:,:) = 0._wp 
    208204      ! 
    209       SELECT CASE ( kldf )       !==  1st laplacian applied to pt (output in zlap)  ==! 
     205      SELECT CASE ( kldf )       !==  1st laplacian applied to ptb (output in zlap)  ==! 
    210206      ! 
    211207      CASE ( np_blp    )               ! iso-level bilaplacian 
    212          CALL tra_ldf_lap  ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt,      zlap, kjpt, 1 ) 
     208         CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb,      zlap, kjpt, 1 ) 
    213209      CASE ( np_blp_i  )               ! rotated   bilaplacian : standard operator (Madec) 
    214          CALL tra_ldf_iso  ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) 
     210         CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1 ) 
    215211      CASE ( np_blp_it )               ! rotated  bilaplacian : triad operator (griffies) 
    216          CALL tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) 
     212         CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1 ) 
    217213      END SELECT 
    218214      ! 
     
    223219      ENDIF 
    224220      ! 
    225       SELECT CASE ( kldf )       !==  2nd laplacian applied to zlap (output in pt_rhs)  ==! 
     221      SELECT CASE ( kldf )       !==  2nd laplacian applied to zlap (output in pta)  ==! 
    226222      ! 
    227223      CASE ( np_blp    )               ! iso-level bilaplacian 
    228          CALL tra_ldf_lap  ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt_rhs,      kjpt, 2 ) 
     224         CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pta,      kjpt, 2 ) 
    229225      CASE ( np_blp_i  )               ! rotated   bilaplacian : standard operator (Madec) 
    230          CALL tra_ldf_iso  ( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt, pt_rhs, kjpt, 2 ) 
     226         CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2 ) 
    231227      CASE ( np_blp_it )               ! rotated  bilaplacian : triad operator (griffies) 
    232          CALL tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt, pt_rhs, kjpt, 2 ) 
     228         CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2 ) 
    233229      END SELECT 
    234230      ! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_triad.F90

    r10806 r10874  
    4848CONTAINS 
    4949 
    50   SUBROUTINE tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu , pgv ,   & 
     50  SUBROUTINE tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    5151      &                                                     pgui, pgvi,   & 
    52       &                                         pt , pt_lev0, pt_rhs , kjpt, kpass ) 
     52      &                                         ptb , ptbb, pta , kjpt, kpass ) 
    5353      !!---------------------------------------------------------------------- 
    5454      !!                  ***  ROUTINE tra_ldf_triad  *** 
     
    6666      !!      see documentation for the desciption 
    6767      !! 
    68       !! ** Action :   pt_rhs   updated with the before rotated diffusion 
     68      !! ** Action :   pta   updated with the before rotated diffusion 
    6969      !!               ah_wslp2 .... 
    7070      !!               akz   stabilizing vertical diffusivity coefficient (used in trazdf_imp) 
     
    7272      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    7373      INTEGER                              , INTENT(in   ) ::   kit000     ! first time step index 
    74       INTEGER                              , INTENT(in   ) ::   ktlev      ! time level index for e3t 
    75       INTEGER                              , INTENT(in   ) ::   kt2lev     ! time level index for 2-time-level thicknesses 
    7674      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    7775      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
     
    8078      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu , pgv  ! tracer gradient at pstep levels 
    8179      REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(in   ) ::   pgui, pgvi ! tracer gradient at top   levels 
    82       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
    83       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev0       ! tracer (only used in kpass=2) 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend 
     80      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
     81      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptbb       ! tracer (only used in kpass=2) 
     82      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend 
    8583      ! 
    8684      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
     
    144142                  DO jj = 1, jpjm1 
    145143                     DO ji = 1, fs_jpim1 
    146                         ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
    147                         zbu   = e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     144                        ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
     145                        zbu   = e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    148146                        zah   = 0.25_wp * pahu(ji,jj,jk) 
    149147                        zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    150148                        ! Subtract s-coordinate slope at t-points to give slope rel to s-surfaces (do this by *adding* gradient of depth) 
    151                         zslope2 = zslope_skew + ( gdept(ji+1,jj,jk,kt2lev) - gdept(ji,jj,jk,kt2lev) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
     149                        zslope2 = zslope_skew + ( gdept_n(ji+1,jj,jk) - gdept_n(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
    152150                        zslope2 = zslope2 *zslope2 
    153151                        ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp) + zah * zbu * ze3wr * r1_e1e2t(ji+ip,jj) * zslope2 
     
    168166                  DO jj = 1, jpjm1 
    169167                     DO ji = 1, fs_jpim1 
    170                         ze3wr = 1.0_wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
    171                         zbv   = e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     168                        ze3wr = 1.0_wp / e3w_n(ji,jj+jp,jk+kp) 
     169                        zbv   = e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    172170                        zah   = 0.25_wp * pahv(ji,jj,jk) 
    173171                        zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    174172                        ! Subtract s-coordinate slope at t-points to give slope rel to s surfaces 
    175173                        !    (do this by *adding* gradient of depth) 
    176                         zslope2 = zslope_skew + ( gdept(ji,jj+1,jk,kt2lev) - gdept(ji,jj,jk,kt2lev) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
     174                        zslope2 = zslope_skew + ( gdept_n(ji,jj+1,jk) - gdept_n(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
    177175                        zslope2 = zslope2 * zslope2 
    178176                        ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp) + zah * zbv * ze3wr * r1_e1e2t(ji,jj+jp) * zslope2 
     
    195193                     DO ji = 1, fs_jpim1 
    196194                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    197                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) )  ) 
     195                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
    198196                     END DO 
    199197                  END DO 
     
    203201                  DO jj = 1, jpjm1 
    204202                     DO ji = 1, fs_jpim1 
    205                         ze3w_2 = e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) 
     203                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    206204                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    207205                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    231229            DO jj = 1, jpjm1 
    232230               DO ji = 1, fs_jpim1   ! vector opt. 
    233                   zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    234                   zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     231                  zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     232                  zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    235233               END DO 
    236234            END DO 
     
    259257         DO jk = 1, jpkm1 
    260258            !                    !==  Vertical tracer gradient at level jk and jk+1 
    261             zdkt3d(:,:,1) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
     259            zdkt3d(:,:,1) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
    262260            ! 
    263261            !                    ! surface boundary condition: zdkt3d(jk=0)=zdkt3d(jk=1) 
    264262            IF( jk == 1 ) THEN   ;   zdkt3d(:,:,0) = zdkt3d(:,:,1) 
    265             ELSE                 ;   zdkt3d(:,:,0) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * tmask(:,:,jk) 
     263            ELSE                 ;   zdkt3d(:,:,0) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk) 
    266264            ENDIF 
    267265            ! 
     
    275273                           ze1ur = r1_e1u(ji,jj) 
    276274                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    277                            ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
     275                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    278276                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    279277                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    280278                           zslope_iso  = triadi  (ji+ip,jj,jk,1-ip,kp) 
    281279                           ! 
    282                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     280                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    283281                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????   ahu is masked.... 
    284282                           zah = pahu(ji,jj,jk) 
     
    298296                           ze2vr = r1_e2v(ji,jj) 
    299297                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    300                            ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
     298                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    301299                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    302300                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    303301                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    304                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     302                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    305303                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????  ahv is masked... 
    306304                           zah = pahv(ji,jj,jk) 
     
    322320                           ze1ur = r1_e1u(ji,jj) 
    323321                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    324                            ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
     322                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    325323                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    326324                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    327325                           zslope_iso  = triadi(ji+ip,jj,jk,1-ip,kp) 
    328326                           ! 
    329                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     327                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    330328                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    331329                           zah = pahu(ji,jj,jk) * umask(ji,jj,jk+kp)         ! pahu(ji+ip,jj,jk)   ===>>  ???? 
     
    345343                           ze2vr = r1_e2v(ji,jj) 
    346344                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    347                            ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
     345                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    348346                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    349347                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    350348                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    351                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     349                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    352350                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    353351                           zah = pahv(ji,jj,jk) * vmask(ji,jj,jk+kp)         ! pahv(ji,jj+jp,jk)  ???? 
     
    364362            DO jj = 2 , jpjm1 
    365363               DO ji = fs_2, fs_jpim1  ! vector opt. 
    366                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
     364                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
    367365                     &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )   & 
    368                      &                                        / (  e1e2t(ji,jj) * e3t(ji,jj,jk,ktlev)  ) 
     366                     &                                        / (  e1e2t(ji,jj) * e3t_n(ji,jj,jk)  ) 
    369367               END DO 
    370368            END DO 
     
    377375               DO jj = 1, jpjm1 
    378376                  DO ji = fs_2, fs_jpim1 
    379                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)   & 
     377                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)   & 
    380378                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    381                         &                            * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
     379                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    382380                  END DO 
    383381               END DO 
     
    389387                  DO jj = 1, jpjm1 
    390388                     DO ji = fs_2, fs_jpim1 
    391                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)             & 
    392                            &                            * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
     389                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)             & 
     390                           &                            * ah_wslp2(ji,jj,jk) * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    393391                     END DO 
    394392                  END DO 
    395393               END DO  
    396             CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt_lev0 gradients, resp. 
     394            CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on ptb  and ptbb gradients, resp. 
    397395               DO jk = 2, jpkm1  
    398396                  DO jj = 1, jpjm1 
    399397                     DO ji = fs_2, fs_jpim1 
    400                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)                      & 
    401                            &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
    402                            &                               + akz     (ji,jj,jk) * ( pt_lev0(ji,jj,jk-1,jn) - pt_lev0(ji,jj,jk,jn) )   ) 
     398                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     399                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
     400                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
    403401                     END DO 
    404402                  END DO 
     
    407405         ENDIF 
    408406         ! 
    409          DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pt_rhs  ==! 
     407         DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pta  ==! 
    410408            DO jj = 2, jpjm1 
    411409               DO ji = fs_2, fs_jpim1  ! vector opt. 
    412                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
    413                      &                                        / ( e1e2t(ji,jj) * e3t(ji,jj,jk,ktlev) ) 
     410                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
     411                     &                                        / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
    414412               END DO 
    415413            END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traqsr.F90

    r10806 r10874  
    7575CONTAINS 
    7676 
    77    SUBROUTINE tra_qsr( kt, ktlev, kt2lev, pts_rhs ) 
     77   SUBROUTINE tra_qsr( kt ) 
    7878      !!---------------------------------------------------------------------- 
    7979      !!                  ***  ROUTINE tra_qsr  *** 
     
    102102      !!---------------------------------------------------------------------- 
    103103      INTEGER, INTENT(in) ::   kt     ! ocean time-step 
    104       INTEGER, INTENT(in) ::   ktlev  ! time level index for 3-time-level source terms 
    105       INTEGER, INTENT(in) ::   kt2lev ! time level index for 2-time-level source terms 
    106       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
    107104      ! 
    108105      INTEGER  ::   ji, jj, jk               ! dummy loop indices 
     
    129126      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend 
    130127         ALLOCATE( ztrdt(jpi,jpj,jpk) )  
    131          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
     128         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    132129      ENDIF 
    133130      ! 
     
    175172                     zze     = 568.2 * zCtot**(-0.746) 
    176173                     IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) 
    177                      zpsi    = gdepw(ji,jj,jk,kt2lev) / zze 
     174                     zpsi    = gdepw_n(ji,jj,jk) / zze 
    178175                     ! 
    179176                     zlogc   = LOG( zchl ) 
     
    221218            DO jj = 2, jpjm1 
    222219               DO ji = fs_2, fs_jpim1 
    223                   zc0 = ze0(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,ktlev) * xsi0r       ) 
    224                   zc1 = ze1(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,ktlev) * zekb(ji,jj) ) 
    225                   zc2 = ze2(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,ktlev) * zekg(ji,jj) ) 
    226                   zc3 = ze3(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,ktlev) * zekr(ji,jj) ) 
     220                  zc0 = ze0(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * xsi0r       ) 
     221                  zc1 = ze1(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekb(ji,jj) ) 
     222                  zc2 = ze2(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekg(ji,jj) ) 
     223                  zc3 = ze3(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekr(ji,jj) ) 
    227224                  ze0(ji,jj,jk) = zc0 
    228225                  ze1(ji,jj,jk) = zc1 
     
    251248            DO jj = 2, jpjm1 
    252249               DO ji = fs_2, fs_jpim1 
    253                   zc0 = zz0 * EXP( -gdepw(ji,jj,jk  ,kt2lev)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk  ,kt2lev)*xsi1r ) 
    254                   zc1 = zz0 * EXP( -gdepw(ji,jj,jk+1,kt2lev)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk+1,kt2lev)*xsi1r ) 
     250                  zc0 = zz0 * EXP( -gdepw_n(ji,jj,jk  )*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk  )*xsi1r ) 
     251                  zc1 = zz0 * EXP( -gdepw_n(ji,jj,jk+1)*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk+1)*xsi1r ) 
    255252                  qsr_hc(ji,jj,jk) = qsr(ji,jj) * ( zc0 * wmask(ji,jj,jk) - zc1 * wmask(ji,jj,jk+1) )  
    256253               END DO 
     
    264261         DO jj = 2, jpjm1        !-----------------------------! 
    265262            DO ji = fs_2, fs_jpim1   ! vector opt. 
    266                pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem)   & 
    267                   &                 + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t(ji,jj,jk,ktlev) 
     263               tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
     264                  &                 + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t_n(ji,jj,jk) 
    268265            END DO 
    269266         END DO 
     
    298295      ! 
    299296      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    300          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 
     297         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    301298         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    302299         DEALLOCATE( ztrdt )  
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trasbc.F90

    r10806 r10874  
    5151CONTAINS 
    5252 
    53    SUBROUTINE tra_sbc ( kt, ktlev, pts_rhs ) 
     53   SUBROUTINE tra_sbc ( kt ) 
    5454      !!---------------------------------------------------------------------- 
    5555      !!                  ***  ROUTINE tra_sbc  *** 
     
    6363      !!      (2) Fwe , tracer carried with the water that is exchanged with air+ice.  
    6464      !!               The input forcing fields (emp, rnf, sfx, isf) contain Fext+Fwe, 
    65       !!             they are simply added to the tracer trend (pts_rhs). 
     65      !!             they are simply added to the tracer trend (tsa). 
    6666      !!               In linear free surface case (ln_linssh=T), the volume of the 
    6767      !!             ocean does not change with the water exchanges at the (air+ice)-sea 
     
    6969      !!             concentration/dilution effect associated with water exchanges. 
    7070      !! 
    71       !! ** Action  : - Update pts_rhs with the surface boundary condition trend  
     71      !! ** Action  : - Update tsa with the surface boundary condition trend  
    7272      !!              - send trends to trdtra module for further diagnostics(l_trdtra=T) 
    7373      !!---------------------------------------------------------------------- 
    74       INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
    75       INTEGER, INTENT(in) ::   ktlev  ! time level index for source terms 
    76       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
     74      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    7775      ! 
    7876      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices   
     
    9290      IF( l_trdtra ) THEN                    !* Save ta and sa trends 
    9391         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    94          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
    95          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 
     92         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     93         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    9694      ENDIF 
    9795      ! 
     
    133131         DO jj = 2, jpj                         !==>> add concentration/dilution effect due to constant volume cell 
    134132            DO ji = fs_2, fs_jpim1   ! vector opt. 
    135                sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * ts(ji,jj,1,jp_tem,ktlev) 
    136                sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * ts(ji,jj,1,jp_sal,ktlev) 
     133               sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_tem) 
     134               sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_sal) 
    137135            END DO 
    138136         END DO                                 !==>> output c./d. term 
    139          IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * ts(:,:,1,jp_tem,ktlev) ) 
    140          IF( iom_use('emp_x_sss') )   CALL iom_put( "emp_x_sss", emp (:,:) * ts(:,:,1,jp_sal,ktlev) ) 
     137         IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * tsn(:,:,1,jp_tem) ) 
     138         IF( iom_use('emp_x_sss') )   CALL iom_put( "emp_x_sss", emp (:,:) * tsn(:,:,1,jp_sal) ) 
    141139      ENDIF 
    142140      ! 
     
    144142         DO jj = 2, jpj 
    145143            DO ji = fs_2, fs_jpim1   ! vector opt.   
    146                pts_rhs(ji,jj,1,jn) = pts_rhs(ji,jj,1,jn) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t(ji,jj,1,ktlev) 
     144               tsa(ji,jj,1,jn) = tsa(ji,jj,1,jn) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t_n(ji,jj,1) 
    147145            END DO 
    148146         END DO 
     
    175173               DO jk = ikt, ikb - 1 
    176174               ! compute trend 
    177                   pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem)                                                & 
     175                  tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                                & 
    178176                     &           + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    179177                     &           * r1_hisf_tbl(ji,jj) 
     
    182180               ! level partially include in ice shelf boundary layer  
    183181               ! compute trend 
    184                pts_rhs(ji,jj,ikb,jp_tem) = pts_rhs(ji,jj,ikb,jp_tem)                                                 & 
     182               tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem)                                                 & 
    185183                  &              + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    186184                  &              * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 
     
    201199                  zdep = zfact / h_rnf(ji,jj) 
    202200                  DO jk = 1, nk_rnf(ji,jj) 
    203                                         pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem)                                 & 
     201                                        tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                 & 
    204202                                           &                 +  ( rnf_tsc_b(ji,jj,jp_tem) + rnf_tsc(ji,jj,jp_tem) ) * zdep 
    205                      IF( ln_rnf_sal )   pts_rhs(ji,jj,jk,jp_sal) = pts_rhs(ji,jj,jk,jp_sal)                                 & 
     203                     IF( ln_rnf_sal )   tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)                                 & 
    206204                                           &                 +  ( rnf_tsc_b(ji,jj,jp_sal) + rnf_tsc(ji,jj,jp_sal) ) * zdep  
    207205                  END DO 
     
    211209      ENDIF 
    212210 
    213       IF( iom_use('rnf_x_sst') )   CALL iom_put( "rnf_x_sst", rnf*ts(:,:,1,jp_tem,ktlev) )   ! runoff term on sst 
    214       IF( iom_use('rnf_x_sss') )   CALL iom_put( "rnf_x_sss", rnf*ts(:,:,1,jp_sal,ktlev) )   ! runoff term on sss 
     211      IF( iom_use('rnf_x_sst') )   CALL iom_put( "rnf_x_sst", rnf*tsn(:,:,1,jp_tem) )   ! runoff term on sst 
     212      IF( iom_use('rnf_x_sss') )   CALL iom_put( "rnf_x_sss", rnf*tsn(:,:,1,jp_sal) )   ! runoff term on sss 
    215213 
    216214#if defined key_asminc 
     
    225223            DO jj = 2, jpj  
    226224               DO ji = fs_2, fs_jpim1 
    227                   ztim = ssh_iau(ji,jj) / e3t(ji,jj,1,ktlev) 
    228                   pts_rhs(ji,jj,1,jp_tem) = pts_rhs(ji,jj,1,jp_tem) + ts(ji,jj,1,jp_tem,ktlev) * ztim 
    229                   pts_rhs(ji,jj,1,jp_sal) = pts_rhs(ji,jj,1,jp_sal) + ts(ji,jj,1,jp_sal,ktlev) * ztim 
     225                  ztim = ssh_iau(ji,jj) / e3t_n(ji,jj,1) 
     226                  tsa(ji,jj,1,jp_tem) = tsa(ji,jj,1,jp_tem) + tsn(ji,jj,1,jp_tem) * ztim 
     227                  tsa(ji,jj,1,jp_sal) = tsa(ji,jj,1,jp_sal) + tsn(ji,jj,1,jp_sal) * ztim 
    230228               END DO 
    231229            END DO 
     
    234232               DO ji = fs_2, fs_jpim1 
    235233                  ztim = ssh_iau(ji,jj) / ( ht_n(ji,jj) + 1. - ssmask(ji, jj) ) 
    236                   pts_rhs(ji,jj,:,jp_tem) = pts_rhs(ji,jj,:,jp_tem) + ts(ji,jj,:,jp_tem,ktlev) * ztim 
    237                   pts_rhs(ji,jj,:,jp_sal) = pts_rhs(ji,jj,:,jp_sal) + ts(ji,jj,:,jp_sal,ktlev) * ztim 
     234                  tsa(ji,jj,:,jp_tem) = tsa(ji,jj,:,jp_tem) + tsn(ji,jj,:,jp_tem) * ztim 
     235                  tsa(ji,jj,:,jp_sal) = tsa(ji,jj,:,jp_sal) + tsn(ji,jj,:,jp_sal) * ztim 
    238236               END DO   
    239237            END DO   
     
    252250            DO jj = 2, jpj  
    253251               DO ji = fs_2, fs_jpim1 
    254                   zdep = 1._wp / e3t(ji,jj,jk,ktlev)  
    255                   pts_rhs(ji,jj,jk,jp_tem) = pts_rhs(ji,jj,jk,jp_tem) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 
    256                   pts_rhs(ji,jj,jk,jp_sal) = pts_rhs(ji,jj,jk,jp_sal) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep   
     252                  zdep = 1._wp / e3t_n(ji,jj,jk)  
     253                  tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 
     254                  tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep   
    257255               END DO   
    258256            END DO   
     
    261259 
    262260      IF( l_trdtra )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    263          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 
    264          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) - ztrds(:,:,:) 
     261         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     262         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    265263         CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt ) 
    266264         CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trazdf.F90

    r10825 r10874  
    4444CONTAINS 
    4545 
    46    SUBROUTINE tra_zdf( kt, ktlev1, ktlev2, ktlev3, kt2lev, pts_rhs ) 
     46   SUBROUTINE tra_zdf( kt ) 
    4747      !!---------------------------------------------------------------------- 
    4848      !!                  ***  ROUTINE tra_zdf  *** 
     
    5151      !!--------------------------------------------------------------------- 
    5252      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    53       INTEGER, INTENT(in) ::   ktlev1, ktlev2, ktlev3   ! time level indices for 3-time-level source terms 
    54       INTEGER, INTENT(in) ::   kt2lev                   ! time level index for 2-time-level source terms 
    55       REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 
    5653      ! 
    5754      INTEGER  ::   jk   ! Dummy loop indices 
     
    7370      IF( l_trdtra )   THEN                  !* Save ta and sa trends 
    7471         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    75          ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 
    76          ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 
     72         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     73         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    7774      ENDIF 
    7875      ! 
    7976      !                                      !* compute lateral mixing trend and add it to the general trend 
    80       CALL tra_zdf_imp( kt, nit000, ktlev1, ktlev2, ktlev3, kt2lev, 'TRA', r2dt, ts(:,:,:,:,ktlev1), pts_rhs, jpts )  
     77      CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, tsb, tsa, jpts )  
    8178 
    8279!!gm WHY here !   and I don't like that ! 
     
    8481      ! JMM avoid negative salinities near river outlet ! Ugly fix 
    8582      ! JMM : restore negative salinities to small salinities: 
    86       WHERE( pts_rhs(:,:,:,jp_sal) < 0._wp )   pts_rhs(:,:,:,jp_sal) = 0.1_wp 
     83      WHERE( tsa(:,:,:,jp_sal) < 0._wp )   tsa(:,:,:,jp_sal) = 0.1_wp 
    8784!!gm 
    8885 
    8986      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    9087         DO jk = 1, jpkm1 
    91             ztrdt(:,:,jk) = ( ( pts_rhs(:,:,jk,jp_tem)*e3t(:,:,jk,ktlev3) - ts(:,:,jk,jp_tem,ktlev1)*e3t(:,:,jk,ktlev1) ) & 
    92                &          / (e3t(:,:,jk,ktlev2)*r2dt) ) - ztrdt(:,:,jk) 
    93             ztrds(:,:,jk) = ( ( pts_rhs(:,:,jk,jp_sal)*e3t(:,:,jk,ktlev3) - ts(:,:,jk,jp_sal,ktlev1)*e3t(:,:,jk,ktlev1) ) & 
    94               &           / (e3t(:,:,jk,ktlev2)*r2dt) ) - ztrds(:,:,jk) 
     88            ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) - tsb(:,:,jk,jp_tem)*e3t_b(:,:,jk) ) & 
     89               &          / (e3t_n(:,:,jk)*r2dt) ) - ztrdt(:,:,jk) 
     90            ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) - tsb(:,:,jk,jp_sal)*e3t_b(:,:,jk) ) & 
     91              &           / (e3t_n(:,:,jk)*r2dt) ) - ztrds(:,:,jk) 
    9592         END DO 
    9693!!gm this should be moved in trdtra.F90 and done on all trends 
     
    110107 
    111108  
    112    SUBROUTINE tra_zdf_imp( kt, kit000, ktlev1, ktlev2, ktlev3, kt2lev, cdtype, p2dt, pt, pt_rhs, kjpt )  
     109   SUBROUTINE tra_zdf_imp( kt, kit000, cdtype, p2dt, ptb, pta, kjpt )  
    113110      !!---------------------------------------------------------------------- 
    114111      !!                  ***  ROUTINE tra_zdf_imp  *** 
     
    128125      !!      If iso-neutral mixing, add to avt the contribution due to lateral mixing. 
    129126      !! 
    130       !! ** Action  : - pt_rhs  becomes the after tracer 
     127      !! ** Action  : - pta  becomes the after tracer 
    131128      !!--------------------------------------------------------------------- 
    132129      INTEGER                              , INTENT(in   ) ::   kt       ! ocean time-step index 
    133130      INTEGER                              , INTENT(in   ) ::   kit000   ! first time step index 
    134       INTEGER                              , INTENT(in   ) ::   ktlev1, ktlev2, ktlev3   ! time level indices for 3-time-level source terms 
    135       INTEGER                              , INTENT(in   ) ::   kt2lev                   ! time level index for 2-time-level source terms 
    136131      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype   ! =TRA or TRC (tracer indicator) 
    137132      INTEGER                              , INTENT(in   ) ::   kjpt     ! number of tracers 
    138133      REAL(wp)                             , INTENT(in   ) ::   p2dt     ! tracer time-step 
    139       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt      ! before and now tracer fields 
    140       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs      ! in: tracer trend ; out: after tracer field 
     134      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb      ! before and now tracer fields 
     135      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta      ! in: tracer trend ; out: after tracer field 
    141136      ! 
    142137      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
     
    186181                  DO jj = 2, jpjm1 
    187182                     DO ji = fs_2, fs_jpim1   ! vector opt. (ensure same order of calculation as below if wi=0.) 
    188                         zzwi = - p2dt * zwt(ji,jj,jk  ) / e3w(ji,jj,jk  ,kt2lev) 
    189                         zzws = - p2dt * zwt(ji,jj,jk+1) / e3w(ji,jj,jk+1,kt2lev) 
    190                         zwd(ji,jj,jk) = e3t(ji,jj,jk,ktlev3) - zzwi - zzws   & 
     183                        zzwi = - p2dt * zwt(ji,jj,jk  ) / e3w_n(ji,jj,jk  ) 
     184                        zzws = - p2dt * zwt(ji,jj,jk+1) / e3w_n(ji,jj,jk+1) 
     185                        zwd(ji,jj,jk) = e3t_a(ji,jj,jk) - zzwi - zzws   & 
    191186                           &                 + p2dt * ( MAX( wi(ji,jj,jk  ) , 0._wp ) - MIN( wi(ji,jj,jk+1) , 0._wp ) ) 
    192187                        zwi(ji,jj,jk) = zzwi + p2dt *   MIN( wi(ji,jj,jk  ) , 0._wp ) 
     
    199194                  DO jj = 2, jpjm1 
    200195                     DO ji = fs_2, fs_jpim1   ! vector opt. 
    201                         zwi(ji,jj,jk) = - p2dt * zwt(ji,jj,jk  ) / e3w(ji,jj,jk,kt2lev) 
    202                         zws(ji,jj,jk) = - p2dt * zwt(ji,jj,jk+1) / e3w(ji,jj,jk+1,kt2lev) 
    203                         zwd(ji,jj,jk) = e3t(ji,jj,jk,ktlev3) - zwi(ji,jj,jk) - zws(ji,jj,jk) 
     196                        zwi(ji,jj,jk) = - p2dt * zwt(ji,jj,jk  ) / e3w_n(ji,jj,jk) 
     197                        zws(ji,jj,jk) = - p2dt * zwt(ji,jj,jk+1) / e3w_n(ji,jj,jk+1) 
     198                        zwd(ji,jj,jk) = e3t_a(ji,jj,jk) - zwi(ji,jj,jk) - zws(ji,jj,jk) 
    204199                    END DO 
    205200                  END DO 
     
    221216            !   Suffices i,s and d indicate "inferior" (below diagonal), diagonal 
    222217            !   and "superior" (above diagonal) components of the tridiagonal system. 
    223             !   The solution will be in the 4d array pt_rhs. 
     218            !   The solution will be in the 4d array pta. 
    224219            !   The 3d array zwt is used as a work space array. 
    225             !   En route to the solution pt_rhs is used a to evaluate the rhs and then  
     220            !   En route to the solution pta is used a to evaluate the rhs and then  
    226221            !   used as a work space array: its value is modified. 
    227222            ! 
     
    243238         DO jj = 2, jpjm1           !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    244239            DO ji = fs_2, fs_jpim1 
    245                pt_rhs(ji,jj,1,jn) = e3t(ji,jj,1,ktlev1) * pt(ji,jj,1,jn) + p2dt * e3t(ji,jj,1,ktlev2) * pt_rhs(ji,jj,1,jn) 
     240               pta(ji,jj,1,jn) = e3t_b(ji,jj,1) * ptb(ji,jj,1,jn) + p2dt * e3t_n(ji,jj,1) * pta(ji,jj,1,jn) 
    246241            END DO 
    247242         END DO 
     
    249244            DO jj = 2, jpjm1 
    250245               DO ji = fs_2, fs_jpim1 
    251                   zrhs = e3t(ji,jj,jk,ktlev1) * pt(ji,jj,jk,jn) + p2dt * e3t(ji,jj,jk,ktlev2) * pt_rhs(ji,jj,jk,jn)   ! zrhs=right hand side 
    252                   pt_rhs(ji,jj,jk,jn) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt_rhs(ji,jj,jk-1,jn) 
     246                  zrhs = e3t_b(ji,jj,jk) * ptb(ji,jj,jk,jn) + p2dt * e3t_n(ji,jj,jk) * pta(ji,jj,jk,jn)   ! zrhs=right hand side 
     247                  pta(ji,jj,jk,jn) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pta(ji,jj,jk-1,jn) 
    253248               END DO 
    254249            END DO 
     
    257252         DO jj = 2, jpjm1           !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk   (result is the after tracer) 
    258253            DO ji = fs_2, fs_jpim1 
    259                pt_rhs(ji,jj,jpkm1,jn) = pt_rhs(ji,jj,jpkm1,jn) / zwt(ji,jj,jpkm1) * tmask(ji,jj,jpkm1) 
     254               pta(ji,jj,jpkm1,jn) = pta(ji,jj,jpkm1,jn) / zwt(ji,jj,jpkm1) * tmask(ji,jj,jpkm1) 
    260255            END DO 
    261256         END DO 
     
    263258            DO jj = 2, jpjm1 
    264259               DO ji = fs_2, fs_jpim1 
    265                   pt_rhs(ji,jj,jk,jn) = ( pt_rhs(ji,jj,jk,jn) - zws(ji,jj,jk) * pt_rhs(ji,jj,jk+1,jn) )   & 
     260                  pta(ji,jj,jk,jn) = ( pta(ji,jj,jk,jn) - zws(ji,jj,jk) * pta(ji,jj,jk+1,jn) )   & 
    266261                     &             / zwt(ji,jj,jk) * tmask(ji,jj,jk) 
    267262               END DO 
Note: See TracChangeset for help on using the changeset viewer.