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

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

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

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

File:
1 edited

Legend:

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

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