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 2590 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2011-02-18T13:49:27+01:00 (13 years ago)
Author:
trackstand2
Message:

Merge branch 'dynamic_memory' into master-svn-dyn

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r2528 r2590  
    3535   PRIVATE 
    3636 
    37    PUBLIC   div_cur    ! routine called by step.F90 and istate.F90 
     37   PUBLIC   div_cur       ! routine called by step.F90 and istate.F90 
     38   PUBLIC   div_cur_alloc ! routine called by nemogcm.F90 
     39 
     40   ! These workspace arrays are not replaced by wrk_nemo because they  
     41   ! have extents greater than (jpi,jpj) 
     42   REAL(wp), DIMENSION(:,:) ::   zwu   ! workspace 
     43   REAL(wp), DIMENSION(:,:) ::   zwv   ! workspace 
    3844 
    3945   !! * Substitutions 
     
    4652   !!---------------------------------------------------------------------- 
    4753CONTAINS 
     54 
     55   FUNCTION div_cur_alloc() 
     56      !!---------------------------------------------------------------------- 
     57      !!               ***  ROUTINE div_cur_alloc  *** 
     58      !!---------------------------------------------------------------------- 
     59      INTEGER :: div_cur_alloc 
     60      !!---------------------------------------------------------------------- 
     61 
     62      div_cur_alloc = 0 
     63 
     64#if defined key_noslip_accurate 
     65      ALLOCATE(zwu( jpi, 1:jpj+2), zwv(-1:jpi+2, jpj), Stat=div_cur_alloc) 
     66#endif 
     67 
     68      IF(div_cur_alloc /= 0)THEN 
     69         CALL ctl_warn('div_cur_alloc: failed to allocate arrays.') 
     70      END IF 
     71 
     72   END FUNCTION div_cur_alloc 
    4873 
    4974#if defined key_noslip_accurate 
     
    88113      INTEGER ::   ijt, iju       ! temporary integer 
    89114      REAL(wp) ::  zraur, zdep 
    90       REAL(wp), DIMENSION(   jpi  ,1:jpj+2) ::   zwu   ! workspace 
    91       REAL(wp), DIMENSION(-1:jpi+2,  jpj  ) ::   zwv   ! workspace 
    92115      !!---------------------------------------------------------------------- 
    93116 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90

    r2528 r2590  
    4949      USE oce, ONLY:   zfu => ta   ! use ta as 3D workspace 
    5050      USE oce, ONLY:   zfv => sa   ! use sa as 3D workspace 
     51      USE wrk_nemo, ONLY: zfu_t => wrk_3d_1, & ! 3D workspaces 
     52                          zfu_f => wrk_3d_2, & 
     53                          zfu_uw =>wrk_3d_3, & 
     54                          zfv_t => wrk_3d_4, &  
     55                          zfv_f => wrk_3d_5, &  
     56                          zfv_vw =>wrk_3d_6, & 
     57                          zfw   => wrk_3d_7, & 
     58                          wrk_use, wrk_release 
     59      IMPLICIT none 
    5160      !! 
    5261      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    5463      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    5564      REAL(wp) ::   zbu, zbv     ! temporary scalars 
    56       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zfu_t, zfu_f, zfu_uw   ! 3D workspace 
    57       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zfv_t, zfv_f, zfv_vw   !  -      - 
    58       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zfw                    !  -      - 
    5965      !!---------------------------------------------------------------------- 
    6066 
     
    6470         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    6571      ENDIF 
     72 
     73      ! Check that global workspace arrays aren't already in use 
     74      IF( .not. wrk_use(3, 1, 2, 3, 4, 5, 6, 7) )THEN 
     75         IF(lwp) WRITE(numout, *) 'dyn_adv_cen2 : run-time error - global workspace arrays already in use.' 
     76         CALL ctl_stop('dyn_adv_cen2 : run-time error - global workspace arrays already in use.') 
     77      END IF 
    6678 
    6779      IF( l_trddyn ) THEN           ! Save ua and va trends 
     
    157169         &                       tab3d_2=va, clinfo2=           ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    158170      ! 
     171      ! Flag that the global workspace arrays are no longer in use 
     172      IF( .not. wrk_release(3, 1, 2, 3, 4, 5, 6, 7) )THEN 
     173         IF(lwp) WRITE(numout, *) 'dyn_adv_cen2 : run-time error - failed to release global workspace arrays.' 
     174      END IF 
     175      ! 
    159176   END SUBROUTINE dyn_adv_cen2 
    160177 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90

    r2528 r2590  
    7070      USE oce, ONLY:   zfu => ta   ! use ta as 3D workspace 
    7171      USE oce, ONLY:   zfv => sa   ! use sa as 3D workspace 
     72      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     73      USE wrk_nemo, ONLY: zfu_t  =>wrk_3d_1, & 
     74                          zfu_f  =>wrk_3d_2, & 
     75                          zfv_t  =>wrk_3d_3, & 
     76                          zfv_f  =>wrk_3d_4, & 
     77                          zfw    =>wrk_3d_5, & 
     78                          zfu_uw =>wrk_3d_6, & 
     79                          zfv_vw =>wrk_3d_7  
     80      USE wrk_nemo, ONLY: zlu_uu=>wrk_4d_1, & 
     81                          zlu_uv=>wrk_4d_2, & 
     82                          zlv_vv=>wrk_4d_3, & 
     83                          zlv_vu=>wrk_4d_4 
    7284      !! 
    7385      INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
     
    7688      REAL(wp) ::   zbu, zbv    ! temporary scalars 
    7789      REAL(wp) ::   zui, zvj, zfuj, zfvi, zl_u, zl_v   ! temporary scalars 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfu_t, zfu_f     ! temporary workspace 
    79       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfv_t, zfv_f     !    "           " 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfw, zfu_uw, zfv_vw 
    81       REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlu_uu, zlu_uv   ! temporary workspace 
    82       REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlv_vv, zlv_vu   ! temporary workspace 
     90! ARPDBG - arrays below replaced with global work spaces 
     91!!$      REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfu_t, zfu_f     ! temporary workspace 
     92!!$      REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfv_t, zfv_f     !    "           " 
     93!!$      REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfw, zfu_uw, zfv_vw 
     94!!$      REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlu_uu, zlu_uv   ! temporary workspace 
     95!!$      REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlv_vv, zlv_vu   ! temporary workspace 
    8396      !!---------------------------------------------------------------------- 
    8497 
     
    88101         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    89102      ENDIF 
     103 
     104      ! Check that required workspace arrays are not already in use 
     105      IF( .not. wrk_use(3, 1, 2, 3, 4, 5, 6, 7) )THEN 
     106         CALL ctl_stop('dyn_adv_ubs : error : required 3d workspace array is already in use') 
     107      END IF 
     108      IF(.not. wrk_use(4, 1, 2, 3, 4) )THEN 
     109         CALL ctl_stop('dyn_adv_ubs : error : required 4d workspace array is already in use') 
     110      END IF 
     111 
    90112      zfu_t(:,:,:) = 0.e0 
    91113      zfv_t(:,:,:) = 0.e0 
     
    248270         &                       tab3d_2=va, clinfo2=           ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    249271      ! 
     272      ! Signal that we're done with the 3D and 4D global workspace arrays 
     273      IF( (.not. wrk_release(3, 1, 2, 3, 4, 5, 6, 7)) .OR. & 
     274          (.not. wrk_release(4, 1, 2, 3, 4)) )THEN 
     275         IF(lwp) WRITE(numout,*) 'dyn_adv_ubs : failed to release workspace arrays' 
     276      END IF 
     277      ! 
    250278   END SUBROUTINE dyn_adv_ubs 
    251279 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r2528 r2590  
    7676      !!             - Save the trend (l_trddyn=T) 
    7777      !!---------------------------------------------------------------------- 
     78      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     79      USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 
     80      !! 
    7881      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    7982      !! 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D temporary workspace 
    81       !!---------------------------------------------------------------------- 
     83      !!---------------------------------------------------------------------- 
     84      ! 
     85      IF(.NOT. wrk_use(3, 1,2))THEN 
     86         CALL ctl_stop('dyn_hpg: requested workspace arrays are unavailable.') 
     87         RETURN 
     88      END IF 
    8289      ! 
    8390      IF( l_trddyn ) THEN                    ! Temporary saving of ua and va trends (l_trddyn) 
     
    104111      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask,   & 
    105112         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     113      ! 
     114      IF(.NOT. wrk_release(3, 1,2))THEN 
     115         CALL ctl_stop('dyn_hpg: failed to release workspace arrays.') 
     116      END IF 
    106117      ! 
    107118   END SUBROUTINE dyn_hpg 
     
    594605      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
    595606      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     607      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     608      USE wrk_nemo, ONLY: drhox => wrk_3d_1, dzx => wrk_3d_2 
     609      USE wrk_nemo, ONLY: drhou => wrk_3d_3, dzu => wrk_3d_4, rho_i => wrk_3d_5 
     610      USE wrk_nemo, ONLY: drhoy => wrk_3d_6, dzy => wrk_3d_7 
     611      USE wrk_nemo, ONLY: drhov => wrk_3d_8, dzv => wrk_3d_9, rho_j => wrk_3d_10 
     612      USE wrk_nemo, ONLY: drhoz => wrk_3d_11, dzz => wrk_3d_12  
     613      USE wrk_nemo, ONLY: drhow => wrk_3d_13, dzw => wrk_3d_14 
     614      USE wrk_nemo, ONLY: rho_k => wrk_3d_15 
    596615      !! 
    597616      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     
    601620      REAL(wp) ::   z1_10, cffu, cffx   !    "         " 
    602621      REAL(wp) ::   z1_12, cffv, cffy   !    "         " 
    603       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhox, dzx, drhou, dzu, rho_i   ! 3D workspace 
    604       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhoy, dzy, drhov, dzv, rho_j   !  "      " 
    605       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhoz, dzz, drhow, dzw, rho_k   !  "      " 
    606       !!---------------------------------------------------------------------- 
     622      !!---------------------------------------------------------------------- 
     623 
     624      IF(.NOT. wrk_use(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))THEN 
     625         CALL ctl_stop('dyn:hpg_djc : requested workspace arrays unavailable.') 
     626         RETURN 
     627      END IF 
    607628 
    608629      IF( kt == nit000 ) THEN 
     
    802823      END DO 
    803824      ! 
     825      IF(.NOT. wrk_release(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))THEN 
     826         CALL ctl_stop('dyn:hpg_djc : failed to release workspace arrays.') 
     827      END IF 
     828      ! 
    804829   END SUBROUTINE hpg_djc 
    805830 
     
    815840      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
    816841      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     842      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     843      USE wrk_nemo, ONLY: zdistr => wrk_2d_1, zsina => wrk_2d_2, & 
     844                          zcosa  => wrk_2d_3 
     845      USE wrk_nemo, ONLY: zhpiorg => wrk_3d_1, zhpirot => wrk_3d_2 
     846      USE wrk_nemo, ONLY: zhpitra => wrk_3d_3, zhpine => wrk_3d_4 
     847      USE wrk_nemo, ONLY: zhpjorg => wrk_3d_5, zhpjrot => wrk_3d_6 
     848      USE wrk_nemo, ONLY: zhpjtra => wrk_3d_7, zhpjne => wrk_3d_8 
    817849      !! 
    818850      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     
    821853      REAL(wp) ::   zforg, zcoef0, zuap, zmskd1, zmskd1m   ! temporary scalar 
    822854      REAL(wp) ::   zfrot        , zvap, zmskd2, zmskd2m   !    "         " 
    823       REAL(wp), DIMENSION(jpi,jpj)     ::   zdistr, zsina, zcosa                ! 2D workspace 
    824       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpiorg, zhpirot, zhpitra, zhpine   ! 3D workspace 
    825       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpjorg, zhpjrot, zhpjtra, zhpjne   !  "      " 
    826       !!---------------------------------------------------------------------- 
     855      !!---------------------------------------------------------------------- 
     856 
     857      IF( (.NOT. wrk_use(2, 1,2,3)) .OR.               & 
     858          (.NOT. wrk_use(3, 1,2,3,4,5,6,7,8)))THEN 
     859         CALL ctl_stop('dyn:hpg_rot : requested workspace arrays unavailable.') 
     860         RETURN 
     861      END IF 
    827862 
    828863      IF( kt == nit000 ) THEN 
     
    9811016      END DO 
    9821017      ! 
     1018      IF( (.NOT. wrk_release(2, 1,2,3)) .OR.               & 
     1019          (.NOT. wrk_release(3, 1,2,3,4,5,6,7,8)))THEN 
     1020         CALL ctl_stop('dyn:hpg_rot : failed to release workspace arrays.') 
     1021      END IF 
     1022      ! 
    9831023   END SUBROUTINE hpg_rot 
    9841024 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r2528 r2590  
    5454      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace    
    5555      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace    
     56      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     57      USE wrk_nemo, ONLY: zhke => wrk_3d_1 
    5658      !! 
    5759      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    5961      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    6062      REAL(wp) ::   zu, zv       ! temporary scalars 
    61       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhke   ! temporary 3D workspace 
    6263      !!---------------------------------------------------------------------- 
     64 
     65      IF(.NOT. wrk_use(3,1))THEN 
     66         CALL ctl_stop('dyn_key: requested workspace array is unavailable.') 
     67      END IF 
    6368 
    6469      IF( kt == nit000 ) THEN 
     
    104109         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    105110      ! 
     111      IF(.NOT. wrk_release(3,1))THEN 
     112         CALL ctl_stop('dyn_key: failed to release workspace array.') 
     113      END IF 
     114 
    106115   END SUBROUTINE dyn_keg 
    107116 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90

    r2528 r2590  
    5252      !! ** Purpose :   compute the lateral ocean dynamics physics. 
    5353      !!---------------------------------------------------------------------- 
     54      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     55      USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 
     56      !! 
    5457      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    55       !! 
    56       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    57       !!---------------------------------------------------------------------- 
    58  
     58      !!---------------------------------------------------------------------- 
     59 
     60      IF(.NOT. wrk_use(3, 1,2))THEN 
     61         CALL ctl_stop('dyn_ldf: requested workspace arrays unavailable.') 
     62         RETURN 
     63      END IF 
     64      ! 
    5965      IF( l_trddyn )   THEN                      ! temporary save of ta and sa trends 
    6066         ztrdu(:,:,:) = ua(:,:,:)  
     
    106112         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    107113      ! 
     114      IF(.NOT. wrk_release(3, 1,2))THEN 
     115         CALL ctl_stop('dyn_ldf: failed to release workspace arrays.') 
     116      END IF 
     117      ! 
    108118   END SUBROUTINE dyn_ldf 
    109119 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90

    r2528 r2590  
    7979      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    8080      !!---------------------------------------------------------------------- 
     81      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     82      USE wrk_nemo, ONLY: zcu => wrk_2d_1, zcv => wrk_2d_2  
     83      USE wrk_nemo, ONLY: zuf => wrk_3d_1, zut => wrk_3d_2, & 
     84                          zlu => wrk_3d_3, zlv => wrk_3d_4 
    8185      !! * Arguments 
    8286      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     
    8589      INTEGER  ::   ji, jj, jk                ! dummy loop indices 
    8690      REAL(wp) ::   zua, zva, zbt, ze2u, ze2v ! temporary scalar 
    87       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    88          zcu, zcv                             ! temporary workspace 
    89       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    90          zuf, zut, zlu, zlv                   ! temporary workspace 
    9191      !!---------------------------------------------------------------------- 
    9292      !!  OPA 8.5, LODYC-IPSL (2002) 
    9393      !!---------------------------------------------------------------------- 
     94 
     95      IF( (.NOT. wrk_use(2, 1,2)) .OR. (.NOT. wrk_use(3, 1,2,3,4)) )THEN 
     96         CALL ctl_stop('dyn_ldf_bilap : requested workspace arrays unavailable.') 
     97         RETURN 
     98      END IF 
    9499 
    95100      IF( kt == nit000 ) THEN 
     
    214219      END DO                                           !   End of slab 
    215220      !                                                ! =============== 
    216  
     221      IF( (.NOT. wrk_release(2, 1,2)) .OR.       & 
     222          (.NOT. wrk_release(3, 1,2,3,4)) )THEN 
     223         CALL ctl_stop('dyn_ldf_bilap : failed to release workspace arrays.') 
     224      END IF 
     225      ! 
    217226   END SUBROUTINE dyn_ldf_bilap 
    218227 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90

    r2528 r2590  
    2828 
    2929   !! * Routine accessibility 
    30    PUBLIC dyn_ldf_bilapg ! called by step.F90 
     30   PUBLIC dyn_ldf_bilapg       ! called by step.F90 
     31   PUBLIC dyn_ldf_bilapg_alloc ! called by nemogcm.F90 
     32 
     33   ! These are just workspace arrays but since they're (jpi,jpk) it's not 
     34   ! worth putting them in the wrk_nemo module. 
     35   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zfuw, zfvw, zdiu, zdiv 
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zdju, zdj1u, zdjv, zdj1v  
    3137 
    3238   !! * Substitutions 
     
    4046 
    4147CONTAINS 
     48 
     49   FUNCTION dyn_ldf_bilapg_alloc() 
     50      !!---------------------------------------------------------------------- 
     51      !!               ***  ROUTINE dyn_ldf_bilapg_alloc  *** 
     52      !!---------------------------------------------------------------------- 
     53      INTEGER :: dyn_ldf_bilapg_alloc 
     54 
     55      ALLOCATE(zfuw(jpi,jpk), zfvw(jpi,jpk),  zdiu(jpi,jpk), zdiv(jpi,jpk), & 
     56               zdju(jpi,jpk), zdj1u(jpi,jpk), zdjv(jpi,jpk), zdj1v(jpi,jpk),& 
     57               Stat = dyn_ldf_bilapg_alloc) 
     58 
     59      IF(dyn_ldf_bilapg_alloc /= 0)THEN 
     60         CALL ctl_warn('dyn_ldf_bilapg_alloc: failed to allocate arrays') 
     61      END IF 
     62 
     63   END FUNCTION dyn_ldf_bilapg_alloc 
     64 
    4265 
    4366   SUBROUTINE dyn_ldf_bilapg( kt ) 
     
    7699      USE oce, ONLY :    zwk3 => ta,   & ! use ta as 3D workspace    
    77100                         zwk4 => sa      ! use sa as 3D workspace    
    78  
     101      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     102      ! work array used for rotated biharmonic operator on  
     103      ! tracers and/or momentum 
     104      USE wrk_nemo, ONLY: zwk1 => wrk_3d_1, &  
     105                          zwk2 => wrk_3d_2 
    79106      !! * Arguments 
    80107      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     
    82109      !! * Local declarations 
    83110      INTEGER ::   ji, jj, jk                 ! dummy loop indices 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    85          zwk1, zwk2                ! work array used for rotated biharmonic 
    86          !                         ! operator on tracers and/or momentum 
    87       !!---------------------------------------------------------------------- 
     111      !!---------------------------------------------------------------------- 
     112 
     113      IF(.NOT. wrk_use(3, 1,2))THEN 
     114         CALL ctl_stop('dyn_ldf_bilapg: requested workspace arrays unavailable.') 
     115         RETURN 
     116      END IF 
    88117 
    89118      IF( kt == nit000 ) THEN 
     
    130159      END DO                                           !   End of slab 
    131160      !                                                ! =============== 
    132  
     161      IF(.NOT. wrk_release(3, 1,2))THEN 
     162         CALL ctl_stop('dyn_ldf_bilapg: failed to release workspace arrays.') 
     163      END IF 
     164      ! 
    133165   END SUBROUTINE dyn_ldf_bilapg 
    134166 
     
    179211      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    180212      !!---------------------------------------------------------------------- 
     213      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     214      USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf => wrk_2d_2, zjvt => wrk_2d_3 
     215      USE wrk_nemo, ONLY: zivf => wrk_2d_4, zdku => wrk_2d_5, zdk1u => wrk_2d_6 
     216      USE wrk_nemo, ONLY: zdkv => wrk_2d_7, zdk1v => wrk_2d_8 
     217      !! 
    181218      !! * Arguments 
    182219      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) ::   & 
     
    199236         zbur, zbvr, zmkt, zmkf, zuav, zvav,    & 
    200237         zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    201       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    202          ziut, zjuf , zjvt, zivf,       &  ! workspace 
    203          zdku, zdk1u, zdkv, zdk1v 
    204       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    205          zfuw, zfvw, zdiu, zdiv,        &  ! workspace 
    206          zdju, zdj1u, zdjv, zdj1v  
    207       !!---------------------------------------------------------------------- 
    208  
     238      !!---------------------------------------------------------------------- 
     239 
     240      IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7,8))THEN 
     241         CALL ctl_stop('dyn:ldfguv : requested workspace arrays unavailable.') 
     242         RETURN 
     243      END IF 
    209244      !                               ! ********** !   ! =============== 
    210245      DO jk = 1, jpkm1                ! First step !   ! Horizontal slab 
     
    461496      END DO                                           !   End of slab 
    462497      !                                                ! =============== 
     498 
     499      IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7,8))THEN 
     500         CALL ctl_stop('dyn:ldfguv : failed to release workspace arrays.') 
     501      END IF 
     502      ! 
    463503   END SUBROUTINE ldfguv 
    464504 
     
    469509CONTAINS 
    470510   SUBROUTINE dyn_ldf_bilapg( kt )               ! Dummy routine 
     511      INTEGER, INTENT(in) :: kt 
    471512      WRITE(*,*) 'dyn_ldf_bilapg: You should not have seen this print! error?', kt 
    472513   END SUBROUTINE dyn_ldf_bilapg 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90

    r2528 r2590  
    3030   !! * Routine accessibility 
    3131   PUBLIC dyn_ldf_iso           ! called by step.F90 
     32   PUBLIC dyn_ldf_iso_alloc     ! called by nemogcm.F90 
     33 
     34   ! These are just workspace arrays but because they are (jpi,jpk) in extent 
     35   ! we can't use the arrays in wrk_nemo for them 
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u 
     37   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v 
    3238 
    3339   !! * Substitutions 
     
    4248 
    4349CONTAINS 
     50 
     51   FUNCTION dyn_ldf_iso_alloc() 
     52      !!---------------------------------------------------------------------- 
     53      !!                  ***  ROUTINE dyn_ldf_iso_alloc  *** 
     54      !!---------------------------------------------------------------------- 
     55      INTEGER :: dyn_ldf_iso_alloc 
     56      !!---------------------------------------------------------------------- 
     57 
     58      ALLOCATE(zfuw(jpi,jpk), zdiu(jpi,jpk), zdju(jpi,jpk), zdj1u(jpi,jpk), &  
     59               zfvw(jpi,jpk), zdiv(jpi,jpk), zdjv(jpi,jpk), zdj1v(jpi,jpk), & 
     60               Stat=dyn_ldf_iso_alloc) 
     61 
     62      IF(dyn_ldf_iso_alloc /= 0)THEN 
     63         CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') 
     64      END IF 
     65 
     66   END FUNCTION dyn_ldf_iso_alloc 
     67 
    4468 
    4569   SUBROUTINE dyn_ldf_iso( kt ) 
     
    93117      !!        !  05-11  (G. Madec)  s-coordinate: horizontal diffusion 
    94118      !!---------------------------------------------------------------------- 
     119      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     120      USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf  => wrk_2d_2, & ! temporary workspace 
     121                          zjvt => wrk_2d_3, zivf  => wrk_2d_4, &  
     122                          zdku => wrk_2d_5, zdk1u => wrk_2d_6, & 
     123                          zdkv => wrk_2d_7, zdk1v => wrk_2d_8 
     124      !! 
    95125      !! * Arguments 
    96126      INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
     
    102132         zmskt, zmskf, zbu, zbv,       & 
    103133         zuah, zvah 
    104       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    105          ziut, zjuf, zjvt, zivf,        & ! temporary workspace 
    106          zdku, zdk1u, zdkv, zdk1v 
    107134 
    108135      REAL(wp) ::   & 
    109136         zcoef0, zcoef3, zcoef4, zmkt, zmkf,   & 
    110137         zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    111       REAL(wp), DIMENSION(jpi,jpk) ::        & 
    112          zfuw, zdiu, zdju, zdj1u,            & !    "        " 
    113          zfvw, zdiv, zdjv, zdj1v 
    114  
    115       !!---------------------------------------------------------------------- 
     138 
     139      !!---------------------------------------------------------------------- 
     140 
     141      IF( .NOT. wrk_use(2, 1,2,3,4,5,6,7,8))THEN 
     142         CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable.') 
     143         RETURN 
     144      END IF 
    116145 
    117146      IF( kt == nit000 ) THEN 
     
    420449      !                                                ! =============== 
    421450 
     451      IF( .NOT. wrk_release(2, 1,2,3,4,5,6,7,8))THEN 
     452         CALL ctl_stop('dyn_ldf_iso: failed to release workspace arrays.') 
     453      END IF 
     454 
    422455   END SUBROUTINE dyn_ldf_iso 
    423456 
     
    428461CONTAINS 
    429462   SUBROUTINE dyn_ldf_iso( kt )               ! Empty routine 
     463      INTEGER, INTENT(in) :: kt 
    430464      WRITE(*,*) 'dyn_ldf_iso: You should not have seen this print! error?', kt 
    431465   END SUBROUTINE dyn_ldf_iso 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r2528 r2590  
    9393      USE oce, ONLY :   ze3u_f => ta   ! use ta as 3D workspace 
    9494      USE oce, ONLY :   ze3v_f => sa   ! use sa as 3D workspace 
     95      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     96      USE wrk_nemo, ONLY:   zs_t => wrk_2d_1, zs_u_1 => wrk_2d_2, & 
     97                          zs_v_1 => wrk_2d_3 
    9598      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    9699      !! 
     
    105108      REAL(wp) ::   zv_t_ij  , zv_t_ip1j     !     -        - 
    106109      REAL(wp) ::   zv_t_ijp1                !     -        - 
    107       REAL(wp), DIMENSION(jpi,jpj) ::  zs_t, zs_u_1, zs_v_1      ! temporary 2D workspace 
    108110      !!---------------------------------------------------------------------- 
     111 
     112      IF(.NOT. wrk_use(2, 1,2,3))THEN 
     113         CALL ctl_stop('dyn_nxt: requested workspace arrays unavailable.') 
     114         RETURN 
     115      END IF 
    109116 
    110117      IF( kt == nit000 ) THEN 
     
    318325         &                       tab3d_2=vn, clinfo2=' Vn: '       , mask2=vmask ) 
    319326      !  
     327      IF(.NOT. wrk_release(2, 1,2,3))THEN 
     328         CALL ctl_stop('dyn_nxt: failed to release workspace arrays.') 
     329      END IF 
     330      ! 
    320331   END SUBROUTINE dyn_nxt 
    321332 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r2528 r2590  
    7373      !!        of the physical meaning of the results.  
    7474      !!---------------------------------------------------------------------- 
     75      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     76      USE wrk_nemo, ONLY: ztrdu => wrk_3d_4, ztrdv => wrk_3d_5 
     77      !! 
    7578      INTEGER, INTENT(in   ) ::   kt       ! ocean time-step index 
    7679      INTEGER, INTENT(  out) ::   kindic   ! solver flag 
     
    7881      INTEGER  ::   ji, jj, jk                             ! dummy loop indices 
    7982      REAL(wp) ::   z2dt, zg_2                             ! temporary scalar 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    81       !!---------------------------------------------------------------------- 
    82  
     83      !!---------------------------------------------------------------------- 
     84 
     85      IF(.NOT. wrk_use(3, 4,5))THEN 
     86         CALL ctl_stop('dyn_spg: requested workspace arrays unavailable.') 
     87         RETURN 
     88      END IF 
    8389 
    8490!!gm NOTA BENE : the dynspg_exp and dynspg_ts should be modified so that  
     
    149155         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    150156      ! 
     157      IF(.NOT. wrk_release(3, 4,5))THEN 
     158         CALL ctl_stop('dyn_spg: failed to release workspace arrays.') 
     159      END IF 
     160      ! 
    151161   END SUBROUTINE dyn_spg 
    152162 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90

    r2528 r2590  
    3535#if   defined key_dynspg_ts   ||   defined key_vvl   ||   defined key_esopa 
    3636  !                                                                !!! Time splitting scheme (sub-time step variables) 
    37    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: ua_e  , va_e             ! barotropic velocities (after) 
    38    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: sshn_e, ssha_e, sshn_b   ! sea surface heigth (now, after, average) 
    39    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: hu_e  , hv_e             ! now ocean depth ( = Ho+sshn_e ) 
    40    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: hur_e , hvr_e            ! inverse of the now depth ( = 1/(Ho+sshn_e) ) 
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ua_e  , va_e             ! barotropic velocities (after) 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_e, ssha_e, sshn_b   ! sea surface heigth (now, after, average) 
     39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_e  , hv_e             ! now ocean depth ( = Ho+sshn_e ) 
     40   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hur_e , hvr_e            ! inverse of the now depth ( = 1/(Ho+sshn_e) ) 
    4141#endif 
    4242 
     
    4646   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    4747   !!====================================================================== 
     48CONTAINS 
     49 
     50  FUNCTION dynspg_oce_alloc() 
     51    IMPLICIT none 
     52    INTEGER :: dynspg_oce_alloc 
     53 
     54    dynspg_oce_alloc = 0 
     55 
     56#if   defined key_dynspg_ts   ||   defined key_vvl   ||   defined key_esopa 
     57    ALLOCATE(ua_e(jpi,jpj),   va_e(jpi,jpj)  ,                  & 
     58             sshn_e(jpi,jpj), ssha_e(jpi,jpj), sshn_b(jpi,jpj), & 
     59             hu_e(jpi,jpj),   hv_e(jpi,jpj)  ,                  & 
     60             hur_e(jpi,jpj),  hvr_e(jpi,jpj) ,                  & 
     61             Stat=dynspg_oce_alloc) 
     62#endif 
     63 
     64  END FUNCTION dynspg_oce_alloc 
     65 
    4866END MODULE dynspg_oce 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r2564 r2590  
    4545   PRIVATE 
    4646 
    47    PUBLIC dyn_spg_ts  ! routine called by step.F90 
    48    PUBLIC ts_rst      ! routine called by istate.F90 
    49  
    50  
    51    REAL(wp), DIMENSION(jpi,jpj) ::  ftnw, ftne   ! triad of coriolis parameter 
    52    REAL(wp), DIMENSION(jpi,jpj) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
    53  
    54    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   un_b, vn_b   ! now    averaged velocity 
    55    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   ub_b, vb_b   ! before averaged velocity 
     47   PUBLIC dyn_spg_ts        ! routine called by step.F90 
     48   PUBLIC ts_rst            ! routine called by istate.F90 
     49   PUBLIC dyn_spg_ts_alloc  ! routine called by nemogcm.F90 
     50 
     51 
     52   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   ! triad of coriolis parameter 
     53   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
     54 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_b, vn_b   ! now    averaged velocity 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub_b, vb_b   ! before averaged velocity 
    5657 
    5758 
     
    6667 
    6768CONTAINS 
     69 
     70   FUNCTION dyn_spg_ts_alloc() 
     71      !!---------------------------------------------------------------------- 
     72      !!                  ***  routine dyn_spg_ts_alloc  *** 
     73      !!---------------------------------------------------------------------- 
     74      IMPLICIT none 
     75      INTEGER :: dyn_spg_ts_malloc 
     76      !!---------------------------------------------------------------------- 
     77 
     78      ALLOCATE(ftnw(jpi,jpj), ftne(jpi,jpj), ftsw(jpi,jpj), ftse(jpi,jpj), & 
     79               un_b(jpi,jpj), vn_b(jpi,jpj), ub_b(jpi,jpj), vb_b(jpi,jpj), & 
     80               Stat=dyn_spg_ts_malloc) 
     81 
     82   END FUNCTION dyn_spg_ts_malloc 
     83 
    6884 
    6985   SUBROUTINE dyn_spg_ts( kt ) 
     
    94110      !! References : Griffies et al., (2003): A technical guide to MOM4. NOAA/GFDL 
    95111      !!--------------------------------------------------------------------- 
     112      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     113      USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, zsshb_e => wrk_2d_2 
     114      USE wrk_nemo, ONLY: zbfru => wrk_2d_3  , zbfrv => wrk_2d_4  
     115      USE wrk_nemo, ONLY: zsshun_e => wrk_2d_5, zsshvn_e => wrk_2d_6 
     116      USE wrk_nemo, ONLY: zcu => wrk_2d_7, zwx => wrk_2d_8, zua => wrk_2d_9, zun => wrk_2d_10 
     117      USE wrk_nemo, ONLY: zcv => wrk_2d_11, zwy => wrk_2d_12, zva => wrk_2d_13, zvn => wrk_2d_14 
     118      USE wrk_nemo, ONLY: zun_e => wrk_2d_15, zub_e => wrk_2d_16, zu_sum => wrk_2d_17 
     119      USE wrk_nemo, ONLY: zvn_e => wrk_2d_18, zvb_e => wrk_2d_19, zv_sum => wrk_2d_20 
     120      USE wrk_nemo, ONLY: zssh_sum => wrk_2d_21 
     121      !! 
    96122      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
    97123      !! 
     
    104130      REAL(wp) ::   zu_spg, zu_cor, zu_sld, zu_asp   !     -         - 
    105131      REAL(wp) ::   zv_spg, zv_cor, zv_sld, zv_asp   !     -         - 
    106       !! 
    107       REAL(wp), DIMENSION(jpi,jpj) ::   zhdiv, zsshb_e 
    108       !! 
    109       REAL(wp), DIMENSION(jpi,jpj) ::   zbfru  , zbfrv     ! 2D workspace 
    110       !! 
    111       REAL(wp), DIMENSION(jpi,jpj) ::   zsshun_e, zsshvn_e   ! 2D workspace 
    112       !! 
    113       REAL(wp), DIMENSION(jpi,jpj) ::   zcu, zwx, zua, zun   ! 2D workspace 
    114       REAL(wp), DIMENSION(jpi,jpj) ::   zcv, zwy, zva, zvn   !  -      - 
    115       REAL(wp), DIMENSION(jpi,jpj) ::   zun_e, zub_e, zu_sum      ! 2D workspace 
    116       REAL(wp), DIMENSION(jpi,jpj) ::   zvn_e, zvb_e, zv_sum      !  -      - 
    117       REAL(wp), DIMENSION(jpi,jpj) ::   zssh_sum                  !  -      - 
    118132      !!---------------------------------------------------------------------- 
     133 
     134      IF(.NOT. wrk_use(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,         & 
     135                          11,12,13,14,15,16,17,18,19,20,21))THEN 
     136         CALL ctl_stop('dyn_spg_ts: requested workspace arrays unavailable.') 
     137         RETURN 
     138      END IF 
    119139 
    120140      IF( kt == nit000 ) THEN             !* initialisation 
     
    550570      ! 
    551571      ! 
     572      IF(.NOT. wrk_release(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,         & 
     573                              11,12,13,14,15,16,17,18,19,20,21))THEN 
     574         CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays.') 
     575      END IF 
     576      ! 
    552577   END SUBROUTINE dyn_spg_ts 
    553578 
     
    641666CONTAINS 
    642667   SUBROUTINE dyn_spg_ts( kt )       ! Empty routine 
     668      INTEGER, INTENT(in) :: kt 
    643669      WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt 
    644670   END SUBROUTINE dyn_spg_ts 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r2528 r2590  
    3939   PUBLIC   dyn_vor        ! routine called by step.F90 
    4040   PUBLIC   dyn_vor_init   ! routine called by opa.F90 
     41   PUBLIC   dyn_vor_alloc  ! routine called by nemogcm.F90 
    4142 
    4243   !                                             !!* Namelist namdyn_vor: vorticity term 
     
    5051   INTEGER ::   nrvm = 2   ! =2 relative vorticity ; =3 metric term 
    5152   INTEGER ::   ntot = 4   ! =4 total vorticity (relative + planetary) ; =5 coriolis + metric term 
     53 
     54!!$#if defined key_vvl 
     55!!$   REAL(wp), DIMENSION(jpi,jpj,jpk)       ::   ze3f  
     56!!$#else 
     57!!$   REAL(wp), ALLOCATABLE, DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
     58!!$#endif 
     59   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ze3f 
    5260 
    5361   !! * Substitutions 
     
    6169 
    6270CONTAINS 
     71 
     72   FUNCTION dyn_vor_alloc() 
     73      !!---------------------------------------------------------------------- 
     74      !!              *** Routine dyn_vor_alloc *** 
     75      !!---------------------------------------------------------------------- 
     76      IMPLICIT none 
     77      INTEGER :: dyn_vor_alloc 
     78      !!---------------------------------------------------------------------- 
     79 
     80      ALLOCATE(ze3f(jpi,jpj,jpk), Stat=dyn_vor_alloc) 
     81 
     82      IF(dyn_vor_alloc /= 0 )THEN 
     83         CALL ctl_warn('dyn_vor_alloc: failed to allocate array ze3f.') 
     84      END IF 
     85 
     86   END FUNCTION dyn_vor_alloc 
     87 
    6388 
    6489   SUBROUTINE dyn_vor( kt ) 
     
    205230      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    206231      !!---------------------------------------------------------------------- 
     232      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     233      USE wrk_nemo, ONLY: zwx => wrk_2d_1, zwy => wrk_2d_2, zwz => wrk_2d_3 
     234      !! 
    207235      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    208236      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    214242      REAL(wp) ::   zx1, zy1, zfact2   ! temporary scalars 
    215243      REAL(wp) ::   zx2, zy2           !    "         " 
    216       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 2D workspace 
    217       !!---------------------------------------------------------------------- 
     244      !!---------------------------------------------------------------------- 
     245 
     246      IF(.NOT. wrk_use(2, 1,2,3))THEN 
     247         CALL ctl_stop('dyn:vor_ene: requested workspace arrays unavailable.') 
     248         RETURN 
     249      END IF 
    218250 
    219251      IF( kt == nit000 ) THEN 
     
    280312      END DO                                           !   End of slab 
    281313      !                                                ! =============== 
     314      IF(.NOT. wrk_release(2, 1,2,3))THEN 
     315         CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays.') 
     316      END IF 
     317      ! 
    282318   END SUBROUTINE vor_ene 
    283319 
     
    314350      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    315351      !!---------------------------------------------------------------------- 
     352      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     353      USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, & 
     354                          zwz => wrk_2d_6, zww => wrk_2d_7 
     355      !! 
    316356      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
    317357      !! 
     
    319359      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! temporary scalars 
    320360      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !    "         " 
    321       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz, zww   ! temporary 3D workspace 
    322       !!---------------------------------------------------------------------- 
     361      !!---------------------------------------------------------------------- 
     362 
     363      IF(.NOT. wrk_use(2, 4,5,6,7))THEN 
     364         CALL ctl_stop('dyn:vor_mix: requested workspace arrays unavailable.') 
     365         RETURN 
     366      END IF 
    323367 
    324368      IF( kt == nit000 ) THEN 
     
    392436      END DO                                           !   End of slab 
    393437      !                                                ! =============== 
     438      IF(.NOT. wrk_release(2, 4,5,6,7))THEN 
     439         CALL ctl_stop('dyn:vor_mix: failed to release workspace arrays.') 
     440      END IF 
     441      ! 
    394442   END SUBROUTINE vor_mix 
    395443 
     
    421469      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    422470      !!---------------------------------------------------------------------- 
     471      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     472      USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6 
     473      !! 
    423474      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    424475      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    429480      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    430481      REAL(wp) ::   zfact1, zuav, zvau   ! temporary scalars 
    431       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 3D workspace 
    432482      !!---------------------------------------------------------------------- 
    433483       
     484      IF(.NOT. wrk_use(2, 4,5,6))THEN 
     485         CALL ctl_stop('dyn:vor_ens : requested workspace arrays unavailable.') 
     486         RETURN 
     487      END IF 
     488 
    434489      IF( kt == nit000 ) THEN 
    435490         IF(lwp) WRITE(numout,*) 
     
    503558      END DO                                           !   End of slab 
    504559      !                                                ! =============== 
     560      IF(.NOT. wrk_release(2, 4,5,6))THEN 
     561         CALL ctl_stop('dyn:vor_ens : failed to release workspace arrays.') 
     562      END IF 
     563      ! 
    505564   END SUBROUTINE vor_ens 
    506565 
     
    525584      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    526585      !!---------------------------------------------------------------------- 
     586      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     587      USE wrk_nemo, ONLY: zwx => wrk_2d_1,  zwy => wrk_2d_2,  zwz => wrk_2d_3  
     588      USE wrk_nemo, ONLY: ztnw => wrk_2d_4, ztne => wrk_2d_5, & 
     589                          ztsw => wrk_2d_6, ztse => wrk_2d_7 
     590      !! 
    527591      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    528592      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    533597      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    534598      REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
    535       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz            ! temporary 2D workspace 
    536       REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse   ! temporary 3D workspace 
    537 #if defined key_vvl 
    538       REAL(wp), DIMENSION(jpi,jpj,jpk)       ::   ze3f 
    539 #else 
    540       REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
    541 #endif 
    542       !!---------------------------------------------------------------------- 
     599      !!---------------------------------------------------------------------- 
     600 
     601      IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7))THEN 
     602         CALL ctl_stop('dyn:vor_een : requested workspace arrays unavailable.') 
     603         RETURN 
     604      END IF 
    543605 
    544606      IF( kt == nit000 ) THEN 
     
    634696      END DO                                           !   End of slab 
    635697      !                                                ! =============== 
     698      IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7))THEN 
     699         CALL ctl_stop('dyn:vor_een : failed to release workspace arrays.') 
     700      END IF 
     701      ! 
    636702   END SUBROUTINE vor_een 
    637703 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r2528 r2590  
    5656      USE oce, ONLY:   zwuw => ta   ! use ta as 3D workspace 
    5757      USE oce, ONLY:   zwvw => sa   ! use sa as 3D workspace 
     58      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     59      USE wrk_nemo, ONLY: zww => wrk_2d_1 
     60      USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 
    5861      !! 
    5962      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     
    6164      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
    6265      REAL(wp) ::   zua, zva        ! temporary scalars 
    63       REAL(wp), DIMENSION(jpi,jpj)     ::   zww            ! 2D  workspace 
    64       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    6566      !!---------------------------------------------------------------------- 
    6667       
     68      IF( (.NOT. wrk_use(2, 1))  .OR.    & 
     69          (.NOT. wrk_use(3, 1,2)) )THEN 
     70         CALL ctl_stop('dyn_zad: requested workspace arrays unavailable.') 
     71         RETURN 
     72      END IF 
     73 
    6774      IF( kt == nit000 ) THEN 
    6875         IF(lwp)WRITE(numout,*) 
     
    119126         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    120127      ! 
     128      IF( (.NOT. wrk_release(2, 1))  .OR.    & 
     129          (.NOT. wrk_release(3, 1,2)) )THEN 
     130         CALL ctl_stop('dyn_zad: failed to release workspace arrays.') 
     131      END IF 
     132 
    121133   END SUBROUTINE dyn_zad 
    122134 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90

    r2528 r2590  
    5252      !! ** Purpose :   compute the vertical ocean dynamics physics. 
    5353      !!--------------------------------------------------------------------- 
     54      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     55      USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 
     56      !! 
    5457      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    55       !! 
    56       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    5758      !!--------------------------------------------------------------------- 
    5859 
     60      IF(.NOT. wrk_use(3, 1,2))THEN 
     61         CALL ctl_stop('dyn_zdf: requested workspace arrays unavailable.') 
     62         RETURN 
     63      END IF 
    5964      !                                          ! set time step 
    6065      IF( neuler == 0 .AND. kt == nit000     ) THEN   ;   r2dt =      rdt   ! = rdtra (restart with Euler time stepping) 
     
    8994      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf  - Ua: ', mask1=umask,               & 
    9095            &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     96      ! 
     97      IF(.NOT. wrk_release(3, 1,2))THEN 
     98         CALL ctl_stop('dyn_zdf: failed to release workspace arrays.') 
     99      END IF 
    91100      ! 
    92101   END SUBROUTINE dyn_zdf 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_exp.F90

    r2528 r2590  
    2424   PRIVATE 
    2525 
    26    PUBLIC   dyn_zdf_exp   ! called by step.F90 
     26   PUBLIC   dyn_zdf_exp       ! called by step.F90 
     27   PUBLIC   dyn_zdf_exp_alloc ! called by nemogcm.F90 
    2728 
     29   ! 2D workspaces. Not replaced with wrk_nemo arrays because these 
     30   ! have shape (jpi,jpk). 
     31   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zwx, zwy, zwz, zww  
     32    
    2833   !! * Substitutions 
    2934#  include "domzgr_substitute.h90" 
     
    3641 
    3742CONTAINS 
     43 
     44   FUNCTION dyn_zdf_exp_alloc() 
     45      !!---------------------------------------------------------------------- 
     46      !!                ***  ROUTINE dyn_zdf_exp_alloc  *** 
     47      !!---------------------------------------------------------------------- 
     48      INTEGER :: dyn_zdf_exp_alloc 
     49      !!---------------------------------------------------------------------- 
     50 
     51      ALLOCATE(zwx(jpi,jpk), zwy(jpi,jpk), zwz(jpi,jpk), zww(jpi,jpk), & 
     52               Stat=dyn_zdf_exp_alloc) 
     53 
     54      IF(dyn_zdf_exp_alloc /= 0)THEN 
     55         CALL ctl_warn('dyn_zdf_exp_alloc: failed to allocate arrays.') 
     56      END IF 
     57 
     58   END FUNCTION dyn_zdf_exp_alloc 
     59 
    3860 
    3961   SUBROUTINE dyn_zdf_exp( kt, p2dt ) 
     
    5880      INTEGER ::   ji, jj, jk, jl                            ! dummy loop indices 
    5981      REAL(wp) ::   zrau0r, zlavmr, zua, zva                 ! temporary scalars 
    60       REAL(wp), DIMENSION(jpi,jpk) ::   zwx, zwy, zwz, zww   ! 2D workspace 
    6182      !!---------------------------------------------------------------------- 
    6283 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r2528 r2590  
    5656      USE oce, ONLY :  zwd   => ta      ! use ta as workspace 
    5757      USE oce, ONLY :  zws   => sa      ! use sa as workspace 
     58      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     59      USE wrk_nemo, ONLY: zwi => wrk_3d_3 ! workspace 
    5860      !! 
    5961      INTEGER , INTENT( in ) ::   kt    ! ocean time-step index 
     
    6365      REAL(wp) ::   z1_p2dt, zcoef         ! temporary scalars 
    6466      REAL(wp) ::   zzwi, zzws, zrhs       ! temporary scalars 
    65       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwi        ! 3D workspace 
    6667      !!---------------------------------------------------------------------- 
     68 
     69      IF(.NOT. wrk_use(3, 3))THEN 
     70         CALL ctl_stop('dyn_zdf_imp : requested workspace array unavailable.') 
     71         RETURN 
     72      END IF 
    6773 
    6874      IF( kt == nit000 ) THEN 
     
    253259      END DO 
    254260      ! 
     261      IF(.NOT. wrk_release(3, 3))THEN 
     262         CALL ctl_stop('dyn_zdf_imp : failed to release workspace array.') 
     263      END IF 
     264      ! 
    255265   END SUBROUTINE dyn_zdf_imp 
    256266 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r2528 r2590  
    7676      !!---------------------------------------------------------------------- 
    7777      USE oce, ONLY :   z3d => ta   ! use ta as 3D workspace 
     78      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     79      USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, z2d => wrk_2d_2 
    7880      !! 
    7981      INTEGER, INTENT(in) ::   kt   ! time step 
     
    8284      REAL(wp) ::   zcoefu, zcoefv, zcoeff      ! temporary scalars 
    8385      REAL(wp) ::   z2dt, z1_2dt, z1_rau0       ! temporary scalars 
    84       REAL(wp), DIMENSION(jpi,jpj) ::   zhdiv       ! 2D workspace 
    85       REAL(wp), DIMENSION(jpi,jpj) ::   z2d         ! 2D workspace 
    86       !!---------------------------------------------------------------------- 
     86      !!---------------------------------------------------------------------- 
     87 
     88      IF(.NOT. wrk_use(2, 1,2))THEN 
     89         CALL ctl_stop('ssh_wzv: requested workspace arrays unavailable.') 
     90         RETURN 
     91      END IF 
    8792 
    8893      IF( kt == nit000 ) THEN 
     
    239244      IF(ln_ctl)   CALL prt_ctl( tab2d_1=ssha, clinfo1=' ssha  - : ', mask1=tmask, ovlap=1 ) 
    240245      ! 
     246      IF(.NOT. wrk_release(2, 1,2))THEN 
     247         CALL ctl_stop('ssh_wzv: failed to release workspace arrays.') 
     248      END IF 
     249      ! 
    241250   END SUBROUTINE ssh_wzv 
    242251 
Note: See TracChangeset for help on using the changeset viewer.