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

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

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

Merge of 3.4beta into the trunk

Location:
trunk/NEMOGCM/NEMO/LIM_SRC_2
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/iceini_2.F90

    r2855 r3294  
    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' ) 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limadv_2.F90

    r2715 r3294  
    2323   USE in_out_manager     ! I/O manager 
    2424   USE lib_mpp            ! MPP library 
     25   USE wrk_nemo           ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limdyn_2.F90

    r2715 r3294  
    2828   USE lbclnk           ! lateral boundary condition - MPP link 
    2929   USE lib_mpp          ! MPP library 
     30   USE wrk_nemo         ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limhdf_2.F90

    r2715 r3294  
    1818   USE lbclnk           ! lateral boundary condition - MPP exchanges 
    1919   USE lib_mpp          ! MPP library 
     20   USE wrk_nemo         ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limistate_2.F90

    r2855 r3294  
    3333   PUBLIC lim_istate_2      ! routine called by lim_init_2.F90 
    3434 
    35 !!! ** init namelist (namiceini) ** 
     35   !!! ** init namelist (namiceini) ** 
    3636   LOGICAL  ::   ln_limini = .FALSE.  !: Ice initialization state 
    3737   REAL(wp) ::   ttest     = 2.0      ! threshold water temperature for initial sea ice 
     
    7070      IF( .NOT. ln_limini ) THEN   
    7171          
    72          tfu(:,:) = tfreez( sn(:,:,1) ) * tmask(:,:,1)       ! freezing/melting point of sea water [Celcius] 
     72         tfu(:,:) = tfreez( tsn(:,:,1,jp_sal) ) * tmask(:,:,1)       ! freezing/melting point of sea water [Celcius] 
    7373 
    7474         DO jj = 1, jpj 
    7575            DO ji = 1, jpi 
    7676               !                     ! ice if sst <= t-freez + ttest 
    77                IF( tn(ji,jj,1)  - tfu(ji,jj) >= ttest ) THEN   ;   zidto = 0.e0      ! no ice 
    78                ELSE                                            ;   zidto = 1.e0      !    ice 
     77               IF( tsn(ji,jj,1,jp_tem)  - tfu(ji,jj) >= ttest ) THEN   ;   zidto = 0.e0      ! no ice 
     78               ELSE                                                    ;   zidto = 1.e0      !    ice 
    7979               ENDIF 
    8080               ! 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limmsh_2.F90

    r2715 r3294  
    2020   USE in_out_manager 
    2121   USE lib_mpp          ! MPP library 
     22#if defined key_lim2_vp 
     23   USE wrk_nemo         ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limrhg_2.F90

    r2715 r3294  
    2727   USE lbclnk         ! lateral boundary condition - MPP exchanges 
    2828   USE lib_mpp        ! MPP library 
     29   USE wrk_nemo       ! 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, kjstart = 0 ) 
     97      CALL wrk_alloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kjstart = 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, kjstart = 0 ) 
     579      CALL wrk_dealloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kjstart = 0 ) 
     580 
    594581   END SUBROUTINE lim_rhg_2 
    595582 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r2715 r3294  
    2727   USE sbc_ice          ! surface boundary condition: ice 
    2828   USE sbc_oce          ! surface boundary condition: ocean 
     29   USE sbccpl 
    2930 
    3031   USE albedo           ! albedo parameters 
    3132   USE lbclnk           ! ocean lateral boundary condition - MPP exchanges 
    3233   USE lib_mpp          ! MPP library 
     34   USE wrk_nemo         ! work arrays 
    3335   USE in_out_manager   ! I/O manager 
    3436   USE diaar5, ONLY :   lk_diaar5 
     
    5052   ! 
    5153   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   soce_0, sice_0   ! constant SSS and ice salinity used in levitating sea-ice case 
    52  
    5354   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau_oce, vtau_oce   ! air-ocean surface i- & j-stress              [N/m2] 
    5455   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tmod_io              ! modulus of the ice-ocean relative velocity   [m/s] 
     
    100101      !!              Tartinville et al. 2001 Ocean Modelling, 3, 95-108. 
    101102      !!--------------------------------------------------------------------- 
    102       USE wrk_nemo, ONLY: wrk_not_released, wrk_in_use 
    103       USE wrk_nemo, ONLY: zqnsoce => wrk_2d_1 ! 2D workspace 
    104       USE wrk_nemo, ONLY: wrk_3d_4, wrk_3d_5 
    105103      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    106104      !! 
     
    111109      REAL(wp) ::   zqsr, zqns, zfm            ! local scalars 
    112110      REAL(wp) ::   zinda, zfons, zemp         !   -      - 
     111      REAL(wp), POINTER, DIMENSION(:,:)   ::   zqnsoce       ! 2D workspace 
    113112      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb, zalbp   ! 2D/3D workspace 
    114113      !!--------------------------------------------------------------------- 
    115114      
    116       IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 4,5) )THEN 
    117          CALL ctl_stop('lim_sbc_flx_2 : requested workspace arrays unavailable')   ;   RETURN 
    118       ENDIF 
    119       zalb  => wrk_3d_4(:,:,1:1)      ! Set-up pointers to sub-arrays of 3d workspaces 
    120       zalbp => wrk_3d_5(:,:,1:1) 
     115      CALL wrk_alloc( jpi, jpj, zqnsoce ) 
     116      CALL wrk_alloc( jpi, jpj, 1, zalb, zalbp ) 
    121117 
    122118      !------------------------------------------! 
     
    234230      !-----------------------------------------------! 
    235231 
    236       IF( lk_cpl ) THEN          ! coupled case 
    237          tn_ice(:,:,1) = sist(:,:)          ! sea-ice surface temperature        
    238          !                                  ! Computation of snow/ice and ocean albedo 
    239          CALL albedo_ice( tn_ice, reshape( hicif, (/jpi,jpj,1/) ), reshape( hsnif, (/jpi,jpj,1/) ), zalbp, zalb ) 
    240          alb_ice(:,:,1) =  0.5 * ( zalbp(:,:,1) + zalb (:,:,1) )   ! Ice albedo (mean clear and overcast skys) 
    241          CALL iom_put( "icealb_cea", alb_ice(:,:,1) * fr_i(:,:) )  ! ice albedo 
    242       ENDIF 
     232#if defined key_coupled 
     233      tn_ice(:,:,1) = sist(:,:)          ! sea-ice surface temperature        
     234      ht_i(:,:,1) = hicif(:,:) 
     235      ht_s(:,:,1) = hsnif(:,:) 
     236      a_i(:,:,1) = fr_i(:,:) 
     237      !                                  ! Computation of snow/ice and ocean albedo 
     238      CALL albedo_ice( tn_ice, ht_i, ht_s, zalbp, zalb ) 
     239      alb_ice(:,:,1) =  0.5 * ( zalbp(:,:,1) + zalb (:,:,1) )   ! Ice albedo (mean clear and overcast skys) 
     240      CALL iom_put( "icealb_cea", alb_ice(:,:,1) * fr_i(:,:) )  ! ice albedo 
     241#endif 
    243242 
    244243      IF(ln_ctl) THEN            ! control print 
     
    250249      ENDIF  
    251250      ! 
    252       IF( wrk_not_released(2, 1)     .OR.    & 
    253           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 ) 
    254253      ! 
    255254   END SUBROUTINE lim_sbc_flx_2 
     
    282281      !!              - taum       : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes 
    283282      !!--------------------------------------------------------------------- 
    284       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    285       USE wrk_nemo, ONLY: ztio_u => wrk_2d_1, ztio_v => wrk_2d_2     ! ocean stress below sea-ice 
    286283      INTEGER ,                     INTENT(in) ::   kt               ! ocean time-step index 
    287284      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pu_oce, pv_oce   ! surface ocean currents 
     
    291288      REAL(wp) ::   zfrldv, zat_v, zv_i, zvtau_ice, zv_t, zmodi   !   -      - 
    292289      REAL(wp) ::   zsang, zumt                                   !    -         - 
     290      REAL(wp), POINTER, DIMENSION(:,:) ::   ztio_u, ztio_v   ! ocean stress below sea-ice 
    293291      !!--------------------------------------------------------------------- 
    294292      ! 
    295       IF( wrk_in_use(2, 1,2) ) THEN 
    296          CALL ctl_stop('lim_sbc_tau_2 : requested workspace arrays unavailable.')   ;   RETURN 
    297       ENDIF 
     293      CALL wrk_alloc( jpi, jpj, ztio_u, ztio_v ) 
    298294      ! 
    299295      SELECT CASE( cp_ice_msh )      
     
    409405         &                       tab2d_2=vtau, clinfo2=' vtau    : '        , mask2=vmask ) 
    410406      !   
    411       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 ) 
    412408      ! 
    413409   END SUBROUTINE lim_sbc_tau_2 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r2715 r3294  
    2222   USE in_out_manager  ! I/O manager 
    2323   USE lib_mpp 
     24   USE wrk_nemo        ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_lac_2.F90

    r2715 r3294  
    1515   USE limistate_2  
    1616   USE lib_mpp          ! MPP library 
     17   USE wrk_nemo         ! 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 
     
    8179         iiceform       ,   &  !  1 = ice formed   ; 0 = no ice formed 
    8280         ihemis                !  dummy indice 
    83       REAL(wp), POINTER, DIMENSION(:) :: & 
    84          zqbgow           ,  &  !  heat budget of the open water (negative) 
    85          zfrl_old         ,  &  !  previous sea/ice fraction 
    86          zhice_old        ,  &  !  previous ice thickness 
    87          zhice0           ,  &  !  thickness of newly formed ice in leads 
    88          zfrlmin          ,  &  !  minimum fraction for leads 
    89          zdhicbot               !  part of thickness of newly formed ice in leads which  
     81      REAL(wp), POINTER, DIMENSION(:) ::   zqbgow      !  heat budget of the open water (negative) 
     82      REAL(wp), POINTER, DIMENSION(:) ::   zfrl_old    !  previous sea/ice fraction 
     83      REAL(wp), POINTER, DIMENSION(:) ::   zhice_old   !  previous ice thickness 
     84      REAL(wp), POINTER, DIMENSION(:) ::   zhice0      !  thickness of newly formed ice in leads 
     85      REAL(wp), POINTER, DIMENSION(:) ::   zfrlmin     !  minimum fraction for leads 
     86      REAL(wp), POINTER, DIMENSION(:) ::   zdhicbot    !  part of thickness of newly formed ice in leads which  
    9087                                !  has been already used in transport for example 
    9188      REAL(wp)  ::  & 
     
    104101      !!---------------------------------------------------------------------       
    105102                
    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)  
     103      CALL wrk_alloc( jpij, zqbgow, zfrl_old, zhice_old, zhice0, zfrlmin, zdhicbot ) 
    116104       
    117105      !-------------------------------------------------------------- 
     
    232220      END DO 
    233221       
    234       IF( wrk_not_released(1, 1,2,3,4,5,6) )   CALL ctl_stop('lim_thd_lac_2 : failed to release workspace arrays.') 
     222      CALL wrk_dealloc( jpij, zqbgow, zfrl_old, zhice_old, zhice0, zfrlmin, zdhicbot ) 
    235223      ! 
    236224   END SUBROUTINE lim_thd_lac_2 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_zdf_2.F90

    r2715 r3294  
    2020   USE in_out_manager 
    2121   USE lib_mpp          ! MPP library 
     22   USE wrk_nemo         ! 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 
     
    8174      REAL(wp), POINTER, DIMENSION(:) ::   zqcmlts        ! energy due to surface melting 
    8275      REAL(wp), POINTER, DIMENSION(:) ::   zqcmltb        ! energy due to bottom melting 
    83       REAL(wp), POINTER, DIMENSION(:) ::  & 
    84          ztsmlt      &    ! snow/ice surface melting temperature 
    85          ,ztbif      &    ! int. temp. at the mid-point of the 1st layer of the snow/ice sys.  
    86          ,zksn       &    ! effective conductivity of snow 
    87          ,zkic       &    ! effective conductivity of ice 
    88          ,zksndh     &    ! thermal cond. at the mid-point of the 1st layer of the snow/ice sys.  
    89          , zfcsu     &    ! conductive heat flux at the surface of the snow/ice system  
    90          , zfcsudt   &    ! = zfcsu * dt 
    91          , zi0       &    ! frac. of the net SW rad. which is not absorbed at the surface 
    92          , z1mi0     &    ! fraction of the net SW radiation absorbed at the surface 
    93          , zqmax     &    ! maximum energy stored in brine pockets 
    94          , zrcpdt    &    ! h_su*rho_su*cp_su/dt(h_su being the thick. of surf. layer) 
    95          , zts_old   &    ! previous surface temperature 
    96          , zidsn , z1midsn , zidsnic ! tempory variables 
    97       REAL(wp), POINTER, DIMENSION(:) ::   & 
    98           zfnet       &  ! net heat flux at the top surface( incl. conductive heat flux) 
    99           , zsprecip  &    ! snow accumulation 
    100           , zhsnw_old &    ! previous snow thickness 
    101           , zdhictop  &    ! change in ice thickness due to top surf ablation/accretion 
    102           , zdhicbot  &    ! change in ice thickness due to bottom surf abl/acc 
    103           , zqsup     &    ! energy transmitted to ocean (coming from top surf abl/acc) 
    104           , zqocea    &    ! energy transmitted to ocean (coming from bottom sur abl/acc) 
    105           , zfrl_old  &    ! previous sea/ice fraction 
    106           , zfrld_1d    &    ! new sea/ice fraction 
    107           , zep            ! internal temperature of the 2nd layer of the snow/ice system 
    108        REAL(wp), DIMENSION(3) :: &  
     76      REAL(wp), POINTER, DIMENSION(:) ::   ztsmlt         ! snow/ice surface melting temperature 
     77      REAL(wp), POINTER, DIMENSION(:) ::   ztbif          ! int. temp. at the mid-point of the 1st layer of the snow/ice sys.  
     78      REAL(wp), POINTER, DIMENSION(:) ::   zksn           ! effective conductivity of snow 
     79      REAL(wp), POINTER, DIMENSION(:) ::   zkic           ! effective conductivity of ice 
     80      REAL(wp), POINTER, DIMENSION(:) ::   zksndh         ! thermal cond. at the mid-point of the 1st layer of the snow/ice sys.  
     81      REAL(wp), POINTER, DIMENSION(:) ::   zfcsu          ! conductive heat flux at the surface of the snow/ice system  
     82      REAL(wp), POINTER, DIMENSION(:) ::   zfcsudt        ! = zfcsu * dt 
     83      REAL(wp), POINTER, DIMENSION(:) ::   zi0            ! frac. of the net SW rad. which is not absorbed at the surface 
     84      REAL(wp), POINTER, DIMENSION(:) ::   z1mi0          ! fraction of the net SW radiation absorbed at the surface 
     85      REAL(wp), POINTER, DIMENSION(:) ::   zqmax          ! maximum energy stored in brine pockets 
     86      REAL(wp), POINTER, DIMENSION(:) ::   zrcpdt         ! h_su*rho_su*cp_su/dt(h_su being the thick. of surf. layer) 
     87      REAL(wp), POINTER, DIMENSION(:) ::   zts_old        ! previous surface temperature 
     88      REAL(wp), POINTER, DIMENSION(:) ::   zidsn , z1midsn , zidsnic ! tempory variables 
     89      REAL(wp), POINTER, DIMENSION(:) ::   zfnet          ! net heat flux at the top surface( incl. conductive heat flux) 
     90      REAL(wp), POINTER, DIMENSION(:) ::   zsprecip       ! snow accumulation 
     91      REAL(wp), POINTER, DIMENSION(:) ::   zhsnw_old      ! previous snow thickness 
     92      REAL(wp), POINTER, DIMENSION(:) ::   zdhictop       ! change in ice thickness due to top surf ablation/accretion 
     93      REAL(wp), POINTER, DIMENSION(:) ::   zdhicbot       ! change in ice thickness due to bottom surf abl/acc 
     94      REAL(wp), POINTER, DIMENSION(:) ::   zqsup          ! energy transmitted to ocean (coming from top surf abl/acc) 
     95      REAL(wp), POINTER, DIMENSION(:) ::   zqocea         ! energy transmitted to ocean (coming from bottom sur abl/acc) 
     96      REAL(wp), POINTER, DIMENSION(:) ::   zfrl_old       ! previous sea/ice fraction 
     97      REAL(wp), POINTER, DIMENSION(:) ::   zfrld_1d       ! new sea/ice fraction 
     98      REAL(wp), POINTER, DIMENSION(:) ::   zep            ! internal temperature of the 2nd layer of the snow/ice system 
     99      REAL(wp), DIMENSION(3) :: &  
    109100          zplediag  &    ! principle diagonal, subdiag. and supdiag. of the  
    110101          , zsubdiag  &    ! tri-diagonal matrix coming from the computation 
     
    166157          , zihsn, zidhb, zihic, zihe, zihq, ziexp, ziqf, zihnf, zibmlt, ziqr, zihgnew, zind 
    167158       !!---------------------------------------------------------------------- 
    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) 
     159       CALL wrk_alloc( jpij, ztsmlt, ztbif  , zksn    , zkic    , zksndh , zfcsu  , zfcsudt , zi0      , z1mi0   , zqmax    ) 
     160       CALL wrk_alloc( jpij, zrcpdt, zts_old, zidsn   , z1midsn , zidsnic, zfnet  , zsprecip, zhsnw_old, zdhictop, zdhicbot ) 
     161       CALL wrk_alloc( jpij, zqsup , zqocea , zfrl_old, zfrld_1d, zep    , zqcmlts, zqcmltb                                 ) 
    204162 
    205163       !----------------------------------------------------------------------- 
     
    372330          DO ji = kideb, kiut 
    373331             sist_1d(ji) = MIN( ztsmlt(ji) , sist_1d(ji) ) 
     332             qla_ice_1d(ji) = -9999.   ! default definition, not used as parsub = 0. in this case 
    374333             zfcsu(ji)  = zksndh(ji) * ( ztbif(ji) - sist_1d(ji) ) 
    375334          END DO 
     
    805764       END DO 
    806765       !  
    807        IF( wrk_not_released(1, 1,  2, 3, 4, 5, 6, 7, 8, 9,10,   & 
    808            &                   11,12,13,14,15,16,17,18,19,20,   & 
    809            &                   21,22,23,24,25,26,27)        )   & 
    810            CALL ctl_stop('lim_thd_zdf_2 : failed to release workspace arrays.') 
     766       CALL wrk_dealloc( jpij, ztsmlt, ztbif  , zksn    , zkic    , zksndh , zfcsu  , zfcsudt , zi0      , z1mi0   , zqmax    ) 
     767       CALL wrk_dealloc( jpij, zrcpdt, zts_old, zidsn   , z1midsn , zidsnic, zfnet  , zsprecip, zhsnw_old, zdhictop, zdhicbot ) 
     768       CALL wrk_dealloc( jpij, zqsup , zqocea , zfrl_old, zfrld_1d, zep    , zqcmlts, zqcmltb                                 ) 
    811769       ! 
    812770    END SUBROUTINE lim_thd_zdf_2 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limtrp_2.F90

    r2715 r3294  
    2727   USE lbclnk          ! lateral boundary conditions -- MPP exchanges 
    2828   USE lib_mpp         ! MPP library 
     29   USE wrk_nemo        ! 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 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limwri_2.F90

    r2715 r3294  
    3030   USE in_out_manager 
    3131   USE lib_mpp         ! MPP library 
     32   USE wrk_nemo        ! 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 
    212209      
     210# endif 
    213211 
    214212   SUBROUTINE lim_wri_init_2 
     
    297295   END SUBROUTINE lim_wri_init_2 
    298296 
    299 # endif 
    300297#endif 
    301298 
  • trunk/NEMOGCM/NEMO/LIM_SRC_2/limwri_dimg_2.h90

    r2715 r3294  
    2222    INTEGER , SAVE, DIMENSION(:), ALLOCATABLE  :: nsubindex   !: subindex to be saved 
    2323    INTEGER , SAVE ::   nice, nhorid, ndim, niter, ndepid 
    24     REAL(wp), SAVE, DIMENSION(jpi,jpj,jpnoumax) :: rcmoy 
     24    REAL(wp), SAVE, DIMENSION(:,:,:), ALLOCATABLE :: rcmoy 
    2525 
    2626    INTEGER ::  ji, jj, jf, ii   ! dummy loop indices and array index 
    2727    INTEGER :: iyear, iday, imon !  
     28    INTEGER :: ialloc 
    2829    CHARACTER(LEN=80) :: clname, cltext, clmode 
    2930    REAL(wp), DIMENSION(1) ::   zdept 
     
    3940#endif 
    4041    !!------------------------------------------------------------------- 
     42    IF( .NOT. ALLOCATED(rcmoy) )THEN 
     43        ALLOCATE(rcmoy(jpi,jpj,jpnoumax),  STAT=ialloc ) 
     44       ! 
     45       IF( lk_mpp      )   CALL mpp_sum ( ialloc  ) 
     46       IF( ialloc /= 0 )   CALL ctl_warn('lim_wri_2 (limwri_dimg_2.h90) : failed to allocate arrays') 
     47       rcmoy(:,:,:) = 0._wp 
     48    ENDIF 
    4149 
    4250    IF( kt == nit000 ) THEN  
Note: See TracChangeset for help on using the changeset viewer.