New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90 – NEMO

Ignore:
Timestamp:
2012-01-28T17:44:18+01:00 (12 years ago)
Author:
rblod
Message:

Merge of 3.4beta into the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r2715 r3294  
    3232   USE diaptr          ! poleward transport diagnostics 
    3333   USE trc_oce         ! share passive tracers/Ocean variables 
    34  
     34   USE wrk_nemo        ! Memory Allocation 
     35   USE timing          ! Timing 
    3536 
    3637   IMPLICIT NONE 
     
    5152CONTAINS 
    5253 
    53    SUBROUTINE tra_adv_tvd ( kt, cdtype, p2dt, pun, pvn, pwn,      & 
     54   SUBROUTINE tra_adv_tvd ( kt, kit000, cdtype, p2dt, pun, pvn, pwn,      & 
    5455      &                                       ptb, ptn, pta, kjpt ) 
    5556      !!---------------------------------------------------------------------- 
     
    6667      !!             - save the trends  
    6768      !!---------------------------------------------------------------------- 
    68       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    6969      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 workspace 
    7170      ! 
    7271      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index 
     72      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
    7373      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator) 
    7474      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
     
    8282      REAL(wp) ::   zfp_ui, zfp_vj, zfp_wk   !   -      - 
    8383      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 
    9293         IF(lwp) WRITE(numout,*) 
    9394         IF(lwp) WRITE(numout,*) 'tra_adv_tvd : TVD advection scheme on ', cdtype 
     
    99100      ! 
    100101      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 
    105105      ! 
    106106      zwi(:,:,:) = 0.e0 
     
    241241      END DO 
    242242      ! 
    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') 
    248247      ! 
    249248   END SUBROUTINE tra_adv_tvd 
     
    263262      !!       in-space based differencing for fluid 
    264263      !!---------------------------------------------------------------------- 
    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      !!---------------------------------------------------------------------- 
    269266      REAL(wp), DIMENSION(jpk)         , INTENT(in   ) ::   p2dt            ! vertical profile of tracer time-step 
    270267      REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in   ) ::   pbef, paft      ! before & after field 
     
    275272      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt   ! local scalars 
    276273      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      ! 
    282281 
    283282      zbig  = 1.e+40_wp 
     
    330329      END DO 
    331330      CALL lbc_lnk( zbetup, 'T', 1. )   ;   CALL lbc_lnk( zbetdo, 'T', 1. )   ! lateral boundary cond. (unchanged sign) 
    332  
    333  
    334331 
    335332      ! 3. monotonic flux in the i & j direction (paa & pbb) 
     
    359356      CALL lbc_lnk( paa, 'U', -1. )   ;   CALL lbc_lnk( pbb, 'V', -1. )   ! lateral boundary condition (changed sign) 
    360357      ! 
    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') 
    362361      ! 
    363362   END SUBROUTINE nonosc 
Note: See TracChangeset for help on using the changeset viewer.