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 5965 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2015-12-01T16:35:30+01:00 (8 years ago)
Author:
timgraham
Message:

Upgraded branch to r5518 of trunk (v3.6 stable revision)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r4328 r5965  
    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_update 
    4449   USE agrif_opa_interp 
    4550#endif 
    46    USE wrk_nemo        ! Memory allocation 
    47    USE timing          ! Timing 
    4851 
    4952   IMPLICIT NONE 
     
    8083      !!             at the local domain   boundaries through lbc_lnk call,  
    8184      !!             at the one-way open boundaries (lk_bdy=T),  
    82       !!             at the AGRIF zoom     boundaries (lk_agrif=T) 
     85      !!             at the AGRIF zoom   boundaries (lk_agrif=T) 
    8386      !! 
    8487      !!              - 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  
     
    150158      IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    151159         DO jk = 1, jpkm1 
    152             zfact = 1.e0_wp / r2dtra(jk)              
     160            zfact = 1._wp / r2dtra(jk)              
    153161            ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    154162            ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
    155163         END DO 
    156          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_atf, ztrdt ) 
    157          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_atf, ztrds ) 
     164         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     165         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    158166         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    159167      END IF 
     
    163171         &                       tab3d_2=tsn(:,:,:,jp_sal), clinfo2=       ' Sn: ', mask2=tmask ) 
    164172      ! 
    165       ! 
    166       IF( nn_timing == 1 )  CALL timing_stop('tra_nxt') 
     173      IF( nn_timing == 1 )   CALL timing_stop('tra_nxt') 
    167174      ! 
    168175   END SUBROUTINE tra_nxt 
     
    236243 
    237244 
    238    SUBROUTINE tra_nxt_vvl( kt, kit000, cdtype, ptb, ptn, pta, kjpt ) 
     245   SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    239246      !!---------------------------------------------------------------------- 
    240247      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    260267      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
    261268      !!---------------------------------------------------------------------- 
    262       INTEGER         , INTENT(in   )                               ::   kt       ! ocean time-step index 
    263       INTEGER         , INTENT(in   )                               ::   kit000   ! first time step index 
    264       CHARACTER(len=3), INTENT(in   )                               ::   cdtype   ! =TRA or TRC (tracer indicator) 
    265       INTEGER         , INTENT(in   )                               ::   kjpt     ! number of tracers 
    266       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptb      ! before tracer fields 
    267       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   ptn      ! now tracer fields 
    268       REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::   pta      ! tracer trend 
     269      INTEGER         , INTENT(in   )                               ::  kt       ! ocean time-step index 
     270      INTEGER         , INTENT(in   )                               ::  kit000   ! first time step index 
     271      REAL(wp)        , INTENT(in   ), DIMENSION(jpk)               ::  p2dt     ! time-step 
     272      CHARACTER(len=3), INTENT(in   )                               ::  cdtype   ! =TRA or TRC (tracer indicator) 
     273      INTEGER         , INTENT(in   )                               ::  kjpt     ! number of tracers 
     274      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptb      ! before tracer fields 
     275      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  ptn      ! now tracer fields 
     276      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt)  ::  pta      ! tracer trend 
     277      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc   ! surface tracer content 
     278      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,kjpt)      ::  psbc_tc_b ! before surface tracer content 
     279 
    269280      !!      
    270       LOGICAL  ::   ll_tra, ll_tra_hpg, ll_traqsr   ! local logical 
     281      LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf   ! local logical 
    271282      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    272283      REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     
    281292      ! 
    282293      IF( cdtype == 'TRA' )  THEN    
    283          ll_tra     = .TRUE.           ! active tracers case   
    284294         ll_tra_hpg = ln_dynhpg_imp    ! active  tracers case  and  semi-implicit hpg 
    285295         ll_traqsr  = ln_traqsr        ! active  tracers case  and  solar penetration 
     296         ll_rnf     = ln_rnf           ! active  tracers case  and  river runoffs 
    286297      ELSE                           
    287          ll_tra     = .FALSE.          ! passive tracers case 
    288298         ll_tra_hpg = .FALSE.          ! passive tracers case or NO semi-implicit hpg 
    289299         ll_traqsr  = .FALSE.          ! active  tracers case and NO solar penetration 
     300         ll_rnf     = .FALSE.          ! passive tracers or NO river runoffs 
    290301      ENDIF 
    291302      ! 
    292303      DO jn = 1, kjpt       
    293304         DO jk = 1, jpkm1 
    294             zfact1 = atfp * rdttra(jk) 
     305            zfact1 = atfp * p2dt(jk) 
    295306            zfact2 = zfact1 / rau0 
    296307            DO jj = 1, jpj 
     
    310321                  ztc_f  = ztc_n  + atfp * ztc_d 
    311322                  ! 
    312                   IF( ll_tra .AND. jk == 1 ) THEN           ! first level only for T & S 
    313                       ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 
    314                       ztc_f  = ztc_f  - zfact1 * ( sbc_tsc(ji,jj,jn) - sbc_tsc_b(ji,jj,jn) ) 
     323                  IF( jk == 1 ) THEN           ! first level  
     324                     ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj) ) 
     325                     ztc_f  = ztc_f  - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 
    315326                  ENDIF 
     327 
    316328                  IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr )   &     ! solar penetration (temperature only) 
    317329                     &     ztc_f  = ztc_f  - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) )  
    318330 
    319                    ze3t_f = 1.e0 / ze3t_f 
    320                    ptb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
    321                    ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
    322                    ! 
    323                    IF( ll_tra_hpg ) THEN        ! semi-implicit hpg (T & S only) 
    324                       ze3t_d           = 1.e0   / ( ze3t_n + rbcp * ze3t_d ) 
    325                       pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
    326                    ENDIF 
     331                  IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )   &            ! river runoffs 
     332                     &     ztc_f  = ztc_f  - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) &  
     333                     &                              * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 
     334 
     335                  ze3t_f = 1.e0 / ze3t_f 
     336                  ptb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
     337                  ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)     ! ptn <-- pta 
     338                  ! 
     339                  IF( ll_tra_hpg ) THEN        ! semi-implicit hpg (T & S only) 
     340                     ze3t_d           = 1.e0   / ( ze3t_n + rbcp * ze3t_d ) 
     341                     pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
     342                  ENDIF 
    327343               END DO 
    328344            END DO 
Note: See TracChangeset for help on using the changeset viewer.