Index: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/flo4rk.F90
===================================================================
--- branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/flo4rk.F90	(revision 3115)
+++ branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/flo4rk.F90	(revision 3151)
@@ -15,4 +15,5 @@
    USE dom_oce         ! ocean space and time domain
    USE in_out_manager  ! I/O manager
+   USE wrk_nemo_2      ! working array
 
    IMPLICIT NONE
@@ -54,12 +55,10 @@
       INTEGER ::  ierror              ! error value
 
-      REAL(wp), ALLOCATABLE, DIMENSION(:)   ::   zgifl , zgjfl , zgkfl    ! index RK  positions
-      REAL(wp), ALLOCATABLE, DIMENSION(:)   ::   zufl  , zvfl  , zwfl     ! interpolated velocity at the float position 
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zrkxfl, zrkyfl, zrkzfl   ! RK coefficients
+      REAL(wp), POINTER, DIMENSION(:)   ::   zgifl , zgjfl , zgkfl    ! index RK  positions
+      REAL(wp), POINTER, DIMENSION(:)   ::   zufl  , zvfl  , zwfl     ! interpolated velocity at the float position 
+      REAL(wp), POINTER, DIMENSION(:,:) ::   zrkxfl, zrkyfl, zrkzfl   ! RK coefficients
       !!---------------------------------------------------------------------
-
-      ALLOCATE (  zgifl(jpnfl)  ,  zgjfl(jpnfl)  ,  zgkfl(jpnfl)   , &
-                   zufl(jpnfl)  ,   zvfl(jpnfl)  ,   zwfl(jpnfl)   , &        
-                 zrkxfl(jpnfl,4), zrkyfl(jpnfl,4), zrkzfl(jpnfl,4) , STAT=ierror )
+      CALL wrk_alloc( jpnfl,    zgifl , zgjfl , zgkfl  , zufl, zvfl, zwfl)
+      CALL wrk_alloc( jpnfl, 4, zrkxfl, zrkyfl, zrkzfl )
       !
       IF( ierror /= 0 ) THEN
@@ -157,7 +156,6 @@
       END DO
       !
-      DEALLOCATE( zgifl  , zgjfl  , zgkfl  )
-      DEALLOCATE( zufl   , zvfl   , zwfl   )
-      DEALLOCATE( zrkxfl , zrkyfl , zrkzfl )
+      CALL wrk_dealloc( jpnfl,    zgifl , zgjfl , zgkfl  , zufl, zvfl, zwfl)
+      CALL wrk_dealloc( jpnfl, 4, zrkxfl, zrkyfl, zrkzfl )
       !
    END SUBROUTINE flo_4rk
@@ -182,16 +180,20 @@
       INTEGER  ::   jfl, jind1, jind2, jind3   ! dummy loop indices
       REAL(wp) ::   zsumu, zsumv, zsumw        ! local scalar
-      INTEGER , DIMENSION(jpnfl)   ::   iilu, ijlu, iklu   ! nearest neighbour INDEX-u
-      INTEGER , DIMENSION(jpnfl)   ::   iilv, ijlv, iklv   ! nearest neighbour INDEX-v
-      INTEGER , DIMENSION(jpnfl)   ::   iilw, ijlw, iklw   ! nearest neighbour INDEX-w
-      INTEGER , DIMENSION(jpnfl,4) ::   iidu, ijdu, ikdu   ! 64 nearest neighbour INDEX-u
-      INTEGER , DIMENSION(jpnfl,4) ::   iidv, ijdv, ikdv   ! 64 nearest neighbour INDEX-v
-      INTEGER , DIMENSION(jpnfl,4) ::   iidw, ijdw, ikdw   ! 64 nearest neighbour INDEX-w
-      REAL(wp) , DIMENSION(jpnfl,4,4,4) ::   ztufl , ztvfl , ztwfl   ! velocity at choosen time step
-      REAL(wp) , DIMENSION(jpnfl,4)     ::   zlagxu, zlagyu, zlagzu   ! Lagrange  coefficients
-      REAL(wp) , DIMENSION(jpnfl,4)     ::   zlagxv, zlagyv, zlagzv   !    -           -
-      REAL(wp) , DIMENSION(jpnfl,4)     ::   zlagxw, zlagyw, zlagzw   !    -           -
+      INTEGER  , POINTER, DIMENSION(:)       ::   iilu, ijlu, iklu   ! nearest neighbour INDEX-u
+      INTEGER  , POINTER, DIMENSION(:)       ::   iilv, ijlv, iklv   ! nearest neighbour INDEX-v
+      INTEGER  , POINTER, DIMENSION(:)       ::   iilw, ijlw, iklw   ! nearest neighbour INDEX-w
+      INTEGER  , POINTER, DIMENSION(:,:)     ::   iidu, ijdu, ikdu   ! 64 nearest neighbour INDEX-u
+      INTEGER  , POINTER, DIMENSION(:,:)     ::   iidv, ijdv, ikdv   ! 64 nearest neighbour INDEX-v
+      INTEGER  , POINTER, DIMENSION(:,:)     ::   iidw, ijdw, ikdw   ! 64 nearest neighbour INDEX-w
+      REAL(wp) , POINTER, DIMENSION(:,:)     ::   zlagxu, zlagyu, zlagzu   ! Lagrange  coefficients
+      REAL(wp) , POINTER, DIMENSION(:,:)     ::   zlagxv, zlagyv, zlagzv   !    -           -
+      REAL(wp) , POINTER, DIMENSION(:,:)     ::   zlagxw, zlagyw, zlagzw   !    -           -
+      REAL(wp) , POINTER, DIMENSION(:,:,:,:) ::   ztufl , ztvfl , ztwfl   ! velocity at choosen time step
       !!---------------------------------------------------------------------
