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 6092 for branches/2015/dev_agrif_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2015-12-17T15:19:01+01:00 (9 years ago)
Author:
timgraham
Message:

Merged in trunk at r5518 (branch point of 3.6 stable)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_agrif_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r4954 r6092  
    2727   USE dom_oce         ! ocean space and time domain variables  
    2828   USE sbc_oce         ! surface boundary condition: ocean 
    29    USE zdf_oce         ! ??? 
     29   USE sbcrnf          ! river runoffs 
     30   USE zdf_oce         ! ocean vertical mixing 
    3031   USE domvvl          ! variable volume 
    3132   USE dynspg_oce      ! surface     pressure gradient variables 
    3233   USE dynhpg          ! hydrostatic pressure gradient  
    33    USE trdmod_oce      ! ocean space and time domain variables  
    34    USE trdtra          ! ocean active tracers trends  
    35    USE phycst 
    36    USE bdy_oce 
     34   USE trd_oce         ! trends: ocean variables 
     35   USE trdtra          ! trends manager: tracers  
     36   USE traqsr          ! penetrative solar radiation (needed for nksr) 
     37   USE phycst          ! physical constant 
     38   USE ldftra_oce      ! lateral physics on tracers 
     39   USE bdy_oce         ! BDY open boundary condition variables 
    3740   USE bdytra          ! open boundary condition (bdy_tra routine) 
     41   ! 
    3842   USE in_out_manager  ! I/O manager 
    3943   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    4044   USE prtctl          ! Print control 
    41    USE traqsr          ! penetrative solar radiation (needed for nksr) 
     45   USE wrk_nemo        ! Memory allocation 
     46   USE timing          ! Timing 
    4247#if defined key_agrif 
    4348   USE agrif_opa_interp 
    4449#endif 
    45    USE wrk_nemo        ! Memory allocation 
    46    USE timing          ! Timing 
    4750 
    4851   IMPLICIT NONE 
     
    7982      !!             at the local domain   boundaries through lbc_lnk call,  
    8083      !!             at the one-way open boundaries (lk_bdy=T),  
    81       !!             at the AGRIF zoom     boundaries (lk_agrif=T) 
     84      !!             at the AGRIF zoom   boundaries (lk_agrif=T) 
    8285      !! 
    8386      !!              - Update lateral boundary conditions on AGRIF children 
     
    127130         ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    128131         ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     132         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
     133            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     134            CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
     135         ENDIF 
    129136      ENDIF 
    130137 
     
    137144      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    138145         ! 
    139          IF( lk_vvl )  THEN   ;   CALL tra_nxt_vvl( kt, nit000, 'TRA', tsb, tsn, tsa, jpts )  ! variable volume level (vvl)      
    140          ELSE                 ;   CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level  
     146         IF( lk_vvl )  THEN   ;   CALL tra_nxt_vvl( kt, nit000, rdttra, 'TRA', tsb, tsn, tsa,   & 
     147           &                                                              sbc_tsc, sbc_tsc_b, jpts )  ! variable volume level (vvl)  
     148         ELSE                 ;   CALL tra_nxt_fix( kt, nit000,         'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level  
    141149         ENDIF 
    142150      ENDIF      
     
    145153      IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    146154         DO jk = 1, jpkm1 
    147             zfact = 1.e0_wp / r2dtra(jk)              
     155            zfact = 1._wp / r2dtra(jk)              
    148156            ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    149157            ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
    150158         END DO 
    151          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_atf, ztrdt ) 
    152          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_atf, ztrds ) 
     159         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     160         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    153161         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    154162      END IF 
     
    158166         &                       tab3d_2=tsn(:,:,:,jp_sal), clinfo2=       ' Sn: ', mask2=tmask ) 
    159167      ! 
    160       ! 
    161       IF( nn_timing == 1 )  CALL timing_stop('tra_nxt') 
     168      IF( nn_timing == 1 )   CALL timing_stop('tra_nxt') 
    162169      ! 
    163170   END SUBROUTINE tra_nxt 
     
    231238 
    232239 
    233    SUBROUTINE tra_nxt_vvl( kt, kit000, cdtype, ptb, ptn, pta, kjpt ) 
     240   SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    234241      !!---------------------------------------------------------------------- 
    235242      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    255262      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
    256263      !!---------------------------------------------------------------------- 
    257       INTEGER         , INTENT(in   )                               ::   kt       ! ocean time-step index 
    258       INTEGER         , INTENT(in   )                               ::   kit000   ! first time step index 
    259       CHARACTER(len=3), INTENT(in   )                               ::   cdtype   ! =TRA or TRC (tracer indicator) 
    260       INTEGER         , INTENT(in   )                               ::   kjpt     ! number of tracers 
    261       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptb      ! before tracer fields 
    262       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptn      ! now tracer fields 
    263       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   pta      ! tracer trend 
     264      INTEGER         , INTENT(in   )                               ::  kt       ! ocean time-step index 
     265      INTEGER         , INTENT(in   )                               ::  kit000   ! first time step index 
     266      REAL(wp)        , INTENT(in   ), DIMENSION(jpk)               ::  p2dt     ! time-step 
     267      CHARACTER(len=3), INTENT(in   )                               ::  cdtype   ! =TRA or TRC (tracer indicator) 
     268      INTEGER         , INTENT(in   )                               ::  kjpt     ! number of tracers 
     269      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptb      ! before tracer fields 
     270      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptn      ! now tracer fields 
     271      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  pta      ! tracer trend 
     272      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc   ! surface tracer content 
     273      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc_b ! before surface tracer content 
     274 
    264275      !!      
    265       LOGICAL  ::   ll_tra, ll_tra_hpg, ll_traqsr   ! local logical 
     276      LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf   ! local logical 
    266277      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    267278      REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     
    276287      ! 
    277288      IF( cdtype == 'TRA' )  THEN    
    278          ll_tra     = .TRUE.           ! active tracers case   
    279289         ll_tra_hpg = ln_dynhpg_imp    ! active  tracers case  and  semi-implicit hpg 
    280290         ll_traqsr  = ln_traqsr        ! active  tracers case  and  solar penetration 
     291         ll_rnf     = ln_rnf           ! active  tracers case  and  river runoffs 
    281292      ELSE                           
    282          ll_tra     = .FALSE.          ! passive tracers case 
    283293         ll_tra_hpg = .FALSE.          ! passive tracers case or NO semi-implicit hpg 
    284294         ll_traqsr  = .FALSE.          ! active  tracers case and NO solar penetration 
     295         ll_rnf     = .FALSE.          ! passive tracers or NO river runoffs 
    285296      ENDIF 
    286297      ! 
    287298      DO jn = 1, kjpt       
    288299         DO jk = 1, jpkm1 
    289             zfact1 = atfp * rdttra(jk) 
     300            zfact1 = atfp * p2dt(jk) 
    290301            zfact2 = zfact1 / rau0 
    291302            DO jj = 1, jpj 
     
    305316                  ztc_f  = ztc_n  + atfp * ztc_d 
    306317                  ! 
    307                   IF( ll_tra .AND. jk == 1 ) THEN           ! first level only for T & S 
    308                       ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 
    309                       ztc_f  = ztc_f  - zfact1 * ( sbc_tsc(ji,jj,jn) - sbc_tsc_b(ji,jj,jn) ) 
     318                  IF( jk == 1 ) THEN           ! first level  
     319                     ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj) ) 
     320                     ztc_f  = ztc_f  - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 
    310321                  ENDIF 
     322 
    311323                  IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr )   &     ! solar penetration (temperature only) 
    312324                     &     ztc_f  = ztc_f  - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) )  
    313325 
    314                    ze3t_f = 1.e0 / ze3t_f 
    315                    ptb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
    316                    ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
    317                    ! 
    318                    IF( ll_tra_hpg ) THEN        ! semi-implicit hpg (T & S only) 
    319                       ze3t_d           = 1.e0   / ( ze3t_n + rbcp * ze3t_d ) 
    320                       pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
    321                    ENDIF 
     326                  IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )   &            ! river runoffs 
     327                     &     ztc_f  = ztc_f  - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) &  
     328                     &                              * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 
     329 
     330                  ze3t_f = 1.e0 / ze3t_f 
     331                  ptb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
     332                  ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
     333                  ! 
     334                  IF( ll_tra_hpg ) THEN        ! semi-implicit hpg (T & S only) 
     335                     ze3t_d           = 1.e0   / ( ze3t_n + rbcp * ze3t_d ) 
     336                     pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
     337                  ENDIF 
    322338               END DO 
    323339            END DO 
Note: See TracChangeset for help on using the changeset viewer.