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/trcnxt.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/trcnxt.F90

    r10963 r10966  
    6161      !!      next time-step from their temporal trends and swap the fields. 
    6262      !!  
    63       !! ** Method  :   Apply lateral boundary conditions on (ua,va) through  
     63      !! ** Method  :   Apply lateral boundary conditions on (uu(Krhs),vv(Krhs)) through  
    6464      !!      call to lbc_lnk routine 
    6565      !!   default: 
    6666      !!      arrays swap 
    67       !!         (trn) = (tra) ; (tra) = (0,0) 
    68       !!         (trb) = (trn)  
     67      !!         (tr(Kmm)) = (tr(Krhs)) ; (tr(Krhs)) = (0,0) 
     68      !!         (tr(Kbb)) = (tr(Kmm))  
    6969      !! 
    7070      !!   For Arakawa or TVD Scheme :  
    71       !!      A Asselin time filter applied on now tracers (trn) to avoid 
     71      !!      A Asselin time filter applied on now tracers (tr(:,:,:,:,Kmm)) to avoid 
    7272      !!      the divergence of two consecutive time-steps and tr arrays 
    7373      !!      to prepare the next time_step: 
    74       !!         (trb) = (trn) + atfp [ (trb) + (tra) - 2 (trn) ] 
    75       !!         (trn) = (tra) ; (tra) = (0,0) 
    76       !! 
    77       !! 
    78       !! ** Action  : - update trb, trn 
     74      !!         (tr(Kbb)) = (tr(Kmm)) + atfp [ (tr(Kbb)) + (tr(Krhs)) - 2 (tr(Kmm)) ] 
     75      !!         (tr(Kmm)) = (tr(Krhs)) ; (tr(Krhs)) = (0,0) 
     76      !! 
     77      !! 
     78      !! ** Action  : - update tr(Kbb), tr(Kmm) 
    7979      !!---------------------------------------------------------------------- 
    8080      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
     
    9898#endif 
    9999      ! Update after tracer on domain lateral boundaries 
    100       CALL lbc_lnk( 'trcnxt', tra(:,:,:,:), 'T', 1. )    
     100      CALL lbc_lnk( 'trcnxt', tr(:,:,:,:,Krhs), 'T', 1. )    
    101101 
    102102      IF( ln_bdy )  CALL trc_bdy( kt, Kbb, Kmm, Krhs ) 
     
    113113         ! total trend for the non-time-filtered variables.  
    114114         zfact = 1.0 / rdttrc 
    115          ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
     115         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from ts(Kmm) terms 
    116116         IF( ln_linssh ) THEN       ! linear sea surface height only 
    117117            DO jn = 1, jptra 
    118118               DO jk = 1, jpkm1 
    119                   ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - trn(:,:,jk,jn)) * zfact 
     119                  ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - tr(:,:,jk,jn,Kmm)) * zfact 
    120120               END DO 
    121121            END DO 
     
    123123            DO jn = 1, jptra 
    124124               DO jk = 1, jpkm1 
    125                   ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     125                  ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Krhs) - tr(:,:,jk,jn,Kmm) ) * zfact 
    126126               END DO 
    127127            END DO 
     
    135135            ! Store now fields before applying the Asselin filter  
    136136            ! in order to calculate Asselin filter trend later. 
    137             ztrdt(:,:,:,:) = trn(:,:,:,:)  
     137            ztrdt(:,:,:,:) = tr(:,:,:,:,Kmm)  
    138138         ENDIF 
    139139 
     
    143143         DO jn = 1, jptra 
    144144            DO jk = 1, jpkm1 
    145                trn(:,:,jk,jn) = tra(:,:,jk,jn) 
    146                trb(:,:,jk,jn) = trn(:,:,jk,jn 
     145               tr(:,:,jk,jn,Kmm) = tr(:,:,jk,jn,Krhs) 
     146               tr(:,:,jk,jn,Kbb) = tr(:,:,jk,jn,Kmm 
    147147            END DO 
    148148         END DO 
     
    157157      ELSE      
    158158         IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
    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 
     159            IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nittrc000,         'TRC',                & 
     160              &                                              tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), tr(:,:,:,:,Krhs), jptra )  !     linear ssh 
     161            ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nittrc000, rdttrc, 'TRC',                & 
     162              &                                              tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), tr(:,:,:,:,Krhs),      & 
     163              &                                              sbc_trc, sbc_trc_b, jptra )                                  ! non-linear ssh 
    162164            ENDIF 
    163165         ELSE 
    164                                        CALL trc_nxt_off( kt )       ! offline  
    165          ENDIF 
    166          ! 
    167          CALL lbc_lnk_multi( 'trcnxt', trb(:,:,:,:), 'T', 1._wp, trn(:,:,:,:), 'T', 1._wp, tra(:,:,:,:), 'T', 1._wp ) 
     166                                       CALL trc_nxt_off( kt, Kbb, Kmm, Krhs )       ! offline  
     167         ENDIF 
     168         ! 
     169         CALL lbc_lnk_multi( 'trcnxt', tr(:,:,:,:,Kbb), 'T', 1._wp, tr(:,:,:,:,Kmm), 'T', 1._wp, tr(:,:,:,:,Krhs), 'T', 1._wp ) 
    168170      ENDIF 
    169171      ! 
     
    172174            DO jk = 1, jpkm1 
    173175               zfact = 1._wp / r2dttrc   
    174                ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
     176               ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Kbb) - ztrdt(:,:,jk,jn) ) * zfact  
    175177            END DO 
    176178            CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
     
    182184         WRITE(charout, FMT="('nxt')") 
    183185         CALL prt_ctl_trc_info(charout) 
    184          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
     186         CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm) 
    185187      ENDIF 
    186188      ! 
     
    190192 
    191193 
    192    SUBROUTINE trc_nxt_off( kt ) 
     194   SUBROUTINE trc_nxt_off( kt, Kbb, Kmm, Krhs ) 
    193195      !!---------------------------------------------------------------------- 
    194196      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    204206      !!                This can be summurized for tempearture as: 
    205207      !!             ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )   ln_dynhpg_imp = T 
    206       !!                  /( e3t_n    + rbcp*[ e3t_b    - 2 e3t_n    + e3t_a    ] )    
     208      !!                  /( e3t(:,:,:,Kmm)    + rbcp*[ e3t(:,:,:,Kbb)    - 2 e3t(:,:,:,Kmm)    + e3t(:,:,:,Krhs)    ] )    
    207209      !!             ztm = 0                                                       otherwise 
    208210      !!             tb  = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
    209       !!                  /( e3t_n    + atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
     211      !!                  /( e3t(:,:,:,Kmm)    + atfp*[ e3t(:,:,:,Kbb)    - 2 e3t(:,:,:,Kmm)    + e3t(:,:,:,Krhs)    ] ) 
    210212      !!             tn  = ta  
    211213      !!             ta  = zt        (NB: reset to 0 after eos_bn2 call) 
     
    214216      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
    215217      !!---------------------------------------------------------------------- 
    216       INTEGER , INTENT(in   )   ::  kt       ! ocean time-step index 
     218      INTEGER, INTENT(in   )   ::  kt              ! ocean time-step index 
     219      INTEGER, INTENT(in   )   ::  Kbb, Kmm, Krhs  ! time level indices 
    217220      !!      
    218221      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
     
    236239            DO jj = 1, jpj 
    237240               DO ji = 1, jpi 
    238                   ze3t_b = e3t_b(ji,jj,jk) 
    239                   ze3t_n = e3t_n(ji,jj,jk) 
    240                   ze3t_a = e3t_a(ji,jj,jk) 
     241                  ze3t_b = e3t(ji,jj,jk,Kbb) 
     242                  ze3t_n = e3t(ji,jj,jk,Kmm) 
     243                  ze3t_a = e3t(ji,jj,jk,Krhs) 
    241244                  !                                         ! tracer content at Before, now and after 
    242                   ztc_b  = trb(ji,jj,jk,jn) * ze3t_b 
    243                   ztc_n  = trn(ji,jj,jk,jn) * ze3t_n 
    244                   ztc_a  = tra(ji,jj,jk,jn) * ze3t_a 
     245                  ztc_b  = tr(ji,jj,jk,jn,Kbb) * ze3t_b 
     246                  ztc_n  = tr(ji,jj,jk,jn,Kmm) * ze3t_n 
     247                  ztc_a  = tr(ji,jj,jk,jn,Krhs) * ze3t_a 
    245248                  ! 
    246249                  ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
     
    256259 
    257260                  ze3t_f = 1.e0 / ze3t_f 
    258                   trb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
    259                   trn(ji,jj,jk,jn) = tra(ji,jj,jk,jn)     ! ptn <-- pta 
     261                  tr(ji,jj,jk,jn,Kbb) = ztc_f * ze3t_f           ! pt(:,:,:,:,Kbb) <-- pt(:,:,:,:,Kmm) filtered 
     262                  tr(ji,jj,jk,jn,Kmm) = tr(ji,jj,jk,jn,Krhs)     ! pt(:,:,:,:,Kmm) <-- pt(:,:,:,:,Krhs) 
    260263                  ! 
    261264               END DO 
     
    272275   !!---------------------------------------------------------------------- 
    273276CONTAINS 
    274    SUBROUTINE trc_nxt( kt 
     277   SUBROUTINE trc_nxt( kt, Kbb, Kmm, Krhs 
    275278      INTEGER, INTENT(in) :: kt 
     279      INTEGER, INTENT(in) :: Kbb, Kmm, Krhs  ! time level indices 
    276280      WRITE(*,*) 'trc_nxt: You should not have seen this print! error?', kt 
    277281   END SUBROUTINE trc_nxt 
Note: See TracChangeset for help on using the changeset viewer.