- Timestamp:
- 2015-12-17T11:08:49+01:00 (8 years ago)
- Location:
- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC
- Property svn:mergeinfo deleted
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5901 r6079 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 … … 58 56 PUBLIC tra_nxt_vvl ! to be used in trcnxt 59 57 60 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg61 58 62 59 !! * Substitutions … … 90 87 !! 91 88 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 92 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)89 !! 93 90 !!---------------------------------------------------------------------- 94 91 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 105 102 IF(lwp) WRITE(numout,*) 'tra_nxt : achieve the time stepping by Asselin filter and array swap' 106 103 IF(lwp) WRITE(numout,*) '~~~~~~~' 107 !108 rbcp = 0.25_wp * (1._wp + atfp) * (1._wp + atfp) * ( 1._wp - atfp) ! Brown & Campana parameter for semi-implicit hpg109 104 ENDIF 110 105 111 106 ! Update after tracer on domain lateral boundaries 112 107 ! 108 ! 113 109 #if defined key_agrif 114 110 CALL Agrif_tra ! AGRIF zoom boundaries … … 181 177 !! 182 178 !! ** Method : - Apply a Asselin time filter on now fields. 183 !! - save in (ta,sa) an average over the three time levels184 !! which will be used to compute rdn and thus the semi-implicit185 !! hydrostatic pressure gradient (ln_dynhpg_imp = T)186 179 !! - swap tracer fields to prepare the next time_step. 187 !! This can be summurized for tempearture as:188 !! ztm = tn + rbcp * [ta -2 tn + tb ] ln_dynhpg_imp = T189 !! ztm = 0 otherwise190 !! with rbcp=1/4 * (1-atfp^4) / (1-atfp)191 !! tb = tn + atfp*[ tb - 2 tn + ta ]192 !! tn = ta193 !! ta = ztm (NB: reset to 0 after eos_bn2 call)194 180 !! 195 181 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 196 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)182 !! 197 183 !!---------------------------------------------------------------------- 198 184 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 205 191 ! 206 192 INTEGER :: ji, jj, jk, jn ! dummy loop indices 207 LOGICAL :: ll_tra_hpg ! local logical208 193 REAL(wp) :: ztn, ztd ! local scalars 209 194 !!---------------------------------------------------------------------- … … 215 200 ENDIF 216 201 ! 217 IF( cdtype == 'TRA' ) THEN ; ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg218 ELSE ; ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg219 ENDIF220 202 ! 221 203 DO jn = 1, kjpt … … 230 212 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 231 213 ! 232 IF( ll_tra_hpg ) pta(ji,jj,jk,jn) = ztn + rbcp * ztd ! pta <-- Brown & Campana average233 214 END DO 234 215 END DO … … 248 229 !! 249 230 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 250 !! - save in (ta,sa) a thickness weighted average over the three251 !! time levels which will be used to compute rdn and thus the semi-252 !! implicit hydrostatic pressure gradient (ln_dynhpg_imp = T)253 231 !! - swap tracer fields to prepare the next time_step. 254 232 !! This can be summurized for tempearture as: 255 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T256 !! /( e3t_n + rbcp*[ e3t_b - 2 e3t_n + e3t_a ] )257 !! ztm = 0 otherwise258 !! tb = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )259 !! /( e3t_n + atfp*[ e3t_b - 2 e3t_n + e3t_a ] )260 !! tn = ta261 !! ta = zt (NB: reset to 0 after eos_bn2 call)262 233 !! 263 234 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 264 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)235 !! 265 236 !!---------------------------------------------------------------------- 266 237 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 276 247 277 248 !! 278 LOGICAL :: ll_tra _hpg, ll_traqsr, ll_rnf, ll_isf ! local logical249 LOGICAL :: ll_traqsr, ll_rnf, ll_isf ! local logical 279 250 INTEGER :: ji, jj, jk, jn ! dummy loop indices 280 251 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 289 260 ! 290 261 IF( cdtype == 'TRA' ) THEN 291 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg292 262 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 293 263 ll_rnf = ln_rnf ! active tracers case and river runoffs … … 298 268 END IF 299 269 ELSE 300 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg301 270 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 302 271 ll_rnf = .FALSE. ! passive tracers or NO river runoffs … … 356 325 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 357 326 ! 358 IF( ll_tra_hpg ) THEN ! semi-implicit hpg (T & S only)359 ze3t_d = 1.e0 / ( ze3t_n + rbcp * ze3t_d )360 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average361 ENDIF362 327 END DO 363 328 END DO
Note: See TracChangeset
for help on using the changeset viewer.