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 10321 for NEMO/branches/UKMO/NEMO4_beta_mirror/src/TOP/TRP/trcnxt.F90 – NEMO

Ignore:
Timestamp:
2018-11-16T15:59:30+01:00 (5 years ago)
Author:
davestorkey
Message:

UKMO/NEMO4_beta_mirror: Update to version 10279 of the trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO4_beta_mirror/src/TOP/TRP/trcnxt.F90

    r9950 r10321  
    4848 
    4949   !!---------------------------------------------------------------------- 
    50    !! NEMO/TOP 3.3 , NEMO Consortium (2018) 
     50   !! NEMO/TOP 4.0 , NEMO Consortium (2018) 
    5151   !! $Id$ 
    52    !! Software governed by the CeCILL licence     (./LICENSE) 
     52   !! Software governed by the CeCILL license (see ./LICENSE) 
    5353   !!---------------------------------------------------------------------- 
    5454CONTAINS 
     
    103103      IF( l_trdtrc )  THEN             ! trends: store now fields before the Asselin filter application 
    104104         ALLOCATE( ztrdt(jpi,jpj,jpk,jptra) ) 
    105          ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     105         ztrdt(:,:,:,:)  = 0._wp 
     106         IF( ln_traldf_iso ) THEN                       ! diagnose the "pure" Kz diffusive trend  
     107            DO jn = 1, jptra 
     108               CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) ) 
     109            ENDDO 
     110         ENDIF 
     111 
     112         ! total trend for the non-time-filtered variables.  
     113         zfact = 1.0 / rdttrc 
     114         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
     115         IF( ln_linssh ) THEN       ! linear sea surface height only 
     116            DO jn = 1, jptra 
     117               DO jk = 1, jpkm1 
     118                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - trn(:,:,jk,jn)) * zfact 
     119               END DO 
     120            END DO 
     121         ELSE 
     122            DO jn = 1, jptra 
     123               DO jk = 1, jpkm1 
     124                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     125               END DO 
     126            END DO 
     127         ENDIF 
     128         ! 
     129         DO jn = 1, jptra 
     130            CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) ) 
     131         ENDDO 
     132         ! 
     133         IF( ln_linssh ) THEN       ! linear sea surface height only 
     134            ! Store now fields before applying the Asselin filter  
     135            ! in order to calculate Asselin filter trend later. 
     136            ztrdt(:,:,:,:) = trn(:,:,:,:)  
     137         ENDIF 
     138 
    106139      ENDIF 
    107140      !                                ! Leap-Frog + Asselin filter time stepping 
     
    113146            END DO 
    114147         END DO 
     148         IF (l_trdtrc .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     149            !                                        ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
     150            ztrdt(:,:,:,:) = 0._wp             
     151            DO jn = 1, jptra 
     152               CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
     153            ENDDO 
     154         END IF 
     155         ! 
    115156      ELSE      
    116157         IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
     
    126167      ENDIF 
    127168      ! 
    128       IF( l_trdtrc ) THEN              ! trends: send Asselin filter trends to trdtra manager for further diagnostics 
     169      IF( l_trdtrc .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt ) 
    129170         DO jn = 1, jptra 
    130171            DO jk = 1, jpkm1 
    131172               zfact = 1._wp / r2dttrc   
    132173               ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
    133                CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    134             END DO 
     174            END DO 
     175            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
    135176         END DO 
    136          DEALLOCATE( ztrdt )  
    137177      END IF 
     178      IF( l_trdtrc ) DEALLOCATE( ztrdt )  
    138179      ! 
    139180      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.