Changeset 6041 for branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
- Timestamp:
- 2015-12-14T10:06:06+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5656 r6041 31 31 USE zdf_oce ! ocean vertical mixing 32 32 USE domvvl ! variable volume 33 USE dynspg_oce ! surface pressure gradient variables34 USE dynhpg ! hydrostatic pressure gradient35 33 USE trd_oce ! trends: ocean variables 36 34 USE trdtra ! trends manager: tracers 37 35 USE traqsr ! penetrative solar radiation (needed for nksr) 38 36 USE phycst ! physical constant 39 USE ldftra_oce ! lateral physics on tracers 37 USE ldftra ! lateral physics on tracers 38 USE ldfslp 40 39 USE bdy_oce ! BDY open boundary condition variables 41 40 USE bdytra ! open boundary condition (bdy_tra routine) … … 57 56 PUBLIC tra_nxt_vvl ! to be used in trcnxt 58 57 59 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg60 58 61 59 !! * Substitutions … … 89 87 !! 90 88 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 91 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)89 !! 92 90 !!---------------------------------------------------------------------- 93 91 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 104 102 IF(lwp) WRITE(numout,*) 'tra_nxt : achieve the time stepping by Asselin filter and array swap' 105 103 IF(lwp) WRITE(numout,*) '~~~~~~~' 106 !107 rbcp = 0.25_wp * (1._wp + atfp) * (1._wp + atfp) * ( 1._wp - atfp) ! Brown & Campana parameter for semi-implicit hpg108 104 ENDIF 109 105 110 106 ! Update after tracer on domain lateral boundaries 111 107 ! 108 ! 112 109 #if defined key_agrif 113 110 CALL Agrif_tra ! AGRIF zoom boundaries … … 180 177 !! 181 178 !! ** Method : - Apply a Asselin time filter on now fields. 182 !! - save in (ta,sa) an average over the three time levels183 !! which will be used to compute rdn and thus the semi-implicit184 !! hydrostatic pressure gradient (ln_dynhpg_imp = T)185 179 !! - swap tracer fields to prepare the next time_step. 186 !! This can be summurized for tempearture as:187 !! ztm = tn + rbcp * [ta -2 tn + tb ] ln_dynhpg_imp = T188 !! ztm = 0 otherwise189 !! with rbcp=1/4 * (1-atfp^4) / (1-atfp)190 !! tb = tn + atfp*[ tb - 2 tn + ta ]191 !! tn = ta192 !! ta = ztm (NB: reset to 0 after eos_bn2 call)193 180 !! 194 181 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 195 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)182 !! 196 183 !!---------------------------------------------------------------------- 197 184 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 204 191 ! 205 192 INTEGER :: ji, jj, jk, jn ! dummy loop indices 206 LOGICAL :: ll_tra_hpg ! local logical207 193 REAL(wp) :: ztn, ztd ! local scalars 208 194 !!---------------------------------------------------------------------- … … 214 200 ENDIF 215 201 ! 216 IF( cdtype == 'TRA' ) THEN ; ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg217 ELSE ; ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg218 ENDIF219 202 ! 220 203 DO jn = 1, kjpt … … 229 212 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 230 213 ! 231 IF( ll_tra_hpg ) pta(ji,jj,jk,jn) = ztn + rbcp * ztd ! pta <-- Brown & Campana average232 214 END DO 233 215 END DO … … 247 229 !! 248 230 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 249 !! - save in (ta,sa) a thickness weighted average over the three250 !! time levels which will be used to compute rdn and thus the semi-251 !! implicit hydrostatic pressure gradient (ln_dynhpg_imp = T)252 231 !! - swap tracer fields to prepare the next time_step. 253 232 !! This can be summurized for tempearture as: 254 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T255 !! /( e3t_n + rbcp*[ e3t_b - 2 e3t_n + e3t_a ] )256 !! ztm = 0 otherwise257 !! tb = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )258 !! /( e3t_n + atfp*[ e3t_b - 2 e3t_n + e3t_a ] )259 !! tn = ta260 !! ta = zt (NB: reset to 0 after eos_bn2 call)261 233 !! 262 234 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 263 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)235 !! 264 236 !!---------------------------------------------------------------------- 265 237 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 275 247 276 248 !! 277 LOGICAL :: ll_tra _hpg, ll_traqsr, ll_rnf, ll_isf ! local logical249 LOGICAL :: ll_traqsr, ll_rnf, ll_isf ! local logical 278 250 INTEGER :: ji, jj, jk, jn ! dummy loop indices 279 251 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 288 260 ! 289 261 IF( cdtype == 'TRA' ) THEN 290 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg291 262 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 292 263 ll_rnf = ln_rnf ! active tracers case and river runoffs … … 297 268 END IF 298 269 ELSE 299 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg300 270 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 301 271 ll_rnf = .FALSE. ! passive tracers or NO river runoffs … … 355 325 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 356 326 ! 357 IF( ll_tra_hpg ) THEN ! semi-implicit hpg (T & S only)358 ze3t_d = 1.e0 / ( ze3t_n + rbcp * ze3t_d )359 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average360 ENDIF361 327 END DO 362 328 END DO
Note: See TracChangeset
for help on using the changeset viewer.