-      
+      CALL wrk_alloc( jpnfl,    iilu, ijlu, iklu, iilv, ijlv, iklv, iilw, ijlw, iklw )
+      CALL wrk_alloc( jpnfl, 4, iidu, ijdu, ikdu, iidv, ijdv, ikdv, iidw, ijdw, ikdw )
+      CALL wrk_alloc( jpnfl, 4, zlagxu, zlagyu, zlagzu, zlagxv, zlagyv, zlagzv, zlagxw, zlagyw, zlagzw )
+      CALL wrk_alloc( jpnfl, 4, 4, 4, ztufl , ztvfl , ztwfl )
+ 
       ! Interpolation of U velocity
 
@@ -451,4 +453,9 @@
       END DO
       !   
+      CALL wrk_dealloc( jpnfl,    iilu, ijlu, iklu, iilv, ijlv, iklv, iilw, ijlw, iklw )
+      CALL wrk_dealloc( jpnfl, 4, iidu, ijdu, ikdu, iidv, ijdv, ikdv, iidw, ijdw, ikdw )
+      CALL wrk_dealloc( jpnfl, 4, zlagxu, zlagyu, zlagzu, zlagxv, zlagyv, zlagzv, zlagxw, zlagyw, zlagzw )
+      CALL wrk_dealloc( jpnfl, 4, 4, 4, ztufl , ztvfl , ztwfl )
+      !   
    END SUBROUTINE flo_interp
 
Index: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floats.F90
===================================================================
--- branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floats.F90	(revision 3115)
+++ branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floats.F90	(revision 3151)
@@ -23,4 +23,5 @@
    USE floblk          ! Trajectories, Blanke scheme      (flo_blk routine)
    USE in_out_manager  ! I/O manager
+   USE timing          ! preformance summary
 
    IMPLICIT NONE
@@ -51,4 +52,6 @@
       !!----------------------------------------------------------------------
       !
+      IF( nn_timing == 1 )   CALL timing_start('flo_stp')
+      !
       IF( ln_flork4 ) THEN   ;   CALL flo_4rk( kt )        ! Trajectories using a 4th order Runge Kutta scheme
       ELSE                   ;   CALL flo_blk( kt )        ! Trajectories using Blanke' algorithme
@@ -62,4 +65,6 @@
       !
       wb(:,:,:) = wn(:,:,:)         ! Save the old vertical velocity field
+      !
+      IF( nn_timing == 1 )   CALL timing_stop('flo_stp')
       !
    END SUBROUTINE flo_stp
@@ -76,4 +81,6 @@
       NAMELIST/namflo/ jpnfl, jpnnewflo, ln_rstflo, nn_writefl, nn_stockfl, ln_argo, ln_flork4, ln_ariane, ln_flo_ascii
       !!---------------------------------------------------------------------
+      !
+      IF( nn_timing == 1 )   CALL timing_start('flo_init')
       !
       IF(lwp) WRITE(numout,*)
