Changeset 5965 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
- Timestamp:
- 2015-12-01T16:35:30+01:00 (8 years ago)
- 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 27 27 USE dom_oce ! ocean space and time domain variables 28 28 USE sbc_oce ! surface boundary condition: ocean 29 USE zdf_oce ! ??? 29 USE sbcrnf ! river runoffs 30 USE zdf_oce ! ocean vertical mixing 30 31 USE domvvl ! variable volume 31 32 USE dynspg_oce ! surface pressure gradient variables 32 33 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 37 40 USE bdytra ! open boundary condition (bdy_tra routine) 41 ! 38 42 USE in_out_manager ! I/O manager 39 43 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 40 44 USE prtctl ! Print control 41 USE traqsr ! penetrative solar radiation (needed for nksr) 45 USE wrk_nemo ! Memory allocation 46 USE timing ! Timing 42 47 #if defined key_agrif 43 48 USE agrif_opa_update 44 49 USE agrif_opa_interp 45 50 #endif 46 USE wrk_nemo ! Memory allocation47 USE timing ! Timing48 51 49 52 IMPLICIT NONE … … 80 83 !! at the local domain boundaries through lbc_lnk call, 81 84 !! at the one-way open boundaries (lk_bdy=T), 82 !! at the AGRIF zoom 85 !! at the AGRIF zoom boundaries (lk_agrif=T) 83 86 !! 84 87 !! - Update lateral boundary conditions on AGRIF children … … 127 130 ztrdt(:,:,:) = tsn(:,:,:,jp_tem) 128 131 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 129 136 ENDIF 130 137 … … 137 144 ELSE ! Leap-Frog + Asselin filter time stepping 138 145 ! 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 141 149 ENDIF 142 150 ENDIF … … 150 158 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 151 159 DO jk = 1, jpkm1 152 zfact = 1. e0_wp / r2dtra(jk)160 zfact = 1._wp / r2dtra(jk) 153 161 ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 154 162 ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 155 163 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 ) 158 166 CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 159 167 END IF … … 163 171 & tab3d_2=tsn(:,:,:,jp_sal), clinfo2= ' Sn: ', mask2=tmask ) 164 172 ! 165 ! 166 IF( nn_timing == 1 ) CALL timing_stop('tra_nxt') 173 IF( nn_timing == 1 ) CALL timing_stop('tra_nxt') 167 174 ! 168 175 END SUBROUTINE tra_nxt … … 236 243 237 244 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 ) 239 246 !!---------------------------------------------------------------------- 240 247 !! *** ROUTINE tra_nxt_vvl *** … … 260 267 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 261 268 !!---------------------------------------------------------------------- 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 269 280 !! 270 LOGICAL :: ll_tra , ll_tra_hpg, ll_traqsr! local logical281 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf ! local logical 271 282 INTEGER :: ji, jj, jk, jn ! dummy loop indices 272 283 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 281 292 ! 282 293 IF( cdtype == 'TRA' ) THEN 283 ll_tra = .TRUE. ! active tracers case284 294 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg 285 295 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 296 ll_rnf = ln_rnf ! active tracers case and river runoffs 286 297 ELSE 287 ll_tra = .FALSE. ! passive tracers case288 298 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 289 299 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 300 ll_rnf = .FALSE. ! passive tracers or NO river runoffs 290 301 ENDIF 291 302 ! 292 303 DO jn = 1, kjpt 293 304 DO jk = 1, jpkm1 294 zfact1 = atfp * rdttra(jk)305 zfact1 = atfp * p2dt(jk) 295 306 zfact2 = zfact1 / rau0 296 307 DO jj = 1, jpj … … 310 321 ztc_f = ztc_n + atfp * ztc_d 311 322 ! 312 IF( ll_tra .AND. jk == 1 ) THEN ! first level only for T & S313 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) ) 315 326 ENDIF 327 316 328 IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & ! solar penetration (temperature only) 317 329 & ztc_f = ztc_f - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) ) 318 330 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 327 343 END DO 328 344 END DO
Note: See TracChangeset
for help on using the changeset viewer.