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 8453 for branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90 – NEMO

Ignore:
Timestamp:
2017-08-22T18:54:47+02:00 (7 years ago)
Author:
jpalmier
Message:

JPALM --22-08-2017-- repair trends for passive tracers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r6487 r8453  
    2727   !!---------------------------------------------------------------------- 
    2828   USE oce_trc         ! ocean dynamics and tracers variables 
     29   USE domvvl          ! variable volume   
    2930   USE trc             ! ocean passive tracers variables 
    3031   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3132   USE prtctl_trc      ! Print control for debbuging 
     33   USE trcnam_trp      ! passive tracers transport namelist variables 
    3234   USE trd_oce 
    3335   USE trdtra 
     
    4547   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   r2dt 
    4648 
     49   !! * Substitutions 
     50#  include "domzgr_substitute.h90" 
    4751   !!---------------------------------------------------------------------- 
    4852   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    124128      IF( l_trdtrc )  THEN 
    125129         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt )  !* store now fields before applying the Asselin filter 
    126          ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     130         ztrdt(:,:,jpk,:) = 0._wp 
     131         IF( ln_trcldf_iso ) THEN                       ! diagnose the "pure" Kz diffusive trend  
     132            CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt ) 
     133         ENDIF 
     134         ! total trend for the non-time-filtered variables. 
     135         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn 
     136         ! cancel from tsn terms 
     137         IF( lk_vvl ) THEN 
     138            DO jn = 1, jptra 
     139               DO jk = 1, jpkm1 
     140                  zfact = 1.0 / rdttrc(jk) 
     141                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - & 
     142                                       trn(:,:,jk,jn) ) * zfact 
     143               END DO 
     144            END DO 
     145         ELSE 
     146            DO jn = 1, jptra 
     147               DO jk = 1, jpkm1 
     148                  zfact = 1.0 / rdttrc(jk) 
     149                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     150               END DO 
     151            END DO 
     152         END IF 
     153         CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt ) 
     154         IF( .NOT.lk_vvl )  THEN 
     155            ! Store now fields before applying the Asselin filter  
     156            ! in order to calculate Asselin filter trend later. 
     157            ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     158         ENDIF 
    127159      ENDIF 
    128160      ! Leap-Frog + Asselin filter time stepping 
     
    134166            END DO 
    135167         END DO 
     168         IF (l_trdtrc.AND.lk_vvl) THEN      ! Zero Asselin filter contribution 
     169                                            ! must be explicitly written out since for vvl 
     170                                            ! Asselin filter is output by 
     171                                            ! tra_nxt_vvl that is not called on 
     172                                            ! this time step 
     173            ztrdt(:,:,:,:) = 0._wp 
     174            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
     175         END IF 
     176 
    136177         !                                               
    137178      ELSE 
     
    144185 
    145186      ! trends computation 
    146       IF( l_trdtrc ) THEN                                      ! trends 
     187      IF( l_trdtrc.AND..NOT.lk_vvl) THEN                                      ! trends 
    147188         DO jn = 1, jptra 
    148189            DO jk = 1, jpkm1 
    149190               zfact = 1.e0 / r2dt(jk)   
    150191               ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
    151                CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    152             END DO 
     192            END DO 
     193            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    153194         END DO 
    154          CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    155195      END IF 
     196      ! 
     197      IF( l_trdtrc)  CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    156198      ! 
    157199      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.