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 3145 – NEMO

Changeset 3145


Ignore:
Timestamp:
2011-11-17T16:53:24+01:00 (12 years ago)
Author:
smasson
Message:

dev_NEMO_MERGE_2011: new dynamical allocation in LIM2

Location:
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/iceini_2.F90

    r2978 r3145  
    2323   USE par_ice_2        ! LIM2 parameters 
    2424   USE thd_ice_2        ! LIM2 thermodynamical variables 
    25    USE limrhg           ! LIM2 EVP rheology 
    26    USE limrhg_2         ! LIM2  VP rheology (requires "key_lim2_vp") 
    2725   USE ice_2            ! LIM2 ice variable 
    2826   USE limmsh_2         ! LIM2 mesh 
     
    6462      ierr = ierr + sbc_ice_alloc  ()       ! surface forcing 
    6563      ierr = ierr + thd_ice_alloc_2()       ! thermodynamics 
    66 #if ! defined key_lim2_vp 
    67       ierr = ierr + lim_rhg_alloc  () 
    68 #else 
    69       ierr = ierr + lim_rhg_alloc_2  () 
    70 #endif 
     64 
    7165      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
    7266      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'ice_init_2 : unable to allocate ice arrays' ) 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limadv_2.F90

    r2715 r3145  
    2323   USE in_out_manager     ! I/O manager 
    2424   USE lib_mpp            ! MPP library 
     25   USE wrk_nemo_2         ! work arrays 
    2526   USE prtctl             ! Print control 
    2627 
     
    5960      !! Reference:  Prather, 1986, JGR, 91, D6. 6671-6681. 
    6061      !!-------------------------------------------------------------------- 
    61       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    62       USE wrk_nemo, ONLY:   zf0  => wrk_2d_11 , zfx   => wrk_2d_12 , zfy    => wrk_2d_13 , zbet => wrk_2d_14   ! 2D workspace 
    63       USE wrk_nemo, ONLY:   zfm  => wrk_2d_15 , zfxx  => wrk_2d_16 , zfyy   => wrk_2d_17 , zfxy => wrk_2d_18   !  -      - 
    64       USE wrk_nemo, ONLY:   zalg => wrk_2d_19 , zalg1 => wrk_2d_20 , zalg1q => wrk_2d_21                       !  -      - 
    65       ! 
    6662      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step 
    6763      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call lim_adv_x then lim_adv_y (=1) or the opposite (=0) 
     
    7672      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !    -         - 
    7773      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !    -         - 
     74      REAL(wp), DIMENSION(:,:), POINTER ::   zf0, zfx , zfy , zbet   ! 2D workspace 
     75      REAL(wp), DIMENSION(:,:), POINTER ::   zfm, zfxx, zfyy, zfxy   !  -      - 
     76      REAL(wp), DIMENSION(:,:), POINTER ::   zalg, zalg1, zalg1q     !  -      - 
    7877      !--------------------------------------------------------------------- 
    7978 
    80       IF( wrk_in_use(2, 11,12,13,14,15,16,17,18,19,20,21) ) THEN 
    81          CALL ctl_stop( 'lim_adv_x_2 : requested workspace arrays unavailable.' )   ;   RETURN 
    82       ENDIF 
     79      CALL wrk_alloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     80      CALL wrk_alloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    8381 
    8482      ! Limitation of moments.                                            
     
    225223      ENDIF 
    226224      ! 
    227       IF( wrk_not_released(2, 11,12,13,14,15,16,17,18,19,20,21) )   & 
    228           CALL ctl_stop( 'lim_adv_x_2 : failed to release workspace arrays.' ) 
     225      CALL wrk_dealloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     226      CALL wrk_dealloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    229227      ! 
    230228   END SUBROUTINE lim_adv_x_2 
     
    245243      !! Reference:  Prather, 1986, JGR, 91, D6. 6671-6681. 
    246244      !!--------------------------------------------------------------------- 
    247       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    248       USE wrk_nemo, ONLY:   zf0  => wrk_2d_11 , zfx   => wrk_2d_12 , zfy    => wrk_2d_13 , zbet => wrk_2d_14   ! 2D workspace 
    249       USE wrk_nemo, ONLY:   zfm  => wrk_2d_15 , zfxx  => wrk_2d_16 , zfyy   => wrk_2d_17 , zfxy => wrk_2d_18   !  -      - 
    250       USE wrk_nemo, ONLY:   zalg => wrk_2d_19 , zalg1 => wrk_2d_20 , zalg1q => wrk_2d_21                       !  -      - 
    251       !! 
    252245      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step 
    253246      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call lim_adv_x then lim_adv_y (=1) or the opposite (=0) 
     
    262255      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !    -         - 
    263256      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !    -         - 
     257      REAL(wp), DIMENSION(:,:), POINTER ::   zf0, zfx , zfy , zbet   ! 2D workspace 
     258      REAL(wp), DIMENSION(:,:), POINTER ::   zfm, zfxx, zfyy, zfxy   !  -      - 
     259      REAL(wp), DIMENSION(:,:), POINTER ::   zalg, zalg1, zalg1q     !  -      - 
    264260      !--------------------------------------------------------------------- 
    265261 
    266       IF(wrk_in_use(2, 11,12,13,14,15,16,17,18,19,20,21) ) THEN 
    267          CALL ctl_stop( 'lim_adv_y_2 : requested workspace arrays unavailable.' )   ;   RETURN 
    268       END IF 
     262      CALL wrk_alloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     263      CALL wrk_alloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    269264 
    270265      ! Limitation of moments. 
     
    414409      ENDIF 
    415410      ! 
    416       IF( wrk_not_released(2, 11,12,13,14,15,16,17,18,19,20,21) ) THEN 
    417         CALL ctl_stop( 'lim_adv_y_2 : failed to release workspace arrays.' ) 
    418       END IF 
     411      CALL wrk_dealloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     412      CALL wrk_dealloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    419413      ! 
    420414   END SUBROUTINE lim_adv_y_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limdyn_2.F90

    r2715 r3145  
    2828   USE lbclnk           ! lateral boundary condition - MPP link 
    2929   USE lib_mpp          ! MPP library 
     30   USE wrk_nemo_2       ! work arrays 
    3031   USE in_out_manager   ! I/O manager 
    3132   USE prtctl           ! Print control 
     
    5859      !!              - treatment of the case if no ice dynamic 
    5960      !!--------------------------------------------------------------------- 
    60       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    61       USE wrk_nemo, ONLY:   wrk_1d_1, wrk_1d_2 
    62       USE wrk_nemo, ONLY:   zu_io => wrk_2d_1, zv_io => wrk_2d_2  ! ice-ocean velocity 
    63       ! 
    6461      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    6562      !! 
     
    6764      INTEGER  ::   i_j1, i_jpj        ! Starting/ending j-indices for rheology 
    6865      REAL(wp) ::   zcoef              ! temporary scalar 
    69       REAL(wp), POINTER, DIMENSION(:) ::   zind     ! i-averaged indicator of sea-ice 
    70       REAL(wp), POINTER, DIMENSION(:) ::   zmsk     ! i-averaged of tmask 
     66      REAL(wp), POINTER, DIMENSION(:  ) ::   zind           ! i-averaged indicator of sea-ice 
     67      REAL(wp), POINTER, DIMENSION(:  ) ::   zmsk           ! i-averaged of tmask 
     68      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_io, zv_io   ! ice-ocean velocity 
    7169      !!--------------------------------------------------------------------- 
    7270 
    73       IF(  wrk_in_use(1, 1,2)  .OR.  wrk_in_use(2, 1,2)  ) THEN 
    74          CALL ctl_stop( 'lim_dyn_2 : requested workspace arrays unavailable' )   ;   RETURN 
    75       ENDIF 
    76       zind => wrk_1d_1(1:jpj)      ! Set-up pointers to sub-arrays of workspaces 
    77       zmsk => wrk_1d_2(1:jpj) 
     71      CALL wrk_alloc( jpi, jpj, zu_io, zv_io ) 
     72      CALL wrk_alloc(      jpj, zind , zmsk  ) 
    7873 
    7974      IF( kt == nit000 )   CALL lim_dyn_init_2   ! Initialization (first time-step only) 
     
    210205      IF(ln_ctl)   CALL prt_ctl(tab2d_1=ust2s , clinfo1=' lim_dyn  : ust2s :') 
    211206      ! 
    212       IF( wrk_not_released(1, 1,2)     .OR.   & 
    213           wrk_not_released(2, 1,2) )   CALL ctl_stop('lim_dyn_2 : failed to release workspace arrays') 
     207      CALL wrk_dealloc( jpi, jpj, zu_io, zv_io ) 
     208      CALL wrk_dealloc(      jpj, zind , zmsk  ) 
    214209      ! 
    215210   END SUBROUTINE lim_dyn_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limhdf_2.F90

    r2715 r3145  
    1818   USE lbclnk           ! lateral boundary condition - MPP exchanges 
    1919   USE lib_mpp          ! MPP library 
     20   USE wrk_nemo_2       ! work arrays 
    2021   USE prtctl           ! Print control 
    2122   USE in_out_manager   ! I/O manager 
     
    5152      !! ** Action  :    update ptab with the diffusive contribution 
    5253      !!------------------------------------------------------------------- 
    53       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    54       USE wrk_nemo, ONLY:   zflu => wrk_2d_11, zdiv  => wrk_2d_13, zrlx  => wrk_2d_15  
    55       USE wrk_nemo, ONLY:   zflv => wrk_2d_12, zdiv0 => wrk_2d_14, ztab0 => wrk_2d_16 
    56       ! 
    5754      REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) ::   ptab   ! Field on which the diffusion is applied   
    5855      ! 
     
    6057      INTEGER  ::   its, iter, ierr   ! local integers 
    6158      REAL(wp) ::   zalfa, zrlxint, zconv, zeps   ! local scalars 
     59      REAL(wp), DIMENSION(:,:), POINTER :: zrlx, zflu, zflv, zdiv0, zdiv, ztab0  
    6260      CHARACTER (len=55) :: charout 
    6361      !!------------------------------------------------------------------- 
    6462 
    65       IF( wrk_in_use(2, 11,12,13,14,15,16) ) THEN 
    66          CALL ctl_stop( 'lim_hdf_2 : requested workspace arrays unavailable.' )   ;   RETURN 
    67       END IF 
     63      CALL wrk_alloc( jpi, jpj, zrlx, zflu, zflv, zdiv0, zdiv, ztab0 ) 
    6864 
    6965      !                       !==  Initialisation  ==! 
     
    149145      ENDIF 
    150146      ! 
    151       IF( wrk_not_released(2, 11,12,13,14,15,16) )   CALL ctl_stop('lim_hdf_2: failed to release workspace arrays') 
     147      CALL wrk_dealloc( jpi, jpj, zrlx, zflu, zflv, zdiv0, zdiv, ztab0 ) 
    152148      ! 
    153149   END SUBROUTINE lim_hdf_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limmsh_2.F90

    r2715 r3145  
    2020   USE in_out_manager 
    2121   USE lib_mpp          ! MPP library 
     22#if defined key_lim2_vp 
     23   USE wrk_nemo_2       ! work arrays 
     24#endif 
    2225 
    2326   IMPLICIT NONE 
     
    4649      !! ** Refer.  : Deleersnijder et al. Ocean Modelling 100, 7-10  
    4750      !!---------------------------------------------------------------------  
    48       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    49       USE wrk_nemo, ONLY: zd2d1 => wrk_2d_1, zd1d2 => wrk_2d_2 
    5051      INTEGER :: ji, jj      ! dummy loop indices 
    5152      REAL(wp) ::   zusden   ! local scalars 
     
    5455      REAL(wp) ::   zh1p  , zh2p      !   -      - 
    5556      REAL(wp) ::   zd2d1p, zd1d2p    !   -      - 
     57      REAL(wp), POINTER, DIMENSION(:,:) ::   zd2d1, zd1d2   ! 2D workspace 
    5658#endif 
    5759      !!--------------------------------------------------------------------- 
    5860 
    59       IF( wrk_in_use(2, 1,2) ) THEN 
    60          CALL ctl_stop('lim_msh_2 : requested workspace arrays unavailable')   ;   RETURN 
    61       ENDIF 
     61#if defined key_lim2_vp 
     62      CALL wrk_alloc( jpi, jpj, zd2d1, zd1d2 ) 
     63#endif 
    6264 
    6365      IF(lwp) THEN 
     
    281283      area(:,:) = e1t(:,:) * e2t(:,:) 
    282284      ! 
    283       IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('lim_msh_2 : failed to release workspace arrays') 
     285#if defined key_lim2_vp 
     286      CALL wrk_dealloc( jpi, jpj, zd2d1, zd1d2 ) 
     287#endif 
    284288      ! 
    285289   END SUBROUTINE lim_msh_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limrhg_2.F90

    r2715 r3145  
    2727   USE lbclnk         ! lateral boundary condition - MPP exchanges 
    2828   USE lib_mpp        ! MPP library 
     29   USE wrk_nemo_2     ! work arrays 
    2930   USE in_out_manager ! I/O manager 
    3031   USE prtctl         ! Print control 
     
    3435 
    3536   PUBLIC   lim_rhg_2         ! routine called by lim_dyn 
    36    PUBLIC   lim_rhg_alloc_2   ! routine called by lim_dyn_alloc_2 
    3737 
    3838   REAL(wp) ::   rzero   = 0._wp   ! constant value: zero 
    3939   REAL(wp) ::   rone    = 1._wp   !            and  one 
    40  
    41    ! 2D workspaces for lim_rhg_2. Can't use wrk_nemo module for them because 
    42    ! extent in 2nd dimension is > jpj. 
    43    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zu0, zv0 
    44    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zu_n, zv_n 
    45    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zu_a, zv_a 
    46    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zviszeta, zviseta 
    47    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zzfrld, zztms 
    48    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) ::   zi1, zi2, zmasst, zpresh 
    4940 
    5041   !! * Substitutions 
     
    5647   !!---------------------------------------------------------------------- 
    5748CONTAINS 
    58  
    59    INTEGER FUNCTION lim_rhg_alloc_2() 
    60       !!------------------------------------------------------------------- 
    61       !!               ***  FUNCTION lim_rhg_alloc_2  *** 
    62       !!------------------------------------------------------------------- 
    63       ALLOCATE( zu0(jpi,0:jpj+1),      zv0(jpi,0:jpj+1),     & 
    64          &      zu_n(jpi,0:jpj+1),     zv_n(jpi,0:jpj+1),    & 
    65          &      zu_a(jpi,0:jpj+1),     zv_a(jpi,0:jpj+1),    & 
    66          &      zviszeta(jpi,0:jpj+1), zviseta(jpi,0:jpj+1), & 
    67          &      zzfrld(jpi,0:jpj+1),   zztms(jpi,0:jpj+1),   & 
    68          &      zi1(jpi,0:jpj+1),      zi2(jpi,0:jpj+1),     & 
    69          &      zmasst(jpi,0:jpj+1),   zpresh(jpi,0:jpj+1),  & 
    70          &      Stat=lim_rhg_alloc_2) 
    71          ! 
    72       IF( lim_rhg_alloc_2 /= 0 )   CALL ctl_warn('lim_rhg_alloc_2 : failed to allocate arrays') 
    73       ! 
    74    END FUNCTION lim_rhg_alloc_2 
    75  
    7649 
    7750   SUBROUTINE lim_rhg_2( k_j1, k_jpj ) 
     
    8760      !!              at I-point 
    8861      !!------------------------------------------------------------------- 
    89       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    90       USE wrk_nemo, ONLY: zfrld => wrk_2d_1, zmass => wrk_2d_2, zcorl => wrk_2d_3 
    91       USE wrk_nemo, ONLY: za1ct => wrk_2d_4, za2ct => wrk_2d_5, zresr => wrk_2d_6 
    92       USE wrk_nemo, ONLY: zc1u  => wrk_2d_7, zc1v  => wrk_2d_8, zc2u => wrk_2d_9 
    93       USE wrk_nemo, ONLY: zc2v  => wrk_2d_10, zsang => wrk_2d_11 
    94       !! 
    9562      INTEGER, INTENT(in) ::   k_j1    ! southern j-index for ice computation 
    9663      INTEGER, INTENT(in) ::   k_jpj   ! northern j-index for ice computation 
     
    11380      REAL(wp) ::   zs21_11, zs21_12, zs21_21, zs21_22 
    11481      REAL(wp) ::   zs22_11, zs22_12, zs22_21, zs22_22 
     82      REAL(wp), POINTER, DIMENSION(:,:) ::   zfrld, zmass, zcorl 
     83      REAL(wp), POINTER, DIMENSION(:,:) ::   za1ct, za2ct, zresr 
     84      REAL(wp), POINTER, DIMENSION(:,:) ::   zc1u, zc1v, zc2u, zc2v 
     85      REAL(wp), POINTER, DIMENSION(:,:) ::   zsang 
     86      REAL(wp), POINTER, DIMENSION(:,:) ::   zu0, zv0 
     87      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_n, zv_n 
     88      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_a, zv_a 
     89      REAL(wp), POINTER, DIMENSION(:,:) ::   zviszeta, zviseta 
     90      REAL(wp), POINTER, DIMENSION(:,:) ::   zzfrld, zztms 
     91      REAL(wp), POINTER, DIMENSION(:,:) ::   zi1, zi2, zmasst, zpresh 
    11592      !!------------------------------------------------------------------- 
    11693       
     94      CALL wrk_alloc( jpi,jpj, zfrld, zmass, zcorl, za1ct, za2ct, zresr ) 
     95      CALL wrk_alloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang ) 
     96      CALL wrk_alloc( jpi,jpj+2, zu0, zv0, zu_n, zv_n, zu_a, zv_a, zviszeta, zviseta, kistart = 0 ) 
     97      CALL wrk_alloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kistart = 0 ) 
     98 
    11799      !  Store initial velocities 
    118100      !  ---------------- 
     
    592574      ENDIF 
    593575 
     576      CALL wrk_dealloc( jpi,jpj, zfrld, zmass, zcorl, za1ct, za2ct, zresr ) 
     577      CALL wrk_dealloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang ) 
     578      CALL wrk_dealloc( jpi,jpj+2, zu0, zv0, zu_n, zv_n, zu_a, zv_a, zviszeta, zviseta, kistart = 0 ) 
     579      CALL wrk_dealloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kistart = 0 ) 
     580 
    594581   END SUBROUTINE lim_rhg_2 
    595582 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r3116 r3145  
    3232   USE lbclnk           ! ocean lateral boundary condition - MPP exchanges 
    3333   USE lib_mpp          ! MPP library 
     34   USE wrk_nemo_2       ! work arrays 
    3435   USE in_out_manager   ! I/O manager 
    3536   USE diaar5, ONLY :   lk_diaar5 
     
    5152   ! 
    5253   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   soce_0, sice_0   ! constant SSS and ice salinity used in levitating sea-ice case 
    53  
    5454   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau_oce, vtau_oce   ! air-ocean surface i- & j-stress              [N/m2] 
    5555   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tmod_io              ! modulus of the ice-ocean relative velocity   [m/s] 
     
    101101      !!              Tartinville et al. 2001 Ocean Modelling, 3, 95-108. 
    102102      !!--------------------------------------------------------------------- 
    103       USE wrk_nemo, ONLY: wrk_not_released, wrk_in_use 
    104       USE wrk_nemo, ONLY: zqnsoce => wrk_2d_1 ! 2D workspace 
    105       USE wrk_nemo, ONLY: wrk_3d_4, wrk_3d_5 
    106103      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    107104      !! 
     
    112109      REAL(wp) ::   zqsr, zqns, zfm            ! local scalars 
    113110      REAL(wp) ::   zinda, zfons, zemp         !   -      - 
     111      REAL(wp), POINTER, DIMENSION(:,:)   ::   zqnsoce       ! 2D workspace 
    114112      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb, zalbp   ! 2D/3D workspace 
    115113      !!--------------------------------------------------------------------- 
    116114      
    117       IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 4,5) )THEN 
    118          CALL ctl_stop('lim_sbc_flx_2 : requested workspace arrays unavailable')   ;   RETURN 
    119       ENDIF 
    120       zalb  => wrk_3d_4(:,:,1:1)      ! Set-up pointers to sub-arrays of 3d workspaces 
    121       zalbp => wrk_3d_5(:,:,1:1) 
     115      CALL wrk_alloc( jpi, jpj, zqnsoce ) 
     116      CALL wrk_alloc( jpi, jpj, 1, zalb, zalbp ) 
    122117 
    123118      !------------------------------------------! 
     
    254249      ENDIF  
    255250      ! 
    256       IF( wrk_not_released(2, 1)     .OR.    & 
    257           wrk_not_released(3, 4,5) )   CALL ctl_stop('lim_sbc_flx_2 : failed to release workspace arrays') 
     251      CALL wrk_dealloc( jpi, jpj, zqnsoce ) 
     252      CALL wrk_dealloc( jpi, jpj, 1, zalb, zalbp ) 
    258253      ! 
    259254   END SUBROUTINE lim_sbc_flx_2 
     
    286281      !!              - taum       : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes 
    287282      !!--------------------------------------------------------------------- 
    288       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    289       USE wrk_nemo, ONLY: ztio_u => wrk_2d_1, ztio_v => wrk_2d_2     ! ocean stress below sea-ice 
    290283      INTEGER ,                     INTENT(in) ::   kt               ! ocean time-step index 
    291284      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pu_oce, pv_oce   ! surface ocean currents 
     
    295288      REAL(wp) ::   zfrldv, zat_v, zv_i, zvtau_ice, zv_t, zmodi   !   -      - 
    296289      REAL(wp) ::   zsang, zumt                                   !    -         - 
     290      REAL(wp), POINTER, DIMENSION(:,:) ::   ztio_u, ztio_v   ! ocean stress below sea-ice 
    297291      !!--------------------------------------------------------------------- 
    298292      ! 
    299       IF( wrk_in_use(2, 1,2) ) THEN 
    300          CALL ctl_stop('lim_sbc_tau_2 : requested workspace arrays unavailable.')   ;   RETURN 
    301       ENDIF 
     293      CALL wrk_alloc( jpi, jpj, ztio_u, ztio_v ) 
    302294      ! 
    303295      SELECT CASE( cp_ice_msh )      
     
    413405         &                       tab2d_2=vtau, clinfo2=' vtau    : '        , mask2=vmask ) 
    414406      !   
    415       IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('lim_sbc_tau_2 : failed to release workspace arrays') 
     407      CALL wrk_dealloc( jpi, jpj, ztio_u, ztio_v ) 
    416408      ! 
    417409   END SUBROUTINE lim_sbc_tau_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r2715 r3145  
    2222   USE in_out_manager  ! I/O manager 
    2323   USE lib_mpp 
     24   USE wrk_nemo_2      ! work arrays 
    2425   USE iom             ! IOM library 
    2526   USE ice_2           ! LIM sea-ice variables 
     
    7576      !! References :   Goosse et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90 
    7677      !!--------------------------------------------------------------------- 
    77       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    78       USE wrk_nemo, ONLY: ztmp    => wrk_2d_1, & ! 2D workspace 
    79                           zqlbsbq => wrk_2d_2, & ! link with lead energy budget qldif 
    80                           zlicegr => wrk_2d_3    ! link with lateral ice growth  
    81       USE wrk_nemo, ONLY: zmsk => wrk_3d_4       ! 3D workspace 
    82       USE wrk_nemo, ONLY: zdvosif => wrk_2d_4, & !: Variation of volume at surface 
    83                           zdvobif => wrk_2d_5, & !: Variation of ice volume at the bottom ice     (outputs only) 
    84                           zdvolif => wrk_2d_6, & !: Total variation of ice volume                 (outputs only) 
    85                           zdvonif => wrk_2d_7, & !: Surface accretion Snow to Ice transformation  (outputs only) 
    86                           zdvomif => wrk_2d_8, & !: Bottom variation of ice volume due to melting (outputs only) 
    87                           zu_imasstr =>wrk_2d_9, & !: Sea-ice transport along i-axis at U-point     (outputs only)  
    88                           zv_imasstr =>wrk_2d_10   !: Sea-ice transport along j-axis at V-point     (outputs only)  
    89       !! 
    9078      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    9179      !! 
     
    11098      REAL(wp) ::   zrhoij, zrhoijm1     ! temporary scalars 
    11199      REAL(wp) ::   zztmp                ! temporary scalars within a loop 
    112 !!$      REAL(wp), DIMENSION(jpi,jpj) ::   firic         !: IR flux over the ice            (outputs only) 
    113 !!$      REAL(wp), DIMENSION(jpi,jpj) ::   fcsic         !: Sensible heat flux over the ice (outputs only) 
    114 !!$      REAL(wp), DIMENSION(jpi,jpj) ::   fleic         !: Latent heat flux over the ice   (outputs only) 
    115 !!$      REAL(wp), DIMENSION(jpi,jpj) ::   qlatic        !: latent flux                     (outputs only) 
     100      REAL(wp), POINTER, DIMENSION(:,:)     ::   ztmp      ! 2D workspace 
     101      REAL(wp), POINTER, DIMENSION(:,:)     ::   zqlbsbq   ! link with lead energy budget qldif 
     102      REAL(wp), POINTER, DIMENSION(:,:)     ::   zlicegr   ! link with lateral ice growth  
     103!!$      REAL(wp), DIMENSION(:,:) ::   firic         ! IR flux over the ice            (outputs only) 
     104!!$      REAL(wp), DIMENSION(:,:) ::   fcsic         ! Sensible heat flux over the ice (outputs only) 
     105!!$      REAL(wp), DIMENSION(:,:) ::   fleic         ! Latent heat flux over the ice   (outputs only) 
     106!!$      REAL(wp), DIMENSION(:,:) ::   qlatic        ! latent flux                     (outputs only) 
     107      REAL(wp), POINTER, DIMENSION(:,:) ::   zdvosif       ! Variation of volume at surface                (outputs only) 
     108      REAL(wp), POINTER, DIMENSION(:,:) ::   zdvobif       ! Variation of ice volume at the bottom ice     (outputs only) 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   zdvolif       ! Total variation of ice volume                 (outputs only) 
     110      REAL(wp), POINTER, DIMENSION(:,:) ::   zdvonif       ! Surface accretion Snow to Ice transformation  (outputs only) 
     111      REAL(wp), POINTER, DIMENSION(:,:) ::   zdvomif       ! Bottom variation of ice volume due to melting (outputs only) 
     112      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_imasstr    ! Sea-ice transport along i-axis at U-point     (outputs only)  
     113      REAL(wp), POINTER, DIMENSION(:,:) ::   zv_imasstr    ! Sea-ice transport along j-axis at V-point     (outputs only)  
     114      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zmsk        ! 3D workspace 
    116115      !!------------------------------------------------------------------- 
    117116 
    118       IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10)   .OR.  & 
    119           wrk_in_use(3, 4)                    ) THEN 
    120          CALL ctl_stop('lim_thd_2 : requested workspace arrays unavailable')   ;   RETURN 
    121       ENDIF 
     117      CALL wrk_alloc( jpi, jpj, ztmp, zqlbsbq, zlicegr, zdvosif, zdvobif, zdvolif, zdvonif, zdvomif, zu_imasstr, zv_imasstr ) 
     118      CALL wrk_alloc( jpi, jpj, jpk, zmsk ) 
    122119 
    123120      IF( kt == nit000 )   CALL lim_thd_init_2  ! Initialization (first time-step only) 
     
    520517      ENDIF 
    521518       ! 
    522       IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10)   .OR.  & 
    523           wrk_not_released(3, 4)                    ) THEN 
    524          CALL ctl_stop('lim_thd_2 : failed to release workspace arrays') 
    525       ENDIF 
     519      CALL wrk_dealloc( jpi, jpj, ztmp, zqlbsbq, zlicegr, zdvosif, zdvobif, zdvolif, zdvonif, zdvomif, zu_imasstr, zv_imasstr ) 
     520      CALL wrk_dealloc( jpi, jpj, jpk, zmsk ) 
    526521      ! 
    527522    END SUBROUTINE lim_thd_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limthd_lac_2.F90

    r2715 r3145  
    1515   USE limistate_2  
    1616   USE lib_mpp          ! MPP library 
     17   USE wrk_nemo_2       ! work arrays 
    1718 
    1819   IMPLICIT NONE 
     
    6869      !!   2.0  !  02-08 (C. Ethe, G. Madec)  F90, mpp 
    6970      !!------------------------------------------------------------------- 
    70       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    71       USE wrk_nemo, ONLY: wrk_1d_1, wrk_1d_2, wrk_1d_3, wrk_1d_4, wrk_1d_5, wrk_1d_6 
    72       ! 
    7371      INTEGER , INTENT(IN)::  & 
    7472         kideb          ,   &  ! start point on which the the computation is applied 
     
    104102      !!---------------------------------------------------------------------       
    105103                
    106       IF( wrk_in_use(1, 1,2,3,4,5,6) ) THEN 
    107          CALL ctl_stop('lim_thd_lac_2 : requestead workspace arrays unavailable')   ;   RETURN 
    108       ENDIF 
    109       ! Set-up pointers to sub-arrays of workspace arrays 
    110       zqbgow    => wrk_1d_1(1:jpij) 
    111       zfrl_old  => wrk_1d_2(1:jpij)          
    112       zhice_old => wrk_1d_3(1:jpij)         
    113       zhice0    => wrk_1d_4(1:jpij)         
    114       zfrlmin   => wrk_1d_5(1:jpij)         
    115       zdhicbot  => wrk_1d_6(1:jpij)  
     104      CALL wrk_alloc( jpij, zqbgow, zfrl_old, zhice_old, zhice0, zfrlmin, zdhicbot ) 
    116105       
    117106      !-------------------------------------------------------------- 
     
    232221      END DO 
    233222       
    234       IF( wrk_not_released(1, 1,2,3,4,5,6) )   CALL ctl_stop('lim_thd_lac_2 : failed to release workspace arrays.') 
     223      CALL wrk_dealloc( jpij, zqbgow, zfrl_old, zhice_old, zhice0, zfrlmin, zdhicbot ) 
    235224      ! 
    236225   END SUBROUTINE lim_thd_lac_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limthd_zdf_2.F90

    r3116 r3145  
    2020   USE in_out_manager 
    2121   USE lib_mpp          ! MPP library 
     22   USE wrk_nemo_2       ! work arrays 
    2223   USE cpl_oasis3, ONLY : lk_cpl 
    2324       
     
    6768      !!              Fichefet T. and M. Maqueda 1999, Clim. Dyn, 15(4), 251-268   
    6869      !!------------------------------------------------------------------ 
    69       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    70       USE wrk_nemo, ONLY: wrk_1d_1,  wrk_1d_2,  wrk_1d_3,  wrk_1d_4,  wrk_1d_5  
    71       USE wrk_nemo, ONLY: wrk_1d_6,  wrk_1d_7,  wrk_1d_8,  wrk_1d_9,  wrk_1d_10 
    72       USE wrk_nemo, ONLY: wrk_1d_11, wrk_1d_12, wrk_1d_13, wrk_1d_14, wrk_1d_15 
    73       USE wrk_nemo, ONLY: wrk_1d_16, wrk_1d_17, wrk_1d_18, wrk_1d_19, wrk_1d_20 
    74       USE wrk_nemo, ONLY: wrk_1d_21, wrk_1d_22, wrk_1d_23, wrk_1d_24, wrk_1d_25 
    75       USE wrk_nemo, ONLY: wrk_1d_26, wrk_1d_27 
    76       !! 
    7770      INTEGER, INTENT(in) ::   kideb    ! Start point on which the  the computation is applied 
    7871      INTEGER, INTENT(in) ::   kiut     ! End point on which the  the computation is applied 
     
    166159          , zihsn, zidhb, zihic, zihe, zihq, ziexp, ziqf, zihnf, zibmlt, ziqr, zihgnew, zind 
    167160       !!---------------------------------------------------------------------- 
    168  
    169        IF(wrk_in_use(1, 1,  2, 3, 4, 5, 6, 7, 8, 9,10, & 
    170           &             11,12,13,14,15,16,17,18,19,20, & 
    171           &             21,22,23,24,25,26,27) ) THEN 
    172           CALL ctl_stop('lim_thd_zdf_2 : requested workspace arrays unavailable')   ;   RETURN 
    173        ENDIF 
    174  
    175        ztsmlt  => wrk_1d_1(1:jpij) 
    176        ztbif   => wrk_1d_2(1:jpij)   
    177        zksn    => wrk_1d_3(1:jpij)   
    178        zkic    => wrk_1d_4(1:jpij)    
    179        zksndh  => wrk_1d_5(1:jpij)    
    180        zfcsu   => wrk_1d_6(1:jpij)    
    181        zfcsudt => wrk_1d_7(1:jpij)   
    182        zi0     => wrk_1d_8(1:jpij)    
    183        z1mi0   => wrk_1d_9(1:jpij)     
    184        zqmax   => wrk_1d_10(1:jpij)     
    185        zrcpdt  => wrk_1d_11(1:jpij)   
    186        zts_old => wrk_1d_12(1:jpij)   
    187        zidsn   => wrk_1d_13(1:jpij)  
    188        z1midsn => wrk_1d_14(1:jpij)  
    189        zidsnic => wrk_1d_15(1:jpij) 
    190  
    191        zfnet     => wrk_1d_16(1:jpij) 
    192        zsprecip  => wrk_1d_17(1:jpij)   
    193        zhsnw_old => wrk_1d_18(1:jpij)  
    194        zdhictop  => wrk_1d_19(1:jpij)  
    195        zdhicbot  => wrk_1d_20(1:jpij) 
    196        zqsup     => wrk_1d_21(1:jpij)   
    197        zqocea    => wrk_1d_22(1:jpij) 
    198        zfrl_old  => wrk_1d_23(1:jpij)  
    199        zfrld_1d  => wrk_1d_24(1:jpij)  
    200        zep       => wrk_1d_25(1:jpij)  
    201  
    202        zqcmlts   => wrk_1d_26(1:jpij) 
    203        zqcmltb   => wrk_1d_27(1:jpij) 
     161       CALL wrk_alloc( jpij, ztsmlt, ztbif  , zksn    , zkic    , zksndh , zfcsu  , zfcsudt , zi0      , z1mi0   , zqmax    ) 
     162       CALL wrk_alloc( jpij, zrcpdt, zts_old, zidsn   , z1midsn , zidsnic, zfnet  , zsprecip, zhsnw_old, zdhictop, zdhicbot ) 
     163       CALL wrk_alloc( jpij, zqsup , zqocea , zfrl_old, zfrld_1d, zep    , zqcmlts, zqcmltb                                 ) 
    204164 
    205165       !----------------------------------------------------------------------- 
     
    806766       END DO 
    807767       !  
    808        IF( wrk_not_released(1, 1,  2, 3, 4, 5, 6, 7, 8, 9,10,   & 
    809            &                   11,12,13,14,15,16,17,18,19,20,   & 
    810            &                   21,22,23,24,25,26,27)        )   & 
    811            CALL ctl_stop('lim_thd_zdf_2 : failed to release workspace arrays.') 
     768       CALL wrk_dealloc( jpij, ztsmlt, ztbif  , zksn    , zkic    , zksndh , zfcsu  , zfcsudt , zi0      , z1mi0   , zqmax    ) 
     769       CALL wrk_dealloc( jpij, zrcpdt, zts_old, zidsn   , z1midsn , zidsnic, zfnet  , zsprecip, zhsnw_old, zdhictop, zdhicbot ) 
     770       CALL wrk_dealloc( jpij, zqsup , zqocea , zfrl_old, zfrld_1d, zep    , zqcmlts, zqcmltb                                 ) 
    812771       ! 
    813772    END SUBROUTINE lim_thd_zdf_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limtrp_2.F90

    r2715 r3145  
    2727   USE lbclnk          ! lateral boundary conditions -- MPP exchanges 
    2828   USE lib_mpp         ! MPP library 
     29   USE wrk_nemo_2      ! work arrays 
    2930 
    3031   IMPLICIT NONE 
     
    6364      !! ** action : 
    6465      !!--------------------------------------------------------------------- 
    65       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    66       USE wrk_nemo, ONLY: zui_u  => wrk_2d_1, zvi_v => wrk_2d_2, zsm  => wrk_2d_3 
    67       USE wrk_nemo, ONLY: zs0ice => wrk_2d_4, zs0sn => wrk_2d_5, zs0a => wrk_2d_6 
    68       USE wrk_nemo, ONLY: zs0c0 => wrk_2d_7,  zs0c1 => wrk_2d_8, zs0c2 => wrk_2d_9, & 
    69                           zs0st => wrk_2d_10 
    70       !! 
    7166      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    7267      !! 
     
    7772      REAL(wp) ::   zvbord , zcfl   , zusnit            !   -      - 
    7873      REAL(wp) ::   zrtt   , ztsn   , ztic1 , ztic2     !   -      - 
     74      REAL(wp), POINTER, DIMENSION(:,:)  ::   zui_u , zvi_v , zsm             ! 2D workspace 
     75      REAL(wp), POINTER, DIMENSION(:,:)  ::   zs0ice, zs0sn , zs0a            !  -      - 
     76      REAL(wp), POINTER, DIMENSION(:,:)  ::   zs0c0 , zs0c1 , zs0c2 , zs0st   !  -      - 
    7977      !--------------------------------------------------------------------- 
    8078 
    81       IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10) ) THEN 
    82          CALL ctl_stop('lim_trp_2 : requested workspace arrays unavailable')   ;   RETURN 
    83       ENDIF 
     79      CALL wrk_alloc( jpi, jpj, zui_u , zvi_v , zsm, zs0ice, zs0sn , zs0a, zs0c0 , zs0c1 , zs0c2 , zs0st ) 
    8480 
    8581      IF( kt == nit000  )   CALL lim_trp_init_2      ! Initialization (first time-step only) 
     
    273269      ENDIF 
    274270      ! 
    275       IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10) )   CALL ctl_stop('lim_trp_2 : failed to release workspace arrays') 
     271      CALL wrk_dealloc( jpi, jpj, zui_u , zvi_v , zsm, zs0ice, zs0sn , zs0a, zs0c0 , zs0c1 , zs0c2 , zs0st ) 
    276272      ! 
    277273   END SUBROUTINE lim_trp_2 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_2/limwri_2.F90

    r2715 r3145  
    3030   USE in_out_manager 
    3131   USE lib_mpp         ! MPP library 
     32   USE wrk_nemo_2      ! work arrays 
    3233   USE iom 
    3334   USE ioipsl 
     
    100101      !!      of a day 
    101102      !!------------------------------------------------------------------- 
    102       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    103       USE wrk_nemo, ONLY: zfield => wrk_2d_1 
    104       !! 
    105103      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    106104      !! 
     
    110108         &          zindh, zinda, zindb, ztmu 
    111109      REAL(wp), DIMENSION(1)                ::   zdept 
    112       !!------------------------------------------------------------------- 
    113  
    114       IF( wrk_in_use(2, 1) ) THEN 
    115          CALL ctl_stop('lim_wri_2 : requested workspace array unavailable')   ;   RETURN 
    116       ENDIF 
     110      REAL(wp), POINTER, DIMENSION(:,:)     ::   zfield 
     111      !!------------------------------------------------------------------- 
     112 
     113      CALL wrk_alloc( jpi, jpj, zfield ) 
    117114                                                 !--------------------! 
    118115      IF( kt == nit000 ) THEN                    !   Initialisation   ! 
     
    207204      IF( ( nn_fsbc * niter ) >= nitend )   CALL histclo( nice )  
    208205 
    209       IF( wrk_not_released(2, 1) )   CALL ctl_stop('lim_wri_2 : failed to release workspace array.') 
     206      CALL wrk_dealloc( jpi, jpj, zfield ) 
    210207      ! 
    211208   END SUBROUTINE lim_wri_2 
Note: See TracChangeset for help on using the changeset viewer.