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 8471 for branches/2017/nemo_v3_6_STABLE_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90 – NEMO

Ignore:
Timestamp:
2017-08-29T18:12:42+02:00 (7 years ago)
Author:
jpalmier
Message:

JPALM -- #1933 -- add and correct passive tracer trends - needs improvements and testing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/nemo_v3_6_STABLE_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r8398 r8471  
    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 
     
    129131      IF( l_trdtrc )  THEN 
    130132         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt )  !* store now fields before applying the Asselin filter 
    131          ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     133         ztrdt(:,:,jpk,:) = 0._wp 
     134         IF( ln_trcldf_iso ) THEN                       ! diagnose the "pure" Kz diffusive trend  
     135            DO jn = 1, jptra 
     136               CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) ) 
     137            ENDDO 
     138         ENDIF 
     139         ! total trend for the non-time-filtered variables. 
     140         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn 
     141         ! cancel from tsn terms 
     142         IF( lk_vvl ) THEN 
     143            DO jn = 1, jptra 
     144               DO jk = 1, jpkm1 
     145                  zfact = 1.0 / rdttrc(jk) 
     146                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - & 
     147                                       trn(:,:,jk,jn) ) * zfact 
     148               END DO 
     149            END DO 
     150         ELSE 
     151            DO jn = 1, jptra 
     152               DO jk = 1, jpkm1 
     153                  zfact = 1.0 / rdttrc(jk) 
     154                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     155               END DO 
     156            END DO 
     157         END IF 
     158         DO jn = 1, jptra 
     159            CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) ) 
     160         ENDDO 
     161         IF( .NOT.lk_vvl )  THEN 
     162            ! Store now fields before applying the Asselin filter  
     163            ! in order to calculate Asselin filter trend later. 
     164            ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     165         ENDIF 
    132166      ENDIF 
    133167      ! Leap-Frog + Asselin filter time stepping 
     
    137171            DO jk = 1, jpkm1 
    138172               trn(:,:,jk,jn) = tra(:,:,jk,jn) 
    139                trb(:,:,jk,jn) = trn(:,:,jk,jn)   
    140173            END DO 
    141174         END DO 
     175         IF (l_trdtrc.AND.lk_vvl) THEN      ! Zero Asselin filter contribution 
     176                                            ! must be explicitly written out since for vvl 
     177                                            ! Asselin filter is output by 
     178                                            ! tra_nxt_vvl that is not called on 
     179                                            ! this time step 
     180            ztrdt(:,:,:,:) = 0._wp 
     181            DO jn = 1, jptra 
     182               CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
     183            ENDDO 
     184         END IF 
     185 
    142186         !                                               
    143187      ELSE 
     
    153197 
    154198      ! trends computation 
    155       IF( l_trdtrc ) THEN                                      ! trends 
     199      IF( l_trdtrc.AND..NOT.lk_vvl) THEN                                      ! trends 
    156200         DO jn = 1, jptra 
    157201            DO jk = 1, jpkm1 
    158202               zfact = 1.e0 / r2dt(jk)   
    159203               ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
    160                CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    161             END DO 
     204            END DO 
     205            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
    162206         END DO 
    163          CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    164207      END IF 
     208      ! 
     209      IF( l_trdtrc)  CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    165210      ! 
    166211      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.