Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r2715 r3294 32 32 USE diaptr ! poleward transport diagnostics 33 33 USE trc_oce ! share passive tracers/Ocean variables 34 34 USE wrk_nemo ! Memory Allocation 35 USE timing ! Timing 35 36 36 37 IMPLICIT NONE … … 51 52 CONTAINS 52 53 53 SUBROUTINE tra_adv_tvd ( kt, cdtype, p2dt, pun, pvn, pwn, &54 SUBROUTINE tra_adv_tvd ( kt, kit000, cdtype, p2dt, pun, pvn, pwn, & 54 55 & ptb, ptn, pta, kjpt ) 55 56 !!---------------------------------------------------------------------- … … 66 67 !! - save the trends 67 68 !!---------------------------------------------------------------------- 68 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released69 69 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as workspace 70 USE wrk_nemo, ONLY: zwi => wrk_3d_12 , zwz => wrk_3d_13 ! 3D workspace71 70 ! 72 71 INTEGER , INTENT(in ) :: kt ! ocean time-step index 72 INTEGER , INTENT(in ) :: kit000 ! first time step index 73 73 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 74 74 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 82 82 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk ! - - 83 83 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk ! - - 84 REAL(wp), DIMENSION (:,:,:), ALLOCATABLE :: ztrdx, ztrdy, ztrdz 85 !!---------------------------------------------------------------------- 86 87 IF( wrk_in_use(3, 12,13) ) THEN 88 CALL ctl_stop('tra_adv_tvd: requested workspace arrays unavailable') ; RETURN 89 ENDIF 90 91 IF( kt == nit000 ) THEN 84 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwz 85 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz 86 !!---------------------------------------------------------------------- 87 ! 88 IF( nn_timing == 1 ) CALL timing_start('tra_adv_tvd') 89 ! 90 CALL wrk_alloc( jpi, jpj, jpk, zwi, zwz ) 91 ! 92 IF( kt == kit000 ) THEN 92 93 IF(lwp) WRITE(numout,*) 93 94 IF(lwp) WRITE(numout,*) 'tra_adv_tvd : TVD advection scheme on ', cdtype … … 99 100 ! 100 101 IF( l_trd ) THEN 101 ALLOCATE( ztrdx(jpi,jpj,jpk) ) ; ztrdx(:,:,:) = 0.e0 102 ALLOCATE( ztrdy(jpi,jpj,jpk) ) ; ztrdy(:,:,:) = 0.e0 103 ALLOCATE( ztrdz(jpi,jpj,jpk) ) ; ztrdz(:,:,:) = 0.e0 104 END IF 102 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 103 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 104 ENDIF 105 105 ! 106 106 zwi(:,:,:) = 0.e0 … … 241 241 END DO 242 242 ! 243 IF( l_trd ) THEN 244 DEALLOCATE( ztrdx ) ; DEALLOCATE( ztrdy ) ; DEALLOCATE( ztrdz ) 245 END IF 246 ! 247 IF( wrk_not_released(3, 12,13) ) CALL ctl_stop('tra_adv_tvd: failed to release workspace arrays') 243 CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz ) 244 IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 245 ! 246 IF( nn_timing == 1 ) CALL timing_stop('tra_adv_tvd') 248 247 ! 249 248 END SUBROUTINE tra_adv_tvd … … 263 262 !! in-space based differencing for fluid 264 263 !!---------------------------------------------------------------------- 265 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 266 USE wrk_nemo, ONLY: zbetup => wrk_3d_8 , zbetdo => wrk_3d_9 ! 3D workspace 267 USE wrk_nemo, ONLY: zbup => wrk_3d_10 , zbdo => wrk_3d_11 ! - - 268 ! 264 ! 265 !!---------------------------------------------------------------------- 269 266 REAL(wp), DIMENSION(jpk) , INTENT(in ) :: p2dt ! vertical profile of tracer time-step 270 267 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in ) :: pbef, paft ! before & after field … … 275 272 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt ! local scalars 276 273 REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv, zup, zdo ! - - 277 !!---------------------------------------------------------------------- 278 279 IF( wrk_in_use(3, 8,9,10,11) ) THEN 280 CALL ctl_stop('nonosc: requested workspace array unavailable') ; RETURN 281 ENDIF 274 REAL(wp), POINTER, DIMENSION(:,:,:) :: zbetup, zbetdo, zbup, zbdo 275 !!---------------------------------------------------------------------- 276 ! 277 IF( nn_timing == 1 ) CALL timing_start('nonosc') 278 ! 279 CALL wrk_alloc( jpi, jpj, jpk, zbetup, zbetdo, zbup, zbdo ) 280 ! 282 281 283 282 zbig = 1.e+40_wp … … 330 329 END DO 331 330 CALL lbc_lnk( zbetup, 'T', 1. ) ; CALL lbc_lnk( zbetdo, 'T', 1. ) ! lateral boundary cond. (unchanged sign) 332 333 334 331 335 332 ! 3. monotonic flux in the i & j direction (paa & pbb) … … 359 356 CALL lbc_lnk( paa, 'U', -1. ) ; CALL lbc_lnk( pbb, 'V', -1. ) ! lateral boundary condition (changed sign) 360 357 ! 361 IF( wrk_not_released(3, 8,9,10,11) ) CALL ctl_stop('nonosc: failed to release workspace arrays') 358 CALL wrk_dealloc( jpi, jpj, jpk, zbetup, zbetdo, zbup, zbdo ) 359 ! 360 IF( nn_timing == 1 ) CALL timing_stop('nonosc') 362 361 ! 363 362 END SUBROUTINE nonosc
Note: See TracChangeset
for help on using the changeset viewer.