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

Ignore:
Timestamp:
2017-06-28T16:48:39+02:00 (7 years ago)
Author:
frrh
Message:

Update branch in line with current head of GO6 package branch at revision 8104.

File:
1 edited

Legend:

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

    r7573 r8235  
    135135            CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
    136136         ENDIF 
    137          ! total trend for the non-time-filtered variables.  
    138          DO jk = 1, jpkm1 
    139             zfact = 1.0 / rdttra(jk) 
    140             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact  
    141             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact  
    142          END DO 
     137         ! total trend for the non-time-filtered variables. 
     138         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
     139         IF( lk_vvl ) THEN 
     140            DO jk = 1, jpkm1 
     141               zfact = 1.0 / rdttra(jk) 
     142               ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 
     143               ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 
     144            END DO 
     145         ELSE 
     146            DO jk = 1, jpkm1 
     147               zfact = 1.0 / rdttra(jk) 
     148               ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact  
     149               ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact  
     150            END DO 
     151         END IF 
    143152         CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 
    144153         CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds ) 
    145          ! Store now fields before applying the Asselin filter  
    146          ! in order to calculate Asselin filter trend later. 
    147          ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    148          ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     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(:,:,:) = tsn(:,:,:,jp_tem)  
     158            ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     159         END IF 
    149160      ENDIF 
    150161 
     
    155166            END DO 
    156167         END DO 
     168         IF (l_trdtra.AND.lk_vvl) THEN      ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     169                                            ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
     170            ztrdt(:,:,:) = 0._wp 
     171            ztrds(:,:,:) = 0._wp 
     172            CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     173            CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
     174         END IF 
    157175      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    158176         ! 
     
    164182      ! 
    165183     ! trends computation 
    166       IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     184      IF( l_trdtra.AND..NOT.lk_vvl) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    167185         DO jk = 1, jpkm1 
    168186            zfact = 1._wp / r2dtra(jk)              
     
    172190         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    173191         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    174          CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    175192      END IF 
     193      IF( l_trdtra) CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    176194      ! 
    177195      !                        ! control print 
     
    289307      LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf, ll_isf   ! local logical 
    290308      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    291       REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     309      REAL(wp) ::   zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
    292310      REAL(wp) ::   zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
     311      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrd_atf 
    293312      !!---------------------------------------------------------------------- 
    294313      ! 
     
    315334      ENDIF 
    316335      ! 
     336      IF( l_trdtra )   THEN 
     337         CALL wrk_alloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 
     338         ztrd_atf(:,:,:,:) = 0.0_wp 
     339      ENDIF 
    317340      DO jn = 1, kjpt       
    318341         DO jk = 1, jpkm1 
     342            zfact = 1._wp / r2dtra(jk) 
    319343            zfact1 = atfp * p2dt(jk) 
    320344            zfact2 = zfact1 / rau0 
     
    371395                     pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
    372396                  ENDIF 
     397                  IF( l_trdtra ) THEN 
     398                     ztrd_atf(ji,jj,jk,jn) = (ztc_f - ztc_n) * zfact/ze3t_n 
     399                  ENDIF 
    373400               END DO 
    374401            END DO 
     
    377404      END DO 
    378405      ! 
     406      IF( l_trdtra ) THEN 
     407         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 
     408         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 
     409         CALL wrk_dealloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 
     410      ENDIF 
     411 
    379412   END SUBROUTINE tra_nxt_vvl 
    380413 
Note: See TracChangeset for help on using the changeset viewer.