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 8850 for branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2017-11-30T09:30:44+01:00 (7 years ago)
Author:
gm
Message:

#1911 (ENHANCE-09): PART I.3 - phasing with trunk: tracer trends output (see #1877 trunk change from 86666 to 8698)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r8568 r8850  
    113113  
    114114      ! set time step size (Euler/Leapfrog) 
    115       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =     rdt      ! at nit000             (Euler) 
     115      IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =        rdt   ! at nit000             (Euler) 
    116116      ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp* rdt   ! at nit000 or nit000+1 (Leapfrog) 
    117117      ENDIF 
     
    120120      IF( l_trdtra )   THEN                     
    121121         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    122          ztrdt(:,:,jk) = 0._wp 
    123          ztrds(:,:,jk) = 0._wp 
     122         ztrdt(:,:,jpk) = 0._wp 
     123         ztrds(:,:,jpk) = 0._wp 
    124124         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
    125125            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     
    127127         ENDIF 
    128128         ! total trend for the non-time-filtered variables.  
    129             zfact = 1.0 / rdt 
     129         zfact = 1.0 / rdt 
     130         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
    130131         DO jk = 1, jpkm1 
    131             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact  
    132             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact  
     132            ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 
     133            ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 
    133134         END DO 
    134135         CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 
    135136         CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds ) 
    136          ! Store now fields before applying the Asselin filter  
    137          ! in order to calculate Asselin filter trend later. 
    138          ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    139          ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     137         IF( ln_linssh ) THEN       ! linear sea surface height only 
     138            ! Store now fields before applying the Asselin filter  
     139            ! in order to calculate Asselin filter trend later. 
     140            ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
     141            ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     142         ENDIF 
    140143      ENDIF 
    141144 
     
    146149            END DO 
    147150         END DO 
     151         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     152            !                                        ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
     153            ztrdt(:,:,:) = 0._wp 
     154            ztrds(:,:,:) = 0._wp 
     155            CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     156            CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
     157         END IF 
    148158         ! 
    149159      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
     
    161171      ENDIF      
    162172      ! 
    163       IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     173      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     174         zfact = 1._wp / r2dt              
    164175         DO jk = 1, jpkm1 
    165             zfact = 1._wp / r2dt              
    166176            ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    167177            ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
     
    169179         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    170180         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    171          DEALLOCATE( ztrdt , ztrds ) 
    172181      END IF 
     182      IF( l_trdtra )   DEALLOCATE( ztrdt , ztrds ) 
    173183      ! 
    174184      !                        ! control print 
     
    258268      LOGICAL  ::   ll_traqsr, ll_rnf, ll_isf   ! local logical 
    259269      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    260       REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     270      REAL(wp) ::   zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
    261271      REAL(wp) ::   zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
     272      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrd_atf 
    262273      !!---------------------------------------------------------------------- 
    263274      ! 
     
    278289      ENDIF 
    279290      ! 
     291      IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) )   THEN 
     292         ALLOCATE( ztrd_atf(jpi,jpj,jpk,kjpt) ) 
     293         ztrd_atf(:,:,:,:) = 0.0_wp 
     294      ENDIF 
     295      zfact = 1._wp / r2dt 
     296      zfact1 = atfp * p2dt 
     297      zfact2 = zfact1 * r1_rau0 
    280298      DO jn = 1, kjpt       
    281299         DO jk = 1, jpkm1 
    282             zfact1 = atfp * p2dt 
    283             zfact2 = zfact1 * r1_rau0 
    284300            DO jj = 2, jpjm1 
    285301               DO ji = fs_2, fs_jpim1 
     
    330346                  ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
    331347                  ! 
     348                  IF( ( l_trdtra .and. cdtype == 'TRA' ) .OR. ( l_trdtrc .and. cdtype == 'TRC' ) ) THEN 
     349                     ztrd_atf(ji,jj,jk,jn) = (ztc_f - ztc_n) * zfact/ze3t_n 
     350                  ENDIF 
     351                  ! 
    332352               END DO 
    333353            END DO 
     
    336356      END DO 
    337357      ! 
     358      IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) )   THEN 
     359         IF( l_trdtra .AND. cdtype == 'TRA' ) THEN  
     360            CALL trd_tra( kt, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 
     361            CALL trd_tra( kt, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 
     362         ENDIF 
     363         IF( l_trdtrc .AND. cdtype == 'TRC' ) THEN 
     364            DO jn = 1, kjpt 
     365               CALL trd_tra( kt, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 
     366            END DO 
     367         ENDIF 
     368         DEALLOCATE( ztrd_atf ) 
     369      ENDIF 
     370      ! 
    338371   END SUBROUTINE tra_nxt_vvl 
    339372 
Note: See TracChangeset for help on using the changeset viewer.