@@ -122,4 +129,6 @@
       wb(:,:,:) = wn(:,:,:)         ! set wb for computation of floats trajectories at the first time step
       !
+      IF( nn_timing == 1 )   CALL timing_stop('flo_init')
+      !
    END SUBROUTINE flo_init
 
Index: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floblk.F90
===================================================================
--- branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floblk.F90	(revision 3115)
+++ branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floblk.F90	(revision 3151)
@@ -17,4 +17,5 @@
    USE in_out_manager  ! I/O manager
    USE lib_mpp         ! distribued memory computing library
+   USE wrk_nemo_2      ! working array
 
    IMPLICIT NONE
@@ -47,10 +48,19 @@
       INTEGER :: jfl              ! dummy loop arguments
       INTEGER :: ind, ifin, iloop
-      INTEGER , DIMENSION ( jpnfl )  ::   &
+      REAL(wp)   ::       &
+         zuinfl,zvinfl,zwinfl,      &     ! transport across the input face
+         zuoutfl,zvoutfl,zwoutfl,   &     ! transport across the ouput face
+         zvol,                      &     ! volume of the mesh
+         zsurfz,                    &     ! surface of the face of the mesh 
+         zind
+
+      REAL(wp), DIMENSION ( 2 )  ::   zsurfx, zsurfy   ! surface of the face of the mesh
+
+      INTEGER , POINTER, DIMENSION ( : )  ::   &
          iil, ijl, ikl,             &     ! index of nearest mesh
          iiloc , ijloc,             &
          iiinfl, ijinfl, ikinfl,    &     ! index of input mesh of the float.
          iioutfl, ijoutfl, ikoutfl        ! index of output mesh of the float.
-      REAL(wp) , DIMENSION ( jpnfl )  ::    &
+      REAL(wp) , POINTER, DIMENSION ( : )  ::    &
          zgifl, zgjfl, zgkfl,       &     ! position of floats, index on 
                                           ! velocity mesh.
@@ -64,14 +74,11 @@
          zufl, zvfl, zwfl,          &     ! interpolated vel. at float position
          zudfl, zvdfl, zwdfl,       &     ! velocity diff input/output of mesh
-         zgidfl, zgjdfl, zgkdfl           ! direction index of float 
-      REAL(wp)   ::       &
-         zuinfl,zvinfl,zwinfl,      &     ! transport across the input face
-         zuoutfl,zvoutfl,zwoutfl,   &     ! transport across the ouput face
-         zvol,                      &     ! volume of the mesh
-         zsurfz,                    &     ! surface of the face of the mesh 
-         zind
-      REAL(wp), DIMENSION ( 2 )  ::   zsurfx, zsurfy   ! surface of the face of the mesh
+         zgidfl, zgjdfl, zgkdfl           ! direction index of float
       !!---------------------------------------------------------------------
-      
+      CALL wrk_alloc( jpnfl , iil   , ijl   , ikl   , iiloc  ,  ijloc           )
+      CALL wrk_alloc( jpnfl , iiinfl, ijinfl, ikinfl, iioutfl, ijoutfl, ikoutfl )
+      CALL wrk_alloc( jpnfl , zgifl , zgjfl , zgkfl , ztxfl  , ztyfl  , ztzfl   , zttfl , zagefl, zagenewfl) 
+      CALL wrk_alloc( jpnfl , zufl  , zvfl  , zwfl  , zudfl  , zvdfl  , zwdfl   , zgidfl, zgjdfl, zgkdfl   )
+
       IF( kt == nit000 ) THEN
          IF(lwp) WRITE(numout,*)
@@ -406,4 +413,9 @@
       ENDIF
       !
+      CALL wrk_dealloc( jpnfl , iil   , ijl   , ikl   , iiloc  ,  ijloc           )
+      CALL wrk_dealloc( jpnfl , iiinfl, ijinfl, ikinfl, iioutfl, ijoutfl, ikoutfl )
+      CALL wrk_dealloc( jpnfl , zgifl , zgjfl , zgkfl , ztxfl  , ztyfl  , ztzfl   , zttfl , zagefl, zagenewfl) 
+      CALL wrk_dealloc( jpnfl , zufl  , zvfl  , zwfl  , zudfl  , zvdfl  , zwdfl   , zgidfl, zgjdfl, zgkdfl   )
+      !
    END SUBROUTINE flo_blk
 
