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.
floblk.F90 in branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO – NEMO

source: branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/FLO/floblk.F90 @ 3181

Last change on this file since 3181 was 3151, checked in by cbricaud, 13 years ago

new dynamical allocation and add timing calls

  • Property svn:keywords set to Id
File size: 19.0 KB
Line 
1MODULE floblk
2   !!======================================================================
3   !!                     ***  MODULE  floblk  ***
4   !! Ocean floats :   trajectory computation
5   !!======================================================================
6#if   defined key_floats   ||   defined key_esopa
7   !!----------------------------------------------------------------------
8   !!   'key_floats'                                     float trajectories
9   !!----------------------------------------------------------------------
10   !!    flotblk     : compute float trajectories with Blanke algorithme
11   !!----------------------------------------------------------------------
12   USE flo_oce         ! ocean drifting floats
13   USE oce             ! ocean dynamics and tracers
14   USE dom_oce         ! ocean space and time domain
15   USE phycst          ! physical constants
16   USE obc_par         ! open boundary condition parameters
17   USE in_out_manager  ! I/O manager
18   USE lib_mpp         ! distribued memory computing library
19   USE wrk_nemo_2      ! working array
20
21   IMPLICIT NONE
22   PRIVATE
23
24   PUBLIC   flo_blk    ! routine called by floats.F90
25
26   !! * Substitutions
27#  include "domzgr_substitute.h90"
28   !!----------------------------------------------------------------------
29   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
30   !! $Id$
31   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
32   !!----------------------------------------------------------------------
33CONTAINS
34
35   SUBROUTINE flo_blk( kt )
36      !!---------------------------------------------------------------------
37      !!                  ***  ROUTINE flo_blk  ***
38      !!           
39      !! ** Purpose :   Compute the geographical position,latitude, longitude
40      !!      and depth of each float at each time step.
41      !!
42      !! ** Method  :   The position of a float is computed with Bruno Blanke
43      !!      algorithm. We need to know the velocity field, the old positions
44      !!      of the floats and the grid defined on the domain.
45      !!----------------------------------------------------------------------
46      INTEGER, INTENT( in  ) ::   kt ! ocean time step
47      !!
48      INTEGER :: jfl              ! dummy loop arguments
49      INTEGER :: ind, ifin, iloop
50      REAL(wp)   ::       &
51         zuinfl,zvinfl,zwinfl,      &     ! transport across the input face
52         zuoutfl,zvoutfl,zwoutfl,   &     ! transport across the ouput face
53         zvol,                      &     ! volume of the mesh
54         zsurfz,                    &     ! surface of the face of the mesh
55         zind
56
57      REAL(wp), DIMENSION ( 2 )  ::   zsurfx, zsurfy   ! surface of the face of the mesh
58
59      INTEGER , POINTER, DIMENSION ( : )  ::   &
60         iil, ijl, ikl,             &     ! index of nearest mesh
61         iiloc , ijloc,             &
62         iiinfl, ijinfl, ikinfl,    &     ! index of input mesh of the float.
63         iioutfl, ijoutfl, ikoutfl        ! index of output mesh of the float.
64      REAL(wp) , POINTER, DIMENSION ( : )  ::    &
65         zgifl, zgjfl, zgkfl,       &     ! position of floats, index on
66                                          ! velocity mesh.
67         ztxfl, ztyfl, ztzfl,       &     ! time for a float to quit the mesh
68                                          ! across one of the face x,y and z
69         zttfl,                     &     ! time for a float to quit the mesh
70         zagefl,                    &     ! time during which, trajectorie of
71                                          ! the float has been computed
72         zagenewfl,                 &     ! new age of float after calculation
73                                          ! of new position
74         zufl, zvfl, zwfl,          &     ! interpolated vel. at float position
75         zudfl, zvdfl, zwdfl,       &     ! velocity diff input/output of mesh
76         zgidfl, zgjdfl, zgkdfl           ! direction index of float
77      !!---------------------------------------------------------------------
78      CALL wrk_alloc( jpnfl , iil   , ijl   , ikl   , iiloc  ,  ijloc           )
79      CALL wrk_alloc( jpnfl , iiinfl, ijinfl, ikinfl, iioutfl, ijoutfl, ikoutfl )
80      CALL wrk_alloc( jpnfl , zgifl , zgjfl , zgkfl , ztxfl  , ztyfl  , ztzfl   , zttfl , zagefl, zagenewfl) 
81      CALL wrk_alloc( jpnfl , zufl  , zvfl  , zwfl  , zudfl  , zvdfl  , zwdfl   , zgidfl, zgjdfl, zgkdfl   )
82
83      IF( kt == nit000 ) THEN
84         IF(lwp) WRITE(numout,*)
85         IF(lwp) WRITE(numout,*) 'flo_blk : compute Blanke trajectories for floats '
86         IF(lwp) WRITE(numout,*) '~~~~~~~ '
87      ENDIF
88
89      ! Initialisation of parameters
90     
91      DO jfl = 1, jpnfl
92         ! ages of floats are put at zero
93         zagefl(jfl) = 0.
94         ! index on the velocity grid
95         ! We considere k coordinate negative, with this transformation
96         ! the computation in the 3 direction is the same.
97         zgifl(jfl) = tpifl(jfl) - 0.5
98         zgjfl(jfl) = tpjfl(jfl) - 0.5
99         zgkfl(jfl) = MIN(-1.,-(tpkfl(jfl)))
100         ! surface drift every 10 days
101         IF( ln_argo ) THEN
102            IF( MOD(kt,150) >= 146 .OR. MOD(kt,150) == 0 )  zgkfl(jfl) = -1.
103         ENDIF
104         ! index of T mesh
105         iil(jfl) = 1 + INT(zgifl(jfl))
106         ijl(jfl) = 1 + INT(zgjfl(jfl))
107         ikl(jfl) =     INT(zgkfl(jfl))
108      END DO
109       
110      iloop = 0
111222   DO jfl = 1, jpnfl
112# if   defined key_mpp_mpi
113         IF( (iil(jfl) >= (mig(nldi)-jpizoom+1)) .AND. (iil(jfl) <= (mig(nlei)-jpizoom+1)) .AND.   &
114             (ijl(jfl) >= (mjg(nldj)-jpjzoom+1)) .AND. (ijl(jfl) <= (mjg(nlej)-jpjzoom+1)) ) THEN
115            iiloc(jfl) = iil(jfl) - (mig(1)-jpizoom+1) + 1
116            ijloc(jfl) = ijl(jfl) - (mjg(1)-jpjzoom+1) + 1
117# else
118            iiloc(jfl) = iil(jfl)
119            ijloc(jfl) = ijl(jfl)
120# endif
121           
122            ! compute the transport across the mesh where the float is.           
123!!bug (gm) change e3t into fse3. but never checked
124            zsurfx(1) = e2u(iiloc(jfl)-1,ijloc(jfl)  ) * fse3u(iiloc(jfl)-1,ijloc(jfl)  ,-ikl(jfl))
125            zsurfx(2) = e2u(iiloc(jfl)  ,ijloc(jfl)  ) * fse3u(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl))
126            zsurfy(1) = e1v(iiloc(jfl)  ,ijloc(jfl)-1) * fse3v(iiloc(jfl)  ,ijloc(jfl)-1,-ikl(jfl))
127            zsurfy(2) = e1v(iiloc(jfl)  ,ijloc(jfl)  ) * fse3v(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl))
128
129            ! for a isobar float zsurfz is put to zero. The vertical velocity will be zero too.
130            zsurfz = e1t(iiloc(jfl),ijloc(jfl)) * e2t(iiloc(jfl),ijloc(jfl))
131            zvol   = zsurfz * fse3t(iiloc(jfl),ijloc(jfl),-ikl(jfl))
132
133            !
134            zuinfl =( ub(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(1)
135            zuoutfl=( ub(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(2)
136            zvinfl =( vb(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) )/2.*zsurfy(1)
137            zvoutfl=( vb(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl)) )/2.*zsurfy(2)
138            zwinfl =-(wb(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1))    &
139               &   +  wn(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. *  zsurfz*nisobfl(jfl)
140            zwoutfl=-(wb(iiloc(jfl),ijloc(jfl),- ikl(jfl)   )   &
141               &   +  wn(iiloc(jfl),ijloc(jfl),- ikl(jfl)   ) )/2. *  zsurfz*nisobfl(jfl)
142           
143            ! interpolation of velocity field on the float initial position           
144            zufl(jfl)=  zuinfl  + ( zgifl(jfl) - float(iil(jfl)-1) ) * ( zuoutfl - zuinfl)
145            zvfl(jfl)=  zvinfl  + ( zgjfl(jfl) - float(ijl(jfl)-1) ) * ( zvoutfl - zvinfl)
146            zwfl(jfl)=  zwinfl  + ( zgkfl(jfl) - float(ikl(jfl)-1) ) * ( zwoutfl - zwinfl)
147           
148            ! faces of input and output
149            ! u-direction
150            IF( zufl(jfl) < 0. ) THEN
151               iioutfl(jfl) = iil(jfl) - 1.
152               iiinfl (jfl) = iil(jfl)
153               zind   = zuinfl
154               zuinfl = zuoutfl
155               zuoutfl= zind
156            ELSE
157               iioutfl(jfl) = iil(jfl)
158               iiinfl (jfl) = iil(jfl) - 1
159            ENDIF
160            ! v-direction       
161            IF( zvfl(jfl) < 0. ) THEN
162               ijoutfl(jfl) = ijl(jfl) - 1.
163               ijinfl (jfl) = ijl(jfl)
164               zind    = zvinfl
165               zvinfl  = zvoutfl
166               zvoutfl = zind
167            ELSE
168               ijoutfl(jfl) = ijl(jfl)
169               ijinfl (jfl) = ijl(jfl) - 1.
170            ENDIF
171            ! w-direction
172            IF( zwfl(jfl) < 0. ) THEN
173               ikoutfl(jfl) = ikl(jfl) - 1.
174               ikinfl (jfl) = ikl(jfl)
175               zind    = zwinfl
176               zwinfl  = zwoutfl
177               zwoutfl = zind
178            ELSE
179               ikoutfl(jfl) = ikl(jfl)
180               ikinfl (jfl) = ikl(jfl) - 1.
181            ENDIF
182           
183            ! compute the time to go out the mesh across a face
184            ! u-direction
185            zudfl (jfl) = zuoutfl - zuinfl
186            zgidfl(jfl) = float(iioutfl(jfl) - iiinfl(jfl))
187            IF( zufl(jfl)*zuoutfl <= 0. ) THEN
188               ztxfl(jfl) = 1.E99
189            ELSE
190               IF( ABS(zudfl(jfl)) >= 1.E-5 ) THEN
191                  ztxfl(jfl)= zgidfl(jfl)/zudfl(jfl) * LOG(zuoutfl/zufl (jfl))
192               ELSE
193                  ztxfl(jfl)=(float(iioutfl(jfl))-zgifl(jfl))/zufl(jfl)
194               ENDIF
195               IF( (ABS(zgifl(jfl)-float(iiinfl (jfl))) <=  1.E-7) .OR.   &
196                   (ABS(zgifl(jfl)-float(iioutfl(jfl))) <=  1.E-7) ) THEN
197                  ztxfl(jfl)=(zgidfl(jfl))/zufl(jfl)
198               ENDIF
199            ENDIF
200            ! v-direction
201            zvdfl (jfl) = zvoutfl - zvinfl
202            zgjdfl(jfl) = float(ijoutfl(jfl)-ijinfl(jfl))
203            IF( zvfl(jfl)*zvoutfl <= 0. ) THEN
204               ztyfl(jfl) = 1.E99
205            ELSE
206               IF( ABS(zvdfl(jfl)) >= 1.E-5 ) THEN
207                  ztyfl(jfl) = zgjdfl(jfl)/zvdfl(jfl) * LOG(zvoutfl/zvfl (jfl))
208               ELSE
209                  ztyfl(jfl) = (float(ijoutfl(jfl)) - zgjfl(jfl))/zvfl(jfl)
210               ENDIF
211               IF( (ABS(zgjfl(jfl)-float(ijinfl (jfl))) <= 1.E-7) .OR.   &
212                   (ABS(zgjfl(jfl)-float(ijoutfl(jfl))) <=  1.E-7) ) THEN
213                  ztyfl(jfl) = (zgjdfl(jfl)) / zvfl(jfl)
214               ENDIF
215            ENDIF
216            ! w-direction       
217            IF( nisobfl(jfl) == 1. ) THEN
218               zwdfl (jfl) = zwoutfl - zwinfl
219               zgkdfl(jfl) = float(ikoutfl(jfl) - ikinfl(jfl))
220               IF( zwfl(jfl)*zwoutfl <= 0. ) THEN
221                  ztzfl(jfl) = 1.E99
222               ELSE
223                  IF( ABS(zwdfl(jfl)) >= 1.E-5 ) THEN
224                     ztzfl(jfl) = zgkdfl(jfl)/zwdfl(jfl) * LOG(zwoutfl/zwfl (jfl))
225                  ELSE
226                     ztzfl(jfl) = (float(ikoutfl(jfl)) - zgkfl(jfl))/zwfl(jfl)
227                  ENDIF
228                  IF( (ABS(zgkfl(jfl)-float(ikinfl (jfl))) <=  1.E-7) .OR.   &
229                      (ABS(zgkfl(jfl)-float(ikoutfl(jfl))) <= 1.E-7) ) THEN
230                     ztzfl(jfl) = (zgkdfl(jfl)) / zwfl(jfl)
231                  ENDIF
232               ENDIF
233            ENDIF
234           
235            ! the time to go leave the mesh is the smallest time
236                   
237            IF( nisobfl(jfl) == 1. ) THEN
238               zttfl(jfl) = MIN(ztxfl(jfl),ztyfl(jfl),ztzfl(jfl))
239            ELSE
240               zttfl(jfl) = MIN(ztxfl(jfl),ztyfl(jfl))
241            ENDIF
242            ! new age of the FLOAT
243            zagenewfl(jfl) = zagefl(jfl) + zttfl(jfl)*zvol
244            ! test to know if the "age" of the float is not bigger than the
245            ! time step
246            IF( zagenewfl(jfl) > rdt ) THEN
247               zttfl(jfl) = (rdt-zagefl(jfl)) / zvol
248               zagenewfl(jfl) = rdt
249            ENDIF
250           
251            ! In the "minimal" direction we compute the index of new mesh
252            ! on i-direction
253            IF( ztxfl(jfl) <=  zttfl(jfl) ) THEN
254               zgifl(jfl) = float(iioutfl(jfl))
255               ind = iioutfl(jfl)
256               IF( iioutfl(jfl) >= iiinfl(jfl) ) THEN
257                  iioutfl(jfl) = iioutfl(jfl) + 1
258               ELSE
259                  iioutfl(jfl) = iioutfl(jfl) - 1
260               ENDIF
261               iiinfl(jfl) = ind
262            ELSE
263               IF( ABS(zudfl(jfl)) >= 1.E-5 ) THEN
264                  zgifl(jfl) = zgifl(jfl) + zgidfl(jfl)*zufl(jfl)    &
265                     &       * ( EXP( zudfl(jfl)/zgidfl(jfl)*zttfl(jfl) ) - 1. ) /  zudfl(jfl)
266               ELSE
267                  zgifl(jfl) = zgifl(jfl) + zufl(jfl) * zttfl(jfl)
268               ENDIF
269            ENDIF
270            ! on j-direction
271            IF( ztyfl(jfl) <= zttfl(jfl) ) THEN
272               zgjfl(jfl) = float(ijoutfl(jfl))
273               ind = ijoutfl(jfl)
274               IF( ijoutfl(jfl) >= ijinfl(jfl) ) THEN
275                  ijoutfl(jfl) = ijoutfl(jfl) + 1
276               ELSE
277                  ijoutfl(jfl) = ijoutfl(jfl) - 1
278               ENDIF
279               ijinfl(jfl) = ind
280            ELSE
281               IF( ABS(zvdfl(jfl)) >= 1.E-5 ) THEN
282                  zgjfl(jfl) = zgjfl(jfl)+zgjdfl(jfl)*zvfl(jfl)   &
283                     &       * ( EXP(zvdfl(jfl)/zgjdfl(jfl)*zttfl(jfl)) - 1. ) /  zvdfl(jfl)
284               ELSE
285                  zgjfl(jfl) = zgjfl(jfl)+zvfl(jfl)*zttfl(jfl)
286               ENDIF
287            ENDIF
288            ! on k-direction
289            IF( nisobfl(jfl) == 1. ) THEN
290               IF( ztzfl(jfl) <= zttfl(jfl) ) THEN
291                  zgkfl(jfl) = float(ikoutfl(jfl))
292                  ind = ikoutfl(jfl)
293                  IF( ikoutfl(jfl) >= ikinfl(jfl) ) THEN
294                     ikoutfl(jfl) = ikoutfl(jfl)+1
295                  ELSE
296                     ikoutfl(jfl) = ikoutfl(jfl)-1
297                  ENDIF
298                  ikinfl(jfl) = ind
299               ELSE
300                  IF( ABS(zwdfl(jfl)) >= 1.E-5 ) THEN
301                     zgkfl(jfl) = zgkfl(jfl)+zgkdfl(jfl)*zwfl(jfl)    &
302                        &       * ( EXP(zwdfl(jfl)/zgkdfl(jfl)*zttfl(jfl)) - 1. ) /  zwdfl(jfl)
303                  ELSE
304                     zgkfl(jfl) = zgkfl(jfl)+zwfl(jfl)*zttfl(jfl)
305                  ENDIF
306               ENDIF
307            ENDIF
308           
309            ! coordinate of the new point on the temperature grid
310           
311            iil(jfl) = MAX(iiinfl(jfl),iioutfl(jfl))
312            ijl(jfl) = MAX(ijinfl(jfl),ijoutfl(jfl))
313            IF( nisobfl(jfl) ==  1 ) ikl(jfl) = MAX(ikinfl(jfl),ikoutfl(jfl))
314!!Alexcadm   write(*,*)'PE ',narea,
315!!Alexcadm     .    iiinfl(jfl),iioutfl(jfl),ijinfl(jfl)
316!!Alexcadm     .     ,ijoutfl(jfl),ikinfl(jfl),
317!!Alexcadm     .    ikoutfl(jfl),ztxfl(jfl),ztyfl(jfl)
318!!Alexcadm     .     ,ztzfl(jfl),zgifl(jfl),
319!!Alexcadm     .  zgjfl(jfl)
320!!Alexcadm  IF (jfl == 910) write(*,*)'Flotteur 910',
321!!Alexcadm     .    iiinfl(jfl),iioutfl(jfl),ijinfl(jfl)
322!!Alexcadm     .     ,ijoutfl(jfl),ikinfl(jfl),
323!!Alexcadm     .    ikoutfl(jfl),ztxfl(jfl),ztyfl(jfl)
324!!Alexcadm     .     ,ztzfl(jfl),zgifl(jfl),
325!!Alexcadm     .  zgjfl(jfl)
326            ! reinitialisation of the age of FLOAT
327            zagefl(jfl) = zagenewfl(jfl)
328# if   defined key_mpp_mpi
329         ELSE
330            ! we put zgifl, zgjfl, zgkfl, zagefl
331            zgifl (jfl) = 0.
332            zgjfl (jfl) = 0.
333            zgkfl (jfl) = 0.
334            zagefl(jfl) = 0.
335            iil(jfl) = 0
336            ijl(jfl) = 0
337         ENDIF
338# endif
339      END DO
340     
341      ! synchronisation
342      IF( lk_mpp )   CALL mpp_sum( zgifl , jpnfl )   ! sums over the global domain
343      IF( lk_mpp )   CALL mpp_sum( zgjfl , jpnfl )
344      IF( lk_mpp )   CALL mpp_sum( zgkfl , jpnfl )
345      IF( lk_mpp )   CALL mpp_sum( zagefl, jpnfl )
346      IF( lk_mpp )   CALL mpp_sum( iil   , jpnfl )
347      IF( lk_mpp )   CALL mpp_sum( ijl   , jpnfl )
348     
349      ! in the case of open boundaries we need to test if the floats don't
350      ! go out of the domain. If it goes out, the float is put at the
351      ! middle of the mesh in the domain but the trajectory isn't compute
352      ! more time.     
353# if defined key_obc
354      DO jfl = 1, jpnfl
355         IF( lp_obc_east ) THEN
356            IF( jped <=  zgjfl(jfl) .AND. zgjfl(jfl) <= jpef .AND. nieob-1 <=  zgifl(jfl) ) THEN
357               zgifl (jfl) = INT(zgifl(jfl)) + 0.5
358               zgjfl (jfl) = INT(zgjfl(jfl)) + 0.5
359               zagefl(jfl) = rdt
360            END IF
361         END IF
362         IF( lp_obc_west ) THEN
363            IF( jpwd <= zgjfl(jfl) .AND. zgjfl(jfl) <= jpwf .AND. niwob >=  zgifl(jfl) ) THEN
364               zgifl (jfl) = INT(zgifl(jfl)) + 0.5
365               zgjfl (jfl) = INT(zgjfl(jfl)) + 0.5
366               zagefl(jfl) = rdt
367            END IF
368         END IF
369         IF( lp_obc_north ) THEN
370            IF( jpnd <=  zgifl(jfl) .AND. zgifl(jfl) <= jpnf .AND. njnob-1 >=  zgjfl(jfl) ) THEN
371               zgifl (jfl) = INT(zgifl(jfl)) + 0.5
372               zgjfl (jfl) = INT(zgjfl(jfl)) + 0.5
373               zagefl(jfl) = rdt
374            END IF
375         END IF
376         IF( lp_obc_south ) THEN
377            IF( jpsd <=  zgifl(jfl) .AND. zgifl(jfl) <= jpsf .AND.  njsob >= zgjfl(jfl) ) THEN
378               zgifl (jfl) = INT(zgifl(jfl)) + 0.5
379               zgjfl (jfl) = INT(zgjfl(jfl)) + 0.5
380               zagefl(jfl) = rdt
381            END IF
382         END IF
383      END DO
384#endif
385
386      ! Test to know if a  float hasn't integrated enought time
387      IF( ln_argo ) THEN
388         ifin = 1
389         DO jfl = 1, jpnfl
390            IF( zagefl(jfl) < rdt )   ifin = 0
391            tpifl(jfl) = zgifl(jfl) + 0.5
392            tpjfl(jfl) = zgjfl(jfl) + 0.5
393         END DO
394      ELSE
395         ifin = 1
396         DO jfl = 1, jpnfl
397            IF( zagefl(jfl) < rdt )   ifin = 0
398            tpifl(jfl) = zgifl(jfl) + 0.5
399            tpjfl(jfl) = zgjfl(jfl) + 0.5
400            IF( nisobfl(jfl) == 1 ) tpkfl(jfl) = -(zgkfl(jfl))
401         END DO
402      ENDIF
403!!Alexcadm  IF (lwp) write(numout,*) '---------'
404!!Alexcadm  IF (lwp) write(numout,*) 'before Erika:',tpifl(880),tpjfl(880),
405!!Alexcadm     .       tpkfl(880),zufl(880),zvfl(880),zwfl(880)
406!!Alexcadm  IF (lwp) write(numout,*) 'first Erika:',tpifl(900),tpjfl(900),
407!!Alexcadm     .       tpkfl(900),zufl(900),zvfl(900),zwfl(900)
408!!Alexcadm  IF (lwp) write(numout,*) 'last Erika:',tpifl(jpnfl),tpjfl(jpnfl),
409!!Alexcadm     .       tpkfl(jpnfl),zufl(jpnfl),zvfl(jpnfl),zwfl(jpnfl)
410      IF( ifin == 0 ) THEN
411         iloop = iloop + 1 
412         GO TO 222
413      ENDIF
414      !
415      CALL wrk_dealloc( jpnfl , iil   , ijl   , ikl   , iiloc  ,  ijloc           )
416      CALL wrk_dealloc( jpnfl , iiinfl, ijinfl, ikinfl, iioutfl, ijoutfl, ikoutfl )
417      CALL wrk_dealloc( jpnfl , zgifl , zgjfl , zgkfl , ztxfl  , ztyfl  , ztzfl   , zttfl , zagefl, zagenewfl) 
418      CALL wrk_dealloc( jpnfl , zufl  , zvfl  , zwfl  , zudfl  , zvdfl  , zwdfl   , zgidfl, zgjdfl, zgkdfl   )
419      !
420   END SUBROUTINE flo_blk
421
422#  else
423   !!----------------------------------------------------------------------
424   !!   Default option                                         Empty module
425   !!----------------------------------------------------------------------
426CONTAINS
427   SUBROUTINE flo_blk                  ! Empty routine
428   END SUBROUTINE flo_blk 
429#endif
430   
431   !!======================================================================
432END MODULE floblk 
Note: See TracBrowser for help on using the repository browser.