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 11057 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/TRA/traatf.F90 – NEMO

Ignore:
Timestamp:
2019-05-24T17:36:26+02:00 (5 years ago)
Author:
davestorkey
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap : Rewrite time filtering of tracers and SSH. This version now bit compares with the base code for ORCA1 starting from a restart.
To do:

  1. Check that it bit compares with an Euler timestep.
  2. Full SETTE tests.
  3. Check that it compiles with C1D.
  4. Check that TOP works (see 1).
File:
1 moved

Legend:

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

    r11056 r11057  
    1 MODULE tranxt 
     1MODULE traatf 
    22   !!====================================================================== 
    3    !!                       ***  MODULE  tranxt  *** 
     3   !!                       ***  MODULE  traatf  *** 
    44   !! Ocean active tracers:  time stepping on temperature and salinity 
    55   !!====================================================================== 
     
    2020 
    2121   !!---------------------------------------------------------------------- 
    22    !!   tra_nxt       : time stepping on tracers 
    23    !!   tra_nxt_fix   : time stepping on tracers : fixed    volume case 
    24    !!   tra_nxt_vvl   : time stepping on tracers : variable volume case 
     22   !!   tra_atf       : time stepping on tracers 
     23   !!   tra_atf_fix   : time stepping on tracers : fixed    volume case 
     24   !!   tra_atf_vvl   : time stepping on tracers : variable volume case 
    2525   !!---------------------------------------------------------------------- 
    2626   USE oce             ! ocean dynamics and tracers variables 
     
    5151   PRIVATE 
    5252 
    53    PUBLIC   tra_nxt       ! routine called by step.F90 
    54    PUBLIC   tra_nxt_fix   ! to be used in trcnxt 
    55    PUBLIC   tra_nxt_vvl   ! to be used in trcnxt 
     53   PUBLIC   tra_atf       ! routine called by step.F90 
     54   PUBLIC   tra_atf_fix   ! to be used in trcnxt 
     55   PUBLIC   tra_atf_vvl   ! to be used in trcnxt 
    5656 
    5757   !! * Substitutions 
     
    6464CONTAINS 
    6565 
    66    SUBROUTINE tra_nxt( kt, Kbb, Kmm, Krhs, Kaa ) 
    67       !!---------------------------------------------------------------------- 
    68       !!                   ***  ROUTINE tranxt  *** 
     66   SUBROUTINE tra_atf( kt, Kbb, Kmm, Kaa, pts ) 
     67      !!---------------------------------------------------------------------- 
     68      !!                   ***  ROUTINE traatf  *** 
     69      !! 
     70      !!       !!!!!!!!!!!!!!!!!  REWRITE HEADER COMMENTS !!!!!!!!!!!!!!! 
    6971      !! 
    7072      !! ** Purpose :   Apply the boundary condition on the after temperature   
     
    8688      !! ** Action  : - ts(Kbb) & ts(Kmm) ready for the next time step 
    8789      !!---------------------------------------------------------------------- 
    88       INTEGER, INTENT(in) ::   kt                   ! ocean time-step index 
    89       INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs, Kaa  ! time level indices 
     90      INTEGER                                  , INTENT(in   ) :: kt             ! ocean time-step index 
     91      INTEGER                                  , INTENT(in   ) :: Kbb, Kmm, Kaa  ! time level indices 
     92      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts            ! active tracers  
    9093      !! 
    9194      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    9497      !!---------------------------------------------------------------------- 
    9598      ! 
    96       IF( ln_timing )   CALL timing_start( 'tra_nxt') 
     99      IF( ln_timing )   CALL timing_start( 'tra_atf') 
    97100      ! 
    98101      IF( kt == nit000 ) THEN 
    99102         IF(lwp) WRITE(numout,*) 
    100          IF(lwp) WRITE(numout,*) 'tra_nxt : achieve the time stepping by Asselin filter and array swap' 
     103         IF(lwp) WRITE(numout,*) 'tra_atf : achieve the time stepping by Asselin filter and array swap' 
    101104         IF(lwp) WRITE(numout,*) '~~~~~~~' 
    102105      ENDIF 
     
    108111#endif 
    109112      !                                              ! local domain boundaries  (T-point, unchanged sign) 
    110       CALL lbc_lnk_multi( 'tranxt', ts(:,:,:,jp_tem,Krhs), 'T', 1., ts(:,:,:,jp_sal,Krhs), 'T', 1. ) 
    111       ! 
    112       !! IMMERSE development : Following the general pattern for the new code we want to pass in the  
    113       !!                       velocities to bdy_dyn as arguments so here we use "ts" even  
    114       !!                       though we haven't converted the tracer names in the rest of tranxt.F90 
    115       !!                       because it will be completely rewritten. DS. 
    116       IF( ln_bdy )   CALL bdy_tra( kt, Kbb, ts, Kaa )  ! BDY open boundaries 
     113      CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1. ) 
     114      ! 
     115      IF( ln_bdy )   CALL bdy_tra( kt, Kbb, pts, Kaa )  ! BDY open boundaries 
    117116  
    118117      ! set time step size (Euler/Leapfrog) 
     
    127126         ztrds(:,:,jpk) = 0._wp 
    128127         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
    129             CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
    130             CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
     128            CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     129            CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
    131130         ENDIF 
    132131         ! total trend for the non-time-filtered variables.  
    133132         zfact = 1.0 / rdt 
    134          ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from ts(Kmm) terms 
     133         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from pts(Kmm) terms 
    135134         DO jk = 1, jpkm1 
    136             ztrdt(:,:,jk) = ( ts(:,:,jk,jp_tem,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - ts(:,:,jk,jp_tem,Kmm)) * zfact 
    137             ztrds(:,:,jk) = ( ts(:,:,jk,jp_sal,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - ts(:,:,jk,jp_sal,Kmm)) * zfact 
    138          END DO 
    139          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_tot, ztrdt ) 
    140          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_tot, ztrds ) 
     135            ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa) / e3t(:,:,jk,Kmm) - pts(:,:,jk,jp_tem,Kmm)) * zfact 
     136            ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa) / e3t(:,:,jk,Kmm) - pts(:,:,jk,jp_sal,Kmm)) * zfact 
     137         END DO 
     138         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_tot, ztrdt ) 
     139         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_sal, jptra_tot, ztrds ) 
    141140         IF( ln_linssh ) THEN       ! linear sea surface height only 
    142141            ! Store now fields before applying the Asselin filter  
    143142            ! in order to calculate Asselin filter trend later. 
    144             ztrdt(:,:,:) = ts(:,:,:,jp_tem,Kmm)  
    145             ztrds(:,:,:) = ts(:,:,:,jp_sal,Kmm) 
     143            ztrdt(:,:,:) = pts(:,:,:,jp_tem,Kmm)  
     144            ztrds(:,:,:) = pts(:,:,:,jp_sal,Kmm) 
    146145         ENDIF 
    147146      ENDIF 
     
    150149         DO jn = 1, jpts 
    151150            DO jk = 1, jpkm1 
    152                ts(:,:,jk,jn,Kmm) = ts(:,:,jk,jn,Krhs)     
     151               pts(:,:,jk,jn,Kmm) = pts(:,:,jk,jn,Kaa)     
    153152            END DO 
    154153         END DO 
    155154         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
    156             !                                        ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
     155            !                                        ! Asselin filter is output by tra_atf_vvl that is not called on this time step 
    157156            ztrdt(:,:,:) = 0._wp 
    158157            ztrds(:,:,:) = 0._wp 
    159             CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    160             CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_atf, ztrds ) 
     158            CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     159            CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_sal, jptra_atf, ztrds ) 
    161160         END IF 
    162161         ! 
    163162      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    164163         ! 
    165          IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nit000,      'TRA',                           & 
    166            &                                                   ts(:,:,:,:,Kbb), ts(:,:,:,:,Kmm), ts(:,:,:,:,Krhs), jpts )  ! linear free surface  
    167          ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nit000, rdt, 'TRA',                           & 
    168            &                                                   ts(:,:,:,:,Kbb), ts(:,:,:,:,Kmm), ts(:,:,:,:,Krhs),      & 
    169            &                                                   sbc_tsc        , sbc_tsc_b                        , jpts )  ! non-linear free surface 
    170          ENDIF 
    171          ! 
    172          CALL lbc_lnk_multi( 'tranxt', ts(:,:,:,jp_tem,Kbb) , 'T', 1., ts(:,:,:,jp_sal,Kbb) , 'T', 1., & 
    173                   &                    ts(:,:,:,jp_tem,Kmm) , 'T', 1., ts(:,:,:,jp_sal,Kmm) , 'T', 1., & 
    174                   &                    ts(:,:,:,jp_tem,Krhs), 'T', 1., ts(:,:,:,jp_sal,Krhs), 'T', 1.  ) 
     164         IF( ln_linssh ) THEN   ;   CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000,      'TRA', pts, jpts )  ! linear free surface  
     165         ELSE                   ;   CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, rdt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
     166         ENDIF 
     167         ! 
     168         CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kbb) , 'T', 1., pts(:,:,:,jp_sal,Kbb) , 'T', 1., & 
     169                  &                    pts(:,:,:,jp_tem,Kmm) , 'T', 1., pts(:,:,:,jp_sal,Kmm) , 'T', 1., & 
     170                  &                    pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1.  ) 
    175171         ! 
    176172      ENDIF      
     
    179175         zfact = 1._wp / r2dt              
    180176         DO jk = 1, jpkm1 
    181             ztrdt(:,:,jk) = ( ts(:,:,jk,jp_tem,Kbb) - ztrdt(:,:,jk) ) * zfact 
    182             ztrds(:,:,jk) = ( ts(:,:,jk,jp_sal,Kbb) - ztrds(:,:,jk) ) * zfact 
    183          END DO 
    184          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    185          CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_atf, ztrds ) 
     177            ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kbb) - ztrdt(:,:,jk) ) * zfact 
     178            ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kbb) - ztrds(:,:,jk) ) * zfact 
     179         END DO 
     180         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     181         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_sal, jptra_atf, ztrds ) 
    186182      END IF 
    187183      IF( l_trdtra )   DEALLOCATE( ztrdt , ztrds ) 
    188184      ! 
    189185      !                        ! control print 
    190       IF(ln_ctl)   CALL prt_ctl( tab3d_1=ts(:,:,:,jp_tem,Kmm), clinfo1=' nxt  - Tn: ', mask1=tmask,   & 
    191          &                       tab3d_2=ts(:,:,:,jp_sal,Kmm), clinfo2=       ' Sn: ', mask2=tmask ) 
    192       ! 
    193       IF( ln_timing )   CALL timing_stop('tra_nxt') 
    194       ! 
    195    END SUBROUTINE tra_nxt 
    196  
    197  
    198    SUBROUTINE tra_nxt_fix( kt, Kmm, kit000, cdtype, ptb, ptn, pta, kjpt ) 
    199       !!---------------------------------------------------------------------- 
    200       !!                   ***  ROUTINE tra_nxt_fix  *** 
     186      IF(ln_ctl)   CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Kmm), clinfo1=' nxt  - Tn: ', mask1=tmask,   & 
     187         &                       tab3d_2=pts(:,:,:,jp_sal,Kmm), clinfo2=       ' Sn: ', mask2=tmask ) 
     188      ! 
     189      IF( ln_timing )   CALL timing_stop('tra_atf') 
     190      ! 
     191   END SUBROUTINE tra_atf 
     192 
     193 
     194   SUBROUTINE tra_atf_fix( kt, kit000, Kbb, Kmm, Kaa, cdtype, pt, kjpt ) 
     195      !!---------------------------------------------------------------------- 
     196      !!                   ***  ROUTINE tra_atf_fix  *** 
    201197      !! 
    202198      !! ** Purpose :   fixed volume: apply the Asselin time filter and  
     
    208204      !! ** Action  : - ptb & ptn ready for the next time step 
    209205      !!---------------------------------------------------------------------- 
    210       INTEGER                              , INTENT(in   ) ::  kt        ! ocean time-step index 
    211       INTEGER                              , INTENT(in   ) ::  Kmm       ! time level index 
    212       INTEGER                              , INTENT(in   ) ::  kit000    ! first time step index 
    213       CHARACTER(len=3)                     , INTENT(in   ) ::  cdtype    ! =TRA or TRC (tracer indicator) 
    214       INTEGER                              , INTENT(in   ) ::  kjpt      ! number of tracers 
    215       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  ptb       ! before tracer fields 
    216       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  ptn       ! now tracer fields 
    217       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  pta       ! tracer trend 
     206      INTEGER                                  , INTENT(in   ) ::  kt            ! ocean time-step index 
     207      INTEGER                                  , INTENT(in   ) ::  Kbb, Kmm, Kaa ! time level indices 
     208      INTEGER                                  , INTENT(in   ) ::  kit000        ! first time step index 
     209      CHARACTER(len=3)                         , INTENT(in   ) ::  cdtype        ! =TRA or TRC (tracer indicator) 
     210      INTEGER                                  , INTENT(in   ) ::  kjpt          ! number of tracers 
     211      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) ::  pt            ! tracer fields 
    218212      ! 
    219213      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
     
    223217      IF( kt == kit000 )  THEN 
    224218         IF(lwp) WRITE(numout,*) 
    225          IF(lwp) WRITE(numout,*) 'tra_nxt_fix : time stepping', cdtype 
     219         IF(lwp) WRITE(numout,*) 'tra_atf_fix : time stepping', cdtype 
    226220         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    227221      ENDIF 
     
    232226            DO jj = 2, jpjm1 
    233227               DO ji = fs_2, fs_jpim1 
    234                   ztn = ptn(ji,jj,jk,jn)                                     
    235                   ztd = pta(ji,jj,jk,jn) - 2._wp * ztn + ptb(ji,jj,jk,jn)  ! time laplacian on tracers 
    236                   ! 
    237                   ptb(ji,jj,jk,jn) = ztn + atfp * ztd                      ! ptb <-- filtered ptn  
    238                   ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)                      ! ptn <-- pta 
     228                  ztn = pt(ji,jj,jk,jn,Kmm)                                     
     229                  ztd = pt(ji,jj,jk,jn,Kaa) - 2._wp * ztn + pt(ji,jj,jk,jn,Kbb)  ! time laplacian on tracers 
     230                  ! 
     231                  pt(ji,jj,jk,jn,Kmm) = ztn + atfp * ztd                      ! ptb <-- filtered ptn  
    239232               END DO 
    240233           END DO 
     
    243236      END DO 
    244237      ! 
    245    END SUBROUTINE tra_nxt_fix 
    246  
    247  
    248    SUBROUTINE tra_nxt_vvl( kt, Kbb, Kmm, Krhs, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    249       !!---------------------------------------------------------------------- 
    250       !!                   ***  ROUTINE tra_nxt_vvl  *** 
     238   END SUBROUTINE tra_atf_fix 
     239 
     240 
     241   SUBROUTINE tra_atf_vvl( kt, Kbb, Kmm, Kaa, kit000, p2dt, cdtype, pt, psbc_tc, psbc_tc_b, kjpt ) 
     242      !!---------------------------------------------------------------------- 
     243      !!                   ***  ROUTINE tra_atf_vvl  *** 
    251244      !! 
    252245      !! ** Purpose :   Time varying volume: apply the Asselin time filter   
     
    256249      !!              - swap tracer fields to prepare the next time_step. 
    257250      !!             tb  = ( e3t(Kmm)*tn + atfp*[ e3t(Kbb)*tb - 2 e3t(Kmm)*tn + e3t_a*ta ] ) 
    258       !!                  /( e3t(Kmm)    + atfp*[ e3t(Kbb)    - 2 e3t(Kmm)    + e3t(Krhs)    ] ) 
     251      !!                  /( e3t(Kmm)    + atfp*[ e3t(Kbb)    - 2 e3t(Kmm)    + e3t(Kaa)    ] ) 
    259252      !!             tn  = ta  
    260253      !! 
    261254      !! ** Action  : - ptb & ptn ready for the next time step 
    262255      !!---------------------------------------------------------------------- 
    263       INTEGER                              , INTENT(in   ) ::  kt        ! ocean time-step index 
    264       INTEGER                              , INTENT(in   ) ::  Kbb, Kmm, Krhs ! time level indices 
    265       INTEGER                              , INTENT(in   ) ::  kit000    ! first time step index 
    266       REAL(wp)                             , INTENT(in   ) ::  p2dt      ! time-step 
    267       CHARACTER(len=3)                     , INTENT(in   ) ::  cdtype    ! =TRA or TRC (tracer indicator) 
    268       INTEGER                              , INTENT(in   ) ::  kjpt      ! number of tracers 
    269       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  ptb       ! before tracer fields 
    270       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  ptn       ! now tracer fields 
    271       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::  pta       ! tracer trend 
    272       REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::  psbc_tc   ! surface tracer content 
    273       REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::  psbc_tc_b ! before surface tracer content 
     256      INTEGER                                  , INTENT(in   ) ::  kt        ! ocean time-step index 
     257      INTEGER                                  , INTENT(in   ) ::  Kbb, Kmm, Kaa ! time level indices 
     258      INTEGER                                  , INTENT(in   ) ::  kit000    ! first time step index 
     259      REAL(wp)                                 , INTENT(in   ) ::  p2dt      ! time-step 
     260      CHARACTER(len=3)                         , INTENT(in   ) ::  cdtype    ! =TRA or TRC (tracer indicator) 
     261      INTEGER                                  , INTENT(in   ) ::  kjpt      ! number of tracers 
     262      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) ::  pt        ! tracer fields 
     263      REAL(wp), DIMENSION(jpi,jpj    ,kjpt)    , INTENT(in   ) ::  psbc_tc   ! surface tracer content 
     264      REAL(wp), DIMENSION(jpi,jpj    ,kjpt)    , INTENT(in   ) ::  psbc_tc_b ! before surface tracer content 
    274265      ! 
    275266      LOGICAL  ::   ll_traqsr, ll_rnf, ll_isf   ! local logical 
     
    282273      IF( kt == kit000 )  THEN 
    283274         IF(lwp) WRITE(numout,*) 
    284          IF(lwp) WRITE(numout,*) 'tra_nxt_vvl : time stepping', cdtype 
     275         IF(lwp) WRITE(numout,*) 'tra_atf_vvl : time stepping', cdtype 
    285276         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    286277      ENDIF 
     
    309300                  ze3t_b = e3t(ji,jj,jk,Kbb) 
    310301                  ze3t_n = e3t(ji,jj,jk,Kmm) 
    311                   ze3t_a = e3t(ji,jj,jk,Krhs) 
     302                  ze3t_a = e3t(ji,jj,jk,Kaa) 
    312303                  !                                         ! tracer content at Before, now and after 
    313                   ztc_b  = ptb(ji,jj,jk,jn) * ze3t_b 
    314                   ztc_n  = ptn(ji,jj,jk,jn) * ze3t_n 
    315                   ztc_a  = pta(ji,jj,jk,jn) * ze3t_a 
     304                  ztc_b  = pt(ji,jj,jk,jn,Kbb) * ze3t_b 
     305                  ztc_n  = pt(ji,jj,jk,jn,Kmm) * ze3t_n 
     306                  ztc_a  = pt(ji,jj,jk,jn,Kaa) * ze3t_a 
    316307                  ! 
    317308                  ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
     
    361352                  ! 
    362353                  ze3t_f = 1.e0 / ze3t_f 
    363                   ptb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
    364                   ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
     354                  pt(ji,jj,jk,jn,Kmm) = ztc_f * ze3t_f    ! time filtered "now" field 
    365355                  ! 
    366356                  IF( ( l_trdtra .and. cdtype == 'TRA' ) .OR. ( l_trdtrc .and. cdtype == 'TRC' ) ) THEN 
     
    376366      IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) )   THEN 
    377367         IF( l_trdtra .AND. cdtype == 'TRA' ) THEN  
    378             CALL trd_tra( kt, Kmm, Krhs, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 
    379             CALL trd_tra( kt, Kmm, Krhs, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 
     368            CALL trd_tra( kt, Kmm, Kaa, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 
     369            CALL trd_tra( kt, Kmm, Kaa, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 
    380370         ENDIF 
    381371         IF( l_trdtrc .AND. cdtype == 'TRC' ) THEN 
    382372            DO jn = 1, kjpt 
    383                CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 
     373               CALL trd_tra( kt, Kmm, Kaa, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 
    384374            END DO 
    385375         ENDIF 
     
    387377      ENDIF 
    388378      ! 
    389    END SUBROUTINE tra_nxt_vvl 
     379   END SUBROUTINE tra_atf_vvl 
    390380 
    391381   !!====================================================================== 
    392 END MODULE tranxt 
     382END MODULE traatf 
Note: See TracChangeset for help on using the changeset viewer.