New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10966 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcsink.F90 – NEMO

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

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert TOP routines in TOP/TRP directory and all knock on effects of these conversions. SETTE tested (GYRE_PISCES only)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcsink.F90

    r10376 r10966  
    3535   !!---------------------------------------------------------------------- 
    3636 
    37    SUBROUTINE trc_sink ( kt, pwsink, psinkflx, jp_tra, rsfact ) 
     37   SUBROUTINE trc_sink ( kt, Kbb, Kmm, pwsink, psinkflx, jp_tra, rsfact ) 
    3838      !!--------------------------------------------------------------------- 
    3939      !!                     ***  ROUTINE trc_sink  *** 
     
    4545      !!--------------------------------------------------------------------- 
    4646      INTEGER , INTENT(in)  :: kt 
     47      INTEGER , INTENT(in)  :: Kbb, Kmm 
    4748      INTEGER , INTENT(in)  :: jp_tra    ! tracer index index       
    4849      REAL(wp), INTENT(in)  :: rsfact    ! time step duration 
     
    7576               DO jk = 1, jpkm1 
    7677                  IF( tmask(ji,jj,jk) == 1.0 ) THEN 
    77                       zwsmax =  0.5 * e3t_n(ji,jj,jk) * rday / rsfact 
     78                      zwsmax =  0.5 * e3t(ji,jj,jk,Kmm) * rday / rsfact 
    7879                      iiter(ji,jj) =  MAX( iiter(ji,jj), INT( pwsink(ji,jj,jk) / zwsmax ) ) 
    7980                  ENDIF 
     
    8889            DO ji = 1, jpi 
    8990               IF( tmask(ji,jj,jk) == 1 ) THEN 
    90                  zwsmax = 0.5 * e3t_n(ji,jj,jk) * rday / rsfact 
     91                 zwsmax = 0.5 * e3t(ji,jj,jk,Kmm) * rday / rsfact 
    9192                 zwsink(ji,jj,jk) = MIN( pwsink(ji,jj,jk), zwsmax * REAL( iiter(ji,jj), wp ) ) 
    9293               ENDIF 
     
    101102      !   Compute the sedimentation term using trc_sink2 for the considered sinking particle 
    102103      !   ----------------------------------------------------- 
    103       CALL trc_sink2( zwsink, psinkflx, jp_tra, iiter, rsfact ) 
     104      CALL trc_sink2( Kbb, Kmm, zwsink, psinkflx, jp_tra, iiter, rsfact ) 
    104105      ! 
    105106      IF( ln_timing )   CALL timing_stop('trc_sink') 
     
    107108   END SUBROUTINE trc_sink 
    108109 
    109    SUBROUTINE trc_sink2( pwsink, psinkflx, jp_tra, kiter, rsfact ) 
     110   SUBROUTINE trc_sink2( Kbb, Kmm, pwsink, psinkflx, jp_tra, kiter, rsfact ) 
    110111      !!--------------------------------------------------------------------- 
    111112      !!                     ***  ROUTINE trc_sink2  *** 
     
    118119      !!      transport term, i.e.  div(u*tra). 
    119120      !!--------------------------------------------------------------------- 
     121      INTEGER,  INTENT(in   )                         ::   Kbb, Kmm  ! time level indices 
    120122      INTEGER,  INTENT(in   )                         ::   jp_tra    ! tracer index index       
    121123      REAL(wp), INTENT(in   )                         ::   rsfact    ! duration of time step 
     
    133135      ztraz(:,:,:) = 0.e0 
    134136      zakz (:,:,:) = 0.e0 
    135       ztrb (:,:,:) = trb(:,:,:,jp_tra) 
     137      ztrb (:,:,:) = tr(:,:,:,jp_tra,Kbb) 
    136138 
    137139      DO jk = 1, jpkm1 
     
    150152               !               
    151153               DO jk = 2, jpkm1 
    152                   ztraz(ji,jj,jk) = ( trb(ji,jj,jk-1,jp_tra) - trb(ji,jj,jk,jp_tra) ) * tmask(ji,jj,jk) 
     154                  ztraz(ji,jj,jk) = ( tr(ji,jj,jk-1,jp_tra,Kbb) - tr(ji,jj,jk,jp_tra,Kbb) ) * tmask(ji,jj,jk) 
    153155               END DO 
    154156               ztraz(ji,jj,1  ) = 0.0 
     
    169171               ! vertical advective flux 
    170172               DO jk = 1, jpkm1 
    171                   zigma = zwsink2(ji,jj,jk+1) * zstep / e3w_n(ji,jj,jk+1) 
     173                  zigma = zwsink2(ji,jj,jk+1) * zstep / e3w(ji,jj,jk+1,Kmm) 
    172174                  zew   = zwsink2(ji,jj,jk+1) 
    173                   psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
     175                  psinkflx(ji,jj,jk+1) = -zew * ( tr(ji,jj,jk,jp_tra,Kbb) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
    174176               END DO 
    175177               ! 
     
    179181          
    180182               DO jk=1,jpkm1 
    181                   zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t_n(ji,jj,jk) 
    182                   trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 
     183                  zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm) 
     184                  tr(ji,jj,jk,jp_tra,Kbb) = tr(ji,jj,jk,jp_tra,Kbb) + zflx 
    183185               END DO 
    184186            END DO 
     
    189191         DO jj = 1,jpj 
    190192            DO ji = 1, jpi 
    191                zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t_n(ji,jj,jk) 
     193               zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm) 
    192194               ztrb(ji,jj,jk) = ztrb(ji,jj,jk) + 2. * zflx 
    193195            END DO 
     
    195197      END DO 
    196198 
    197       trb(:,:,:,jp_tra) = ztrb(:,:,:) 
     199      tr(:,:,:,jp_tra,Kbb) = ztrb(:,:,:) 
    198200      psinkflx(:,:,:)   = 2. * psinkflx(:,:,:) 
    199201      ! 
Note: See TracChangeset for help on using the changeset viewer.