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 8841 for branches/UKMO/ROMS_WAD_7832/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2017-11-29T05:08:05+01:00 (6 years ago)
Author:
deazer
Message:

Bring in Trunk Changes at version 8814
This revision wont run as is, requires next revision with merged changes
This revision serves as a reference point to what changes from the trunk at brought in by the merge
in the next revision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/ROMS_WAD_7832/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r7753 r8841  
    121121      IF( l_trdtra )   THEN                     
    122122         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    123          ztrdt(:,:,jk) = 0._wp 
    124          ztrds(:,:,jk) = 0._wp 
     123         ztrdt(:,:,jpk) = 0._wp 
     124         ztrds(:,:,jpk) = 0._wp 
    125125         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
    126126            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     
    128128         ENDIF 
    129129         ! total trend for the non-time-filtered variables.  
    130             zfact = 1.0 / rdt 
     130         zfact = 1.0 / rdt 
     131         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
    131132         DO jk = 1, jpkm1 
    132             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact  
    133             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact  
     133            ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 
     134            ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 
    134135         END DO 
    135136         CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 
    136137         CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds ) 
    137          ! Store now fields before applying the Asselin filter  
    138          ! in order to calculate Asselin filter trend later. 
    139          ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    140          ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     138         IF( ln_linssh ) THEN  
     139            ! Store now fields before applying the Asselin filter  
     140            ! in order to calculate Asselin filter trend later. 
     141            ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
     142            ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     143         ENDIF 
    141144      ENDIF 
    142145 
     
    147150            END DO 
    148151         END DO 
     152         IF (l_trdtra .AND. .NOT. ln_linssh) THEN  ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     153                                                   ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
     154            ztrdt(:,:,:) = 0._wp 
     155            ztrds(:,:,:) = 0._wp 
     156            CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     157            CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
     158         END IF 
    149159         ! 
    150160      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
     
    162172      ENDIF      
    163173      ! 
    164       IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     174      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     175         zfact = 1._wp / r2dt              
    165176         DO jk = 1, jpkm1 
    166             zfact = 1._wp / r2dt              
    167177            ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    168178            ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
     
    170180         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    171181         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    172          CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    173182      END IF 
     183      IF( l_trdtra ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    174184      ! 
    175185      !                        ! control print 
     
    259269      LOGICAL  ::   ll_traqsr, ll_rnf, ll_isf   ! local logical 
    260270      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    261       REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     271      REAL(wp) ::   zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
    262272      REAL(wp) ::   zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
     273      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrd_atf 
    263274      !!---------------------------------------------------------------------- 
    264275      ! 
     
    279290      ENDIF 
    280291      ! 
     292      IF( ( l_trdtra .and. cdtype == 'TRA' ) .OR. ( l_trdtrc .and. cdtype == 'TRC' ) )   THEN 
     293         CALL wrk_alloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 
     294         ztrd_atf(:,:,:,:) = 0.0_wp 
     295      ENDIF 
     296      zfact = 1._wp / r2dt 
    281297      DO jn = 1, kjpt       
    282298         DO jk = 1, jpkm1 
     
    331347                  ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
    332348                  ! 
     349                  IF( ( l_trdtra .and. cdtype == 'TRA' ) .OR. ( l_trdtrc .and. cdtype == 'TRC' ) ) THEN 
     350                     ztrd_atf(ji,jj,jk,jn) = (ztc_f - ztc_n) * zfact/ze3t_n 
     351                  ENDIF 
     352                  ! 
    333353               END DO 
    334354            END DO 
     
    337357      END DO 
    338358      ! 
     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         CALL wrk_dealloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 
     363      ENDIF 
     364      IF( l_trdtrc .and. cdtype == 'TRC' ) THEN 
     365         DO jn = 1, kjpt 
     366            CALL trd_tra( kt, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 
     367         END DO 
     368         CALL wrk_dealloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 
     369      ENDIF 
     370      ! 
    339371   END SUBROUTINE tra_nxt_vvl 
    340372 
Note: See TracChangeset for help on using the changeset viewer.