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

Changeset 3148


Ignore:
Timestamp:
2011-11-17T17:28:07+01:00 (12 years ago)
Author:
smasson
Message:

dev_NEMO_MERGE_2011: new dynamical allocation in LIM3

Location:
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90

    r2715 r3148  
    2323   USE thd_ice          ! LIM thermodynamical variables 
    2424   USE limitd_me        ! LIM ice thickness distribution 
    25    USE limrhg           ! LIM dynamics 
    2625   USE limmsh           ! LIM mesh 
    2726   USE limistate        ! LIM initial state 
     
    5655 
    5756      !                                ! Allocate the ice arrays 
    58       ierr =        ice_alloc       ()       ! ice variables 
    59       ierr = ierr + dom_ice_alloc   ()       ! domain 
    60       ierr = ierr + sbc_ice_alloc   ()       ! surface forcing 
    61       ierr = ierr + thd_ice_alloc   ()       ! thermodynamics 
    62       ierr = ierr + lim_itd_me_alloc()       ! ice thickness distribution - mechanics 
    63       ierr = ierr + lim_rhg_alloc   ()       ! dynamics 
     57      ierr =        ice_alloc        ()      ! ice variables 
     58      ierr = ierr + dom_ice_alloc    ()      ! domain 
     59      ierr = ierr + sbc_ice_alloc    ()      ! surface forcing 
     60      ierr = ierr + thd_ice_alloc    ()      ! thermodynamics 
     61      ierr = ierr + lim_itd_me_alloc ()      ! ice thickness distribution - mechanics 
    6462      ! 
    6563      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90

    r2715 r3148  
    2222   USE prtctl           ! Print control 
    2323   USE lib_mpp          ! MPP library 
     24   USE wrk_nemo_2       ! work arrays 
    2425 
    2526   IMPLICIT NONE 
     
    5657      !! Reference:  Prather, 1986, JGR, 91, D6. 6671-6681. 
    5758      !!-------------------------------------------------------------------- 
    58       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    59       USE wrk_nemo, ONLY:   zf0  => wrk_2d_11 , zfx   => wrk_2d_12 , zfy    => wrk_2d_13 , zbet => wrk_2d_14   ! 2D workspace 
    60       USE wrk_nemo, ONLY:   zfm  => wrk_2d_15 , zfxx  => wrk_2d_16 , zfyy   => wrk_2d_17 , zfxy => wrk_2d_18   !  -      - 
    61       USE wrk_nemo, ONLY:   zalg => wrk_2d_19 , zalg1 => wrk_2d_20 , zalg1q => wrk_2d_21                       !  -      - 
    62       ! 
    6359      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step 
    6460      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call lim_adv_x then lim_adv_y (=1) or the opposite (=0) 
     
    7369      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !   -      - 
    7470      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !   -      - 
     71      REAL(wp), POINTER, DIMENSION(:,:) ::   zf0 , zfx  , zfy   , zbet   ! 2D workspace 
     72      REAL(wp), POINTER, DIMENSION(:,:) ::   zfm , zfxx , zfyy  , zfxy   !  -      - 
     73      REAL(wp), POINTER, DIMENSION(:,:) ::   zalg, zalg1, zalg1q         !  -      - 
    7574      !--------------------------------------------------------------------- 
    7675 
    77       IF( wrk_in_use(2, 11,12,13,14,15,16,17,18,19,20,21) ) THEN 
    78          CALL ctl_stop('lim_adv_x: requested workspace arrays unavailable')   ;   RETURN 
    79       ENDIF 
     76      CALL wrk_alloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     77      CALL wrk_alloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    8078 
    8179      ! Limitation of moments.                                            
     
    224222      ENDIF 
    225223      ! 
    226       IF( wrk_not_released(2, 11,12,13,14,15,16,17,18,19,20,21) )    & 
    227           CALL ctl_stop('lim_adv_x : failed to release workspace arrays') 
     224      CALL wrk_dealloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     225      CALL wrk_dealloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    228226      ! 
    229227   END SUBROUTINE lim_adv_x 
     
    244242      !! Reference:  Prather, 1986, JGR, 91, D6. 6671-6681. 
    245243      !!--------------------------------------------------------------------- 
    246       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    247       USE wrk_nemo, ONLY:   zf0  => wrk_2d_11 , zfx   => wrk_2d_12 , zfy    => wrk_2d_13 , zbet => wrk_2d_14   ! 2D workspace 
    248       USE wrk_nemo, ONLY:   zfm  => wrk_2d_15 , zfxx  => wrk_2d_16 , zfyy   => wrk_2d_17 , zfxy => wrk_2d_18   !  -      - 
    249       USE wrk_nemo, ONLY:   zalg => wrk_2d_19 , zalg1 => wrk_2d_20 , zalg1q => wrk_2d_21                       !  -      - 
    250       ! 
    251244      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step 
    252245      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call lim_adv_x then lim_adv_y (=1) or the opposite (=0) 
     
    261254      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !    -         - 
    262255      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !    -         - 
     256      REAL(wp), POINTER, DIMENSION(:,:) ::   zf0, zfx , zfy , zbet   ! 2D workspace 
     257      REAL(wp), POINTER, DIMENSION(:,:) ::   zfm, zfxx, zfyy, zfxy   !  -      - 
     258      REAL(wp), POINTER, DIMENSION(:,:) ::   zalg, zalg1, zalg1q     !  -      - 
    263259      !--------------------------------------------------------------------- 
    264260 
    265       IF( wrk_in_use(2, 11,12,13,14,15,16,17,18,19,20,21) ) THEN 
    266          CALL ctl_stop('lim_adv_y : requested workspace arrays unavailable')   ;   RETURN 
    267       ENDIF 
     261      CALL wrk_alloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     262      CALL wrk_alloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    268263 
    269264      ! Limitation of moments. 
     
    413408      ENDIF 
    414409      ! 
    415       IF( wrk_not_released(2, 11,12,13,14,15,16,17,18,19,20,21) )    & 
    416          CALL ctl_stop('lim_adv_y: failed to release workspace arrays') 
     410      CALL wrk_dealloc( jpi, jpj, zf0 , zfx , zfy , zbet, zfm ) 
     411      CALL wrk_dealloc( jpi, jpj, zfxx, zfyy, zfxy, zalg, zalg1, zalg1q ) 
    417412      ! 
    418413   END SUBROUTINE lim_adv_y 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90

    r2715 r3148  
    2525   USE lbclnk           ! lateral boundary conditions - MPP exchanges 
    2626   USE lib_mpp          ! MPP library 
     27   USE wrk_nemo_2       ! work arrays 
    2728   USE in_out_manager   ! I/O manager 
    2829   USE prtctl           ! Print control 
     
    5556      !!              - treatment of the case if no ice dynamic 
    5657      !!------------------------------------------------------------------------------------ 
    57       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    58       USE wrk_nemo, ONLY:   wrk_1d_1, wrk_1d_2 
    59       USE wrk_nemo, ONLY:   zu_io => wrk_2d_1, zv_io => wrk_2d_2  ! ice-ocean velocity 
    60       ! 
    6158      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    6259      !! 
     
    6461      INTEGER  ::   i_j1, i_jpj       ! Starting/ending j-indices for rheology 
    6562      REAL(wp) ::   zcoef             ! local scalar 
    66       REAL(wp), POINTER, DIMENSION(:) ::   zind     ! i-averaged indicator of sea-ice 
    67       REAL(wp), POINTER, DIMENSION(:) ::   zmsk     ! i-averaged of tmask 
     63      REAL(wp), POINTER, DIMENSION(:)   ::   zind           ! i-averaged indicator of sea-ice 
     64      REAL(wp), POINTER, DIMENSION(:)   ::   zmsk           ! i-averaged of tmask 
     65      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_io, zv_io   ! ice-ocean velocity 
    6866      !!--------------------------------------------------------------------- 
    6967 
    70       IF(  wrk_in_use(1, 1,2)  .OR.  wrk_in_use(2, 1,2)  ) THEN 
    71          CALL ctl_stop('lim_dyn : requested workspace arrays unavailable')   ;   RETURN 
    72       ENDIF 
    73       zind => wrk_1d_1(1:jpj)      ! Set-up pointers to sub-arrays of workspaces 
    74       zmsk => wrk_1d_2(1:jpj) 
     68      CALL wrk_alloc( jpi, jpj, zu_io, zv_io ) 
     69      CALL wrk_alloc( jpj, zind, zmsk ) 
    7570 
    7671      IF( kt == nit000 )   CALL lim_dyn_init   ! Initialization (first time-step only) 
     
    212207      ENDIF 
    213208      ! 
    214       IF( wrk_not_released(1, 1,2) .OR.   & 
    215           wrk_not_released(2, 1,2)  )   CALL ctl_stop('lim_dyn : failed to release workspace arrays' ) 
     209      CALL wrk_dealloc( jpi, jpj, zu_io, zv_io ) 
     210      CALL wrk_dealloc( jpj, zind, zmsk ) 
    216211      ! 
    217212   END SUBROUTINE lim_dyn 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90

    r2715 r3148  
    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 
     
    5051      !! ** Action  :    update ptab with the diffusive contribution 
    5152      !!------------------------------------------------------------------- 
    52       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    53       USE wrk_nemo, ONLY:   zflu => wrk_2d_11, zdiv  => wrk_2d_13, zrlx  => wrk_2d_15  
    54       USE wrk_nemo, ONLY:   zflv => wrk_2d_12, zdiv0 => wrk_2d_14, ztab0 => wrk_2d_16 
    55       ! 
    5653      REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) ::   ptab    ! Field on which the diffusion is applied 
    5754      ! 
     
    5956      INTEGER  ::  its, iter, ierr   ! local integers 
    6057      REAL(wp) ::   zalfa, zrlxint, zconv, zeps   ! local scalars 
     58      REAL(wp), POINTER, DIMENSION(:,:) ::   zrlx, zflu, zflv, zdiv0, zdiv, ztab0 
    6159      CHARACTER(lc) ::   charout   ! local character 
    6260      !!------------------------------------------------------------------- 
    6361       
    64       IF( wrk_in_use(2, 11,12,13,14,15,16) ) THEN 
    65          CALL ctl_stop( 'lim_hdf: requested workspace arrays unavailable' )   ;   RETURN 
    66       ENDIF 
     62      CALL wrk_alloc( jpi, jpj, zrlx, zflu, zflv, zdiv0, zdiv, ztab0 ) 
    6763 
    6864      !                       !==  Initialisation  ==! 
     
    146142      ENDIF 
    147143      ! 
    148       IF( wrk_not_released(2, 11,12,13,14,15,16) )   CALL ctl_stop('lim_hdf: failed to release workspace arrays') 
     144      CALL wrk_dealloc( jpi, jpj, zrlx, zflu, zflv, zdiv0, zdiv, ztab0 ) 
    149145      ! 
    150146   END SUBROUTINE lim_hdf 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r2977 r3148  
    2525   USE lbclnk           ! lateral boundary condition - MPP exchanges 
    2626   USE lib_mpp          ! MPP library 
     27   USE wrk_nemo_2       ! work arrays 
    2728 
    2829   IMPLICIT NONE 
     
    6263      !!                or from arbitrary sea-ice conditions 
    6364      !!------------------------------------------------------------------- 
    64       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    65       USE wrk_nemo, ONLY:   wrk_1d_1, wrk_1d_2, wrk_1d_3, wrk_1d_4 
    66       USE wrk_nemo, ONLY:   zidto => wrk_2d_1   ! ice indicator 
    67       ! 
    6865      INTEGER  ::   ji, jj, jk, jl             ! dummy loop indices 
    6966      REAL(wp) ::   zeps6, zeps, ztmelts, epsi06   ! local scalars 
    7067      REAL(wp) ::   zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs  
    71       REAL(wp), POINTER, DIMENSION(:) ::   zgfactorn, zhin  
    72       REAL(wp), POINTER, DIMENSION(:) ::   zgfactors, zhis 
    73       !-------------------------------------------------------------------- 
    74  
    75       IF(  wrk_in_use(2, 1) .OR.  wrk_in_use(1, 1,2,3,4)  ) THEN 
    76          CALL ctl_stop( 'lim_istate: requested workspace arrays unavailable' )   ;   RETURN 
    77       ENDIF 
    78       zgfactorn => wrk_1d_1(1:jpm)   ;   zhin => wrk_1d_3(1:jpm)   ! Set-up pointers to sub-arrays of workspaces 
    79       zgfactors => wrk_1d_2(1:jpm)   ;   zhis => wrk_1d_4(1:jpm) 
     68      REAL(wp), POINTER, DIMENSION(:)   ::   zgfactorn, zhin  
     69      REAL(wp), POINTER, DIMENSION(:)   ::   zgfactors, zhis 
     70      REAL(wp), POINTER, DIMENSION(:,:) ::   zidto      ! ice indicator 
     71      !-------------------------------------------------------------------- 
     72 
     73      CALL wrk_alloc( jpm, zgfactorn, zgfactors, zhin, zhis ) 
     74      CALL wrk_alloc( jpi, jpj, zidto ) 
    8075 
    8176      !-------------------------------------------------------------------- 
     
    517512      CALL lbc_lnk( fsbbq  , 'T', 1. ) 
    518513      ! 
    519       IF( wrk_not_released(2, 1) .OR. wrk_not_released(1, 1,2,3,4) )   & 
    520          &   CALL ctl_stop('lim_istate : failed to release workspace arrays') 
     514      CALL wrk_dealloc( jpm, zgfactorn, zgfactors, zhin, zhis ) 
     515      CALL wrk_dealloc( jpi, jpj, zidto ) 
    521516      ! 
    522517   END SUBROUTINE lim_istate 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r2777 r3148  
    2626   USE lbclnk           ! lateral boundary condition - MPP exchanges 
    2727   USE lib_mpp          ! MPP library 
     28   USE wrk_nemo_2       ! work arrays 
    2829   USE prtctl           ! Print control 
    29    USE wrk_nemo         ! workspace manager 
    3030 
    3131   IMPLICIT NONE 
     
    3636   PUBLIC   lim_itd_me_init 
    3737   PUBLIC   lim_itd_me_zapsmall 
    38    PUBLIC   lim_itd_me_alloc        ! called by nemogcm.F90 
     38   PUBLIC   lim_itd_me_alloc        ! called by iceini.F90 
    3939 
    4040   REAL(wp)  ::   epsi11 = 1.e-11_wp   ! constant values 
     
    7070   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   dvirdgdt   ! rate of ice volume ridged (m/s) 
    7171   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   opening    ! rate of opening due to divergence/shear (1/s) 
    72  
    7372   !!---------------------------------------------------------------------- 
    7473   !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 
     
    125124      !!  and Elizabeth C. Hunke, LANL are gratefully acknowledged 
    126125      !!--------------------------------------------------------------------! 
    127       USE wrk_nemo, ONLY:   closing_net   => wrk_2d_1   ! net rate at which area is removed    (1/s) 
    128       !                                                 ! (ridging ice area - area of new ridges) / dt 
    129       USE wrk_nemo, ONLY:   divu_adv      => wrk_2d_2   ! divu as implied by transport scheme  (1/s) 
    130       USE wrk_nemo, ONLY:   opning        => wrk_2d_3   ! rate of opening due to divergence/shear 
    131       USE wrk_nemo, ONLY:   closing_gross => wrk_2d_4   ! rate at which area removed, not counting area of new ridges 
    132       USE wrk_nemo, ONLY:   msnow_mlt     => wrk_2d_5   ! mass of snow added to ocean (kg m-2) 
    133       USE wrk_nemo, ONLY:   esnow_mlt     => wrk_2d_6   ! energy needed to melt snow in ocean (J m-2) 
    134       USE wrk_nemo, ONLY:   vt_i_init     => wrk_2d_7   !  ice volume summed over  
    135       USE wrk_nemo, ONLY:   vt_i_final    => wrk_2d_8   !  categories 
    136       ! 
    137126      INTEGER ::   ji, jj, jk, jl   ! dummy loop index 
    138127      INTEGER ::   niter, nitermax = 20   ! local integer  
     
    141130      REAL(wp) ::   w1, tmpfac, dti         ! local scalar 
    142131      CHARACTER (len = 15) ::   fieldid 
     132      REAL(wp), POINTER, DIMENSION(:,:) ::   closing_net     ! net rate at which area is removed    (1/s) 
     133                                                             ! (ridging ice area - area of new ridges) / dt 
     134      REAL(wp), POINTER, DIMENSION(:,:) ::   divu_adv        ! divu as implied by transport scheme  (1/s) 
     135      REAL(wp), POINTER, DIMENSION(:,:) ::   opning          ! rate of opening due to divergence/shear 
     136      REAL(wp), POINTER, DIMENSION(:,:) ::   closing_gross   ! rate at which area removed, not counting area of new ridges 
     137      REAL(wp), POINTER, DIMENSION(:,:) ::   msnow_mlt       ! mass of snow added to ocean (kg m-2) 
     138      REAL(wp), POINTER, DIMENSION(:,:) ::   esnow_mlt       ! energy needed to melt snow in ocean (J m-2) 
     139      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_i_init, vt_i_final  !  ice volume summed over categories 
    143140      !!----------------------------------------------------------------------------- 
    144141 
    145       IF( wrk_in_use(2, 1,2,3,4,5,6,7,8) ) THEN 
    146          CALL ctl_stop('lim_itd_me: requested workspace arrays unavailable')   ;   RETURN 
    147       ENDIF 
     142      CALL wrk_alloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 
    148143 
    149144      IF( numit == nstart  )   CALL lim_itd_me_init   ! Initialization (first time-step only) 
     
    489484      END DO 
    490485 
    491       IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) )   CALL ctl_stop('lim_itd_me: failed to release workspace arrays') 
     486      CALL wrk_dealloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 
    492487      ! 
    493488   END SUBROUTINE lim_itd_me 
     
    508503      !! ** Inputs / Ouputs : kstrngth (what kind of ice strength we are using) 
    509504      !!---------------------------------------------------------------------- 
    510       USE wrk_nemo, ONLY: zworka => wrk_2d_3    ! 2D workspace 
    511       ! 
    512505      INTEGER, INTENT(in) ::   kstrngth    ! = 1 for Rothrock formulation, 0 for Hibler (1979) 
    513506 
     
    515508      INTEGER ::   ksmooth     ! smoothing the resistance to deformation 
    516509      INTEGER ::   numts_rm    ! number of time steps for the P smoothing 
    517  
    518510      REAL(wp) ::   hi, zw1, zp, zdummy, zzc, z1_3   ! local scalars 
     511      REAL(wp), POINTER, DIMENSION(:,:) ::   zworka   ! temporary array used here 
    519512      !!---------------------------------------------------------------------- 
    520513 
    521       IF( wrk_in_use(2, 3) ) THEN 
    522          CALL ctl_stop('lim_itd_me_icestrength : requested workspace array unavailable')   ;   RETURN 
    523       ENDIF 
     514      CALL wrk_alloc( jpi, jpj, zworka ) 
    524515 
    525516      !------------------------------------------------------------------------------! 
     
    675666      CALL lbc_lnk( strength, 'T', 1. )      ! Boundary conditions 
    676667 
    677       IF( wrk_not_released(2, 3) )   CALL ctl_stop('lim_itd_me_icestrength: failed to release workspace array') 
     668      CALL wrk_dealloc( jpi, jpj, zworka ) 
    678669      ! 
    679670   END SUBROUTINE lim_itd_me_icestrength 
     
    691682      INTEGER ::   ji,jj, jl    ! dummy loop indices 
    692683      INTEGER ::   krdg_index   !  
    693  
    694684      REAL(wp) ::   Gstari, astari, hi, hrmean, zdummy   ! local scalar 
    695  
    696       REAL(wp), DIMENSION(jpi,jpj,-1:jpl) ::   Gsum   ! Gsum(n) = sum of areas in categories 0 to n 
    697  
    698       REAL(wp), DIMENSION(jpi,jpj) ::   zworka            ! temporary array used here 
     685      REAL(wp), POINTER, DIMENSION(:,:)   ::   zworka    ! temporary array used here 
     686      REAL(wp), POINTER, DIMENSION(:,:,:) ::   Gsum      ! Gsum(n) = sum of areas in categories 0 to n 
    699687      !------------------------------------------------------------------------------! 
     688 
     689      CALL wrk_alloc( jpi,jpj, zworka ) 
     690      CALL wrk_alloc( jpi,jpj,jpl+2, Gsum, kkstart = -1 ) 
    700691 
    701692      Gstari     = 1.0/Gstar     
     
    900891      END DO 
    901892      ! 
     893      CALL wrk_dealloc( jpi,jpj, zworka ) 
     894      CALL wrk_dealloc( jpi,jpj,jpl+2, Gsum, kkstart = -1 ) 
     895      ! 
    902896   END SUBROUTINE lim_itd_me_ridgeprep 
    903897 
     
    929923      REAL(wp) ::   hL, hR, farea, zdummy, zdummy0, ztmelts    ! left and right limits of integration 
    930924 
    931       INTEGER, DIMENSION(1:(jpi+1)*(jpj+1)) ::   indxi, indxj   ! compressed indices 
    932  
    933       REAL(wp), DIMENSION(jpi,jpj) ::   vice_init, vice_final   ! ice volume summed over categories 
    934       REAL(wp), DIMENSION(jpi,jpj) ::   eice_init, eice_final   ! ice energy summed over layers 
    935  
    936       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   aicen_init, vicen_init   ! ice  area    & volume before ridging 
    937       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   vsnon_init, esnon_init   ! snow volume  & energy before ridging 
    938       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   smv_i_init, oa_i_init    ! ice salinity & age    before ridging 
    939  
    940       REAL(wp), DIMENSION(jpi,jpj,jkmax,jpl) ::   eicen_init        ! ice energy before ridging 
    941  
    942       REAL(wp), DIMENSION(jpi,jpj) ::   afrac , fvol     ! fraction of category area ridged & new ridge volume going to n2 
    943       REAL(wp), DIMENSION(jpi,jpj) ::   ardg1 , ardg2    ! area of ice ridged & new ridges 
    944       REAL(wp), DIMENSION(jpi,jpj) ::   vsrdg , esrdg    ! snow volume & energy of ridging ice 
    945       REAL(wp), DIMENSION(jpi,jpj) ::   oirdg1, oirdg2   ! areal age content of ridged & rifging ice 
    946       REAL(wp), DIMENSION(jpi,jpj) ::   dhr   , dhr2     ! hrmax - hrmin  &  hrmax^2 - hrmin^2 
    947  
    948       REAL(wp), DIMENSION(jpi,jpj) ::   vrdg1   ! volume of ice ridged 
    949       REAL(wp), DIMENSION(jpi,jpj) ::   vrdg2   ! volume of new ridges 
    950       REAL(wp), DIMENSION(jpi,jpj) ::   vsw     ! volume of seawater trapped into ridges 
    951       REAL(wp), DIMENSION(jpi,jpj) ::   srdg1   ! sal*volume of ice ridged 
    952       REAL(wp), DIMENSION(jpi,jpj) ::   srdg2   ! sal*volume of new ridges 
    953       REAL(wp), DIMENSION(jpi,jpj) ::   smsw    ! sal*volume of water trapped into ridges 
    954  
    955       REAL(wp), DIMENSION(jpi,jpj) ::   afrft            ! fraction of category area rafted 
    956       REAL(wp), DIMENSION(jpi,jpj) ::   arft1 , arft2    ! area of ice rafted and new rafted zone 
    957       REAL(wp), DIMENSION(jpi,jpj) ::   virft , vsrft    ! ice & snow volume of rafting ice 
    958       REAL(wp), DIMENSION(jpi,jpj) ::   esrft , smrft    ! snow energy & salinity of rafting ice 
    959       REAL(wp), DIMENSION(jpi,jpj) ::   oirft1, oirft2   ! areal age content of rafted ice & rafting ice 
    960  
    961       REAL(wp), DIMENSION(jpi,jpj,jkmax) ::   eirft      ! ice energy of rafting ice 
    962       REAL(wp), DIMENSION(jpi,jpj,jkmax) ::   erdg1      ! enth*volume of ice ridged 
    963       REAL(wp), DIMENSION(jpi,jpj,jkmax) ::   erdg2      ! enth*volume of new ridges 
    964       REAL(wp), DIMENSION(jpi,jpj,jkmax) ::   ersw       ! enth of water trapped into ridges 
    965    !!---------------------------------------------------------------------- 
     925      INTEGER , POINTER, DIMENSION(:) ::   indxi, indxj   ! compressed indices 
     926 
     927      REAL(wp), POINTER, DIMENSION(:,:) ::   vice_init, vice_final   ! ice volume summed over categories 
     928      REAL(wp), POINTER, DIMENSION(:,:) ::   eice_init, eice_final   ! ice energy summed over layers 
     929 
     930      REAL(wp), POINTER, DIMENSION(:,:,:) ::   aicen_init, vicen_init   ! ice  area    & volume before ridging 
     931      REAL(wp), POINTER, DIMENSION(:,:,:) ::   vsnon_init, esnon_init   ! snow volume  & energy before ridging 
     932      REAL(wp), POINTER, DIMENSION(:,:,:) ::   smv_i_init, oa_i_init    ! ice salinity & age    before ridging 
     933 
     934      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   eicen_init        ! ice energy before ridging 
     935 
     936      REAL(wp), POINTER, DIMENSION(:,:) ::   afrac , fvol     ! fraction of category area ridged & new ridge volume going to n2 
     937      REAL(wp), POINTER, DIMENSION(:,:) ::   ardg1 , ardg2    ! area of ice ridged & new ridges 
     938      REAL(wp), POINTER, DIMENSION(:,:) ::   vsrdg , esrdg    ! snow volume & energy of ridging ice 
     939      REAL(wp), POINTER, DIMENSION(:,:) ::   oirdg1, oirdg2   ! areal age content of ridged & rifging ice 
     940      REAL(wp), POINTER, DIMENSION(:,:) ::   dhr   , dhr2     ! hrmax - hrmin  &  hrmax^2 - hrmin^2 
     941 
     942      REAL(wp), POINTER, DIMENSION(:,:) ::   vrdg1   ! volume of ice ridged 
     943      REAL(wp), POINTER, DIMENSION(:,:) ::   vrdg2   ! volume of new ridges 
     944      REAL(wp), POINTER, DIMENSION(:,:) ::   vsw     ! volume of seawater trapped into ridges 
     945      REAL(wp), POINTER, DIMENSION(:,:) ::   srdg1   ! sal*volume of ice ridged 
     946      REAL(wp), POINTER, DIMENSION(:,:) ::   srdg2   ! sal*volume of new ridges 
     947      REAL(wp), POINTER, DIMENSION(:,:) ::   smsw    ! sal*volume of water trapped into ridges 
     948 
     949      REAL(wp), POINTER, DIMENSION(:,:) ::   afrft            ! fraction of category area rafted 
     950      REAL(wp), POINTER, DIMENSION(:,:) ::   arft1 , arft2    ! area of ice rafted and new rafted zone 
     951      REAL(wp), POINTER, DIMENSION(:,:) ::   virft , vsrft    ! ice & snow volume of rafting ice 
     952      REAL(wp), POINTER, DIMENSION(:,:) ::   esrft , smrft    ! snow energy & salinity of rafting ice 
     953      REAL(wp), POINTER, DIMENSION(:,:) ::   oirft1, oirft2   ! areal age content of rafted ice & rafting ice 
     954 
     955      REAL(wp), POINTER, DIMENSION(:,:,:) ::   eirft      ! ice energy of rafting ice 
     956      REAL(wp), POINTER, DIMENSION(:,:,:) ::   erdg1      ! enth*volume of ice ridged 
     957      REAL(wp), POINTER, DIMENSION(:,:,:) ::   erdg2      ! enth*volume of new ridges 
     958      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ersw       ! enth of water trapped into ridges 
     959      !!---------------------------------------------------------------------- 
     960 
     961      CALL wrk_alloc( (jpi+1)*(jpj+1),      indxi, indxj ) 
     962      CALL wrk_alloc( jpi, jpj,             vice_init, vice_final, eice_init, eice_final ) 
     963      CALL wrk_alloc( jpi, jpj,             afrac, fvol , ardg1, ardg2, vsrdg, esrdg, oirdg1, oirdg2, dhr, dhr2 ) 
     964      CALL wrk_alloc( jpi, jpj,             vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw ) 
     965      CALL wrk_alloc( jpi, jpj,             afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
     966      CALL wrk_alloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnon_init, esnon_init, smv_i_init, oa_i_init ) 
     967      CALL wrk_alloc( jpi, jpj, jkmax,      eirft, erdg1, erdg2, ersw ) 
     968      CALL wrk_alloc( jpi, jpj, jkmax, jpl, eicen_init ) 
    966969 
    967970      ! Conservation check 
     
    13581361         WRITE(numout,*) ' eice_final : ', eice_final(jiindx,jjindx) 
    13591362      ENDIF 
     1363      ! 
     1364      CALL wrk_dealloc( (jpi+1)*(jpj+1),      indxi, indxj ) 
     1365      CALL wrk_dealloc( jpi, jpj,             vice_init, vice_final, eice_init, eice_final ) 
     1366      CALL wrk_dealloc( jpi, jpj,             afrac, fvol , ardg1, ardg2, vsrdg, esrdg, oirdg1, oirdg2, dhr, dhr2 ) 
     1367      CALL wrk_dealloc( jpi, jpj,             vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw ) 
     1368      CALL wrk_dealloc( jpi, jpj,             afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
     1369      CALL wrk_dealloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnon_init, esnon_init, smv_i_init, oa_i_init ) 
     1370      CALL wrk_dealloc( jpi, jpj, jkmax,      eirft, erdg1, erdg2, ersw ) 
     1371      CALL wrk_dealloc( jpi, jpj, jkmax, jpl, eicen_init ) 
    13601372      ! 
    13611373   END SUBROUTINE lim_itd_me_ridgeshift 
     
    14481460      INTEGER ::   icells           ! number of cells with ice to zap 
    14491461 
    1450       REAL(wp), DIMENSION(jpi,jpj) ::   zmask   ! 2D workspace 
     1462      REAL(wp), POINTER, DIMENSION(:,:) ::   zmask   ! 2D workspace 
    14511463       
    14521464!!gm      REAL(wp) ::   xtmp      ! temporary variable 
    14531465      !!------------------------------------------------------------------- 
     1466 
     1467      CALL wrk_alloc( jpi, jpj, zmask ) 
    14541468 
    14551469      DO jl = 1, jpl 
     
    15461560         ! 
    15471561      END DO                 ! jl  
     1562      ! 
     1563      CALL wrk_dealloc( jpi, jpj, zmask ) 
    15481564      ! 
    15491565   END SUBROUTINE lim_itd_me_zapsmall 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90

    r2715 r3148  
    3333   USE in_out_manager   ! I/O manager 
    3434   USE lib_mpp          ! MPP library 
     35   USE wrk_nemo_2       ! work arrays 
    3536 
    3637   IMPLICIT NONE 
    3738   PRIVATE 
    3839 
    39    PUBLIC   lim_itd_th        ! called by ice_stp 
     40   PUBLIC   lim_itd_th         ! called by ice_stp 
    4041   PUBLIC   lim_itd_th_rem 
    4142   PUBLIC   lim_itd_th_reb 
     
    176177      CHARACTER (len = 15) :: fieldid 
    177178 
    178       INTEGER , DIMENSION(jpi,jpj,jpl-1) ::   zdonor   ! donor category index 
    179  
    180       REAL(wp), DIMENSION(jpi,jpj,jpl) :: & 
    181          zdhice           ,  &  ! ice thickness increment 
    182          g0               ,  &  ! coefficients for fitting the line of the ITD 
    183          g1               ,  &  ! coefficients for fitting the line of the ITD 
    184          hL               ,  &  ! left boundary for the ITD for each thickness 
    185          hR               ,  &  ! left boundary for the ITD for each thickness 
    186          zht_i_o          ,  &  ! old ice thickness 
    187          dummy_es 
    188  
    189       REAL(wp), DIMENSION(jpi,jpj,jpl-1) ::   zdaice, zdvice   ! local increment of ice area and volume 
    190  
    191       REAL(wp), DIMENSION(jpi,jpj,0:jpl) ::   zhbnew           ! new boundaries of ice categories 
    192  
    193  
    194       REAL, DIMENSION(1:(jpi+1)*(jpj+1)) ::   zvetamin, zvetamax     ! maximum values for etas 
    195  
    196       INTEGER, DIMENSION(1:(jpi+1)*(jpj+1)) ::   nind_i, nind_j  ! compressed indices for i/j directions 
    197  
    198       INTEGER ::   nbrem             ! number of cells with ice to transfer 
    199  
    200       LOGICAL, DIMENSION(jpi,jpj) ::   zremap_flag             ! compute remapping or not ???? 
    201  
    202       REAL(wp)  ::   zslope                 ! used to compute local thermodynamic "speeds" 
    203  
    204       REAL(wp), DIMENSION(jpi,jpj) ::   zhb0, zhb1             ! category boundaries for thinnes categories 
    205       REAL(wp), DIMENSION(jpi,jpj) ::   vt_i_init, vt_i_final   !  ice volume summed over categories 
    206       REAL(wp), DIMENSION(jpi,jpj) ::   vt_s_init, vt_s_final   !  snow volume summed over categories 
    207       REAL(wp), DIMENSION(jpi,jpj) ::   et_i_init, et_i_final   !  ice energy summed over categories 
    208       REAL(wp), DIMENSION(jpi,jpj) ::   et_s_init, et_s_final   !  snow energy summed over categories 
    209       !!------------------------------------------------------------------ 
     179      INTEGER , POINTER, DIMENSION(:,:,:) ::   zdonor   ! donor category index 
     180 
     181      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdhice      ! ice thickness increment 
     182      REAL(wp), POINTER, DIMENSION(:,:,:) ::   g0          ! coefficients for fitting the line of the ITD 
     183      REAL(wp), POINTER, DIMENSION(:,:,:) ::   g1          ! coefficients for fitting the line of the ITD 
     184      REAL(wp), POINTER, DIMENSION(:,:,:) ::   hL          ! left boundary for the ITD for each thickness 
     185      REAL(wp), POINTER, DIMENSION(:,:,:) ::   hR          ! left boundary for the ITD for each thickness 
     186      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zht_i_o     ! old ice thickness 
     187      REAL(wp), POINTER, DIMENSION(:,:,:) ::   dummy_es 
     188      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdaice, zdvice          ! local increment of ice area and volume 
     189      REAL(wp), POINTER, DIMENSION(:)     ::   zvetamin, zvetamax      ! maximum values for etas 
     190      INTEGER , POINTER, DIMENSION(:)     ::   nind_i, nind_j          ! compressed indices for i/j directions 
     191      INTEGER                             ::   nbrem                   ! number of cells with ice to transfer 
     192      REAL(wp)                            ::   zslope                  ! used to compute local thermodynamic "speeds" 
     193      REAL(wp), POINTER, DIMENSION(:,:)   ::   zhb0, zhb1              ! category boundaries for thinnes categories 
     194      REAL(wp), POINTER, DIMENSION(:,:)   ::   vt_i_init, vt_i_final   !  ice volume summed over categories 
     195      REAL(wp), POINTER, DIMENSION(:,:)   ::   vt_s_init, vt_s_final   !  snow volume summed over categories 
     196      REAL(wp), POINTER, DIMENSION(:,:)   ::   et_i_init, et_i_final   !  ice energy summed over categories 
     197      REAL(wp), POINTER, DIMENSION(:,:)   ::   et_s_init, et_s_final   !  snow energy summed over categories 
     198      INTEGER , POINTER, DIMENSION(:,:)   ::   zremap_flag      ! compute remapping or not ???? 
     199      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zhbnew           ! new boundaries of ice categories 
     200      !!------------------------------------------------------------------ 
     201 
     202      CALL wrk_alloc( jpi,jpj, zremap_flag )    ! integer 
     203      CALL wrk_alloc( jpi,jpj,jpl-1, zdonor )   ! integer 
     204      CALL wrk_alloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_o, dummy_es ) 
     205      CALL wrk_alloc( jpi,jpj,jpl-1, zdaice, zdvice )    
     206      CALL wrk_alloc( jpi,jpj,jpl+1, zhbnew, kkstart = 0 )    
     207      CALL wrk_alloc( (jpi+1)*(jpj+1), zvetamin, zvetamax )    
     208      CALL wrk_alloc( (jpi+1)*(jpj+1), nind_i, nind_j )   ! integer  
     209      CALL wrk_alloc( jpi,jpj, zhb0,zhb1,vt_i_init,vt_i_final,vt_s_init,vt_s_final,et_i_init,et_i_final,et_s_init,et_s_final ) 
    210210 
    211211      zhimin   = 0.1      !minimum ice thickness tolerated by the model 
     
    266266               nind_i(nbrem) = ji 
    267267               nind_j(nbrem) = jj 
    268                zremap_flag(ji,jj) = .true. 
     268               zremap_flag(ji,jj) = 1 
    269269            ELSE 
    270                zremap_flag(ji,jj) = .false. 
     270               zremap_flag(ji,jj) = 0 
    271271            ENDIF 
    272272         END DO !ji 
     
    312312               ( ht_i(zji,zjj,jl).GE. zhbnew(zji,zjj,jl) ) & 
    313313               ) THEN 
    314                zremap_flag(zji,zjj) = .false. 
     314               zremap_flag(zji,zjj) = 0 
    315315            ELSEIF ( ( a_i(zji,zjj,jl+1) .GT. epsi10 ) .AND. & 
    316316               ( ht_i(zji,zjj,jl+1).LE. zhbnew(zji,zjj,jl) ) & 
    317317               ) THEN 
    318                zremap_flag(zji,zjj) = .false. 
     318               zremap_flag(zji,zjj) = 0 
    319319            ENDIF 
    320320 
     
    322322            ! jl, ji 
    323323            IF (zhbnew(zji,zjj,jl).gt.hi_max(jl+1)) THEN 
    324                zremap_flag(zji,zjj) = .false. 
     324               zremap_flag(zji,zjj) = 0 
    325325            ENDIF 
    326326            ! jl, ji 
    327327            IF (zhbnew(zji,zjj,jl).lt.hi_max(jl-1)) THEN 
    328                zremap_flag(zji,zjj) = .false. 
     328               zremap_flag(zji,zjj) = 0 
    329329            ENDIF 
    330330            ! jl, ji 
     
    339339      DO jj = 1, jpj 
    340340         DO ji = 1, jpi 
    341             IF ( zremap_flag(ji,jj) ) THEN 
     341            IF ( zremap_flag(ji,jj) == 1 ) THEN 
    342342               nbrem         = nbrem + 1 
    343343               nind_i(nbrem) = ji 
     
    525525      ENDIF 
    526526 
     527      CALL wrk_dealloc( jpi,jpj, zremap_flag )    ! integer 
     528      CALL wrk_dealloc( jpi,jpj,jpl-1, zdonor )   ! integer 
     529      CALL wrk_dealloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_o, dummy_es ) 
     530      CALL wrk_dealloc( jpi,jpj,jpl-1, zdaice, zdvice )    
     531      CALL wrk_dealloc( jpi,jpj,jpl+1, zhbnew, kkstart = 0 )    
     532      CALL wrk_dealloc( (jpi+1)*(jpj+1), zvetamin, zvetamax )    
     533      CALL wrk_dealloc( (jpi+1)*(jpj+1), nind_i, nind_j )   ! integer  
     534      CALL wrk_dealloc( jpi,jpj, zhb0,zhb1,vt_i_init,vt_i_final,vt_s_init,vt_s_final,et_i_init,et_i_final,et_s_init,et_s_final ) 
     535 
    527536   END SUBROUTINE lim_itd_th_rem 
    528537 
     
    546555      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   hL           ! min value of range over which g(h) > 0 
    547556      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   hR           ! max value of range over which g(h) > 0 
    548       LOGICAL , DIMENSION(jpi,jpj), INTENT(in   ) ::   zremap_flag  ! 
     557      INTEGER , DIMENSION(jpi,jpj), INTENT(in   ) ::   zremap_flag  ! 
    549558      ! 
    550559      INTEGER ::   ji,jj           ! horizontal indices 
     
    561570         DO ji = 1, jpi 
    562571            ! 
    563             IF( zremap_flag(ji,jj) .AND. a_i(ji,jj,num_cat) > zacrith   & 
    564                &                   .AND. hice(ji,jj)        > 0._wp     ) THEN 
     572            IF( zremap_flag(ji,jj) == 1 .AND. a_i(ji,jj,num_cat) > zacrith   & 
     573               &                        .AND. hice(ji,jj)        > 0._wp     ) THEN 
    565574 
    566575               ! Initialize hL and hR 
     
    608617      !! ** Method  : 
    609618      !!------------------------------------------------------------------ 
    610       INTEGER , INTENT(in   ) ::   klbnd   ! Start thickness category index point 
    611       INTEGER , INTENT(in   ) ::   kubnd   ! End point on which the  the computation is applied 
    612  
     619      INTEGER                           , INTENT(in   ) ::   klbnd    ! Start thickness category index point 
     620      INTEGER                           , INTENT(in   ) ::   kubnd    ! End point on which the  the computation is applied 
    613621      INTEGER , DIMENSION(jpi,jpj,jpl-1), INTENT(in   ) ::   zdonor   ! donor category index 
    614  
    615622      REAL(wp), DIMENSION(jpi,jpj,jpl-1), INTENT(inout) ::   zdaice   ! ice area transferred across boundary 
    616623      REAL(wp), DIMENSION(jpi,jpj,jpl-1), INTENT(inout) ::   zdvice   ! ice volume transferred across boundary 
     
    619626      INTEGER ::   zji, zjj          ! indices when changing from 2D-1D is done 
    620627 
    621       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zaTsfn 
    622  
    623       REAL(wp), DIMENSION(jpi,jpj) ::   zworka            ! temporary array used here 
     628      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zaTsfn 
     629      REAL(wp), POINTER, DIMENSION(:,:)   ::   zworka            ! temporary array used here 
    624630 
    625631      REAL(wp) ::   zdvsnow, zdesnow   ! snow volume and energy transferred 
     
    631637      REAL(wp) ::   zindb              ! ice or not 
    632638 
    633       INTEGER, DIMENSION(1:(jpi+1)*(jpj+1)) ::   nind_i, nind_j   ! compressed indices for i/j directions 
     639      INTEGER, POINTER, DIMENSION(:) ::   nind_i, nind_j   ! compressed indices for i/j directions 
    634640 
    635641      INTEGER ::   nbrem             ! number of cells with ice to transfer 
     
    640646      LOGICAL ::   zdvice_greater_vicen    ! true if dvice > vicen 
    641647      !!------------------------------------------------------------------ 
     648 
     649      CALL wrk_alloc( jpi,jpj,jpl, zaTsfn ) 
     650      CALL wrk_alloc( jpi,jpj, zworka ) 
     651      CALL wrk_alloc( (jpi+1)*(jpj+1), nind_i, nind_j )   ! integer 
    642652 
    643653      !---------------------------------------------------------------------------------------------- 
     
    858868      END DO                    ! jl 
    859869      ! 
     870      CALL wrk_dealloc( jpi,jpj,jpl, zaTsfn ) 
     871      CALL wrk_dealloc( jpi,jpj, zworka ) 
     872      CALL wrk_dealloc( (jpi+1)*(jpj+1), nind_i, nind_j )   ! integer 
     873      ! 
    860874   END SUBROUTINE lim_itd_shiftice 
    861875    
     
    877891      CHARACTER (len = 15) :: fieldid 
    878892 
    879       INTEGER , DIMENSION(jpi,jpj,jpl) ::   zdonor           ! donor category index 
    880       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zdaice, zdvice   ! ice area and volume transferred 
    881  
    882       REAL (wp), DIMENSION(jpi,jpj) ::   vt_i_init, vt_i_final   ! ice volume summed over categories 
    883       REAL (wp), DIMENSION(jpi,jpj) ::   vt_s_init, vt_s_final   ! snow volume summed over categories 
    884       !!------------------------------------------------------------------ 
     893      INTEGER , POINTER, DIMENSION(:,:,:) ::   zdonor           ! donor category index 
     894      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdaice, zdvice   ! ice area and volume transferred 
     895 
     896      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_i_init, vt_i_final   ! ice volume summed over categories 
     897      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_s_init, vt_s_final   ! snow volume summed over categories 
     898      !!------------------------------------------------------------------ 
     899       
     900      CALL wrk_alloc( jpi,jpj,jpl, zdonor )   ! interger 
     901      CALL wrk_alloc( jpi,jpj,jpl, zdaice, zdvice ) 
     902      CALL wrk_alloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final ) 
    885903      !      
    886904      IF( con_i ) THEN                 ! conservation check 
     
    10151033      ENDIF 
    10161034      ! 
     1035      CALL wrk_dealloc( jpi,jpj,jpl, zdonor )   ! interger 
     1036      CALL wrk_dealloc( jpi,jpj,jpl, zdaice, zdvice ) 
     1037      CALL wrk_dealloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final ) 
     1038 
    10171039   END SUBROUTINE lim_itd_th_reb 
    10181040 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r2717 r3148  
    2424   USE lbclnk           ! Lateral Boundary Condition / MPP link 
    2525   USE lib_mpp          ! MPP library 
     26   USE wrk_nemo_2       ! work arrays 
    2627   USE in_out_manager   ! I/O manager 
    2728   USE prtctl           ! Print control 
     
    3940 
    4041   PUBLIC   lim_rhg        ! routine called by lim_dyn (or lim_dyn_2) 
    41    PUBLIC   lim_rhg_alloc  ! routine called by nemo_alloc in nemogcm.F90 
    4242 
    4343   REAL(wp) ::   rzero   = 0._wp   ! constant values 
    4444   REAL(wp) ::   rone    = 1._wp   ! constant values 
    4545       
    46    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zpresh           ! temporary array for ice strength 
    47    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zpreshc          ! Ice strength on grid cell corners (zpreshc) 
    48    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zfrld1, zfrld2   ! lead fraction on U/V points                                     
    49    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zmass1, zmass2   ! ice/snow mass on U/V points                                     
    50    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zcorl1, zcorl2   ! coriolis parameter on U/V points 
    51    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   za1ct , za2ct    ! temporary arrays 
    52    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zc1              ! ice mass 
    53    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zusw             ! temporary weight for ice strength computation 
    54    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   u_oce1, v_oce1   ! ocean u/v component on U points                            
    55    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   u_oce2, v_oce2   ! ocean u/v component on V points 
    56    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   u_ice2, v_ice1   ! ice u/v component on V/U point 
    57    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zf1   , zf2      ! arrays for internal stresses 
    58  
    59    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zdd   , zdt      ! Divergence and tension at centre of grid cells 
    60    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zds              ! Shear on northeast corner of grid cells 
    61    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   deltat, deltac   ! Delta at centre and corners of grid cells 
    62    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zs1   , zs2      ! Diagonal stress tensor components zs1 and zs2  
    63    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zs12             ! Non-diagonal stress tensor component zs12 
    64    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zu_ice, zv_ice, zresr   ! Local error on velocity 
    65  
    6646   !! * Substitutions 
    6747#  include "vectopt_loop_substitute.h90" 
     
    7252   !!---------------------------------------------------------------------- 
    7353CONTAINS 
    74  
    75    FUNCTION lim_rhg_alloc() 
    76       !!------------------------------------------------------------------- 
    77       !!                 ***  FUNCTION lim_rhg_alloc  *** 
    78       !!------------------------------------------------------------------- 
    79       INTEGER :: lim_rhg_alloc   ! return value 
    80       INTEGER :: ierr(2)         ! local integer 
    81       !!------------------------------------------------------------------- 
    82       ! 
    83       ierr(:) = 0 
    84       ! 
    85       ALLOCATE( zpresh (jpi,jpj) , zfrld1(jpi,jpj), zmass1(jpi,jpj), zcorl1(jpi,jpj), za1ct(jpi,jpj) ,      & 
    86          &      zpreshc(jpi,jpj) , zfrld2(jpi,jpj), zmass2(jpi,jpj), zcorl2(jpi,jpj), za2ct(jpi,jpj) ,      & 
    87          &      zc1    (jpi,jpj) , u_oce1(jpi,jpj), u_oce2(jpi,jpj), u_ice2(jpi,jpj),                       & 
    88          &      zusw   (jpi,jpj) , v_oce1(jpi,jpj), v_oce2(jpi,jpj), v_ice1(jpi,jpj)                 ,  STAT=ierr(1) ) 
    89          ! 
    90       ALLOCATE( zf1(jpi,jpj) , deltat(jpi,jpj) , zu_ice(jpi,jpj) ,                     & 
    91          &      zf2(jpi,jpj) , deltac(jpi,jpj) , zv_ice(jpi,jpj) ,                     & 
    92          &      zdd(jpi,jpj) , zdt   (jpi,jpj) , zds   (jpi,jpj) ,                     & 
    93          &      zs1(jpi,jpj) , zs2   (jpi,jpj) , zs12  (jpi,jpj) , zresr(jpi,jpj), STAT=ierr(2) ) 
    94          ! 
    95       lim_rhg_alloc = MAXVAL(ierr) 
    96       ! 
    97    END FUNCTION lim_rhg_alloc 
    98  
    9954 
    10055   SUBROUTINE lim_rhg( k_j1, k_jpj ) 
     
    169124      REAL(wp) ::   zindb         ! ice (1) or not (0)       
    170125      REAL(wp) ::   zdummy        ! dummy argument 
     126 
     127      REAL(wp), POINTER, DIMENSION(:,:) ::   zpresh           ! temporary array for ice strength 
     128      REAL(wp), POINTER, DIMENSION(:,:) ::   zpreshc          ! Ice strength on grid cell corners (zpreshc) 
     129      REAL(wp), POINTER, DIMENSION(:,:) ::   zfrld1, zfrld2   ! lead fraction on U/V points 
     130      REAL(wp), POINTER, DIMENSION(:,:) ::   zmass1, zmass2   ! ice/snow mass on U/V points 
     131      REAL(wp), POINTER, DIMENSION(:,:) ::   zcorl1, zcorl2   ! coriolis parameter on U/V points 
     132      REAL(wp), POINTER, DIMENSION(:,:) ::   za1ct , za2ct    ! temporary arrays 
     133      REAL(wp), POINTER, DIMENSION(:,:) ::   zc1              ! ice mass 
     134      REAL(wp), POINTER, DIMENSION(:,:) ::   zusw             ! temporary weight for ice strength computation 
     135      REAL(wp), POINTER, DIMENSION(:,:) ::   u_oce1, v_oce1   ! ocean u/v component on U points                            
     136      REAL(wp), POINTER, DIMENSION(:,:) ::   u_oce2, v_oce2   ! ocean u/v component on V points 
     137      REAL(wp), POINTER, DIMENSION(:,:) ::   u_ice2, v_ice1   ! ice u/v component on V/U point 
     138      REAL(wp), POINTER, DIMENSION(:,:) ::   zf1   , zf2      ! arrays for internal stresses 
     139       
     140      REAL(wp), POINTER, DIMENSION(:,:) ::   zdd   , zdt      ! Divergence and tension at centre of grid cells 
     141      REAL(wp), POINTER, DIMENSION(:,:) ::   zds              ! Shear on northeast corner of grid cells 
     142      REAL(wp), POINTER, DIMENSION(:,:) ::   deltat, deltac   ! Delta at centre and corners of grid cells 
     143      REAL(wp), POINTER, DIMENSION(:,:) ::   zs1   , zs2      ! Diagonal stress tensor components zs1 and zs2  
     144      REAL(wp), POINTER, DIMENSION(:,:) ::   zs12             ! Non-diagonal stress tensor component zs12 
     145      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_ice, zv_ice, zresr   ! Local error on velocity 
     146       
    171147      !!------------------------------------------------------------------- 
     148 
     149      CALL wrk_alloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct ) 
     150      CALL wrk_alloc( jpi,jpj, zc1   , u_oce1, u_oce2, u_ice2, zusw  , v_oce1 , v_oce2, v_ice1                ) 
     151      CALL wrk_alloc( jpi,jpj, zf1   , deltat, zu_ice, zf2   , deltac, zv_ice , zdd   , zdt    , zds          ) 
     152      CALL wrk_alloc( jpi,jpj, zdd   , zdt   , zds   , zs1   , zs2   , zs12   , zresr                         ) 
     153 
    172154#if  defined key_lim2 && ! defined key_lim2_vp 
    173155# if defined key_agrif 
     
    761743      ENDIF 
    762744      ! 
     745      CALL wrk_dealloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct ) 
     746      CALL wrk_dealloc( jpi,jpj, zc1   , u_oce1, u_oce2, u_ice2, zusw  , v_oce1 , v_oce2, v_ice1                ) 
     747      CALL wrk_dealloc( jpi,jpj, zf1   , deltat, zu_ice, zf2   , deltac, zv_ice , zdd   , zdt    , zds          ) 
     748      CALL wrk_dealloc( jpi,jpj, zdd   , zdt   , zds   , zs1   , zs2   , zs12   , zresr                         ) 
     749 
    763750   END SUBROUTINE lim_rhg 
    764751 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90

    r2715 r3148  
    2424   USE iom              ! I/O library 
    2525   USE lib_mpp          ! MPP library 
     26   USE wrk_nemo_2       ! work arrays 
    2627 
    2728   IMPLICIT NONE 
     
    9293      !! ** purpose  :   output of sea-ice variable in a netcdf file 
    9394      !!---------------------------------------------------------------------- 
    94       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    95       USE wrk_nemo, ONLY:   z2d  => wrk_2d_1   ! 2D workspace 
    96       ! 
    9795      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    9896      !! 
     
    10199      CHARACTER(len=15) ::   znam 
    102100      CHARACTER(len=1)  ::   zchar, zchar1 
    103       !!---------------------------------------------------------------------- 
    104  
    105       IF( wrk_in_use(2, 1) ) THEN 
    106          CALL ctl_stop( 'lim_rst_write : requested workspace arrays unavailable' )   ;   RETURN 
    107       END IF 
     101      REAL(wp), POINTER, DIMENSION(:,:) :: z2d 
     102      !!---------------------------------------------------------------------- 
     103 
     104      CALL wrk_alloc( jpi, jpj, z2d ) 
    108105 
    109106      iter = kt + nn_fsbc - 1   ! ice restarts are written at kt == nitrst - nn_fsbc + 1 
     
    295292      ENDIF 
    296293      ! 
    297       IF( wrk_not_released(2, 1) )   CALL ctl_stop( 'lim_rst_write : failed to release workspace arrays' ) 
     294      CALL wrk_dealloc( jpi, jpj, z2d ) 
    298295      ! 
    299296   END SUBROUTINE lim_rst_write 
     
    306303      !! ** purpose  :   read of sea-ice variable restart in a netcdf file 
    307304      !!---------------------------------------------------------------------- 
    308       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    309       USE wrk_nemo, ONLY:   z2d  => wrk_2d_1   ! 2D workspace 
    310       ! 
    311305      INTEGER :: ji, jj, jk, jl, indx 
    312306      REAL(wp) ::   zfice, ziter 
    313307      REAL(wp) ::   zs_inf, z_slope_s, zsmax, zsmin, zalpha, zindb   ! local scalars used for the salinity profile 
    314       REAL(wp), DIMENSION(nlay_i)  ::   zs_zero  
     308      REAL(wp), POINTER, DIMENSION(:)  ::   zs_zero  
     309      REAL(wp), POINTER, DIMENSION(:,:) ::   z2d 
    315310      CHARACTER(len=15) ::   znam 
    316311      CHARACTER(len=1)  ::   zchar, zchar1 
     
    319314      !!---------------------------------------------------------------------- 
    320315 
    321       IF( wrk_in_use(2, 1) ) THEN 
    322          CALL ctl_stop( 'lim_rst_read : requested workspace arrays unavailable.' )   ;   RETURN 
    323       ENDIF 
     316      CALL wrk_alloc( nlay_i, zs_zero ) 
     317      CALL wrk_alloc( jpi, jpj, z2d ) 
    324318 
    325319      IF(lwp) THEN 
     
    570564      CALL iom_close( numrir ) 
    571565      ! 
    572       IF( wrk_not_released(2, 1) ) THEN 
    573          CALL ctl_stop( 'lim_rst_read : failed to release workspace arrays.' ) 
    574       END IF 
     566      CALL wrk_dealloc( nlay_i, zs_zero ) 
     567      CALL wrk_dealloc( jpi, jpj, z2d ) 
    575568      ! 
    576569   END SUBROUTINE lim_rst_read 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r2715 r3148  
    3131   USE in_out_manager   ! I/O manager 
    3232   USE lib_mpp          ! MPP library 
     33   USE wrk_nemo_2       ! work arrays 
    3334   USE prtctl           ! Print control 
    3435   USE cpl_oasis3, ONLY : lk_cpl 
     
    9394      !!              Tartinville et al. 2001 Ocean Modelling, 3, 95-108. 
    9495      !!--------------------------------------------------------------------- 
    95       USE wrk_nemo, ONLY:   wrk_not_released, wrk_in_use 
    96       USE wrk_nemo, ONLY:   zfcm1 => wrk_2d_1 , zfcm2 => wrk_2d_2   ! 2D workspace 
    97       USE wrk_nemo, ONLY:   wrk_3d_4, wrk_3d_5                      ! 3D workspace 
    98       ! 
    9996      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    10097      ! 
     
    104101      INTEGER  ::   iflt, ial, iadv, ifral, ifrdv 
    105102      REAL(wp) ::   zinda, zfons, zpme              ! local scalars 
    106       ! 
     103      REAL(wp), POINTER, DIMENSION(:,:) ::   zfcm1 , zfcm2    ! solar/non solar heat fluxes 
    107104      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb, zalbp   ! 2D/3D workspace 
    108105      !!--------------------------------------------------------------------- 
    109  
    110       IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 4,5) ) THEN 
    111          CALL ctl_stop( 'lim_sbc_flx : requested workspace arrays unavailable' )   ;   RETURN 
    112       ENDIF 
    113       ! Set-up pointers to sub-arrays of 3d workspaces 
    114       zalb  => wrk_3d_4(:,:,1:jpl) 
    115       zalbp => wrk_3d_5(:,:,1:jpl) 
     106       
     107      CALL wrk_alloc( jpi, jpj, zfcm1 , zfcm2 ) 
     108      IF( lk_cpl )   CALL wrk_alloc( jpi, jpj, jpl, zalb, zalbp ) 
    116109 
    117110      !------------------------------------------! 
     
    297290      ENDIF 
    298291      ! 
    299       IF( wrk_not_released(2, 1,2)    .OR.   & 
    300           wrk_not_released(3, 4,5)  )        & 
    301           CALL ctl_stop( 'lim_sbc_flx: failed to release workspace arrays' ) 
     292      CALL wrk_dealloc( jpi, jpj, zfcm1 , zfcm2 ) 
     293      IF( lk_cpl )   CALL wrk_dealloc( jpi, jpj, jpl, zalb, zalbp ) 
    302294      !  
    303295   END SUBROUTINE lim_sbc_flx 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r2715 r3148  
    3636   USE lbclnk          ! lateral boundary condition - MPP links 
    3737   USE lib_mpp         ! MPP library 
     38   USE wrk_nemo_2      ! work arrays 
    3839   USE in_out_manager  ! I/O manager 
    3940   USE prtctl          ! Print control 
     
    8182      !! ** References : H. Goosse et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90 
    8283      !!--------------------------------------------------------------------- 
    83       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    84       USE wrk_nemo, ONLY:   zqlbsbq => wrk_2d_1   ! 2D workspace 
    85       ! 
    8684      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    8785      !! 
     
    9290      REAL(wp) ::   zinda, zindb, zthsnice, zfric_u     ! local scalar 
    9391      REAL(wp) ::   zfntlat, zpareff, zareamin, zcoef   !    -         - 
     92      REAL(wp), POINTER, DIMENSION(:,:) ::   zqlbsbq   ! link with lead energy budget qldif 
    9493      !!------------------------------------------------------------------- 
    9594 
    96       IF( wrk_in_use(2, 1) ) THEN 
    97          CALL ctl_stop( 'lim_thd : requested workspace arrays unavailable' )   ;   RETURN 
    98       ENDIF 
     95      CALL wrk_alloc( jpi, jpj, zqlbsbq ) 
    9996    
    10097      !------------------------------------------------------------------------------! 
     
    458455      ENDIF 
    459456      ! 
    460       IF( wrk_not_released(2, 1) )   CALL ctl_stop( 'lim_thd: failed to release workspace arrays' ) 
     457      CALL wrk_dealloc( jpi, jpj, zqlbsbq ) 
    461458      ! 
    462459   END SUBROUTINE lim_thd 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r2777 r3148  
    2121   USE par_ice          ! LIM parameters 
    2222   USE thd_ice          ! LIM thermodynamics 
    23    USE wrk_nemo         ! workspace manager 
    2423   USE in_out_manager   ! I/O manager 
    2524   USE lib_mpp          ! MPP library 
     25   USE wrk_nemo_2       ! work arrays 
    2626 
    2727   IMPLICIT NONE 
     
    7676      INTEGER  ::   i_ice_switch   ! ice thickness above a certain treshold or not 
    7777      INTEGER  ::   iter 
    78       INTEGER  ::   num_iter_max, numce_dh 
    79  
    80       REAL(wp) ::   meance_dh 
     78 
    8179      REAL(wp) ::   zzfmass_i, zihgnew                     ! local scalar 
    8280      REAL(wp) ::   zzfmass_s, zhsnew, ztmelts             ! local scalar 
     
    9391      REAL(wp) ::   ztform       ! bottom formation temperature 
    9492      ! 
    95       REAL(wp), POINTER, DIMENSION(:) ::   zh_i, ztfs  , zqfont_su, zqprec  , zhgnew 
    96       REAL(wp), POINTER, DIMENSION(:) ::   zh_s, zhsold, zqfont_bo, z_f_surf, zfmass_i 
    97       REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_mel, zdh_s_sub  , zfdt_init , zqt_i, zqt_dummy, zdq_i 
    98       REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_pre, zfsalt_melt, zfdt_final, zqt_s, zfbase   , zinnermelt 
    99       ! 
    100       REAL(wp), DIMENSION(jpij,jkmax) ::   zdeltah 
    101       REAL(wp), DIMENSION(jpij,jkmax) ::   zqt_i_lay   ! total ice heat content 
     93      REAL(wp), POINTER, DIMENSION(:) ::   zh_i        ! ice layer thickness 
     94      REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
     95      REAL(wp), POINTER, DIMENSION(:) ::   ztfs        ! melting point 
     96      REAL(wp), POINTER, DIMENSION(:) ::   zhsold      ! old snow thickness 
     97      REAL(wp), POINTER, DIMENSION(:) ::   zqprec      ! energy of fallen snow 
     98      REAL(wp), POINTER, DIMENSION(:) ::   zqfont_su   ! incoming, remaining surface energy 
     99      REAL(wp), POINTER, DIMENSION(:) ::   zqfont_bo   ! incoming, bottom energy 
     100      REAL(wp), POINTER, DIMENSION(:) ::   z_f_surf    ! surface heat for ablation 
     101      REAL(wp), POINTER, DIMENSION(:) ::   zhgnew      ! new ice thickness 
     102      REAL(wp), POINTER, DIMENSION(:) ::   zfmass_i    !  
     103 
     104      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_mel     ! snow melt  
     105      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_pre     ! snow precipitation  
     106      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_sub     ! snow sublimation 
     107      REAL(wp), POINTER, DIMENSION(:) ::   zfsalt_melt   ! salt flux due to ice melt 
     108 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   zdeltah 
     110 
     111      ! Pathological cases 
     112      REAL(wp), POINTER, DIMENSION(:) ::   zfdt_init   ! total incoming heat for ice melt 
     113      REAL(wp), POINTER, DIMENSION(:) ::   zfdt_final  ! total remaing heat for ice melt 
     114      REAL(wp), POINTER, DIMENSION(:) ::   zqt_i       ! total ice heat content 
     115      REAL(wp), POINTER, DIMENSION(:) ::   zqt_s       ! total snow heat content 
     116      REAL(wp), POINTER, DIMENSION(:) ::   zqt_dummy   ! dummy heat content 
     117 
     118      REAL(wp), POINTER, DIMENSION(:,:) ::   zqt_i_lay   ! total ice heat content 
     119 
     120      ! Heat conservation  
     121      INTEGER  ::   num_iter_max, numce_dh 
     122      REAL(wp) ::   meance_dh 
     123      REAL(wp), POINTER, DIMENSION(:) ::   zinnermelt 
     124      REAL(wp), POINTER, DIMENSION(:) ::   zfbase, zdq_i 
    102125      !!------------------------------------------------------------------ 
    103126 
    104       IF( wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) ) THEN 
    105          CALL ctl_stop('lim_thd_dh: requestead workspace arrays unavailable')   ;   RETURN 
    106       ENDIF 
    107       ! Set-up pointers to sub-arrays of workspace arrays 
    108       zh_i        => wrk_1d_1 (1:jpij)   ! ice layer thickness 
    109       zh_s        => wrk_1d_2 (1:jpij)   ! snow layer thickness 
    110       ztfs        => wrk_1d_3 (1:jpij)   ! melting point 
    111       zhsold      => wrk_1d_4 (1:jpij)   ! old snow thickness 
    112       zqprec      => wrk_1d_5 (1:jpij)   ! energy of fallen snow 
    113       zqfont_su   => wrk_1d_6 (1:jpij)   ! incoming, remaining surface energy 
    114       zqfont_bo   => wrk_1d_7 (1:jpij)   ! incoming, bottom energy 
    115       z_f_surf    => wrk_1d_8 (1:jpij)   ! surface heat for ablation 
    116       zhgnew      => wrk_1d_9 (1:jpij)   ! new ice thickness 
    117       zfmass_i    => wrk_1d_10(1:jpij)   !  
    118       ! 
    119       zdh_s_mel   => wrk_1d_11(1:jpij)   ! snow melt  
    120       zdh_s_pre   => wrk_1d_12(1:jpij)   ! snow precipitation  
    121       zdh_s_sub   => wrk_1d_13(1:jpij)   ! snow sublimation 
    122       zfsalt_melt => wrk_1d_14(1:jpij)   ! salt flux due to ice melt 
    123       ! 
    124       !                              ! Pathological cases 
    125       zfdt_init   => wrk_1d_15(1:jpij)   ! total incoming heat for ice melt 
    126       zfdt_final  => wrk_1d_16(1:jpij)   ! total remaing heat for ice melt 
    127       zqt_i       => wrk_1d_17(1:jpij)   ! total ice heat content 
    128       zqt_s       => wrk_1d_18(1:jpij)   ! total snow heat content 
    129       zqt_dummy   => wrk_1d_19(1:jpij)   ! dummy heat content 
    130             
    131       zfbase      => wrk_1d_20(1:jpij)         
    132       zdq_i       => wrk_1d_21(1:jpij)  
    133       zinnermelt  => wrk_1d_22(1:jpij)  
     127      CALL wrk_alloc( jpij, zh_i, zh_s, ztfs, zhsold, zqprec, zqfont_su, zqfont_bo, z_f_surf, zhgnew, zfmass_i ) 
     128      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zfsalt_melt, zfdt_init, zfdt_final, zqt_i, zqt_s, zqt_dummy ) 
     129      CALL wrk_alloc( jpij, zinnermelt, zfbase, zdq_i ) 
     130      CALL wrk_alloc( jpij, jkmax, zdeltah, zqt_i_lay ) 
    134131 
    135132      zfsalt_melt(:)  = 0._wp 
     
    699696      END DO !ji 
    700697      ! 
    701       IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) )   & 
    702           CALL ctl_stop('lim_thd_dh : failed to release workspace arrays') 
     698      CALL wrk_dealloc( jpij, zh_i, zh_s, ztfs, zhsold, zqprec, zqfont_su, zqfont_bo, z_f_surf, zhgnew, zfmass_i ) 
     699      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zfsalt_melt, zfdt_init, zfdt_final, zqt_i, zqt_s, zqt_dummy ) 
     700      CALL wrk_dealloc( jpij, zinnermelt, zfbase, zdq_i ) 
     701      CALL wrk_dealloc( jpij, jkmax, zdeltah, zqt_i_lay ) 
    703702      ! 
    704703   END SUBROUTINE lim_thd_dh 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r2777 r3148  
    2222   USE in_out_manager   ! I/O manager 
    2323   USE lib_mpp          ! MPP library 
     24   USE wrk_nemo_2       ! work arrays 
    2425 
    2526   IMPLICIT NONE 
     
    9091      !!           (04-2007) Energy conservation tested by M. Vancoppenolle 
    9192      !!------------------------------------------------------------------ 
    92       INTEGER , INTENT (in) ::  & 
    93          kideb ,  &  ! Start point on which the  the computation is applied 
    94          kiut  ,  &  ! End point on which the  the computation is applied 
    95          jl          ! Category number 
     93      INTEGER , INTENT (in) ::   kideb   ! Start point on which the  the computation is applied 
     94      INTEGER , INTENT (in) ::   kiut    ! End point on which the  the computation is applied 
     95      INTEGER , INTENT (in) ::   jl      ! Category number 
    9696 
    9797      !! * Local variables 
    98       INTEGER ::   ji,       &   ! spatial loop index 
    99          ii, ij, &   ! temporary dummy loop index 
    100          numeq,    &   ! current reference number of equation 
    101          layer,    &   ! vertical dummy loop index  
    102          nconv,    &   ! number of iterations in iterative procedure 
    103          minnumeqmin, maxnumeqmax 
    104  
    105       INTEGER , DIMENSION(kiut) :: & 
    106          numeqmin, &   ! reference number of top equation 
    107          numeqmax, &   ! reference number of bottom equation 
    108          isnow         ! switch for presence (1) or absence (0) of snow 
     98      INTEGER ::   ji          ! spatial loop index 
     99      INTEGER ::   ii, ij      ! temporary dummy loop index 
     100      INTEGER ::   numeq       ! current reference number of equation 
     101      INTEGER ::   layer       ! vertical dummy loop index  
     102      INTEGER ::   nconv       ! number of iterations in iterative procedure 
     103      INTEGER ::   minnumeqmin, maxnumeqmax 
     104 
     105      INTEGER , POINTER, DIMENSION(:) ::   numeqmin   ! reference number of top equation 
     106      INTEGER , POINTER, DIMENSION(:) ::   numeqmax   ! reference number of bottom equation 
     107      INTEGER , POINTER, DIMENSION(:) ::   isnow      ! switch for presence (1) or absence (0) of snow 
    109108 
    110109      !! * New local variables        
    111       REAL(wp) , DIMENSION(kiut,0:nlay_i) ::    & 
    112          ztcond_i,    & !Ice thermal conductivity 
    113          zradtr_i,    & !Radiation transmitted through the ice 
    114          zradab_i,    & !Radiation absorbed in the ice 
    115          zkappa_i       !Kappa factor in the ice 
    116  
    117       REAL(wp) , DIMENSION(kiut,0:nlay_s) ::    & 
    118          zradtr_s,    & !Radiation transmited through the snow 
    119          zradab_s,    & !Radiation absorbed in the snow 
    120          zkappa_s       !Kappa factor in the snow 
    121  
    122       REAL(wp) , DIMENSION(kiut,0:nlay_i) :: & 
    123          ztiold,      & !Old temperature in the ice 
    124          zeta_i,      & !Eta factor in the ice  
    125          ztitemp,     & !Temporary temperature in the ice to check the convergence 
    126          zspeche_i,   & !Ice specific heat 
    127          z_i            !Vertical cotes of the layers in the ice 
    128  
    129       REAL(wp) , DIMENSION(kiut,0:nlay_s) :: & 
    130          zeta_s,      & !Eta factor in the snow 
    131          ztstemp,     & !Temporary temperature in the snow to check the convergence 
    132          ztsold,      & !Temporary temperature in the snow 
    133          z_s            !Vertical cotes of the layers in the snow 
    134  
    135       REAL(wp) , DIMENSION(kiut,jkmax+2) ::    & 
    136          zindterm,    & ! Independent term 
    137          zindtbis,    & ! temporary independent term 
    138          zdiagbis 
    139  
    140       REAL(wp) , DIMENSION(kiut,jkmax+2,3) ::   ztrid   ! tridiagonal system terms 
    141  
    142       REAL(wp), DIMENSION(kiut) ::  & 
    143          ztfs     ,   & ! ice melting point 
    144          ztsuold  ,   & ! old surface temperature (before the iterative procedure ) 
    145          ztsuoldit,   & ! surface temperature at previous iteration 
    146          zh_i     ,   & !ice layer thickness 
    147          zh_s     ,   & !snow layer thickness 
    148          zfsw     ,   & !solar radiation absorbed at the surface 
    149          zf       ,   & ! surface flux function 
    150          dzf            ! derivative of the surface flux function 
    151  
    152       REAL(wp)  ::           &  ! constant values 
    153          zeps      =  1.e-10_wp,   & ! 
    154          zg1s      =  2._wp,       & !: for the tridiagonal system 
    155          zg1       =  2._wp,       & 
    156          zgamma    =  18009._wp,   & !: for specific heat 
    157          zbeta     =  0.117_wp,    & !: for thermal conductivity (could be 0.13) 
    158          zraext_s  =  1.e+8_wp,    & !: extinction coefficient of radiation in the snow 
    159          zkimin    =  0.10_wp ,    & !: minimum ice thermal conductivity 
    160          zht_smin  =  1.e-4_wp       !: minimum snow depth 
     110      REAL(wp), POINTER, DIMENSION(:,:) ::   ztcond_i   !Ice thermal conductivity 
     111      REAL(wp), POINTER, DIMENSION(:,:) ::   zradtr_i   !Radiation transmitted through the ice 
     112      REAL(wp), POINTER, DIMENSION(:,:) ::   zradab_i   !Radiation absorbed in the ice 
     113      REAL(wp), POINTER, DIMENSION(:,:) ::   zkappa_i   !Kappa factor in the ice 
     114 
     115      REAL(wp), POINTER, DIMENSION(:,:) ::   zradtr_s   !Radiation transmited through the snow 
     116      REAL(wp), POINTER, DIMENSION(:,:) ::   zradab_s   !Radiation absorbed in the snow 
     117      REAL(wp), POINTER, DIMENSION(:,:) ::   zkappa_s   !Kappa factor in the snow 
     118 
     119      REAL(wp), POINTER, DIMENSION(:,:) ::   ztiold      !Old temperature in the ice 
     120      REAL(wp), POINTER, DIMENSION(:,:) ::   zeta_i      !Eta factor in the ice  
     121      REAL(wp), POINTER, DIMENSION(:,:) ::   ztitemp     !Temporary temperature in the ice to check the convergence 
     122      REAL(wp), POINTER, DIMENSION(:,:) ::   zspeche_i   !Ice specific heat 
     123      REAL(wp), POINTER, DIMENSION(:,:) ::   z_i         !Vertical cotes of the layers in the ice 
     124 
     125      REAL(wp), POINTER, DIMENSION(:,:) ::   zeta_s      !Eta factor in the snow 
     126      REAL(wp), POINTER, DIMENSION(:,:) ::   ztstemp     !Temporary temperature in the snow to check the convergence 
     127      REAL(wp), POINTER, DIMENSION(:,:) ::   ztsold      !Temporary temperature in the snow 
     128      REAL(wp), POINTER, DIMENSION(:,:) ::   z_s         !Vertical cotes of the layers in the snow 
     129 
     130      REAL(wp), POINTER, DIMENSION(:,:)   ::   zindterm    ! Independent term 
     131      REAL(wp), POINTER, DIMENSION(:,:)   ::   zindtbis    ! temporary independent term 
     132      REAL(wp), POINTER, DIMENSION(:,:)   ::   zdiagbis 
     133      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrid       ! tridiagonal system terms 
     134 
     135      REAL(wp), POINTER, DIMENSION(:) ::   ztfs        ! ice melting point 
     136      REAL(wp), POINTER, DIMENSION(:) ::   ztsuold     ! old surface temperature (before the iterative procedure ) 
     137      REAL(wp), POINTER, DIMENSION(:) ::   ztsuoldit   ! surface temperature at previous iteration 
     138      REAL(wp), POINTER, DIMENSION(:) ::   zh_i        ! ice layer thickness 
     139      REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
     140      REAL(wp), POINTER, DIMENSION(:) ::   zfsw        ! solar radiation absorbed at the surface 
     141      REAL(wp), POINTER, DIMENSION(:) ::   zf          ! surface flux function 
     142      REAL(wp), POINTER, DIMENSION(:) ::   dzf         ! derivative of the surface flux function 
     143 
     144      REAL(wp) ::   zeps      =  1.e-10_wp    ! 
     145      REAL(wp) ::   zg1s      =  2._wp        ! for the tridiagonal system 
     146      REAL(wp) ::   zg1       =  2._wp        ! 
     147      REAL(wp) ::   zgamma    =  18009._wp    ! for specific heat 
     148      REAL(wp) ::   zbeta     =  0.117_wp     ! for thermal conductivity (could be 0.13) 
     149      REAL(wp) ::   zraext_s  =  1.e+8_wp     ! extinction coefficient of radiation in the snow 
     150      REAL(wp) ::   zkimin    =  0.10_wp      ! minimum ice thermal conductivity 
     151      REAL(wp) ::   zht_smin  =  1.e-4_wp     ! minimum snow depth 
    161152 
    162153      REAL(wp) ::   ztmelt_i    ! ice melting temperature 
    163154      REAL(wp) ::   zerritmax   ! current maximal error on temperature  
    164       REAL(wp), DIMENSION(kiut) ::   zerrit       ! current error on temperature  
    165       REAL(wp), DIMENSION(kiut) ::   zdifcase     ! case of the equation resolution (1->4) 
    166       REAL(wp), DIMENSION(kiut) ::   zftrice      ! solar radiation transmitted through the ice 
    167       REAL(wp), DIMENSION(kiut) ::   zihic, zhsu 
     155      REAL(wp), POINTER, DIMENSION(:) ::   zerrit       ! current error on temperature  
     156      REAL(wp), POINTER, DIMENSION(:) ::   zdifcase     ! case of the equation resolution (1->4) 
     157      REAL(wp), POINTER, DIMENSION(:) ::   zftrice      ! solar radiation transmitted through the ice 
     158      REAL(wp), POINTER, DIMENSION(:) ::   zihic, zhsu 
    168159      !!------------------------------------------------------------------ 
    169160      ! 
     161      CALL wrk_alloc( kiut, numeqmin, numeqmax, isnow )   ! integer 
     162      CALL wrk_alloc( kiut,nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztiold, zeta_i, ztitemp, zspeche_i, z_i, kjstart=0 ) 
     163      CALL wrk_alloc( kiut,nlay_s+1, zradtr_s, zradab_s, zkappa_s, zeta_s, ztstemp, ztsold, z_s, kjstart=0 ) 
     164      CALL wrk_alloc( kiut,jkmax+2, zindterm, zindtbis, zdiagbis ) 
     165      CALL wrk_alloc( kiut,jkmax+2,3, ztrid ) 
     166      CALL wrk_alloc( kiut, ztfs, ztsuold, ztsuoldit, zh_i, zh_s, zfsw, zf, dzf ) 
     167      CALL wrk_alloc( kiut, zerrit, zdifcase, zftrice, zihic, zhsu ) 
     168 
    170169      !------------------------------------------------------------------------------! 
    171170      ! 1) Initialization                                                            ! 
     
    773772      ENDIF 
    774773      ! 
     774      CALL wrk_dealloc( kiut, numeqmin, numeqmax, isnow )   ! integer 
     775      CALL wrk_dealloc( kiut,nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztiold, zeta_i, ztitemp, zspeche_i, z_i, kjstart=0 ) 
     776      CALL wrk_dealloc( kiut,nlay_s+1, zradtr_s, zradab_s, zkappa_s, zeta_s, ztstemp, ztsold, z_s, kjstart=0 ) 
     777      CALL wrk_dealloc( kiut,jkmax+2, zindterm, zindtbis, zdiagbis ) 
     778      CALL wrk_dealloc( kiut,jkmax+2,3, ztrid ) 
     779      CALL wrk_dealloc( kiut, ztfs, ztsuold, ztsuoldit, zh_i, zh_s, zfsw, zf, dzf ) 
     780      CALL wrk_dealloc( kiut, zerrit, zdifcase, zftrice, zihic, zhsu ) 
     781 
    775782   END SUBROUTINE lim_thd_dif 
    776783 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90

    r2777 r3148  
    2727   USE limvar           ! LIM variables 
    2828   USE in_out_manager   ! I/O manager 
    29    USE wrk_nemo         ! workspace manager 
    3029   USE lib_mpp          ! MPP library 
     30   USE wrk_nemo_2       ! work arrays 
    3131 
    3232   IMPLICIT NONE 
    3333   PRIVATE 
    3434 
    35    PUBLIC   lim_thd_ent     ! called by lim_thd 
     35   PUBLIC   lim_thd_ent         ! called by lim_thd 
    3636 
    3737   REAL(wp) ::   epsi20 = 1e-20_wp   ! constant values 
     
    4848   !!---------------------------------------------------------------------- 
    4949CONTAINS 
    50  
     50  
    5151   SUBROUTINE lim_thd_ent( kideb, kiut, jl ) 
    5252      !!------------------------------------------------------------------- 
     
    9797         zdiscrim              !: dummy factor 
    9898 
    99       INTEGER, DIMENSION(jpij) :: & 
    100          snswi          ,   &  !  snow switch 
    101          nbot0          ,   &  !  old layer bottom index 
    102          icsuind        ,   &  !  ice surface index 
    103          icsuswi        ,   &  !  ice surface switch 
    104          icboind        ,   &  !  ice bottom index 
    105          icboswi        ,   &  !  ice bottom switch 
    106          snicind        ,   &  !  snow ice index 
    107          snicswi        ,   &  !  snow ice switch 
    108          snind                 !  snow index 
    109       ! 
    110       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   zm0       !  old layer-system vertical cotes 
    111       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   qm0       !  old layer-system heat content 
    112       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   z_s       !  new snow system vertical cotes 
    113       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   z_i       !  new ice system vertical cotes 
    114       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   zthick0   !  old ice thickness 
    115       REAL(wp), DIMENSION(jpij,0:jkmax+3) ::   zhl0      ! old and new layer thicknesses 
    116       ! 
    117       REAL(wp), DIMENSION(0:jkmax+3,0:jkmax+3) ::   zrl01 
    118       ! 
    119       REAL(wp), POINTER, DIMENSION(:) ::   zh_i, zqsnow , zqti_in, zqti_fin 
    120       REAL(wp), POINTER, DIMENSION(:) ::   zh_s, zdeltah, zqts_in, zqts_fin 
     99      INTEGER, POINTER, DIMENSION(:) ::   snswi     !  snow switch 
     100      INTEGER, POINTER, DIMENSION(:) ::   nbot0     !  old layer bottom index 
     101      INTEGER, POINTER, DIMENSION(:) ::   icsuind   !  ice surface index 
     102      INTEGER, POINTER, DIMENSION(:) ::   icsuswi   !  ice surface switch 
     103      INTEGER, POINTER, DIMENSION(:) ::   icboind   !  ice bottom index 
     104      INTEGER, POINTER, DIMENSION(:) ::   icboswi   !  ice bottom switch 
     105      INTEGER, POINTER, DIMENSION(:) ::   snicind   !  snow ice index 
     106      INTEGER, POINTER, DIMENSION(:) ::   snicswi   !  snow ice switch 
     107      INTEGER, POINTER, DIMENSION(:) ::   snind     !  snow index 
     108      ! 
     109      REAL(wp), POINTER, DIMENSION(:) ::   zh_i   ! thickness of an ice layer 
     110      REAL(wp), POINTER, DIMENSION(:) ::   zh_s          ! thickness of a snow layer 
     111      REAL(wp), POINTER, DIMENSION(:) ::   zqsnow        ! enthalpy of the snow put in snow ice     
     112      REAL(wp), POINTER, DIMENSION(:) ::   zdeltah       ! temporary variable 
     113      REAL(wp), POINTER, DIMENSION(:) ::   zqti_in, zqts_in 
     114      REAL(wp), POINTER, DIMENSION(:) ::   zqti_fin, zqts_fin 
     115 
     116      REAL(wp), POINTER, DIMENSION(:,:) ::   zm0       !  old layer-system vertical cotes  
     117      REAL(wp), POINTER, DIMENSION(:,:) ::   qm0       !  old layer-system heat content  
     118      REAL(wp), POINTER, DIMENSION(:,:) ::   z_s       !  new snow system vertical cotes  
     119      REAL(wp), POINTER, DIMENSION(:,:) ::   z_i       !  new ice system vertical cotes  
     120      REAL(wp), POINTER, DIMENSION(:,:) ::   zthick0   !  old ice thickness  
     121      REAL(wp), POINTER, DIMENSION(:,:) ::   zhl0      ! old and new layer thicknesses  
     122      REAL(wp), POINTER, DIMENSION(:,:) ::   zrl01 
    121123      !!------------------------------------------------------------------- 
    122124 
    123       IF( wrk_in_use(1, 1,2,3,4,5,6,7,8) ) THEN 
    124          CALL ctl_stop('lim_thd_ent : requestead workspace arrays unavailable')   ;   RETURN 
    125       END IF 
    126  
    127       ! Set-up pointers to sub-arrays of workspace arrays 
    128       zh_i      =>  wrk_1d_1 (1:jpij)   ! thickness of an ice layer 
    129       zh_s      =>  wrk_1d_2 (1:jpij)   ! thickness of a snow layer 
    130       zqsnow    =>  wrk_1d_3 (1:jpij)   ! enthalpy of the snow put in snow ice 
    131       zdeltah   =>  wrk_1d_4 (1:jpij)   ! temporary variable 
    132       zqti_in   =>  wrk_1d_5 (1:jpij)   ! Energy conservation 
    133       zqts_in   =>  wrk_1d_6 (1:jpij)   !    -         - 
    134       zqti_fin  =>  wrk_1d_7 (1:jpij)   !    -         - 
    135       zqts_fin  =>  wrk_1d_8 (1:jpij)   !    -         - 
     125      CALL wrk_alloc( jpij, snswi, nbot0, icsuind, icsuswi, icboind, icboswi, snicind, snicswi, snind )   ! integer 
     126      CALL wrk_alloc( jpij, zh_i, zh_s, zqsnow, zdeltah, zqti_in, zqts_in, zqti_fin, zqts_fin )           ! real 
     127      CALL wrk_alloc( jpij,jkmax+4, zm0, qm0, z_s, z_i, zthick0, zhl0, kjstart = 0 ) 
     128      CALL wrk_alloc( jkmax+4,jkmax+4, zrl01, kistart = 0, kjstart = 0 ) 
    136129 
    137130      zthick0(:,:) = 0._wp 
     
    687680      END DO !jk 
    688681      ! 
    689       IF( wrk_not_released(1, 1,2,3,4,5,6,7,8) )   CALL ctl_stop( 'lim_thd_ent : failed to release workspace arrays' ) 
     682      CALL wrk_dealloc( jpij, snswi, nbot0, icsuind, icsuswi, icboind, icboswi, snicind, snicswi, snind )   ! integer 
     683      CALL wrk_dealloc( jpij, zh_i, zh_s, zqsnow, zdeltah, zqti_in, zqts_in, zqti_fin, zqts_fin )           ! real 
     684      CALL wrk_dealloc( jpij,jkmax+4, zm0, qm0, z_s, z_i, zthick0, zhl0, kjstart = 0 ) 
     685      CALL wrk_dealloc( jkmax+4,jkmax+4, zrl01, kistart = 0, kjstart = 0 ) 
    690686      ! 
    691687   END SUBROUTINE lim_thd_ent 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r2777 r3148  
    2626   USE limtab           ! LIM 2D <==> 1D 
    2727   USE limcons          ! LIM conservation 
    28    USE wrk_nemo         ! workspace manager 
    2928   USE in_out_manager   ! I/O manager 
    3029   USE lib_mpp          ! MPP library 
     30   USE wrk_nemo_2       ! work arrays 
    3131 
    3232   IMPLICIT NONE 
     
    7777      !!               update ht_s_b, ht_i_b and tbif_1d(:,:)       
    7878      !!------------------------------------------------------------------------ 
    79       USE wrk_nemo, ONLY :   vt_i_init => wrk_2d_1 , vt_i_final => wrk_2d_4 , et_i_init => wrk_2d_7 
    80       USE wrk_nemo, ONLY :   vt_s_init => wrk_2d_2 , vt_s_final => wrk_2d_5 , et_s_init => wrk_2d_8 
    81       USE wrk_nemo, ONLY :   zvrel     => wrk_2d_3 , et_i_final => wrk_2d_6  
    82       ! 
    8379      INTEGER ::   ji,jj,jk,jl,jm   ! dummy loop indices 
    8480      INTEGER ::   layer, nbpac     ! local integers  
     
    9086      CHARACTER (len = 15) :: fieldid 
    9187      ! 
    92       INTEGER, DIMENSION(jpij) ::   zcatac    !  indexes of categories where new ice grows 
    93  
    94       REAL(wp), DIMENSION(jpij,jpl) ::   zhice_old   ! previous ice thickness 
    95       REAL(wp), DIMENSION(jpij,jpl) ::   zdummy      ! dummy thickness of new ice  
    96       REAL(wp), DIMENSION(jpij,jpl) ::   zdhicbot    ! thickness of new ice which is accreted vertically 
    97       REAL(wp), DIMENSION(jpij,jpl) ::   zv_old      ! old volume of ice in category jl 
    98       REAL(wp), DIMENSION(jpij,jpl) ::   za_old      ! old area of ice in category jl 
    99       REAL(wp), DIMENSION(jpij,jpl) ::   za_i_ac     ! 1-D version of a_i 
    100       REAL(wp), DIMENSION(jpij,jpl) ::   zv_i_ac     ! 1-D version of v_i 
    101       REAL(wp), DIMENSION(jpij,jpl) ::   zoa_i_ac    ! 1-D version of oa_i 
    102       REAL(wp), DIMENSION(jpij,jpl) ::   zsmv_i_ac   ! 1-D version of smv_i 
    103  
    104       REAL(wp), DIMENSION(jpij,jkmax  ,jpl) ::   ze_i_ac   !: 1-D version of e_i 
    105       REAL(wp), DIMENSION(jpij,jkmax+1,jpl) ::   zqm0      ! old layer-system heat content 
    106       REAL(wp), DIMENSION(jpij,jkmax+1,jpl) ::   zthick0   ! old ice thickness 
    107  
    108       REAL(wp), POINTER, DIMENSION(:) ::   zv_newice, zh_newice, zs_newice, zdv_res, zat_i_ac , zdh_frazb, zqbgow 
    109       REAL(wp), POINTER, DIMENSION(:) ::   za_newice, ze_newice, zo_newice, zda_res, zat_i_lev, zvrel_ac , zdhex 
    110       REAL(wp), POINTER, DIMENSION(:) ::   zswinew 
     88      INTEGER , POINTER, DIMENSION(:) ::   zcatac      ! indexes of categories where new ice grows 
     89      REAL(wp), POINTER, DIMENSION(:) ::   zswinew     ! switch for new ice or not 
     90 
     91      REAL(wp), POINTER, DIMENSION(:) ::   zv_newice   ! volume of accreted ice 
     92      REAL(wp), POINTER, DIMENSION(:) ::   za_newice   ! fractional area of accreted ice 
     93      REAL(wp), POINTER, DIMENSION(:) ::   zh_newice   ! thickness of accreted ice 
     94      REAL(wp), POINTER, DIMENSION(:) ::   ze_newice   ! heat content of accreted ice 
     95      REAL(wp), POINTER, DIMENSION(:) ::   zs_newice   ! salinity of accreted ice 
     96      REAL(wp), POINTER, DIMENSION(:) ::   zo_newice   ! age of accreted ice 
     97      REAL(wp), POINTER, DIMENSION(:) ::   zdv_res     ! residual volume in case of excessive heat budget 
     98      REAL(wp), POINTER, DIMENSION(:) ::   zda_res     ! residual area in case of excessive heat budget 
     99      REAL(wp), POINTER, DIMENSION(:) ::   zat_i_ac    ! total ice fraction     
     100      REAL(wp), POINTER, DIMENSION(:) ::   zat_i_lev   ! total ice fraction for level ice only (type 1)    
     101      REAL(wp), POINTER, DIMENSION(:) ::   zdh_frazb   ! accretion of frazil ice at the ice bottom 
     102      REAL(wp), POINTER, DIMENSION(:) ::   zvrel_ac    ! relative ice / frazil velocity (1D vector) 
     103 
     104      REAL(wp), POINTER, DIMENSION(:,:) ::   zhice_old   ! previous ice thickness 
     105      REAL(wp), POINTER, DIMENSION(:,:) ::   zdummy      ! dummy thickness of new ice  
     106      REAL(wp), POINTER, DIMENSION(:,:) ::   zdhicbot    ! thickness of new ice which is accreted vertically 
     107      REAL(wp), POINTER, DIMENSION(:,:) ::   zv_old      ! old volume of ice in category jl 
     108      REAL(wp), POINTER, DIMENSION(:,:) ::   za_old      ! old area of ice in category jl 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   za_i_ac     ! 1-D version of a_i 
     110      REAL(wp), POINTER, DIMENSION(:,:) ::   zv_i_ac     ! 1-D version of v_i 
     111      REAL(wp), POINTER, DIMENSION(:,:) ::   zoa_i_ac    ! 1-D version of oa_i 
     112      REAL(wp), POINTER, DIMENSION(:,:) ::   zsmv_i_ac   ! 1-D version of smv_i 
     113 
     114      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ze_i_ac   !: 1-D version of e_i 
     115 
     116      REAL(wp), POINTER, DIMENSION(:) ::   zqbgow    ! heat budget of the open water (negative) 
     117      REAL(wp), POINTER, DIMENSION(:) ::   zdhex     ! excessively thick accreted sea ice (hlead-hice) 
     118 
     119      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zqm0      ! old layer-system heat content 
     120      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zthick0   ! old ice thickness 
     121 
     122      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_i_init, vt_i_final   ! ice volume summed over categories 
     123      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_s_init, vt_s_final   !  snow volume summed over categories 
     124      REAL(wp), POINTER, DIMENSION(:,:) ::   et_i_init, et_i_final   !  ice energy summed over categories 
     125      REAL(wp), POINTER, DIMENSION(:,:) ::   et_s_init               !  snow energy summed over categories 
     126      REAL(wp), POINTER, DIMENSION(:,:) ::   zvrel                   ! relative ice / frazil velocity 
    111127      !!-----------------------------------------------------------------------! 
    112128 
    113       IF(  wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) .OR.   & 
    114          & wrk_in_use(2, 1,2,3,4,5,6,7,8)                        ) THEN 
    115          CALL ctl_stop('lim_thd_lac : requestead workspace arrays unavailable.')   ;   RETURN 
    116       END IF 
    117       ! Set-up pointers to sub-arrays of workspace arrays 
    118       zv_newice =>  wrk_1d_1 (1:jpij)   ! volume of accreted ice 
    119       za_newice =>  wrk_1d_2 (1:jpij)   ! fractional area of accreted ice 
    120       zh_newice =>  wrk_1d_3 (1:jpij)   ! thickness of accreted ice 
    121       ze_newice =>  wrk_1d_4 (1:jpij)   ! heat content of accreted ice 
    122       zs_newice =>  wrk_1d_5 (1:jpij)   ! salinity of accreted ice 
    123       zo_newice =>  wrk_1d_6 (1:jpij)   ! age of accreted ice 
    124       zdv_res   =>  wrk_1d_7 (1:jpij)   ! residual volume in case of excessive heat budget 
    125       zda_res   =>  wrk_1d_8 (1:jpij)   ! residual area in case of excessive heat budget 
    126       zat_i_ac  =>  wrk_1d_9 (1:jpij)   ! total ice fraction 
    127       zat_i_lev =>  wrk_1d_10(1:jpij)   ! total ice fraction for level ice only (type 1)    
    128       zdh_frazb =>  wrk_1d_11(1:jpij)   ! accretion of frazil ice at the ice bottom 
    129       zvrel_ac  =>  wrk_1d_12(1:jpij)   ! relative ice / frazil velocity (1D vector) 
    130       zqbgow    =>  wrk_1d_13(1:jpij)   ! heat budget of the open water (negative) 
    131       zdhex     =>  wrk_1d_14(1:jpij)   ! excessively thick accreted sea ice (hlead-hice) 
    132       zswinew   =>  wrk_1d_15(1:jpij)   ! switch for new ice or not 
    133  
    134  
     129      CALL wrk_alloc( jpij, zcatac )   ! integer 
     130      CALL wrk_alloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 
     131      CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_ac, zat_i_lev, zdh_frazb, zvrel_ac, zqbgow, zdhex ) 
     132      CALL wrk_alloc( jpij,jpl, zhice_old, zdummy, zdhicbot, zv_old, za_old, za_i_ac, zv_i_ac, zoa_i_ac, zsmv_i_ac ) 
     133      CALL wrk_alloc( jpij,jkmax,jpl, ze_i_ac ) 
     134      CALL wrk_alloc( jpij,jkmax+1,jpl, zqm0, zthick0 ) 
     135      CALL wrk_alloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final, et_i_init, et_i_final, et_s_init, zvrel ) 
    135136 
    136137      et_i_init(:,:) = 0._wp 
     
    691692      ENDIF 
    692693      ! 
    693       IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) .OR.     & 
    694           wrk_not_released(2, 1,2,3,4,5,6,7,8)                       )   & 
    695           CALL ctl_stop( 'lim_thd_lac : failed to release workspace arrays' ) 
     694      CALL wrk_dealloc( jpij, zcatac )   ! integer 
     695      CALL wrk_dealloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 
     696      CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_ac, zat_i_lev, zdh_frazb, zvrel_ac, zqbgow, zdhex ) 
     697      CALL wrk_dealloc( jpij,jpl, zhice_old, zdummy, zdhicbot, zv_old, za_old, za_i_ac, zv_i_ac, zoa_i_ac, zsmv_i_ac ) 
     698      CALL wrk_dealloc( jpij,jkmax,jpl, ze_i_ac ) 
     699      CALL wrk_dealloc( jpij,jkmax+1,jpl, zqm0, zthick0 ) 
     700      CALL wrk_dealloc( jpi,jpj, vt_i_init, vt_i_final, vt_s_init, vt_s_final, et_i_init, et_i_final, et_s_init, zvrel ) 
    696701      ! 
    697702   END SUBROUTINE lim_thd_lac 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90

    r2777 r3148  
    2222   USE limvar           ! LIM variables 
    2323   USE in_out_manager   ! I/O manager 
    24    USE lib_mpp         ! MPP library 
     24   USE lib_mpp          ! MPP library 
     25   USE wrk_nemo_2       ! work arrays 
    2526 
    2627   IMPLICIT NONE 
     
    4950      !!               -> num_sal = 4 -> S = S(h)   [Cox and Weeks 74] 
    5051      !!--------------------------------------------------------------------- 
    51       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    52       USE wrk_nemo, ONLY:   wrk_1d_1, wrk_1d_2, wrk_1d_3 
    53       ! 
    5452      INTEGER, INTENT(in) ::  kideb, kiut   ! thickness category index 
    5553      ! 
     
    5856      REAL(wp) ::   zsold, iflush, iaccrbo, igravdr, isnowic, i_ice_switch,  ztmelts   ! local scalars 
    5957      REAL(wp) ::   zaaa, zbbb, zccc, zdiscrim   ! local scalars 
    60       ! 
    6158      REAL(wp), POINTER, DIMENSION(:) ::   ze_init, zhiold, zsiold 
    6259      !!--------------------------------------------------------------------- 
    6360 
    64       IF(  wrk_in_use(1, 1,2,3)  ) THEN 
    65          CALL ctl_stop('lim_thd_sal : requestead workspace arrays unavailable.')   ;   RETURN 
    66       END IF 
    67       ! Set-up pointers to sub-arrays of workspace arrays 
    68       ze_init =>  wrk_1d_1 (1:jpij) 
    69       zhiold  =>  wrk_1d_2 (1:jpij) 
    70       zsiold  =>  wrk_1d_3 (1:jpij) 
     61      CALL wrk_alloc( jpij, ze_init, zhiold, zsiold ) 
    7162 
    7263      !------------------------------------------------------------------------------| 
     
    240231      ENDIF 
    241232      ! 
    242       IF( wrk_not_released(1, 1,2,3) )   CALL ctl_stop( 'lim_thd_sal : failed to release workspace arrays' ) 
     233      CALL wrk_dealloc( jpij, ze_init, zhiold, zsiold ) 
    243234      ! 
    244235   END SUBROUTINE lim_thd_sal 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r2777 r3148  
    2525   USE lbclnk          ! lateral boundary conditions -- MPP exchanges 
    2626   USE lib_mpp         ! MPP library 
     27   USE wrk_nemo_2      ! work arrays 
    2728   USE prtctl          ! Print control 
    2829 
     
    6263      !! ** action : 
    6364      !!--------------------------------------------------------------------- 
    64       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    65       USE wrk_nemo, ONLY:   zs0at => wrk_2d_4 , zsm => wrk_2d_5 , zs0ow  => wrk_2d_6      ! 2D workspace 
    66       USE wrk_nemo, ONLY:   wrk_3d_3, wrk_3d_4, wrk_3d_5, wrk_3d_6, wrk_3d_7, wrk_3d_8    ! 3D workspace 
    67       ! 
    6865      INTEGER, INTENT(in) ::   kt   ! number of iteration 
    6966      ! 
     
    7673      REAL(wp) ::   ze   , zsal   , zage          !   -      - 
    7774      ! 
    78       REAL(wp), POINTER, DIMENSION(:,:,:)   ::   zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi   ! 3D pointer 
     75      REAL(wp), POINTER, DIMENSION(:,:)      ::   zui_u, zvi_v, zsm, zs0at, zs0ow 
     76      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi 
     77      REAL(wp), POINTER, DIMENSION(:,:,:,:)  ::   zs0e 
    7978      !!--------------------------------------------------------------------- 
    8079 
    81       IF( wrk_in_use(2, 4,5,6) .OR. wrk_in_use(3, 3,4,5,6,7,8) ) THEN 
    82          CALL ctl_stop( 'lim_trp : requested workspace arrays unavailable' )   ;   RETURN 
    83       END IF 
    84  
    85       zs0ice => wrk_3d_3(:,:,1:jpl)   ;   zs0a  => wrk_3d_5(:,:,1:jpl)   ;   zs0sm => wrk_3d_7(:,:,1:jpl) 
    86       zs0sn  => wrk_3d_4(:,:,1:jpl)   ;   zs0c0 => wrk_3d_6(:,:,1:jpl)   ;   zs0oi => wrk_3d_8(:,:,1:jpl) 
    87       IF( kt == nit000 ) THEN  
    88          ALLOCATE( zs0e(jpi,jpj,jkmax,jpl), Stat = ierr ) 
    89          IF( lk_mpp    )   CALL mpp_sum ( ierr ) 
    90          IF( ierr /= 0 )   CALL ctl_stop( 'lim_trp : failed to allocate zs0e array' ) 
    91       END IF 
     80      CALL wrk_alloc( jpi, jpj, zui_u, zvi_v, zsm, zs0at, zs0ow ) 
     81      CALL wrk_alloc( jpi, jpj, jpl, zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi ) 
     82      CALL wrk_alloc( jpi, jpj, jkmax, jpl, zs0e ) 
    9283 
    9384      IF( numit == nstart .AND. lwp ) THEN 
     
    465456      ENDIF 
    466457      ! 
    467       IF( wrk_not_released(2, 4,5,6) .OR. wrk_not_released(3, 3,4,5,6,7,8) )   & 
    468          &   CALL ctl_stop('lim_trp : failed to release workspace arrays') 
     458      CALL wrk_dealloc( jpi, jpj, zui_u, zvi_v, zsm, zs0at, zs0ow ) 
     459      CALL wrk_dealloc( jpi, jpj, jpl, zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi ) 
     460      CALL wrk_dealloc( jpi, jpj, jkmax, jpl, zs0e ) 
    469461      ! 
    470462   END SUBROUTINE lim_trp 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limupdate.F90

    r2715 r3148  
    3535   USE prtctl           ! Print control 
    3636   USE lbclnk           ! lateral boundary condition - MPP exchanges 
     37   USE wrk_nemo_2       ! work arrays 
    3738 
    3839   IMPLICIT NONE 
     
    8586      REAL(wp) ::   z_prescr_hi, zat_i_old, ztmelts, ze_s 
    8687 
    87       LOGICAL , DIMENSION(jpi,jpj,jpl) ::  internal_melt 
    88       REAL(wp), DIMENSION(jkmax) ::   zthick0, zqm0      ! thickness of the layers and heat contents for 
     88      INTEGER , POINTER, DIMENSION(:,:,:) ::  internal_melt 
     89      REAL(wp), POINTER, DIMENSION(:) ::   zthick0, zqm0      ! thickness of the layers and heat contents for 
    8990      !!------------------------------------------------------------------- 
     91 
     92      CALL wrk_alloc( jpi,jpj,jpl, internal_melt )   ! integer 
     93      CALL wrk_alloc( jkmax, zthick0, zqm0 ) 
    9094 
    9195      IF( ln_nicep ) THEN   
     
    456460      ! 2.3) Melt of an internal layer 
    457461      !--------------------------------- 
    458       internal_melt(:,:,:) = .false. 
     462      internal_melt(:,:,:) = 0 
    459463 
    460464      DO jl = 1, jpl 
     
    471475                     !                    WRITE(numout,*) ' e_i : ', e_i(ji,jj,jk,jl) 
    472476                     !                    WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) 
    473                      internal_melt(ji,jj,jl) = .true. 
     477                     internal_melt(ji,jj,jl) = 1 
    474478                  ENDIF 
    475479               END DO ! ji 
     
    481485         DO jj = 1, jpj  
    482486            DO ji = 1, jpi 
    483                IF( internal_melt(ji,jj,jl) ) THEN 
     487               IF( internal_melt(ji,jj,jl) == 1 ) THEN 
    484488                  ! initial ice thickness 
    485489                  !----------------------- 
     
    576580      ENDIF 
    577581 
    578       internal_melt(:,:,:) = .false. 
     582      internal_melt(:,:,:) = 0 
    579583 
    580584      ! Melt of snow 
     
    589593               ! If snow energy of melting smaller then Lf 
    590594               ! Then all snow melts and meltwater, heat go to the ocean 
    591                IF ( ze_s .LE. rhosn * lfus ) internal_melt(ji,jj,jl) = .true. 
     595               IF ( ze_s .LE. rhosn * lfus ) internal_melt(ji,jj,jl) = 1 
    592596 
    593597               IF( ln_nicep ) THEN   
     
    611615         DO jj = 1, jpj  
    612616            DO ji = 1, jpi 
    613                IF ( internal_melt(ji,jj,jl) ) THEN 
     617               IF ( internal_melt(ji,jj,jl) == 1 ) THEN 
    614618                  v_s(ji,jj,jl)   = 0.0 
    615619                  e_s(ji,jj,1,jl) = 0.0 
     
    10271031      ENDIF 
    10281032 
    1029       !--------------------- 
     1033      CALL wrk_dealloc( jpi,jpj,jpl, internal_melt )   ! integer 
     1034      CALL wrk_dealloc( jkmax, zthick0, zqm0 ) 
    10301035 
    10311036   END SUBROUTINE lim_update 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r2777 r3148  
    5151   USE thd_ice          ! LIM thermodynamics 
    5252   USE in_out_manager   ! I/O manager 
    53    USE lib_mpp         ! MPP library 
     53   USE lib_mpp          ! MPP library 
     54   USE wrk_nemo_2       ! work arrays 
    5455 
    5556   IMPLICIT NONE 
     
    297298      !! ** References : Vancoppenolle et al., 2007 (in preparation) 
    298299      !!------------------------------------------------------------------ 
    299       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    300       USE wrk_nemo, ONLY:   wrk_3d_3, wrk_3d_4  
    301300      INTEGER  ::   ji, jj, jk, jl   ! dummy loop index 
    302301      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac, zsal      ! local scalar 
    303302      REAL(wp) ::   zind0, zind01, zindbal, zargtemp , zs_zero   !   -      - 
    304       ! 
    305303      REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_slope_s, zalpha   ! 3D pointer 
    306304      !!------------------------------------------------------------------ 
    307305 
    308       IF( wrk_in_use( 3, 3,4 ) ) THEN 
    309          CALL ctl_stop( 'lim_var_salprof: requested workspace arrays unavailable' )   ;   RETURN 
    310       END IF 
    311  
    312       z_slope_s => wrk_3d_3(:,:,1:jpl)   ! slope of the salinity profile 
    313       zalpha    => wrk_3d_4(:,:,1:jpl)   ! weight factor for s between s_i_0 and s_i_1 
     306      CALL wrk_alloc( jpi, jpj, jpl, z_slope_s, zalpha ) 
    314307 
    315308      !--------------------------------------- 
     
    390383      ENDIF ! num_sal 
    391384      ! 
    392       IF( wrk_not_released(3, 3,4) )   CALL ctl_stop('lim_var_salprof: failed to release workspace arrays.') 
     385      CALL wrk_dealloc( jpi, jpj, jpl, z_slope_s, zalpha ) 
    393386      ! 
    394387   END SUBROUTINE lim_var_salprof 
     
    433426      !!                Works with 1d vectors and is used by thermodynamic modules 
    434427      !!------------------------------------------------------------------- 
    435       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    436       USE wrk_nemo, ONLY:   wrk_1d_4 
    437428      INTEGER, INTENT(in) ::   kideb, kiut   ! thickness category index 
    438429      ! 
     
    445436      !!--------------------------------------------------------------------- 
    446437 
    447       IF(  wrk_in_use(1, 4)  ) THEN 
    448          CALL ctl_stop('lim_var_salprof1d : requestead workspace arrays unavailable.')   ;   RETURN 
    449       END IF 
    450       ! Set-up pointers to sub-arrays of workspace arrays 
    451       z_slope_s  =>  wrk_1d_4 (1:jpij) 
     438      CALL wrk_alloc( jpij, z_slope_s ) 
    452439 
    453440      !--------------------------------------- 
     
    514501      ENDIF 
    515502      ! 
    516       IF( wrk_not_released(1, 4) )   CALL ctl_stop( 'lim_var_salprof1d : failed to release workspace arrays' ) 
     503      CALL wrk_dealloc( jpij, z_slope_s ) 
    517504      ! 
    518505   END SUBROUTINE lim_var_salprof1d 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r2777 r3148  
    2323   USE lbclnk 
    2424   USE lib_mpp         ! MPP library 
     25   USE wrk_nemo_2      ! work arrays 
    2526   USE par_ice 
    2627 
     
    4849   REAL(wp)  ::   epsi16 = 1e-16_wp 
    4950   REAL(wp)  ::   zzero  = 0._wp 
    50    REAL(wp)  ::   zone   = 1._wp 
    51  
    52    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   zcmo, zcmoa   ! additional fields 
    53        
     51   REAL(wp)  ::   zone   = 1._wp       
    5452   !!---------------------------------------------------------------------- 
    5553   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    7371      !!  modif : 03/06/98 
    7472      !!------------------------------------------------------------------- 
    75       USE wrk_nemo, ONLY:   wrk_not_released, wrk_in_use 
    76       USE wrk_nemo, ONLY:   zfield => wrk_2d_1             ! 2D workspace 
    77       USE wrk_nemo, ONLY:   wrk_3d_3, wrk_3d_4, wrk_3d_5   ! 3D workspace 
    78       ! 
    7973      INTEGER, INTENT(in) ::   kindic   ! if kindic < 0 there has been an error somewhere 
    8074      ! 
     
    8377      REAL(wp),DIMENSION(1) ::   zdept 
    8478      REAL(wp) ::  zsto, zjulian, zout, zindh, zinda, zindb 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zcmo, zcmoa 
     80      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zfield 
    8581      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zmaskitd, zoi, zei 
    8682 
     
    9389      !!------------------------------------------------------------------- 
    9490 
    95       IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 3,4,5) ) THEN 
    96          CALL ctl_stop( 'lim_wri : requested workspace arrays unavailable' )   ;   RETURN 
    97       ENDIF 
     91      CALL wrk_alloc( jpi, jpj, zfield ) 
     92      CALL wrk_alloc( jpi, jpj, jpnoumax, zcmo, zcmoa ) 
     93      CALL wrk_alloc( jpi, jpj, jpl, zmaskitd, zoi, zei ) 
    9894 
    9995      ipl = jpl 
    10096 
    101       zmaskitd => wrk_3d_3(:,:,1:jpl) 
    102       zoi      => wrk_3d_4(:,:,1:jpl) 
    103       zei      => wrk_3d_5(:,:,1:jpl) 
    104  
    105  
    10697      IF( numit == nstart ) THEN  
    10798 
    108          ALLOCATE( ndex51(jpij), ndexitd(jpij*jpl), zcmo(jpi,jpj,jpnoumax), zcmoa(jpi,jpj,jpnoumax), STAT=ierr ) 
     99         ALLOCATE( ndex51(jpij), ndexitd(jpij*jpl), STAT=ierr ) 
    109100         IF( lk_mpp    )   CALL mpp_sum ( ierr ) 
    110101         IF( ierr /= 0 ) THEN 
     
    354345      ENDIF 
    355346 
    356       IF( wrk_not_released(2, 1) .OR. wrk_not_released(3, 3,4,5) )   & 
    357          CALL ctl_stop( 'lim_wri: failed to release workspace arrays' ) 
     347      CALL wrk_dealloc( jpi, jpj, zfield ) 
     348      CALL wrk_dealloc( jpi, jpj, jpnoumax, zcmo, zcmoa ) 
     349      CALL wrk_dealloc( jpi, jpj, jpl, zmaskitd, zoi, zei ) 
    358350       
    359351   END SUBROUTINE lim_wri 
Note: See TracChangeset for help on using the changeset viewer.