Changeset 10954


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

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

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src
Files:
28 edited

Legend:

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

    r10425 r10954  
    102102CONTAINS 
    103103 
    104    SUBROUTINE asm_inc_init 
     104   SUBROUTINE asm_inc_init( Kmm ) 
    105105      !!---------------------------------------------------------------------- 
    106106      !!                    ***  ROUTINE asm_inc_init  *** 
     
    112112      !! ** Action  :  
    113113      !!---------------------------------------------------------------------- 
     114      INTEGER, INTENT(in) ::   Kmm  ! time level index 
    114115      INTEGER :: ji, jj, jk, jt  ! dummy loop indices 
    115116      INTEGER :: imid, inum      ! local integers 
     
    496497         IF( ln_bkgwri )   CALL asm_bkg_wri( nit000 - 1 )      ! Output background fields 
    497498         IF( ln_asmdin ) THEN                                  ! Direct initialization 
    498             IF( ln_trainc )   CALL tra_asm_inc( nit000 - 1 )      ! Tracers 
     499            IF( ln_trainc )   CALL tra_asm_inc( nit000 - 1, Kmm )      ! Tracers 
    499500            IF( ln_dyninc )   CALL dyn_asm_inc( nit000 - 1 )      ! Dynamics 
    500501            IF( ln_sshinc )   CALL ssh_asm_inc( nit000 - 1 )      ! SSH 
     
    505506    
    506507    
    507    SUBROUTINE tra_asm_inc( kt ) 
     508   SUBROUTINE tra_asm_inc( kt, Kmm ) 
    508509      !!---------------------------------------------------------------------- 
    509510      !!                    ***  ROUTINE tra_asm_inc  *** 
     
    516517      !!---------------------------------------------------------------------- 
    517518      INTEGER, INTENT(IN) ::   kt   ! Current time step 
     519      INTEGER, INTENT(IN) ::   Kmm  ! Current time level index 
    518520      ! 
    519521      INTEGER  :: ji, jj, jk 
     
    607609!!gm 
    608610 
    609             IF( ln_zps .AND. .NOT. lk_c1d .AND. .NOT. ln_isfcav)      & 
    610                &  CALL zps_hde    ( kt, jpts, tsb, gtsu, gtsv,        &  ! Partial steps: before horizontal gradient 
    611                &                              rhd, gru , grv          )  ! of t, s, rd at the last ocean level 
    612             IF( ln_zps .AND. .NOT. lk_c1d .AND.       ln_isfcav)      & 
    613                &  CALL zps_hde_isf( nit000, jpts, tsb, gtsu, gtsv, gtui, gtvi,    &    ! Partial steps for top cell (ISF) 
    614                &                                  rhd, gru , grv , grui, grvi       ! of t, s, rd at the last ocean level 
     611            IF( ln_zps .AND. .NOT. lk_c1d .AND. .NOT. ln_isfcav)           & 
     612               &  CALL zps_hde    ( kt, Kmm, jpts, tsb, gtsu, gtsv,        &  ! Partial steps: before horizontal gradient 
     613               &                              rhd, gru , grv               )  ! of t, s, rd at the last ocean level 
     614            IF( ln_zps .AND. .NOT. lk_c1d .AND.       ln_isfcav)                       & 
     615               &  CALL zps_hde_isf( nit000, Kmm, jpts, tsb, gtsu, gtsv, gtui, gtvi,    &  ! Partial steps for top cell (ISF) 
     616               &                                  rhd, gru , grv , grui, grvi          )  ! of t, s, rd at the last ocean level 
    615617 
    616618            DEALLOCATE( t_bkginc ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/SBC/sbcisf.F90

    r10922 r10954  
    698698                  zdep        = gdepw(ji,jj,ikt,Kmm) 
    699699                  ! 
    700                   CALL eos_rab( zts, zdep, zab ) 
     700                  CALL eos_rab( zts, zdep, zab, Kmm ) 
    701701                  ! 
    702702                  !! compute length scale  
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/eosbn2.F90

    r10425 r10954  
    564564 
    565565 
    566    SUBROUTINE rab_3d( pts, pab ) 
     566   SUBROUTINE rab_3d( pts, pab, Kmm ) 
    567567      !!---------------------------------------------------------------------- 
    568568      !!                 ***  ROUTINE rab_3d  *** 
     
    574574      !! ** Action  : - pab     : thermal/haline expansion ratio at T-points 
    575575      !!---------------------------------------------------------------------- 
     576      INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
    576577      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! pot. temperature & salinity 
    577578      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(  out) ::   pab   ! thermal/haline expansion ratio 
     
    592593               DO ji = 1, jpi 
    593594                  ! 
    594                   zh  = gdept_n(ji,jj,jk) * r1_Z0                                ! depth 
     595                  zh  = gdept(ji,jj,jk,Kmm) * r1_Z0                                ! depth 
    595596                  zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    596597                  zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     
    650651                  zt  = pts (ji,jj,jk,jp_tem) - 10._wp   ! pot. temperature anomaly (t-T0) 
    651652                  zs  = pts (ji,jj,jk,jp_sal) - 35._wp   ! abs. salinity anomaly (s-S0) 
    652                   zh  = gdept_n(ji,jj,jk)                ! depth in meters at t-point 
     653                  zh  = gdept(ji,jj,jk,Kmm)                ! depth in meters at t-point 
    653654                  ztm = tmask(ji,jj,jk)                  ! land/sea bottom mask = surf. mask 
    654655                  ! 
     
    677678 
    678679 
    679    SUBROUTINE rab_2d( pts, pdep, pab ) 
     680   SUBROUTINE rab_2d( pts, pdep, pab, Kmm ) 
    680681      !!---------------------------------------------------------------------- 
    681682      !!                 ***  ROUTINE rab_2d  *** 
     
    685686      !! ** Action  : - pab     : thermal/haline expansion ratio at T-points 
    686687      !!---------------------------------------------------------------------- 
     688      INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
    687689      REAL(wp), DIMENSION(jpi,jpj,jpts)    , INTENT(in   ) ::   pts    ! pot. temperature & salinity 
    688690      REAL(wp), DIMENSION(jpi,jpj)         , INTENT(in   ) ::   pdep   ! depth                  [m] 
     
    791793 
    792794 
    793    SUBROUTINE rab_0d( pts, pdep, pab ) 
     795   SUBROUTINE rab_0d( pts, pdep, pab, Kmm ) 
    794796      !!---------------------------------------------------------------------- 
    795797      !!                 ***  ROUTINE rab_0d  *** 
     
    799801      !! ** Action  : - pab     : thermal/haline expansion ratio at T-points 
    800802      !!---------------------------------------------------------------------- 
     803      INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
    801804      REAL(wp), DIMENSION(jpts)    , INTENT(in   ) ::   pts    ! pot. temperature & salinity 
    802805      REAL(wp),                      INTENT(in   ) ::   pdep   ! depth                  [m] 
     
    887890 
    888891 
    889    SUBROUTINE bn2( pts, pab, pn2 ) 
     892   SUBROUTINE bn2( pts, pab, pn2, Kmm ) 
    890893      !!---------------------------------------------------------------------- 
    891894      !!                  ***  ROUTINE bn2  *** 
     
    901904      !! 
    902905      !!---------------------------------------------------------------------- 
     906      INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
    903907      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::  pts   ! pot. temperature and salinity   [Celsius,psu] 
    904908      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::  pab   ! thermal/haline expansion coef.  [Celsius-1,psu-1] 
     
    914918         DO jj = 1, jpj          ! surface and bottom value set to zero one for all in istate.F90 
    915919            DO ji = 1, jpi 
    916                zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
    917                   &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) )  
     920               zrw =   ( gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm) )   & 
     921                  &  / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) )  
    918922                  ! 
    919923               zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw  
     
    922926               pn2(ji,jj,jk) = grav * (  zaw * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )     & 
    923927                  &                    - zbw * ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )  )  & 
    924                   &            / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
     928                  &            / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) 
    925929            END DO 
    926930         END DO 
     
    10911095 
    10921096 
    1093    SUBROUTINE eos_pen( pts, pab_pe, ppen ) 
     1097   SUBROUTINE eos_pen( pts, pab_pe, ppen, Kmm ) 
    10941098      !!---------------------------------------------------------------------- 
    10951099      !!                 ***  ROUTINE eos_pen  *** 
     
    11111115      !!                    pab_pe(:,:,:,jp_sal) is beta_pe 
    11121116      !!---------------------------------------------------------------------- 
     1117      INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
    11131118      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts     ! pot. temperature & salinity 
    11141119      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(  out) ::   pab_pe  ! alpha_pe and beta_pe 
     
    11301135               DO ji = 1, jpi 
    11311136                  ! 
    1132                   zh  = gdept_n(ji,jj,jk) * r1_Z0                                ! depth 
     1137                  zh  = gdept(ji,jj,jk,Kmm) * r1_Z0                                ! depth 
    11331138                  zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    11341139                  zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     
    11941199                  zt  = pts(ji,jj,jk,jp_tem) - 10._wp  ! temperature anomaly (t-T0) 
    11951200                  zs = pts (ji,jj,jk,jp_sal) - 35._wp  ! abs. salinity anomaly (s-S0) 
    1196                   zh  = gdept_n(ji,jj,jk)              ! depth in meters  at t-point 
     1201                  zh  = gdept(ji,jj,jk,Kmm)              ! depth in meters  at t-point 
    11971202                  ztm = tmask(ji,jj,jk)                ! tmask 
    11981203                  zn  = 0.5_wp * zh * r1_rau0 * ztm 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv.F90

    r10946 r10954  
    129129         &              CALL ldf_eiv_trp( kt, nit000, zuu, zvv, zww, 'TRA', Kmm, Krhs )   ! add the eiv transport (if necessary) 
    130130      ! 
    131       IF( ln_mle    )   CALL tra_mle_trp( kt, nit000, zuu, zvv, zww, 'TRA' )   ! add the mle transport (if necessary) 
     131      IF( ln_mle    )   CALL tra_mle_trp( kt, nit000, zuu, zvv, zww, 'TRA', Kmm      )   ! add the mle transport (if necessary) 
    132132      ! 
    133133      CALL iom_put( "uocetr_eff", zuu )                                        ! output effective transport       
     
    170170      ENDIF 
    171171      !                                              ! print mean trends (used for debugging) 
    172       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv  - Ta: ', mask1=tmask,               & 
    173          &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     172      IF(ln_ctl)   CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' adv  - Ta: ', mask1=tmask,               & 
     173         &                       tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    174174      ! 
    175175      IF( ln_timing )   CALL timing_stop( 'tra_adv' ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbc.F90

    r10946 r10954  
    8484      IF( l_trdtra )   THEN         ! Save the input temperature trend 
    8585         ALLOCATE( ztrdt(jpi,jpj,jpk) ) 
    86          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     86         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) 
    8787      ENDIF 
    8888      !                             !  Add the geothermal trend on temperature 
    8989      DO jj = 2, jpjm1 
    9090         DO ji = 2, jpim1 
    91             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)) 
     91            ts(ji,jj,mbkt(ji,jj),jp_tem,Krhs) = ts(ji,jj,mbkt(ji,jj),jp_tem,Krhs) + qgh_trd0(ji,jj) / e3t(ji,jj,mbkt(ji,jj),Kmm) 
    9292         END DO 
    9393      END DO 
    9494      ! 
    95       CALL lbc_lnk( 'trabbc', tsa(:,:,:,jp_tem) , 'T', 1. ) 
     95      CALL lbc_lnk( 'trabbc', ts(:,:,:,jp_tem,Krhs) , 'T', 1. ) 
    9696      ! 
    9797      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
    98          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     98         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 
    9999         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    100100         DEALLOCATE( ztrdt ) 
    101101      ENDIF 
    102102      ! 
    103       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbc  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
     103      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' bbc  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
    104104      ! 
    105105      IF( ln_timing )   CALL timing_stop('tra_bbc') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbl.F90

    r10946 r10954  
    8989 
    9090 
    91    SUBROUTINE tra_bbl( kt, Kmm, Krhs ) 
     91   SUBROUTINE tra_bbl( kt, Kbb, Kmm, Krhs ) 
    9292      !!---------------------------------------------------------------------- 
    9393      !!                  ***  ROUTINE bbl  *** 
     
    102102      !!---------------------------------------------------------------------- 
    103103      INTEGER, INTENT( in ) ::   kt   ! ocean time-step 
    104       INTEGER, INTENT( in ) ::   Kmm, Krhs  ! time level indices 
     104      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! time level indices 
    105105      ! 
    106106      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     
    111111      IF( l_trdtra )   THEN                         !* Save the T-S input trends 
    112112         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    113          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    114          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    115       ENDIF 
    116  
    117       IF( l_bbl )   CALL bbl( kt, nit000, 'TRA' )   !* bbl coef. and transport (only if not already done in trcbbl) 
     113         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) 
     114         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) 
     115      ENDIF 
     116 
     117      IF( l_bbl )   CALL bbl( kt, nit000, 'TRA', Kbb, Kmm )   !* bbl coef. and transport (only if not already done in trcbbl) 
    118118 
    119119      IF( nn_bbl_ldf == 1 ) THEN                    !* Diffusive bbl 
    120120         ! 
    121          CALL tra_bbl_dif( tsb, tsa, jpts ) 
     121         CALL tra_bbl_dif( ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, Kmm ) 
    122122         IF( ln_ctl )  & 
    123          CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_ldf  - Ta: ', mask1=tmask, & 
    124             &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     123         CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_ldf  - Ta: ', mask1=tmask, & 
     124            &          tab3d_2=ts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    125125         ! lateral boundary conditions ; just need for outputs 
    126126         CALL lbc_lnk_multi( 'trabbl', ahu_bbl, 'U', 1. , ahv_bbl, 'V', 1. ) 
     
    132132      IF( nn_bbl_adv /= 0 ) THEN                    !* Advective bbl 
    133133         ! 
    134          CALL tra_bbl_adv( tsb, tsa, jpts ) 
     134         CALL tra_bbl_adv( ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, Kmm ) 
    135135         IF(ln_ctl)   & 
    136          CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_adv  - Ta: ', mask1=tmask,   & 
    137             &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     136         CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_adv  - Ta: ', mask1=tmask,   & 
     137            &          tab3d_2=ts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    138138         ! lateral boundary conditions ; just need for outputs 
    139139         CALL lbc_lnk_multi( 'trabbl', utr_bbl, 'U', 1. , vtr_bbl, 'V', 1. ) 
     
    144144 
    145145      IF( l_trdtra )   THEN                      ! send the trends for further diagnostics 
    146          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    147          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     146         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 
     147         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 
    148148         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
    149149         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_bbl, ztrds ) 
     
    156156 
    157157 
    158    SUBROUTINE tra_bbl_dif( ptb, pta, kjpt ) 
     158   SUBROUTINE tra_bbl_dif( ptb, pta, kjpt, Kmm ) 
    159159      !!---------------------------------------------------------------------- 
    160160      !!                  ***  ROUTINE tra_bbl_dif  *** 
     
    180180      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
    181181      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta    ! tracer trend 
     182      INTEGER                              , INTENT(in   ) ::   Kmm    ! time level indices 
    182183      ! 
    183184      INTEGER  ::   ji, jj, jn   ! dummy loop indices 
     
    204205                  &                + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )     & 
    205206                  &                - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )  )  & 
    206                   &             * r1_e1e2t(ji,jj) / e3t_n(ji,jj,ik) 
     207                  &             * r1_e1e2t(ji,jj) / e3t(ji,jj,ik,Kmm) 
    207208            END DO 
    208209         END DO 
     
    213214 
    214215 
    215    SUBROUTINE tra_bbl_adv( ptb, pta, kjpt ) 
     216   SUBROUTINE tra_bbl_adv( ptb, pta, kjpt, Kmm ) 
    216217      !!---------------------------------------------------------------------- 
    217218      !!                  ***  ROUTINE trc_bbl  *** 
     
    231232      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
    232233      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta    ! tracer trend 
     234      INTEGER                              , INTENT(in   ) ::   Kmm    ! time level indices 
    233235      ! 
    234236      INTEGER  ::   ji, jj, jk, jn           ! dummy loop indices 
     
    251253                  ! 
    252254                  !                                               ! up  -slope T-point (shelf bottom point) 
    253                   zbtr = r1_e1e2t(iis,jj) / e3t_n(iis,jj,ikus) 
     255                  zbtr = r1_e1e2t(iis,jj) / e3t(iis,jj,ikus,Kmm) 
    254256                  ztra = zu_bbl * ( ptb(iid,jj,ikus,jn) - ptb(iis,jj,ikus,jn) ) * zbtr 
    255257                  pta(iis,jj,ikus,jn) = pta(iis,jj,ikus,jn) + ztra 
    256258                  ! 
    257259                  DO jk = ikus, ikud-1                            ! down-slope upper to down T-point (deep column) 
    258                      zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,jk) 
     260                     zbtr = r1_e1e2t(iid,jj) / e3t(iid,jj,jk,Kmm) 
    259261                     ztra = zu_bbl * ( ptb(iid,jj,jk+1,jn) - ptb(iid,jj,jk,jn) ) * zbtr 
    260262                     pta(iid,jj,jk,jn) = pta(iid,jj,jk,jn) + ztra 
    261263                  END DO 
    262264                  ! 
    263                   zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,ikud) 
     265                  zbtr = r1_e1e2t(iid,jj) / e3t(iid,jj,ikud,Kmm) 
    264266                  ztra = zu_bbl * ( ptb(iis,jj,ikus,jn) - ptb(iid,jj,ikud,jn) ) * zbtr 
    265267                  pta(iid,jj,ikud,jn) = pta(iid,jj,ikud,jn) + ztra 
     
    273275                  ! 
    274276                  ! up  -slope T-point (shelf bottom point) 
    275                   zbtr = r1_e1e2t(ji,ijs) / e3t_n(ji,ijs,ikvs) 
     277                  zbtr = r1_e1e2t(ji,ijs) / e3t(ji,ijs,ikvs,Kmm) 
    276278                  ztra = zv_bbl * ( ptb(ji,ijd,ikvs,jn) - ptb(ji,ijs,ikvs,jn) ) * zbtr 
    277279                  pta(ji,ijs,ikvs,jn) = pta(ji,ijs,ikvs,jn) + ztra 
    278280                  ! 
    279281                  DO jk = ikvs, ikvd-1                            ! down-slope upper to down T-point (deep column) 
    280                      zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,jk) 
     282                     zbtr = r1_e1e2t(ji,ijd) / e3t(ji,ijd,jk,Kmm) 
    281283                     ztra = zv_bbl * ( ptb(ji,ijd,jk+1,jn) - ptb(ji,ijd,jk,jn) ) * zbtr 
    282284                     pta(ji,ijd,jk,jn) = pta(ji,ijd,jk,jn)  + ztra 
    283285                  END DO 
    284286                  !                                               ! down-slope T-point (deep bottom point) 
    285                   zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,ikvd) 
     287                  zbtr = r1_e1e2t(ji,ijd) / e3t(ji,ijd,ikvd,Kmm) 
    286288                  ztra = zv_bbl * ( ptb(ji,ijs,ikvs,jn) - ptb(ji,ijd,ikvd,jn) ) * zbtr 
    287289                  pta(ji,ijd,ikvd,jn) = pta(ji,ijd,ikvd,jn) + ztra 
     
    296298 
    297299 
    298    SUBROUTINE bbl( kt, kit000, cdtype ) 
     300   SUBROUTINE bbl( kt, kit000, cdtype, Kbb, Kmm ) 
    299301      !!---------------------------------------------------------------------- 
    300302      !!                  ***  ROUTINE bbl  *** 
     
    325327      INTEGER         , INTENT(in   ) ::   kit000   ! first time step index 
    326328      CHARACTER(len=3), INTENT(in   ) ::   cdtype   ! =TRA or TRC (tracer indicator) 
     329      INTEGER         , INTENT(in   ) ::   Kbb, Kmm ! ocean time level index 
    327330      ! 
    328331      INTEGER  ::   ji, jj                    ! dummy loop indices 
     
    345348         DO ji = 1, jpi 
    346349            ik = mbkt(ji,jj)                             ! bottom T-level index 
    347             zts (ji,jj,jp_tem) = tsb(ji,jj,ik,jp_tem)    ! bottom before T and S 
    348             zts (ji,jj,jp_sal) = tsb(ji,jj,ik,jp_sal) 
     350            zts (ji,jj,jp_tem) = ts(ji,jj,ik,jp_tem,Kbb)    ! bottom before T and S 
     351            zts (ji,jj,jp_sal) = ts(ji,jj,ik,jp_sal,Kbb) 
    349352            ! 
    350             zdep(ji,jj) = gdept_n(ji,jj,ik)              ! bottom T-level reference depth 
    351             zub (ji,jj) = un(ji,jj,mbku(ji,jj))          ! bottom velocity 
    352             zvb (ji,jj) = vn(ji,jj,mbkv(ji,jj)) 
     353            zdep(ji,jj) = gdept(ji,jj,ik,Kmm)              ! bottom T-level reference depth 
     354            zub (ji,jj) = uu(ji,jj,mbku(ji,jj),Kmm)          ! bottom velocity 
     355            zvb (ji,jj) = vv(ji,jj,mbkv(ji,jj),Kmm) 
    353356         END DO 
    354357      END DO 
    355358      ! 
    356       CALL eos_rab( zts, zdep, zab ) 
     359      CALL eos_rab( zts, zdep, zab, Kmm ) 
    357360      ! 
    358361      !                                   !-------------------! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tradmp.F90

    r10946 r10954  
    7272 
    7373 
    74    SUBROUTINE tra_dmp( kt, Kmm, Krhs ) 
     74   SUBROUTINE tra_dmp( kt, Kbb, Kmm, Krhs ) 
    7575      !!---------------------------------------------------------------------- 
    7676      !!                   ***  ROUTINE tra_dmp  *** 
     
    9191      !!---------------------------------------------------------------------- 
    9292      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    93       INTEGER, INTENT(in) ::   Kmm, Krhs  ! time level indices 
     93      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices 
    9494      ! 
    9595      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
     
    102102      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    103103         ALLOCATE( ztrdts(jpi,jpj,jpk,jpts) )  
    104          ztrdts(:,:,:,:) = tsa(:,:,:,:)  
     104         ztrdts(:,:,:,:) = ts(:,:,:,:,Krhs)  
    105105      ENDIF 
    106106      !                           !==  input T-S data at kt  ==! 
     
    114114               DO jj = 2, jpjm1 
    115115                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    116                      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) ) 
     116                     ts(ji,jj,jk,jn,Krhs) = ts(ji,jj,jk,jn,Krhs) + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jn) - ts(ji,jj,jk,jn,Kbb) ) 
    117117                  END DO 
    118118               END DO 
     
    125125               DO ji = fs_2, fs_jpim1   ! vector opt. 
    126126                  IF( avt(ji,jj,jk) <= avt_c ) THEN 
    127                      tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
    128                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - tsb(ji,jj,jk,jp_tem) ) 
    129                      tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)   & 
    130                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - tsb(ji,jj,jk,jp_sal) ) 
     127                     ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs)   & 
     128                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - ts(ji,jj,jk,jp_tem,Kbb) ) 
     129                     ts(ji,jj,jk,jp_sal,Krhs) = ts(ji,jj,jk,jp_sal,Krhs)   & 
     130                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - ts(ji,jj,jk,jp_sal,Kbb) ) 
    131131                  ENDIF 
    132132               END DO 
     
    138138            DO jj = 2, jpjm1 
    139139               DO ji = fs_2, fs_jpim1   ! vector opt. 
    140                   IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    141                      tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
    142                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - tsb(ji,jj,jk,jp_tem) ) 
    143                      tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)   & 
    144                         &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - tsb(ji,jj,jk,jp_sal) ) 
     140                  IF( gdept(ji,jj,jk,Kmm) >= hmlp (ji,jj) ) THEN 
     141                     ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs)   & 
     142                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_tem) - ts(ji,jj,jk,jp_tem,Kbb) ) 
     143                     ts(ji,jj,jk,jp_sal,Krhs) = ts(ji,jj,jk,jp_sal,Krhs)   & 
     144                        &                 + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jp_sal) - ts(ji,jj,jk,jp_sal,Kbb) ) 
    145145                  ENDIF 
    146146               END DO 
     
    151151      ! 
    152152      IF( l_trdtra )   THEN       ! trend diagnostic 
    153          ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 
     153         ztrdts(:,:,:,:) = ts(:,:,:,:,Krhs) - ztrdts(:,:,:,:) 
    154154         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 
    155155         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 
     
    157157      ENDIF 
    158158      !                           ! Control print 
    159       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' dmp  - Ta: ', mask1=tmask,   & 
    160          &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     159      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' dmp  - Ta: ', mask1=tmask,   & 
     160         &                       tab3d_2=ts(:,:,:,jp_sal,Krhs), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    161161      ! 
    162162      IF( ln_timing )   CALL timing_stop('tra_dmp') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf.F90

    r10946 r10954  
    4747CONTAINS 
    4848 
    49    SUBROUTINE tra_ldf( kt, Kmm, Krhs ) 
     49   SUBROUTINE tra_ldf( kt, Kbb, Kmm, Krhs ) 
    5050      !!---------------------------------------------------------------------- 
    5151      !!                  ***  ROUTINE tra_ldf  *** 
     
    5454      !!---------------------------------------------------------------------- 
    5555      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    56       INTEGER, INTENT( in ) ::   Kmm, Krhs  ! ocean time level indices 
     56      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! ocean time level indices 
    5757      !! 
    5858      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     
    6363      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    6464         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    65          ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    66          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     65         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs)  
     66         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) 
    6767      ENDIF 
    6868      ! 
    6969      SELECT CASE ( nldf_tra )                 !* compute lateral mixing trend and add it to the general trend 
    7070      CASE ( np_lap   )                                  ! laplacian: iso-level operator 
    71          CALL tra_ldf_lap  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb,      tsa, jpts,  1  ) 
     71         CALL tra_ldf_lap  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs),                   jpts,  1, Kmm ) 
    7272      CASE ( np_lap_i )                                  ! laplacian: standard iso-neutral operator (Madec) 
    73          CALL tra_ldf_iso  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb, tsb, tsa, jpts,  1  ) 
     73         CALL tra_ldf_iso  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts,  1, Kmm ) 
    7474      CASE ( np_lap_it )                                 ! laplacian: triad iso-neutral operator (griffies) 
    75          CALL tra_ldf_triad( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb, tsb, tsa, jpts,  1, Kmm  ) 
     75         CALL tra_ldf_triad( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts,  1, Kmm ) 
    7676      CASE ( np_blp , np_blp_i , np_blp_it )             ! bilaplacian: iso-level & iso-neutral operators 
    77          CALL tra_ldf_blp  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, tsb      , tsa, jpts, nldf_tra, Kmm ) 
     77         CALL tra_ldf_blp  ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs),            jpts, nldf_tra, Kmm ) 
    7878      END SELECT 
    7979      ! 
    8080      IF( l_trdtra )   THEN                    !* save the horizontal diffusive trends for further diagnostics 
    81          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    82          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     81         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 
     82         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 
    8383         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_ldf, ztrdt ) 
    8484         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_ldf, ztrds ) 
     
    8686      ENDIF 
    8787      !                                        !* print mean trends (used for debugging) 
    88       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf  - Ta: ', mask1=tmask,               & 
    89          &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     88      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' ldf  - Ta: ', mask1=tmask,               & 
     89         &                       tab3d_2=ts(:,:,:,jp_sal,Krhs), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    9090      ! 
    9191      IF( ln_timing )   CALL timing_stop('tra_ldf') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_iso.F90

    r10874 r10954  
    5050  SUBROUTINE tra_ldf_iso( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    5151      &                                                   pgui, pgvi,   & 
    52       &                                       ptb , ptbb, pta , kjpt, kpass ) 
     52      &                                       ptb , ptbb, pta , kjpt, kpass, Kmm ) 
    5353      !!---------------------------------------------------------------------- 
    5454      !!                  ***  ROUTINE tra_ldf_iso  *** 
     
    9696      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
    9797      INTEGER                              , INTENT(in   ) ::   kpass      ! =1/2 first or second passage 
     98      INTEGER                              , INTENT(in   ) ::   Kmm        ! ocean time level index 
    9899      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   pahu, pahv ! eddy diffusivity at u- and v-points  [m2/s] 
    99100      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels 
     
    182183                     DO ji = 1, fs_jpim1 
    183184                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    184                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
     185                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
    185186                     END DO 
    186187                  END DO 
     
    190191                  DO jj = 1, jpjm1 
    191192                     DO ji = 1, fs_jpim1 
    192                         ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
     193                        ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    193194                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    194195                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    255256            DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    256257               DO ji = 1, fs_jpim1   ! vector opt. 
    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) 
     258                  zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 
     259                  zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
    259260                  ! 
    260261                  zmsku = 1. / MAX(  wmask(ji+1,jj,jk  ) + wmask(ji,jj,jk+1)   & 
     
    280281                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk)      & 
    281282                     &                                           + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )   & 
    282                      &                                        * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
     283                     &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    283284               END DO 
    284285            END DO 
     
    325326               DO jj = 1, jpjm1 
    326327                  DO ji = fs_2, fs_jpim1 
    327                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)   & 
     328                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)   & 
    328329                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    329330                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     
    340341                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk)    & 
    341342                           &           + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
    342                            &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
     343                           &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) 
    343344                     END DO 
    344345                  END DO 
     
    348349                  DO jj = 1, jpjm1 
    349350                     DO ji = fs_2, fs_jpim1 
    350                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)                      & 
     351                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)                      & 
    351352                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
    352353                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
     
    361362               DO ji = fs_2, fs_jpim1   ! vector opt. 
    362363                  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) 
     364                     &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    364365               END DO 
    365366            END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_lap_blp.F90

    r10922 r10954  
    4747   SUBROUTINE tra_ldf_lap( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    4848      &                                                    pgui, pgvi,   & 
    49       &                                        ptb , pta , kjpt, kpass )  
     49      &                                        ptb , pta , kjpt, kpass, Kmm )  
    5050      !!---------------------------------------------------------------------- 
    5151      !!                  ***  ROUTINE tra_ldf_lap  *** 
     
    7070      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
    7171      INTEGER                              , INTENT(in   ) ::   kpass      ! =1/2 first or second passage 
     72      INTEGER                              , INTENT(in   ) ::   Kmm        ! ocean time level index 
    7273      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   pahu, pahv ! eddy diffusivity at u- and v-points  [m2/s] 
    7374      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels 
     
    100101         DO jj = 1, jpjm1 
    101102            DO ji = 1, fs_jpim1   ! vector opt. 
    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) 
     103               zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm)   !!gm   * umask(ji,jj,jk) pah masked! 
     104               zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm)   !!gm   * vmask(ji,jj,jk) 
    104105            END DO 
    105106         END DO 
     
    140141                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)     & 
    141142                     &                                   + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )   & 
    142                      &                                / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
     143                     &                                / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 
    143144               END DO 
    144145            END DO 
     
    207208      ! 
    208209      CASE ( np_blp    )               ! iso-level bilaplacian 
    209          CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb,      zlap, kjpt, 1 ) 
     210         CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb,      zlap, kjpt, 1, Kmm ) 
    210211      CASE ( np_blp_i  )               ! rotated   bilaplacian : standard operator (Madec) 
    211          CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1 ) 
     212         CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1, Kmm ) 
    212213      CASE ( np_blp_it )               ! rotated  bilaplacian : triad operator (griffies) 
    213214         CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1, Kmm ) 
     
    216217      CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1. )     ! Lateral boundary conditions (unchanged sign) 
    217218      !                                               ! Partial top/bottom cell: GRADh( zlap )   
    218       IF( ln_isfcav .AND. ln_zps ) THEN   ;   CALL zps_hde_isf( kt, kjpt, zlap, zglu, zglv, zgui, zgvi )  ! both top & bottom 
    219       ELSEIF(             ln_zps ) THEN   ;   CALL zps_hde    ( kt, kjpt, zlap, zglu, zglv )              ! only bottom  
     219      IF( ln_isfcav .AND. ln_zps ) THEN   ;   CALL zps_hde_isf( kt, Kmm, kjpt, zlap, zglu, zglv, zgui, zgvi )  ! both top & bottom 
     220      ELSEIF(             ln_zps ) THEN   ;   CALL zps_hde    ( kt, Kmm, kjpt, zlap, zglu, zglv )              ! only bottom  
    220221      ENDIF 
    221222      ! 
     
    223224      ! 
    224225      CASE ( np_blp    )               ! iso-level bilaplacian 
    225          CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pta,      kjpt, 2 ) 
     226         CALL tra_ldf_lap  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pta,      kjpt, 2, Kmm ) 
    226227      CASE ( np_blp_i  )               ! rotated   bilaplacian : standard operator (Madec) 
    227          CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2 ) 
     228         CALL tra_ldf_iso  ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2, Kmm ) 
    228229      CASE ( np_blp_it )               ! rotated  bilaplacian : triad operator (griffies) 
    229230         CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2, Kmm ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_triad.F90

    r10922 r10954  
    143143                  DO jj = 1, jpjm1 
    144144                     DO ji = 1, fs_jpim1 
    145                         ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    146                         zbu   = e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
     145                        ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,Kmm) 
     146                        zbu   = e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    147147                        zah   = 0.25_wp * pahu(ji,jj,jk) 
    148148                        zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    149149                        ! Subtract s-coordinate slope at t-points to give slope rel to s-surfaces (do this by *adding* gradient of depth) 
    150                         zslope2 = zslope_skew + ( gdept_n(ji+1,jj,jk) - gdept_n(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
     150                        zslope2 = zslope_skew + ( gdept(ji+1,jj,jk,Kmm) - gdept(ji,jj,jk,Kmm) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
    151151                        zslope2 = zslope2 *zslope2 
    152152                        ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp) + zah * zbu * ze3wr * r1_e1e2t(ji+ip,jj) * zslope2 
     
    167167                  DO jj = 1, jpjm1 
    168168                     DO ji = 1, fs_jpim1 
    169                         ze3wr = 1.0_wp / e3w_n(ji,jj+jp,jk+kp) 
    170                         zbv   = e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
     169                        ze3wr = 1.0_wp / e3w(ji,jj+jp,jk+kp,Kmm) 
     170                        zbv   = e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
    171171                        zah   = 0.25_wp * pahv(ji,jj,jk) 
    172172                        zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    173173                        ! Subtract s-coordinate slope at t-points to give slope rel to s surfaces 
    174174                        !    (do this by *adding* gradient of depth) 
    175                         zslope2 = zslope_skew + ( gdept_n(ji,jj+1,jk) - gdept_n(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
     175                        zslope2 = zslope_skew + ( gdept(ji,jj+1,jk,Kmm) - gdept(ji,jj,jk,Kmm) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
    176176                        zslope2 = zslope2 * zslope2 
    177177                        ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp) + zah * zbv * ze3wr * r1_e1e2t(ji,jj+jp) * zslope2 
     
    194194                     DO ji = 1, fs_jpim1 
    195195                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    196                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
     196                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
    197197                     END DO 
    198198                  END DO 
     
    202202                  DO jj = 1, jpjm1 
    203203                     DO ji = 1, fs_jpim1 
    204                         ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
     204                        ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    205205                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    206206                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    274274                           ze1ur = r1_e1u(ji,jj) 
    275275                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    276                            ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
     276                           ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,Kmm) 
    277277                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    278278                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    279279                           zslope_iso  = triadi  (ji+ip,jj,jk,1-ip,kp) 
    280280                           ! 
    281                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
     281                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    282282                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????   ahu is masked.... 
    283283                           zah = pahu(ji,jj,jk) 
     
    297297                           ze2vr = r1_e2v(ji,jj) 
    298298                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    299                            ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
     299                           ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,Kmm) 
    300300                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    301301                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    302302                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    303                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
     303                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
    304304                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????  ahv is masked... 
    305305                           zah = pahv(ji,jj,jk) 
     
    321321                           ze1ur = r1_e1u(ji,jj) 
    322322                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    323                            ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
     323                           ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,Kmm) 
    324324                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    325325                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    326326                           zslope_iso  = triadi(ji+ip,jj,jk,1-ip,kp) 
    327327                           ! 
    328                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
     328                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    329329                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    330330                           zah = pahu(ji,jj,jk) * umask(ji,jj,jk+kp)         ! pahu(ji+ip,jj,jk)   ===>>  ???? 
     
    344344                           ze2vr = r1_e2v(ji,jj) 
    345345                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    346                            ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
     346                           ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,Kmm) 
    347347                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    348348                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    349349                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    350                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
     350                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
    351351                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    352352                           zah = pahv(ji,jj,jk) * vmask(ji,jj,jk+kp)         ! pahv(ji,jj+jp,jk)  ???? 
     
    365365                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
    366366                     &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )   & 
    367                      &                                        / (  e1e2t(ji,jj) * e3t_n(ji,jj,jk)  ) 
     367                     &                                        / (  e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm)  ) 
    368368               END DO 
    369369            END DO 
     
    376376               DO jj = 1, jpjm1 
    377377                  DO ji = fs_2, fs_jpim1 
    378                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)   & 
     378                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)   & 
    379379                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    380380                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     
    388388                  DO jj = 1, jpjm1 
    389389                     DO ji = fs_2, fs_jpim1 
    390                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)             & 
     390                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)             & 
    391391                           &                            * ah_wslp2(ji,jj,jk) * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    392392                     END DO 
     
    397397                  DO jj = 1, jpjm1 
    398398                     DO ji = fs_2, fs_jpim1 
    399                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     399                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)                      & 
    400400                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
    401401                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
     
    410410               DO ji = fs_2, fs_jpim1  ! vector opt. 
    411411                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
    412                      &                                        / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
     412                     &                                        / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 
    413413               END DO 
    414414            END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tramle.F90

    r10425 r10954  
    5656CONTAINS 
    5757 
    58    SUBROUTINE tra_mle_trp( kt, kit000, pu, pv, pw, cdtype ) 
     58   SUBROUTINE tra_mle_trp( kt, kit000, pu, pv, pw, cdtype, Kmm ) 
    5959      !!---------------------------------------------------------------------- 
    6060      !!                  ***  ROUTINE tra_mle_trp  *** 
     
    7171      !!                p.n = p.n + z._mle 
    7272      !! 
    73       !! ** Action  : - (pun,pvn,pwn) increased by the mle transport 
     73      !! ** Action  : - (pu,pv,pw) increased by the mle transport 
    7474      !!                CAUTION, the transport is not updated at the last line/raw 
    7575      !!                         this may be a problem for some advection schemes 
     
    8080      INTEGER                         , INTENT(in   ) ::   kt         ! ocean time-step index 
    8181      INTEGER                         , INTENT(in   ) ::   kit000     ! first time step index 
     82      INTEGER                         , INTENT(in   ) ::   Kmm        ! ocean time level index 
    8283      CHARACTER(len=3)                , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    8384      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pu         ! in : 3 ocean transport components 
     
    115116         DO jj = 1, jpj 
    116117            DO ji = 1, jpi 
    117                zc = e3t_n(ji,jj,jk) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points 
     118               zc = e3t(ji,jj,jk,Kmm) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points 
    118119               zmld(ji,jj) = zmld(ji,jj) + zc 
    119120               zbm (ji,jj) = zbm (ji,jj) + zc * (rau0 - rhop(ji,jj,jk) ) * r1_rau0 
     
    147148      END SELECT 
    148149      !                                                ! convert density into buoyancy 
    149       zbm(:,:) = + grav * zbm(:,:) / MAX( e3t_n(:,:,1), zmld(:,:) ) 
     150      zbm(:,:) = + grav * zbm(:,:) / MAX( e3t(:,:,1,Kmm), zmld(:,:) ) 
    150151      ! 
    151152      ! 
     
    205206         DO jj = 1, jpjm1 
    206207            DO ji = 1, fs_jpim1   ! vector opt. 
    207                zcuw = 1._wp - ( gdepw_n(ji+1,jj,jk) + gdepw_n(ji,jj,jk) ) * zhu(ji,jj) 
    208                zcvw = 1._wp - ( gdepw_n(ji,jj+1,jk) + gdepw_n(ji,jj,jk) ) * zhv(ji,jj) 
     208               zcuw = 1._wp - ( gdepw(ji+1,jj,jk,Kmm) + gdepw(ji,jj,jk,Kmm) ) * zhu(ji,jj) 
     209               zcvw = 1._wp - ( gdepw(ji,jj+1,jk,Kmm) + gdepw(ji,jj,jk,Kmm) ) * zhv(ji,jj) 
    209210               zcuw = zcuw * zcuw 
    210211               zcvw = zcvw * zcvw 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tranpc.F90

    r10946 r10954  
    8585         IF( l_trdtra )   THEN                    !* Save initial after fields 
    8686            ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    87             ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    88             ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     87            ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs)  
     88            ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) 
    8989         ENDIF 
    9090         ! 
     
    9696         ENDIF 
    9797         ! 
    98          CALL eos_rab( tsa, zab )         ! after alpha and beta (given on T-points) 
    99          CALL bn2    ( tsa, zab, zn2 )    ! after Brunt-Vaisala  (given on W-points) 
     98         CALL eos_rab( ts(:,:,:,:,Krhs), zab, Kmm )         ! after alpha and beta (given on T-points) 
     99         CALL bn2    ( ts(:,:,:,:,Krhs), zab, zn2, Kmm )    ! after Brunt-Vaisala  (given on W-points) 
    100100         ! 
    101101         inpcc = 0 
     
    106106               IF( tmask(ji,jj,2) == 1 ) THEN      ! At least 2 ocean points 
    107107                  !                                     ! consider one ocean column  
    108                   zvts(:,jp_tem) = tsa(ji,jj,:,jp_tem)      ! temperature 
    109                   zvts(:,jp_sal) = tsa(ji,jj,:,jp_sal)      ! salinity 
     108                  zvts(:,jp_tem) = ts(ji,jj,:,jp_tem,Krhs)      ! temperature 
     109                  zvts(:,jp_sal) = ts(ji,jj,:,jp_sal,Krhs)      ! salinity 
    110110                  ! 
    111111                  zvab(:,jp_tem)  = zab(ji,jj,:,jp_tem)     ! Alpha  
     
    187187                           DO jk = ikup, ikbot      ! Inside the instable (and overlying neutral) portion of the column 
    188188                              ! 
    189                               zdz       = e3t_n(ji,jj,jk) 
     189                              zdz       = e3t(ji,jj,jk,Kmm) 
    190190                              zsum_temp = zsum_temp + zvts(jk,jp_tem)*zdz 
    191191                              zsum_sali = zsum_sali + zvts(jk,jp_sal)*zdz 
     
    236236 
    237237                              !! Interpolating alfa and beta at W point: 
    238                               zrw =  (gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk)) & 
    239                                  & / (gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk)) 
     238                              zrw =  (gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm)) & 
     239                                 & / (gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm)) 
    240240                              zaw = zvab(jk,jp_tem) * (1._wp - zrw) + zvab(jk-1,jp_tem) * zrw 
    241241                              zbw = zvab(jk,jp_sal) * (1._wp - zrw) + zvab(jk-1,jp_sal) * zrw 
     
    244244                              zvn2(jk) = grav*( zaw * ( zvts(jk-1,jp_tem) - zvts(jk,jp_tem) )     & 
    245245                                 &            - zbw * ( zvts(jk-1,jp_sal) - zvts(jk,jp_sal) )  )  & 
    246                                  &       / e3w_n(ji,jj,jk) * tmask(ji,jj,jk) 
     246                                 &       / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
    247247 
    248248                              !! OR, faster  => just considering the vertical gradient of density 
     
    288288 
    289289                  !! Updating tsa: 
    290                   tsa(ji,jj,:,jp_tem) = zvts(:,jp_tem) 
    291                   tsa(ji,jj,:,jp_sal) = zvts(:,jp_sal) 
     290                  ts(ji,jj,:,jp_tem,Krhs) = zvts(:,jp_tem) 
     291                  ts(ji,jj,:,jp_sal,Krhs) = zvts(:,jp_sal) 
    292292 
    293293                  !! LB:  Potentially some other global variable beside theta and S can be treated here 
     
    303303         IF( l_trdtra ) THEN         ! send the Non penetrative mixing trends for diagnostic 
    304304            z1_r2dt = 1._wp / (2._wp * rdt) 
    305             ztrdt(:,:,:) = ( tsa(:,:,:,jp_tem) - ztrdt(:,:,:) ) * z1_r2dt 
    306             ztrds(:,:,:) = ( tsa(:,:,:,jp_sal) - ztrds(:,:,:) ) * z1_r2dt 
     305            ztrdt(:,:,:) = ( ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) ) * z1_r2dt 
     306            ztrds(:,:,:) = ( ts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) ) * z1_r2dt 
    307307            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_npc, ztrdt ) 
    308308            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_npc, ztrds ) 
     
    310310         ENDIF 
    311311         ! 
    312          CALL lbc_lnk_multi( 'tranpc', tsa(:,:,:,jp_tem), 'T', 1., tsa(:,:,:,jp_sal), 'T', 1. ) 
     312         CALL lbc_lnk_multi( 'tranpc', ts(:,:,:,jp_tem,Krhs), 'T', 1., ts(:,:,:,jp_sal,Krhs), 'T', 1. ) 
    313313         ! 
    314314         IF( lwp .AND. l_LB_debug ) THEN 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tranxt.F90

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

    r10946 r10954  
    127127      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend 
    128128         ALLOCATE( ztrdt(jpi,jpj,jpk) )  
    129          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     129         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) 
    130130      ENDIF 
    131131      ! 
     
    173173                     zze     = 568.2 * zCtot**(-0.746) 
    174174                     IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) 
    175                      zpsi    = gdepw_n(ji,jj,jk) / zze 
     175                     zpsi    = gdepw(ji,jj,jk,Kmm) / zze 
    176176                     ! 
    177177                     zlogc   = LOG( zchl ) 
     
    219219            DO jj = 2, jpjm1 
    220220               DO ji = fs_2, fs_jpim1 
    221                   zc0 = ze0(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * xsi0r       ) 
    222                   zc1 = ze1(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekb(ji,jj) ) 
    223                   zc2 = ze2(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekg(ji,jj) ) 
    224                   zc3 = ze3(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekr(ji,jj) ) 
     221                  zc0 = ze0(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * xsi0r       ) 
     222                  zc1 = ze1(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekb(ji,jj) ) 
     223                  zc2 = ze2(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekg(ji,jj) ) 
     224                  zc3 = ze3(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekr(ji,jj) ) 
    225225                  ze0(ji,jj,jk) = zc0 
    226226                  ze1(ji,jj,jk) = zc1 
     
    249249            DO jj = 2, jpjm1 
    250250               DO ji = fs_2, fs_jpim1 
    251                   zc0 = zz0 * EXP( -gdepw_n(ji,jj,jk  )*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk  )*xsi1r ) 
    252                   zc1 = zz0 * EXP( -gdepw_n(ji,jj,jk+1)*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk+1)*xsi1r ) 
     251                  zc0 = zz0 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi1r ) 
     252                  zc1 = zz0 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi1r ) 
    253253                  qsr_hc(ji,jj,jk) = qsr(ji,jj) * ( zc0 * wmask(ji,jj,jk) - zc1 * wmask(ji,jj,jk+1) )  
    254254               END DO 
     
    262262         DO jj = 2, jpjm1        !-----------------------------! 
    263263            DO ji = fs_2, fs_jpim1   ! vector opt. 
    264                tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   & 
    265                   &                 + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t_n(ji,jj,jk) 
     264               ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs)   & 
     265                  &                 + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t(ji,jj,jk,Kmm) 
    266266            END DO 
    267267         END DO 
     
    296296      ! 
    297297      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    298          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     298         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 
    299299         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    300300         DEALLOCATE( ztrdt )  
    301301      ENDIF 
    302302      !                       ! print mean trends (used for debugging) 
    303       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' qsr  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
     303      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' qsr  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
    304304      ! 
    305305      IF( ln_timing )   CALL timing_stop('tra_qsr') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trasbc.F90

    r10946 r10954  
    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 (tsa). 
     65      !!             they are simply added to the tracer trend (ts(Krhs)). 
    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 tsa with the surface boundary condition trend  
     71      !! ** Action  : - Update ts(Krhs) with the surface boundary condition trend  
    7272      !!              - send trends to trdtra module for further diagnostics(l_trdtra=T) 
    7373      !!---------------------------------------------------------------------- 
     
    9191      IF( l_trdtra ) THEN                    !* Save ta and sa trends 
    9292         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    93          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    94          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     93         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) 
     94         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) 
    9595      ENDIF 
    9696      ! 
     
    132132         DO jj = 2, jpj                         !==>> add concentration/dilution effect due to constant volume cell 
    133133            DO ji = fs_2, fs_jpim1   ! vector opt. 
    134                sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_tem) 
    135                sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_sal) 
     134               sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * ts(ji,jj,1,jp_tem,Kmm) 
     135               sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * ts(ji,jj,1,jp_sal,Kmm) 
    136136            END DO 
    137137         END DO                                 !==>> output c./d. term 
    138          IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * tsn(:,:,1,jp_tem) ) 
    139          IF( iom_use('emp_x_sss') )   CALL iom_put( "emp_x_sss", emp (:,:) * tsn(:,:,1,jp_sal) ) 
     138         IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * ts(:,:,1,jp_tem,Kmm) ) 
     139         IF( iom_use('emp_x_sss') )   CALL iom_put( "emp_x_sss", emp (:,:) * ts(:,:,1,jp_sal,Kmm) ) 
    140140      ENDIF 
    141141      ! 
     
    143143         DO jj = 2, jpj 
    144144            DO ji = fs_2, fs_jpim1   ! vector opt.   
    145                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) 
     145               ts(ji,jj,1,jn,Krhs) = ts(ji,jj,1,jn,Krhs) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t(ji,jj,1,Kmm) 
    146146            END DO 
    147147         END DO 
     
    174174               DO jk = ikt, ikb - 1 
    175175               ! compute trend 
    176                   tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                                & 
     176                  ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs)                                                & 
    177177                     &           + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    178178                     &           * r1_hisf_tbl(ji,jj) 
     
    181181               ! level partially include in ice shelf boundary layer  
    182182               ! compute trend 
    183                tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem)                                                 & 
     183               ts(ji,jj,ikb,jp_tem,Krhs) = ts(ji,jj,ikb,jp_tem,Krhs)                                                 & 
    184184                  &              + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    185185                  &              * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 
     
    200200                  zdep = zfact / h_rnf(ji,jj) 
    201201                  DO jk = 1, nk_rnf(ji,jj) 
    202                                         tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                 & 
     202                                        ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs)                                 & 
    203203                                           &                 +  ( rnf_tsc_b(ji,jj,jp_tem) + rnf_tsc(ji,jj,jp_tem) ) * zdep 
    204                      IF( ln_rnf_sal )   tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)                                 & 
     204                     IF( ln_rnf_sal )   ts(ji,jj,jk,jp_sal,Krhs) = ts(ji,jj,jk,jp_sal,Krhs)                                 & 
    205205                                           &                 +  ( rnf_tsc_b(ji,jj,jp_sal) + rnf_tsc(ji,jj,jp_sal) ) * zdep  
    206206                  END DO 
     
    210210      ENDIF 
    211211 
    212       IF( iom_use('rnf_x_sst') )   CALL iom_put( "rnf_x_sst", rnf*tsn(:,:,1,jp_tem) )   ! runoff term on sst 
    213       IF( iom_use('rnf_x_sss') )   CALL iom_put( "rnf_x_sss", rnf*tsn(:,:,1,jp_sal) )   ! runoff term on sss 
     212      IF( iom_use('rnf_x_sst') )   CALL iom_put( "rnf_x_sst", rnf*ts(:,:,1,jp_tem,Kmm) )   ! runoff term on sst 
     213      IF( iom_use('rnf_x_sss') )   CALL iom_put( "rnf_x_sss", rnf*ts(:,:,1,jp_sal,Kmm) )   ! runoff term on sss 
    214214 
    215215#if defined key_asminc 
     
    224224            DO jj = 2, jpj  
    225225               DO ji = fs_2, fs_jpim1 
    226                   ztim = ssh_iau(ji,jj) / e3t_n(ji,jj,1) 
    227                   tsa(ji,jj,1,jp_tem) = tsa(ji,jj,1,jp_tem) + tsn(ji,jj,1,jp_tem) * ztim 
    228                   tsa(ji,jj,1,jp_sal) = tsa(ji,jj,1,jp_sal) + tsn(ji,jj,1,jp_sal) * ztim 
     226                  ztim = ssh_iau(ji,jj) / e3t(ji,jj,1,Kmm) 
     227                  ts(ji,jj,1,jp_tem,Krhs) = ts(ji,jj,1,jp_tem,Krhs) + ts(ji,jj,1,jp_tem,Kmm) * ztim 
     228                  ts(ji,jj,1,jp_sal,Krhs) = ts(ji,jj,1,jp_sal,Krhs) + ts(ji,jj,1,jp_sal,Kmm) * ztim 
    229229               END DO 
    230230            END DO 
     
    233233               DO ji = fs_2, fs_jpim1 
    234234                  ztim = ssh_iau(ji,jj) / ( ht_n(ji,jj) + 1. - ssmask(ji, jj) ) 
    235                   tsa(ji,jj,:,jp_tem) = tsa(ji,jj,:,jp_tem) + tsn(ji,jj,:,jp_tem) * ztim 
    236                   tsa(ji,jj,:,jp_sal) = tsa(ji,jj,:,jp_sal) + tsn(ji,jj,:,jp_sal) * ztim 
     235                  ts(ji,jj,:,jp_tem,Krhs) = ts(ji,jj,:,jp_tem,Krhs) + ts(ji,jj,:,jp_tem,Kmm) * ztim 
     236                  ts(ji,jj,:,jp_sal,Krhs) = ts(ji,jj,:,jp_sal,Krhs) + ts(ji,jj,:,jp_sal,Kmm) * ztim 
    237237               END DO   
    238238            END DO   
     
    251251            DO jj = 2, jpj  
    252252               DO ji = fs_2, fs_jpim1 
    253                   zdep = 1._wp / e3t_n(ji,jj,jk)  
    254                   tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 
    255                   tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep   
     253                  zdep = 1._wp / e3t(ji,jj,jk,Kmm)  
     254                  ts(ji,jj,jk,jp_tem,Krhs) = ts(ji,jj,jk,jp_tem,Krhs) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 
     255                  ts(ji,jj,jk,jp_sal,Krhs) = ts(ji,jj,jk,jp_sal,Krhs) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep   
    256256               END DO   
    257257            END DO   
     
    260260 
    261261      IF( l_trdtra )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    262          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    263          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     262         ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 
     263         ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 
    264264         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_nsr, ztrdt ) 
    265265         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_nsr, ztrds ) 
     
    267267      ENDIF 
    268268      ! 
    269       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' sbc  - Ta: ', mask1=tmask,   & 
    270          &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     269      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Krhs), clinfo1=' sbc  - Ta: ', mask1=tmask,   & 
     270         &                       tab3d_2=ts(:,:,:,jp_sal,Krhs), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    271271      ! 
    272272      IF( ln_timing )   CALL timing_stop('tra_sbc') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trazdf.F90

    r10946 r10954  
    101101      ENDIF 
    102102      !                                          ! print mean trends (used for debugging) 
    103       IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' zdf  - Ta: ', mask1=tmask,               & 
    104          &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     103      IF(ln_ctl)   CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Kaa), clinfo1=' zdf  - Ta: ', mask1=tmask,               & 
     104         &                       tab3d_2=pts(:,:,:,jp_sal,Kaa), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    105105      ! 
    106106      IF( ln_timing )   CALL timing_stop('tra_zdf') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/zpshde.F90

    r10425 r10954  
    3939CONTAINS 
    4040 
    41    SUBROUTINE zps_hde( kt, kjpt, pta, pgtu, pgtv,   & 
     41   SUBROUTINE zps_hde( kt, Kmm, kjpt, pta, pgtu, pgtv,   & 
    4242      &                          prd, pgru, pgrv    ) 
    4343      !!---------------------------------------------------------------------- 
     
    8585      !!---------------------------------------------------------------------- 
    8686      INTEGER                              , INTENT(in   )           ::  kt          ! ocean time-step index 
     87      INTEGER                              , INTENT(in   )           ::  Kmm         ! ocean time level index 
    8788      INTEGER                              , INTENT(in   )           ::  kjpt        ! number of tracers 
    8889      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   )           ::  pta         ! 4D tracers fields 
     
    109110               iku = mbku(ji,jj)   ;   ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    110111               ikv = mbkv(ji,jj)   ;   ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
    111 !!gm BUG ? when applied to before fields, e3w_b should be used.... 
    112                ze3wu = e3w_n(ji+1,jj  ,iku) - e3w_n(ji,jj,iku) 
    113                ze3wv = e3w_n(ji  ,jj+1,ikv) - e3w_n(ji,jj,ikv) 
     112!!gm BUG ? when applied to before fields, e3w(:,:,:,Kbb) should be used.... 
     113               ze3wu = e3w(ji+1,jj  ,iku,Kmm) - e3w(ji,jj,iku,Kmm) 
     114               ze3wv = e3w(ji  ,jj+1,ikv,Kmm) - e3w(ji,jj,ikv,Kmm) 
    114115               ! 
    115116               ! i- direction 
    116117               IF( ze3wu >= 0._wp ) THEN      ! case 1 
    117                   zmaxu =  ze3wu / e3w_n(ji+1,jj,iku) 
     118                  zmaxu =  ze3wu / e3w(ji+1,jj,iku,Kmm) 
    118119                  ! interpolated values of tracers 
    119120                  zti (ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikum1,jn) - pta(ji+1,jj,iku,jn) ) 
     
    121122                  pgtu(ji,jj,jn) = umask(ji,jj,1) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    122123               ELSE                           ! case 2 
    123                   zmaxu = -ze3wu / e3w_n(ji,jj,iku) 
     124                  zmaxu = -ze3wu / e3w(ji,jj,iku,Kmm) 
    124125                  ! interpolated values of tracers 
    125126                  zti (ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikum1,jn) - pta(ji,jj,iku,jn) ) 
     
    130131               ! j- direction 
    131132               IF( ze3wv >= 0._wp ) THEN      ! case 1 
    132                   zmaxv =  ze3wv / e3w_n(ji,jj+1,ikv) 
     133                  zmaxv =  ze3wv / e3w(ji,jj+1,ikv,Kmm) 
    133134                  ! interpolated values of tracers 
    134135                  ztj (ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvm1,jn) - pta(ji,jj+1,ikv,jn) ) 
     
    136137                  pgtv(ji,jj,jn) = vmask(ji,jj,1) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    137138               ELSE                           ! case 2 
    138                   zmaxv =  -ze3wv / e3w_n(ji,jj,ikv) 
     139                  zmaxv =  -ze3wv / e3w(ji,jj,ikv,Kmm) 
    139140                  ! interpolated values of tracers 
    140141                  ztj (ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvm1,jn) - pta(ji,jj,ikv,jn) ) 
     
    155156               iku = mbku(ji,jj) 
    156157               ikv = mbkv(ji,jj) 
    157                ze3wu  = e3w_n(ji+1,jj  ,iku) - e3w_n(ji,jj,iku) 
    158                ze3wv  = e3w_n(ji  ,jj+1,ikv) - e3w_n(ji,jj,ikv) 
    159                IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept_n(ji  ,jj,iku)     ! i-direction: case 1 
    160                ELSE                        ;   zhi(ji,jj) = gdept_n(ji+1,jj,iku)     ! -     -      case 2 
    161                ENDIF 
    162                IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept_n(ji,jj  ,ikv)     ! j-direction: case 1 
    163                ELSE                        ;   zhj(ji,jj) = gdept_n(ji,jj+1,ikv)     ! -     -      case 2 
     158               ze3wu  = e3w(ji+1,jj  ,iku,Kmm) - e3w(ji,jj,iku,Kmm) 
     159               ze3wv  = e3w(ji  ,jj+1,ikv,Kmm) - e3w(ji,jj,ikv,Kmm) 
     160               IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept(ji  ,jj,iku,Kmm)     ! i-direction: case 1 
     161               ELSE                        ;   zhi(ji,jj) = gdept(ji+1,jj,iku,Kmm)     ! -     -      case 2 
     162               ENDIF 
     163               IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept(ji,jj  ,ikv,Kmm)     ! j-direction: case 1 
     164               ELSE                        ;   zhj(ji,jj) = gdept(ji,jj+1,ikv,Kmm)     ! -     -      case 2 
    164165               ENDIF 
    165166            END DO 
     
    173174               iku = mbku(ji,jj) 
    174175               ikv = mbkv(ji,jj) 
    175                ze3wu  = e3w_n(ji+1,jj  ,iku) - e3w_n(ji,jj,iku) 
    176                ze3wv  = e3w_n(ji  ,jj+1,ikv) - e3w_n(ji,jj,ikv) 
     176               ze3wu  = e3w(ji+1,jj  ,iku,Kmm) - e3w(ji,jj,iku,Kmm) 
     177               ze3wv  = e3w(ji  ,jj+1,ikv,Kmm) - e3w(ji,jj,ikv,Kmm) 
    177178               IF( ze3wu >= 0._wp ) THEN   ;   pgru(ji,jj) = umask(ji,jj,1) * ( zri(ji  ,jj    ) - prd(ji,jj,iku) )   ! i: 1 
    178179               ELSE                        ;   pgru(ji,jj) = umask(ji,jj,1) * ( prd(ji+1,jj,iku) - zri(ji,jj    ) )   ! i: 2 
     
    192193 
    193194 
    194    SUBROUTINE zps_hde_isf( kt, kjpt, pta, pgtu, pgtv, pgtui, pgtvi,  & 
     195   SUBROUTINE zps_hde_isf( kt, Kmm, kjpt, pta, pgtu, pgtv, pgtui, pgtvi,  & 
    195196      &                          prd, pgru, pgrv, pgrui, pgrvi ) 
    196197      !!---------------------------------------------------------------------- 
     
    241242      !!---------------------------------------------------------------------- 
    242243      INTEGER                              , INTENT(in   )           ::  kt           ! ocean time-step index 
     244      INTEGER                              , INTENT(in   )           ::  Kmm          ! ocean time level index 
    243245      INTEGER                              , INTENT(in   )           ::  kjpt         ! number of tracers 
    244246      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   )           ::  pta          ! 4D tracers fields 
     
    270272               iku = mbku(ji,jj); ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    271273               ikv = mbkv(ji,jj); ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
    272                ze3wu = gdept_n(ji+1,jj,iku) - gdept_n(ji,jj,iku) 
    273                ze3wv = gdept_n(ji,jj+1,ikv) - gdept_n(ji,jj,ikv) 
     274               ze3wu = gdept(ji+1,jj,iku,Kmm) - gdept(ji,jj,iku,Kmm) 
     275               ze3wv = gdept(ji,jj+1,ikv,Kmm) - gdept(ji,jj,ikv,Kmm) 
    274276               ! 
    275277               ! i- direction 
    276278               IF( ze3wu >= 0._wp ) THEN      ! case 1 
    277                   zmaxu =  ze3wu / e3w_n(ji+1,jj,iku) 
     279                  zmaxu =  ze3wu / e3w(ji+1,jj,iku,Kmm) 
    278280                  ! interpolated values of tracers 
    279281                  zti (ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikum1,jn) - pta(ji+1,jj,iku,jn) ) 
     
    281283                  pgtu(ji,jj,jn) = ssumask(ji,jj) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    282284               ELSE                           ! case 2 
    283                   zmaxu = -ze3wu / e3w_n(ji,jj,iku) 
     285                  zmaxu = -ze3wu / e3w(ji,jj,iku,Kmm) 
    284286                  ! interpolated values of tracers 
    285287                  zti (ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikum1,jn) - pta(ji,jj,iku,jn) ) 
     
    290292               ! j- direction 
    291293               IF( ze3wv >= 0._wp ) THEN      ! case 1 
    292                   zmaxv =  ze3wv / e3w_n(ji,jj+1,ikv) 
     294                  zmaxv =  ze3wv / e3w(ji,jj+1,ikv,Kmm) 
    293295                  ! interpolated values of tracers 
    294296                  ztj (ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvm1,jn) - pta(ji,jj+1,ikv,jn) ) 
     
    296298                  pgtv(ji,jj,jn) = ssvmask(ji,jj) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    297299               ELSE                           ! case 2 
    298                   zmaxv =  -ze3wv / e3w_n(ji,jj,ikv) 
     300                  zmaxv =  -ze3wv / e3w(ji,jj,ikv,Kmm) 
    299301                  ! interpolated values of tracers 
    300302                  ztj (ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvm1,jn) - pta(ji,jj,ikv,jn) ) 
     
    318320               iku = mbku(ji,jj) 
    319321               ikv = mbkv(ji,jj) 
    320                ze3wu = gdept_n(ji+1,jj,iku) - gdept_n(ji,jj,iku) 
    321                ze3wv = gdept_n(ji,jj+1,ikv) - gdept_n(ji,jj,ikv) 
    322                ! 
    323                IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept_n(ji  ,jj,iku)    ! i-direction: case 1 
    324                ELSE                        ;   zhi(ji,jj) = gdept_n(ji+1,jj,iku)    ! -     -      case 2 
    325                ENDIF 
    326                IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept_n(ji,jj  ,ikv)    ! j-direction: case 1 
    327                ELSE                        ;   zhj(ji,jj) = gdept_n(ji,jj+1,ikv)    ! -     -      case 2 
     322               ze3wu = gdept(ji+1,jj,iku,Kmm) - gdept(ji,jj,iku,Kmm) 
     323               ze3wv = gdept(ji,jj+1,ikv,Kmm) - gdept(ji,jj,ikv,Kmm) 
     324               ! 
     325               IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept(ji  ,jj,iku,Kmm)    ! i-direction: case 1 
     326               ELSE                        ;   zhi(ji,jj) = gdept(ji+1,jj,iku,Kmm)    ! -     -      case 2 
     327               ENDIF 
     328               IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept(ji,jj  ,ikv,Kmm)    ! j-direction: case 1 
     329               ELSE                        ;   zhj(ji,jj) = gdept(ji,jj+1,ikv,Kmm)    ! -     -      case 2 
    328330               ENDIF 
    329331 
     
    340342               iku = mbku(ji,jj) 
    341343               ikv = mbkv(ji,jj) 
    342                ze3wu = gdept_n(ji+1,jj,iku) - gdept_n(ji,jj,iku) 
    343                ze3wv = gdept_n(ji,jj+1,ikv) - gdept_n(ji,jj,ikv) 
     344               ze3wu = gdept(ji+1,jj,iku,Kmm) - gdept(ji,jj,iku,Kmm) 
     345               ze3wv = gdept(ji,jj+1,ikv,Kmm) - gdept(ji,jj,ikv,Kmm) 
    344346 
    345347               IF( ze3wu >= 0._wp ) THEN   ;   pgru(ji,jj) = ssumask(ji,jj) * ( zri(ji  ,jj    ) - prd(ji,jj,iku) )   ! i: 1 
     
    369371               ! in this case e3w(i,j) - e3w(i,j+1) is not the distance between Tj~ and Tj 
    370372               ! the only common depth between cells (i,j) and (i,j+1) is gdepw_0 
    371                ze3wu  =  gdept_n(ji,jj,iku) - gdept_n(ji+1,jj,iku) 
    372                ze3wv  =  gdept_n(ji,jj,ikv) - gdept_n(ji,jj+1,ikv)  
     373               ze3wu  =  gdept(ji,jj,iku,Kmm) - gdept(ji+1,jj,iku,Kmm) 
     374               ze3wv  =  gdept(ji,jj,ikv,Kmm) - gdept(ji,jj+1,ikv,Kmm)  
    373375 
    374376               ! i- direction 
    375377               IF( ze3wu >= 0._wp ) THEN      ! case 1 
    376                   zmaxu = ze3wu / e3w_n(ji+1,jj,ikup1) 
     378                  zmaxu = ze3wu / e3w(ji+1,jj,ikup1,Kmm) 
    377379                  ! interpolated values of tracers 
    378380                  zti(ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikup1,jn) - pta(ji+1,jj,iku,jn) ) 
     
    380382                  pgtui(ji,jj,jn) = ssumask(ji,jj) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    381383               ELSE                           ! case 2 
    382                   zmaxu = - ze3wu / e3w_n(ji,jj,ikup1) 
     384                  zmaxu = - ze3wu / e3w(ji,jj,ikup1,Kmm) 
    383385                  ! interpolated values of tracers 
    384386                  zti(ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikup1,jn) - pta(ji,jj,iku,jn) ) 
     
    389391               ! j- direction 
    390392               IF( ze3wv >= 0._wp ) THEN      ! case 1 
    391                   zmaxv =  ze3wv / e3w_n(ji,jj+1,ikvp1) 
     393                  zmaxv =  ze3wv / e3w(ji,jj+1,ikvp1,Kmm) 
    392394                  ! interpolated values of tracers 
    393395                  ztj(ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvp1,jn) - pta(ji,jj+1,ikv,jn) ) 
     
    395397                  pgtvi(ji,jj,jn) = ssvmask(ji,jj) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    396398               ELSE                           ! case 2 
    397                   zmaxv =  - ze3wv / e3w_n(ji,jj,ikvp1) 
     399                  zmaxv =  - ze3wv / e3w(ji,jj,ikvp1,Kmm) 
    398400                  ! interpolated values of tracers 
    399401                  ztj(ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvp1,jn) - pta(ji,jj,ikv,jn) ) 
     
    416418               iku = miku(ji,jj) 
    417419               ikv = mikv(ji,jj) 
    418                ze3wu  =  gdept_n(ji,jj,iku) - gdept_n(ji+1,jj,iku) 
    419                ze3wv  =  gdept_n(ji,jj,ikv) - gdept_n(ji,jj+1,ikv)  
    420                ! 
    421                IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept_n(ji  ,jj,iku)    ! i-direction: case 1 
    422                ELSE                        ;   zhi(ji,jj) = gdept_n(ji+1,jj,iku)    ! -     -      case 2 
    423                ENDIF 
    424  
    425                IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept_n(ji,jj  ,ikv)    ! j-direction: case 1 
    426                ELSE                        ;   zhj(ji,jj) = gdept_n(ji,jj+1,ikv)    ! -     -      case 2 
     420               ze3wu  =  gdept(ji,jj,iku,Kmm) - gdept(ji+1,jj,iku,Kmm) 
     421               ze3wv  =  gdept(ji,jj,ikv,Kmm) - gdept(ji,jj+1,ikv,Kmm)  
     422               ! 
     423               IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = gdept(ji  ,jj,iku,Kmm)    ! i-direction: case 1 
     424               ELSE                        ;   zhi(ji,jj) = gdept(ji+1,jj,iku,Kmm)    ! -     -      case 2 
     425               ENDIF 
     426 
     427               IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = gdept(ji,jj  ,ikv,Kmm)    ! j-direction: case 1 
     428               ELSE                        ;   zhj(ji,jj) = gdept(ji,jj+1,ikv,Kmm)    ! -     -      case 2 
    427429               ENDIF 
    428430 
     
    437439               iku = miku(ji,jj)  
    438440               ikv = mikv(ji,jj)  
    439                ze3wu  =  gdept_n(ji,jj,iku) - gdept_n(ji+1,jj,iku) 
    440                ze3wv  =  gdept_n(ji,jj,ikv) - gdept_n(ji,jj+1,ikv)  
     441               ze3wu  =  gdept(ji,jj,iku,Kmm) - gdept(ji+1,jj,iku,Kmm) 
     442               ze3wv  =  gdept(ji,jj,ikv,Kmm) - gdept(ji,jj+1,ikv,Kmm)  
    441443 
    442444               IF( ze3wu >= 0._wp ) THEN ; pgrui(ji,jj) = ssumask(ji,jj) * ( zri(ji  ,jj      ) - prd(ji,jj,iku) ) ! i: 1 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdpen.F90

    r10946 r10954  
    7878      IF( kt /= nkstp ) THEN     ! full eos: set partial derivatives at the 1st call of kt time step 
    7979         nkstp = kt 
    80          CALL eos_pen( ts(:,:,:,:,Kmm), rab_PE, zpe ) 
     80         CALL eos_pen( ts(:,:,:,:,Kmm), rab_PE, zpe, Kmm ) 
    8181         CALL iom_put( "alphaPE", rab_pe(:,:,:,jp_tem) ) 
    8282         CALL iom_put( "betaPE" , rab_pe(:,:,:,jp_sal) ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfosm.F90

    r10946 r10954  
    15841584     ALLOCATE( imld_rst(jpi,jpj) ) 
    15851585     ! w-level of the mixing and mixed layers 
    1586      CALL eos_rab( ts(:,:,:,:,Kmm), rab_n ) 
    1587      CALL bn2(ts(:,:,:,:,Kmm), rab_n, rn2) 
     1586     CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm ) 
     1587     CALL bn2(ts(:,:,:,:,Kmm), rab_n, rn2, Kmm) 
    15881588     imld_rst(:,:)  = nlb10         ! Initialization to the number of w ocean point 
    15891589     hbl(:,:)  = 0._wp              ! here hbl used as a dummy variable, integrating vertically N^2 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/nemogcm.F90

    r10946 r10954  
    435435            CALL dia_obs( nit000 - 1, Nnn )              ! Observation operator for restart 
    436436         ENDIF      
    437          IF( lk_asminc )   CALL asm_inc_init          ! Assimilation increments 
     437         IF( lk_asminc )   CALL asm_inc_init( Nnn )   ! Assimilation increments 
    438438         ! 
    439439         RETURN                                       ! end of initialization 
     
    497497 
    498498      !                                      ! Assimilation increments 
    499       IF( lk_asminc    )   CALL asm_inc_init    ! Initialize assimilation increments 
     499      IF( lk_asminc    )   CALL asm_inc_init( Nnn )        ! Initialize assimilation increments 
    500500      ! 
    501501      IF(lwp) WRITE(numout,cform_aaa)           ! Flag AAAAAAA 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/step.F90

    r10946 r10954  
    131131      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    132132      !  THERMODYNAMICS 
    133                          CALL eos_rab( tsb, rab_b )       ! before local thermal/haline expension ratio at T-points 
    134                          CALL eos_rab( tsn, rab_n )       ! now    local thermal/haline expension ratio at T-points 
    135                          CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency 
    136                          CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency 
     133                         CALL eos_rab( tsb, rab_b, Nnn )       ! before local thermal/haline expension ratio at T-points 
     134                         CALL eos_rab( tsn, rab_n, Nnn )       ! now    local thermal/haline expension ratio at T-points 
     135                         CALL bn2    ( tsb, rab_b, rn2b, Nnn ) ! before Brunt-Vaisala frequency 
     136                         CALL bn2    ( tsn, rab_n, rn2, Nnn  ) ! now    Brunt-Vaisala frequency 
    137137 
    138138      !  VERTICAL PHYSICS 
     
    144144                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density 
    145145 
    146          IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
    147             &            CALL zps_hde    ( kstp, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    148             &                                          rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
    149  
    150          IF( ln_zps .AND.       ln_isfcav)                               & 
    151             &            CALL zps_hde_isf( kstp, jpts, tsb, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    152             &                                          rhd, gru , grv , grui, grvi   )  ! of t, s, rd at the first ocean level 
     146         IF( ln_zps .AND. .NOT. ln_isfcav)                                    & 
     147            &            CALL zps_hde    ( kstp, Nnn, jpts, tsb, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
     148            &                                          rhd, gru , grv    )       ! of t, s, rd at the last ocean level 
     149 
     150         IF( ln_zps .AND.       ln_isfcav)                                                & 
     151            &            CALL zps_hde_isf( kstp, Nnn, jpts, tsb, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
     152            &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
    153153         IF( ln_traldf_triad ) THEN  
    154154                         CALL ldf_slp_triad( kstp, Nbb, Nnn )             ! before slope for triad operator 
     
    175175!!                                         but ensures reproductible results 
    176176!!                                         with previous versions using split-explicit free surface           
    177             IF( ln_zps .AND. .NOT. ln_isfcav )                               & 
    178                &            CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,   &  ! Partial steps: before horizontal gradient 
    179                &                                          rhd, gru , grv     )  ! of t, s, rd at the last ocean level 
    180             IF( ln_zps .AND.       ln_isfcav )                                          & 
    181                &            CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
    182                &                                          rhd, gru , grv , grui, grvi   )  ! of t, s, rd at the first ocean level 
     177            IF( ln_zps .AND. .NOT. ln_isfcav )                                    & 
     178               &            CALL zps_hde    ( kstp, Nnn, jpts, tsn, gtsu, gtsv,   &  ! Partial steps: before horizontal gradient 
     179               &                                          rhd, gru , grv     )       ! of t, s, rd at the last ocean level 
     180            IF( ln_zps .AND.       ln_isfcav )                                               & 
     181               &            CALL zps_hde_isf( kstp, Nnn, jpts, tsn, gtsu, gtsv, gtui, gtvi,  &  ! Partial steps for top cell (ISF) 
     182               &                                          rhd, gru , grv , grui, grvi   )       ! of t, s, rd at the first ocean level 
    183183!!jc: fs simplification 
    184184                             
     
    241241 
    242242      IF(  lk_asminc .AND. ln_asmiau .AND. & 
    243          & ln_trainc )   CALL tra_asm_inc   ( kstp )  ! apply tracer assimilation increment 
     243         & ln_trainc )   CALL tra_asm_inc   ( kstp, Nnn      )  ! apply tracer assimilation increment 
    244244                         CALL tra_sbc       ( kstp, Nnn, Nrhs )  ! surface boundary condition 
    245245      IF( ln_traqsr  )   CALL tra_qsr       ( kstp, Nnn, Nrhs )  ! penetrative solar radiation qsr 
    246246      IF( ln_trabbc  )   CALL tra_bbc       ( kstp, Nnn, Nrhs )  ! bottom heat flux 
    247       IF( ln_trabbl  )   CALL tra_bbl       ( kstp, Nnn, Nrhs )  ! advective (and/or diffusive) bottom boundary layer scheme 
    248       IF( ln_tradmp  )   CALL tra_dmp       ( kstp, Nnn, Nrhs )  ! internal damping trends 
     247      IF( ln_trabbl  )   CALL tra_bbl       ( kstp, Nbb, Nnn, Nrhs )  ! advective (and/or diffusive) bottom boundary layer scheme 
     248      IF( ln_tradmp  )   CALL tra_dmp       ( kstp, Nbb, Nnn, Nrhs )  ! internal damping trends 
    249249      IF( ln_bdy     )   CALL bdy_tra_dmp   ( kstp )  ! bdy damping trends 
    250250#if defined key_agrif 
     
    255255      IF( ln_zdfosm  )   CALL tra_osm( kstp,      Nnn      , ts, Nrhs )  ! OSMOSIS non-local tracer fluxes ==> RHS 
    256256      IF( lrst_oce .AND. ln_zdfosm ) & 
    257            &             CALL osm_rst( kstp, Nnn, 'WRITE' )! write OSMOSIS outputs + wn (so must do here) to restarts 
    258                          CALL tra_ldf( kstp, Nnn, Nrhs )   ! lateral mixing 
     257           &             CALL osm_rst( kstp,      Nnn, 'WRITE' )         ! write OSMOSIS outputs + wn (so must do here) to restarts 
     258                         CALL tra_ldf( kstp, Nbb, Nnn, Nrhs )            ! lateral mixing 
    259259 
    260260!!gm : why CALL to dia_ptr has been moved here??? (use trends info?) 
     
    281281!!  
    282282!!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine 
    283                          CALL tra_nxt       ( kstp, Nnn, Nrhs )  ! finalize (bcs) tracer fields at next time step and swap 
    284                          CALL dyn_nxt       ( kstp, Nnn )        ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 
     283                         CALL tra_nxt       ( kstp, Nbb, Nnn, Nrhs )  ! finalize (bcs) tracer fields at next time step and swap 
     284                         CALL dyn_nxt       ( kstp,      Nnn )        ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 
    285285                         CALL ssh_swp       ( kstp )  ! swap of sea surface height 
    286286      IF(.NOT.ln_linssh) CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OFF/dtadyn.F90

    r10922 r10954  
    159159      ! 
    160160      CALL eos    ( ts(:,:,:,:,Kmm), rhd, rhop, gdept_0(:,:,:) ) ! In any case, we need rhop 
    161       CALL eos_rab( ts(:,:,:,:,Kmm), rab_n )       ! now    local thermal/haline expension ratio at T-points 
    162       CALL bn2    ( ts(:,:,:,:,Kmm), rab_n, rn2 ) ! before Brunt-Vaisala frequency need for zdfmxl 
     161      CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm )       ! now    local thermal/haline expension ratio at T-points 
     162      CALL bn2    ( ts(:,:,:,:,Kmm), rab_n, rn2, Kmm ) ! before Brunt-Vaisala frequency need for zdfmxl 
    163163 
    164164      rn2b(:,:,:) = rn2(:,:,:)         ! need for zdfmxl 
     
    785785      IF( l_ldfslp .AND. .NOT.lk_c1d ) THEN    ! Computes slopes (here avt is used as workspace) 
    786786         CALL eos    ( pts, rhd, rhop, gdept_0(:,:,:) ) 
    787          CALL eos_rab( pts, rab_n )       ! now local thermal/haline expension ratio at T-points 
    788          CALL bn2    ( pts, rab_n, rn2  ) ! now    Brunt-Vaisala 
     787         CALL eos_rab( pts, rab_n, Kmm )       ! now local thermal/haline expension ratio at T-points 
     788         CALL bn2    ( pts, rab_n, rn2, Kmm  ) ! now    Brunt-Vaisala 
    789789 
    790790      ! Partial steps: before Horizontal DErivative 
    791791      IF( ln_zps  .AND. .NOT. ln_isfcav)                            & 
    792          &            CALL zps_hde    ( kt, jpts, pts, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
     792         &            CALL zps_hde    ( kt, Kmm, jpts, pts, gtsu, gtsv,  &  ! Partial steps: before horizontal gradient 
    793793         &                                        rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
    794794      IF( ln_zps .AND.        ln_isfcav)                            & 
    795          &            CALL zps_hde_isf( kt, jpts, pts, gtsu, gtsv, gtui, gtvi, &  ! Partial steps for top cell (ISF) 
     795         &            CALL zps_hde_isf( kt, Kmm, jpts, pts, gtsu, gtsv, gtui, gtvi, &  ! Partial steps for top cell (ISF) 
    796796         &                                        rhd, gru , grv , grui, grvi )  ! of t, s, rd at the first ocean level 
    797797 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcadv.F90

    r10946 r10954  
    118118            &              CALL ldf_eiv_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm, Krhs )  ! add the eiv transport 
    119119         ! 
    120          IF( ln_mle    )   CALL tra_mle_trp( kt, nittrc000, zun, zvn, zwn, 'TRC' )  ! add the mle transport 
     120         IF( ln_mle    )   CALL tra_mle_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm      )  ! add the mle transport 
    121121         ! 
    122122      ENDIF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcbbl.F90

    r10946 r10954  
    3636CONTAINS 
    3737 
    38    SUBROUTINE trc_bbl( kt, Kmm, Krhs ) 
     38   SUBROUTINE trc_bbl( kt, Kbb, Kmm, Krhs ) 
    3939      !!---------------------------------------------------------------------- 
    4040      !!                  ***  ROUTINE bbl  *** 
     
    4646      !!----------------------------------------------------------------------   
    4747      INTEGER, INTENT( in ) ::   kt   ! ocean time-step  
    48       INTEGER, INTENT( in ) ::   Kmm, Krhs  ! time level indices 
     48      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! time level indices 
    4949      INTEGER :: jn                   ! loop index 
    5050      CHARACTER (len=22) :: charout 
     
    5555      ! 
    5656      IF( .NOT. l_offline .AND. nn_dttrc == 1 ) THEN 
    57          CALL bbl( kt, nittrc000, 'TRC' )      ! Online coupling with dynamics  : Computation of bbl coef and bbl transport 
    58          l_bbl = .FALSE.                       ! Offline coupling with dynamics : Read bbl coef and bbl transport from input files 
     57         CALL bbl( kt, nittrc000, 'TRC', Kbb, Kmm )  ! Online coupling with dynamics  : Computation of bbl coef and bbl transport 
     58         l_bbl = .FALSE.                             ! Offline coupling with dynamics : Read bbl coef and bbl transport from input files 
    5959      ENDIF 
    6060 
     
    6767      IF( nn_bbl_ldf == 1 ) THEN 
    6868         ! 
    69          CALL tra_bbl_dif( trb, tra, jptra 
     69         CALL tra_bbl_dif( trb, tra, jptra, Kmm 
    7070         IF( ln_ctl )   THEN 
    7171            WRITE(charout, FMT="(' bbl_dif')")  ;  CALL prt_ctl_trc_info(charout) 
     
    7878      IF( nn_bbl_adv /= 0 ) THEN 
    7979         ! 
    80          CALL tra_bbl_adv( trb, tra, jptra 
     80         CALL tra_bbl_adv( trb, tra, jptra, Kmm 
    8181         IF( ln_ctl )   THEN 
    8282            WRITE(charout, FMT="(' bbl_adv')")  ;  CALL prt_ctl_trc_info(charout) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcldf.F90

    r10946 r10954  
    9494      ! 
    9595      CASE ( np_lap   )                               ! iso-level laplacian 
    96          CALL tra_ldf_lap  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb,      tra, jptra,    1    ) 
     96         CALL tra_ldf_lap  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb,      tra, jptra,    1    , Kmm ) 
    9797      CASE ( np_lap_i )                               ! laplacian : standard iso-neutral operator (Madec) 
    98          CALL tra_ldf_iso  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra,    1    ) 
     98         CALL tra_ldf_iso  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra,    1    , Kmm ) 
    9999      CASE ( np_lap_it )                              ! laplacian : triad iso-neutral operator (griffies) 
    100100         CALL tra_ldf_triad( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra,    1    , Kmm ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcnxt.F90

    r10946 r10954  
    5454CONTAINS 
    5555 
    56    SUBROUTINE trc_nxt( kt, Kmm, Krhs ) 
     56   SUBROUTINE trc_nxt( kt, Kbb, Kmm, Krhs ) 
    5757      !!---------------------------------------------------------------------- 
    5858      !!                   ***  ROUTINE trcnxt  *** 
     
    7979      !!---------------------------------------------------------------------- 
    8080      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    81       INTEGER, INTENT( in ) ::   Kmm, Krhs  ! time level indices 
     81      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! time level indices 
    8282      ! 
    8383      INTEGER  ::   jk, jn   ! dummy loop indices 
     
    157157      ELSE      
    158158         IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
    159             IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt, nittrc000,         'TRC', trb, trn, tra, jptra )  !     linear ssh 
    160             ELSE                   ;   CALL tra_nxt_vvl( kt, Kmm, Krhs, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
    161               &                                                                   sbc_trc, sbc_trc_b, jptra )  ! non-linear ssh 
     159            IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nittrc000,         'TRC', trb, trn, tra, jptra )  !     linear ssh 
     160            ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
     161              &                                                                                   sbc_trc, sbc_trc_b, jptra )  ! non-linear ssh 
    162162            ENDIF 
    163163         ELSE 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trctrp.F90

    r10946 r10954  
    6262         ! 
    6363                                CALL trc_sbc    ( kt, Kmm, Krhs )      ! surface boundary condition 
    64          IF( ln_trabbl )        CALL trc_bbl    ( kt, Kmm, Krhs )      ! advective (and/or diffusive) bottom boundary layer scheme 
     64         IF( ln_trabbl )        CALL trc_bbl    ( kt, Kbb, Kmm, Krhs ) ! advective (and/or diffusive) bottom boundary layer scheme 
    6565         IF( ln_trcdmp )        CALL trc_dmp    ( kt, Kmm, Krhs )      ! internal damping trends 
    6666         IF( ln_bdy )           CALL trc_bdy_dmp( kt )                 ! BDY damping trends 
     
    6868         !                                                             ! Partial top/bottom cell: GRADh( trb )   
    6969         IF( ln_zps ) THEN 
    70            IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom 
    71            ELSE                 ; CALL zps_hde    ( kt, jptra, trb, gtru, gtrv )                                      !  only bottom 
     70           IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, Kmm, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom 
     71           ELSE                 ; CALL zps_hde    ( kt, Kmm, jptra, trb, gtru, gtrv )                                      !  only bottom 
    7272           ENDIF 
    7373         ENDIF 
     
    7878#endif 
    7979                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after 
    80                                 CALL trc_nxt    ( kt, Kmm, Krhs )        ! tracer fields at next time step      
     80                                CALL trc_nxt    ( kt, Kbb, Kmm, Krhs )        ! tracer fields at next time step      
    8181         IF( ln_trcrad )        CALL trc_rad    ( kt, Kmm, Krhs )        ! Correct artificial negative concentrations 
    8282         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kt )                   ! internal damping trends on closed seas only 
     
    8787         IF( ln_trcdmp )        CALL trc_dmp( kt, Kmm, Krhs )            ! internal damping trends 
    8888                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after 
    89                                 CALL trc_nxt( kt, Kmm, Krhs )            ! tracer fields at next time step      
     89                                CALL trc_nxt( kt, Kbb, Kmm, Krhs )       ! tracer fields at next time step      
    9090          IF( ln_trcrad )       CALL trc_rad( kt, Kmm, Krhs )            ! Correct artificial negative concentrations 
    9191         ! 
Note: See TracChangeset for help on using the changeset viewer.