Changeset 2272
- Timestamp:
- 2010-10-14T18:45:40+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r2257 r2272 57 57 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg 58 58 REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time step, =2*rdttra (leapfrog) or =rdttra (Euler) 59 LOGICAL :: l_tra ! active tracers or passive tracers60 59 61 60 !! * Substitutions 62 61 # include "domzgr_substitute.h90" 63 62 !!---------------------------------------------------------------------- 64 !! NEMO/OPA 3.3 , LOCEAN-IPSL(2010)65 !! $Id $63 !! NEMO/OPA 3.3 , NEMO-Consortium (2010) 64 !! $Id $ 66 65 !! Software governed by the CeCILL licence (NEMOGCM/License_CeCILL.txt) 67 66 !!---------------------------------------------------------------------- 68 69 67 CONTAINS 70 68 … … 124 122 #endif 125 123 #if defined key_agrif 126 CALL Agrif_tra ! AGRIF zoom boundaries124 CALL Agrif_tra ! AGRIF zoom boundaries 127 125 #endif 128 126 … … 137 135 138 136 ! trends computation initialisation 139 IF( l_trdtra ) THEN ! *store now fields before applying the Asselin filter137 IF( l_trdtra ) THEN ! store now fields before applying the Asselin filter 140 138 ALLOCATE( ztrdt(jpi,jpj,jpk) ) ; ztrdt(:,:,:) = tsn(:,:,:,jp_tem) 141 139 ALLOCATE( ztrds(jpi,jpj,jpk) ) ; ztrds(:,:,:) = tsn(:,:,:,jp_sal) 142 140 ENDIF 143 141 144 ! Leap-Frog + Asselin filter time stepping 145 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step 146 ! ! (only swap) 142 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step (only swap) 147 143 DO jn = 1, jpts 148 144 DO jk = 1, jpkm1 … … 150 146 END DO 151 147 END DO 152 !153 ELSE148 ELSE ! Leap-Frog + Asselin filter time stepping 149 ! 154 150 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, 'TRA', tsb, tsn, tsa, jpts ) ! variable volume level (vvl) 155 151 ELSE ; CALL tra_nxt_fix( kt, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level … … 158 154 159 155 #if defined key_agrif 156 ! Update tracer at AGRIF zoom boundaries 160 157 CALL tra_unswap 161 ! Update tracer at AGRIF zoom boundaries162 158 IF( .NOT.Agrif_Root() ) CALL Agrif_Update_Tra( kt ) ! children only 163 159 CALL tra_swap … … 165 161 166 162 ! trends computation 167 IF( l_trdtra ) THEN 163 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 168 164 DO jk = 1, jpkm1 169 165 zfact = 1.e0 / r2dt(jk) … … 212 208 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 213 209 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 214 INTEGER :: ji, jj, jk, jn ! dummy loop indices 215 REAL(wp) :: ztn, ztd, ztm ! temporary scalars 210 !! 211 INTEGER :: ji, jj, jk, jn ! dummy loop indices 212 LOGICAL :: ll_tra_hpg ! local logical 213 REAL(wp) :: ztn, ztd, ztm ! local scalars 216 214 !!---------------------------------------------------------------------- 217 215 … … 222 220 ENDIF 223 221 ! 224 IF( cdtype == 'TRA' ) THEN ; l _tra = .TRUE. ! active tracers case225 ELSE ; l _tra = .FALSE. ! passive tracers case222 IF( cdtype == 'TRA' ) THEN ; ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg 223 ELSE ; ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 226 224 ENDIF 227 225 ! … … 231 229 DO jj = 1, jpj 232 230 DO ji = 1, jpi 233 IF( l _tra .AND. ln_dynhpg_imp ) ztn = ptn(ji,jj,jk,jn) !implicit hpg: keep tn, sn in memory231 IF( ll_tra_hpg ) ztn = ptn(ji,jj,jk,jn) ! semi-implicit hpg: keep tn, sn in memory 234 232 ! 235 233 ztd = pta(ji,jj,jk,jn) - 2.* ptn(ji,jj,jk,jn) + ptb(ji,jj,jk,jn) ! time laplacian on tracers … … 238 236 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 239 237 ! 240 IF( l _tra .AND. ln_dynhpg_imp ) pta(ji,jj,jk,jn) = ztn + rbcp * ztd! pta <-- Brown & Campana average238 IF( ll_tra_hpg ) pta(ji,jj,jk,jn) = ztn + rbcp * ztd ! pta <-- Brown & Campana average 241 239 END DO 242 240 END DO … … 279 277 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 280 278 !! 281 INTEGER :: ji, jj, jk, jn ! dummy loop indices 282 REAL(wp) :: ztc_a , ztc_n , ztc_b ! temporary scalar 283 REAL(wp) :: ztc_f , ztc_d , ztc_m ! - - 284 REAL(wp) :: ze3t_b, ze3t_n, ze3t_a ! - - 285 REAL(wp) :: ze3t_f, ze3t_d, ze3t_m ! - - 286 REAL :: zfact1, zfact2 ! - - 279 LOGICAL :: ll_tra, ll_tra_hpg, ll_traqsr ! local logical 280 INTEGER :: ji, jj, jk, jn ! dummy loop indices 281 REAL(wp) :: ztc_a , ztc_n , ztc_b ! local scalar 282 REAL(wp) :: ztc_f , ztc_d , ztc_m ! - - 283 REAL(wp) :: ze3t_b, ze3t_n, ze3t_a ! - - 284 REAL(wp) :: ze3t_f, ze3t_d, ze3t_m ! - - 285 REAL(wp) :: zfact1, zfact2 ! - - 287 286 !!---------------------------------------------------------------------- 288 287 … … 293 292 ENDIF 294 293 ! 295 IF( cdtype == 'TRA' ) THEN ; l_tra = .TRUE. ! active tracers case 296 ELSE ; l_tra = .FALSE. ! passive tracers case 294 IF( cdtype == 'TRA' ) THEN 295 ll_tra = .TRUE. ! active tracers case 296 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg 297 ll_traqsr = ln_traqsr ! active tracers case and semi-implicit hpg 298 ELSE 299 ll_tra = .FALSE. ! passive tracers case 300 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 301 ll_traqsr = .FALSE. ! active tracers case and semi-implicit hpg 297 302 ENDIF 298 303 ! … … 316 321 ze3t_f = ze3t_n + atfp * ze3t_d 317 322 ztc_f = ztc_n + atfp * ztc_d 318 319 IF( l _tra .AND. jk == 1 ) THEN323 ! 324 IF( ll_tra .AND. jk == 1 ) THEN ! first level only for T & S 320 325 ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 321 326 ztc_f = ztc_f - zfact1 * ( sbc_tsc(ji,jj,jn) - sbc_tsc_b(ji,jj,jn) ) 322 327 ENDIF 323 IF( l _tra .AND. jn == jp_tem .AND. ln_traqsr .AND. jk <= nksr ) &328 IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & ! solar penetration (temperature only) 324 329 & ztc_f = ztc_f - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) ) 325 330 … … 328 333 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 329 334 ! 330 IF( l _tra .AND. ln_dynhpg_imp ) THEN335 IF( ll_tra_hpg ) THEN ! semi-implicit hpg (T & S only) 331 336 ze3t_d = 1.e0 / ( ze3t_n + rbcp * ze3t_d ) 332 337 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average
Note: See TracChangeset
for help on using the changeset viewer.