Changeset 2775


Ignore:
Timestamp:
2011-06-03T14:55:09+02:00 (9 years ago)
Author:
rblod
Message:

Add a first solution to find automatically an available working array, see ticket #829 and https://forge.ipsl.jussieu.fr/nemo/wiki/ticket/829

Location:
branches/2011/dev_r2769_LOCEAN_dynamic_mem/NEMOGCM/NEMO/OPA_SRC
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2769_LOCEAN_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r2771 r2775  
    3333   USE trc_oce         ! share passive tracers/Ocean variables 
    3434   USE timing          ! preformance summary 
     35   USE wrk_nemo_2      ! working arrays 
    3536 
    3637   IMPLICIT NONE 
     
    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 
     
    8281      REAL(wp) ::   zfp_ui, zfp_vj, zfp_wk   !   -      - 
    8382      REAL(wp) ::   zfm_ui, zfm_vj, zfm_wk   !   -      - 
     83      REAL(wp), DIMENSION (:,:,:), POINTER ::   zwi, zwz 
    8484      REAL(wp), DIMENSION (:,:,:), ALLOCATABLE ::   ztrdx, ztrdy, ztrdz 
    8585      !!---------------------------------------------------------------------- 
     
    8787      IF( ln_timing )   CALL timing_start('traadv_tvd') 
    8888 
    89       IF( wrk_in_use(3, 12,13) ) THEN 
    90          CALL ctl_stop('tra_adv_tvd: requested workspace arrays unavailable')   ;   RETURN 
    91       ENDIF 
    92  
     89!      IF( wrk_in_use(3, 12,13) ) THEN 
     90!         CALL ctl_stop('tra_adv_tvd: requested workspace arrays unavailable')   ;   RETURN 
     91!      ENDIF 
     92 
     93      CALL nemo_allocate(zwi) ; CALL nemo_allocate(zwz) 
     94  
    9395      IF( kt == nit000 )  THEN 
    9496         IF(lwp) WRITE(numout,*) 
     
    247249      END IF 
    248250      ! 
    249       IF( wrk_not_released(3, 12,13) )   CALL ctl_stop('tra_adv_tvd: failed to release workspace arrays') 
     251!      IF( wrk_not_released(3, 12,13) )   CALL ctl_stop('tra_adv_tvd: failed to release workspace arrays') 
     252      CALL nemo_deallocate(zwi) ; CALL nemo_deallocate(zwz) 
    250253      ! 
    251254      IF( ln_timing )   CALL timing_stop('traadv_tvd') 
     
    267270      !!       in-space based differencing for fluid 
    268271      !!---------------------------------------------------------------------- 
    269       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    270       USE wrk_nemo, ONLY:   zbetup => wrk_3d_8  , zbetdo => wrk_3d_9    ! 3D workspace 
    271       USE wrk_nemo, ONLY:   zbup   => wrk_3d_10 , zbdo   => wrk_3d_11   !  -     - 
     272!      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     273!      USE wrk_nemo, ONLY:   zbetup => wrk_3d_8  , zbetdo => wrk_3d_9    ! 3D workspace 
     274!      USE wrk_nemo, ONLY:   zbup   => wrk_3d_10 , zbdo   => wrk_3d_11   !  -     - 
    272275      ! 
    273276      REAL(wp), DIMENSION(jpk)         , INTENT(in   ) ::   p2dt            ! vertical profile of tracer time-step 
     
    279282      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt   ! local scalars 
    280283      REAL(wp) ::   zau, zbu, zcu, zav, zbv, zcv, zup, zdo            !   -      - 
     284      REAL(wp), DIMENSION(:,:,:), POINTER :: zbetup, zbetdo, zbup, zbdo 
    281285      !!---------------------------------------------------------------------- 
    282286 
    283287      IF( ln_timing )   CALL timing_start('nonosc') 
    284288 
    285       IF( wrk_in_use(3, 8,9,10,11) ) THEN 
    286          CALL ctl_stop('nonosc: requested workspace array unavailable')   ;   RETURN 
    287       ENDIF 
     289      CALL nemo_allocate(zbetup) ; CALL nemo_allocate(zbetdo) 
     290      CALL nemo_allocate(zbup  ) ; CALL nemo_allocate(zbdo  ) 
     291 
     292!      IF( wrk_in_use(3, 8,9,10,11) ) THEN 
     293!         CALL ctl_stop('nonosc: requested workspace array unavailable')   ;   RETURN 
     294!      ENDIF 
    288295 
    289296      zbig  = 1.e+40_wp 
     
    365372      CALL lbc_lnk( paa, 'U', -1. )   ;   CALL lbc_lnk( pbb, 'V', -1. )   ! lateral boundary condition (changed sign) 
    366373      ! 
    367       IF( wrk_not_released(3, 8,9,10,11) )   CALL ctl_stop('nonosc: failed to release workspace arrays') 
     374!RB      IF( wrk_not_released(3, 8,9,10,11) )   CALL ctl_stop('nonosc: failed to release workspace arrays') 
     375      ! 
     376      CALL nemo_deallocate(zbetup) ; CALL nemo_deallocate(zbetdo) 
     377      CALL nemo_deallocate(zbup  ) ; CALL nemo_deallocate(zbdo  ) 
    368378      ! 
    369379      IF( ln_timing )   CALL timing_stop('nonosc') 
  • branches/2011/dev_r2769_LOCEAN_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r2771 r2775  
    482482      !! ** Method  : 
    483483      !!---------------------------------------------------------------------- 
    484       USE diawri    , ONLY: dia_wri_alloc 
    485       USE dom_oce   , ONLY: dom_oce_alloc 
    486       USE ldfdyn_oce, ONLY: ldfdyn_oce_alloc 
    487       USE ldftra_oce, ONLY: ldftra_oce_alloc 
    488       USE trc_oce   , ONLY: trc_oce_alloc 
    489       USE wrk_nemo  , ONLY: wrk_alloc 
     484      USE diawri     , ONLY: dia_wri_alloc 
     485      USE dom_oce    , ONLY: dom_oce_alloc 
     486      USE ldfdyn_oce , ONLY: ldfdyn_oce_alloc 
     487      USE ldftra_oce , ONLY: ldftra_oce_alloc 
     488      USE trc_oce    , ONLY: trc_oce_alloc 
     489      USE wrk_nemo   , ONLY: wrk_alloc 
     490      USE wrk_nemo_2 , ONLY: wrk_alloc_2 
    490491      ! 
    491492      INTEGER :: ierr 
     
    503504      ! 
    504505      ierr = ierr + wrk_alloc(numout, lwp)      ! workspace 
     506      ierr = ierr + wrk_alloc_2(numout, lwp)    ! workspace 
    505507      ! 
    506508      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
Note: See TracChangeset for help on using the changeset viewer.