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.
agrif_user.F90 in branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/NST_SRC – NEMO

source: branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/NST_SRC/agrif_user.F90 @ 2677

Last change on this file since 2677 was 2677, checked in by rblod, 13 years ago

Commit in NST_SRC for agrif and dynamic memory

  • Property svn:keywords set to Id
File size: 20.0 KB
Line 
1#if defined key_agrif
2   !!----------------------------------------------------------------------
3   !! NEMO/NST 3.3 , NEMO Consortium (2010)
4   !! $Id$
5   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
6   !!----------------------------------------------------------------------
7   SUBROUTINE agrif_before_regridding
8   END SUBROUTINE
9
10   SUBROUTINE Agrif_InitWorkspace
11      !!----------------------------------------------------------------------
12      !!                 *** ROUTINE Agrif_InitWorkspace ***
13      !!----------------------------------------------------------------------
14      USE par_oce
15      USE dom_oce
16      USE Agrif_Util
17      USE nemogcm
18      !!
19      IMPLICIT NONE
20      !!
21      IF( .NOT. Agrif_Root() ) THEN
22         jpni = Agrif_Parent(jpni)
23         jpnj = Agrif_Parent(jpnj)
24         jpnij = Agrif_Parent(jpnij)
25         jpiglo  = nbcellsx + 2 + 2*nbghostcells
26         jpjglo  = nbcellsy + 2 + 2*nbghostcells
27         jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci
28         jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj
29         jpk     = jpkdta
30         jpim1   = jpi-1
31         jpjm1   = jpj-1
32         jpkm1   = jpk-1                                       
33         jpij    = jpi*jpj
34         jpidta  = jpiglo
35         jpjdta  = jpjglo
36         jpizoom = 1
37         jpjzoom = 1
38         nperio  = 0
39         jperio  = 0
40      ENDIF
41      !
42   END SUBROUTINE Agrif_InitWorkspace
43
44
45   SUBROUTINE Agrif_InitValues
46      !!----------------------------------------------------------------------
47      !!                 *** ROUTINE Agrif_InitValues ***
48      !!
49      !! ** Purpose :: Declaration of variables to be interpolated
50      !!----------------------------------------------------------------------
51      USE Agrif_Util
52      USE oce 
53      USE dom_oce
54      USE nemogcm
55#if defined key_tradmp   ||   defined key_esopa
56      USE tradmp
57#endif
58#if defined key_obc   ||   defined key_esopa
59      USE obc_par
60#endif
61      !!
62      IMPLICIT NONE
63      !!
64
65      ! 0. Initializations
66      !-------------------
67#if defined key_orca_r025 || defined key_orca_r05 || defined key_orca_r2 || defined key_orca_r4
68      jp_cfg = -1    ! set special value for jp_cfg on fine grids
69      cp_cfg = "default"
70#endif
71
72      ! Specific fine grid Initializations
73#if defined key_tradmp || defined key_esopa
74      ! no tracer damping on fine grids
75      lk_tradmp = .FALSE.
76#endif
77#if defined key_obc || defined key_esopa
78      ! no open boundary on fine grids
79      lk_obc = .FALSE.
80#endif
81
82      CALL nemo_init  ! Initializations of each fine grid
83      CALL agrif_nemo_init
84# if ! defined key_offline
85      CALL Agrif_InitValues_cont
86# endif       
87# if defined key_top
88      CALL Agrif_InitValues_cont_top
89# endif     
90   END SUBROUTINE Agrif_initvalues
91
92# if ! defined key_offline
93   SUBROUTINE Agrif_InitValues_cont
94      !!----------------------------------------------------------------------
95      !!                 *** ROUTINE Agrif_InitValues_cont ***
96      !!
97      !! ** Purpose :: Declaration of variables to be interpolated
98      !!----------------------------------------------------------------------
99      USE Agrif_Util
100      USE oce 
101      USE dom_oce
102      USE nemogcm
103      USE sol_oce
104      USE in_out_manager
105      USE agrif_opa_update
106      USE agrif_opa_interp
107      USE agrif_opa_sponge
108      !!
109      IMPLICIT NONE
110      !!
111      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tabtemp
112      LOGICAL :: check_namelist
113      !!----------------------------------------------------------------------
114
115      ALLOCATE(tabtemp(jpi, jpj, jpk))
116     
117     
118      ! 1. Declaration of the type of variable which have to be interpolated
119      !---------------------------------------------------------------------
120      CALL agrif_declare_var
121
122      ! 2. First interpolations of potentially non zero fields
123      !-------------------------------------------------------
124      Agrif_SpecialValue=0.
125      Agrif_UseSpecialValue = .TRUE.
126      Call Agrif_Bc_variable(tabtemp,tn_id,calledweight=1.,procname=interptn)
127   
128      Call Agrif_Bc_variable(tabtemp,sn_id,calledweight=1.,procname=interpsn)
129      Call Agrif_Bc_variable(tabtemp,un_id,calledweight=1.,procname=interpu)
130      Call Agrif_Bc_variable(tabtemp,vn_id,calledweight=1.,procname=interpv)
131
132      Call Agrif_Bc_variable(tabtemp,ta_id,calledweight=1.,procname=interptn)
133      Call Agrif_Bc_variable(tabtemp,sa_id,calledweight=1.,procname=interpsn)
134
135      Call Agrif_Bc_variable(tabtemp,ua_id,calledweight=1.,procname=interpun)
136      Call Agrif_Bc_variable(tabtemp,va_id,calledweight=1.,procname=interpvn)
137      Agrif_UseSpecialValue = .FALSE.
138
139      ! 3. Some controls
140      !-----------------
141      check_namelist = .true.
142           
143      IF( check_namelist ) THEN
144     
145         ! Check time steps           
146         IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN
147            WRITE(*,*) 'incompatible time step between grids'
148            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
149            WRITE(*,*) 'child  grid value : ',nint(rdt)
150            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
151            STOP
152         ENDIF
153         
154         ! Check run length
155         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
156            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
157            WRITE(*,*) 'incompatible run length between grids'
158            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
159               Agrif_Parent(nit000)+1),' time step'
160            WRITE(*,*) 'child  grid value : ', &
161               (nitend-nit000+1),' time step'
162            WRITE(*,*) 'value on child grid should be : ', &
163               Agrif_IRhot() * (Agrif_Parent(nitend)- &
164               Agrif_Parent(nit000)+1)
165            STOP
166         ENDIF
167         
168         ! Check coordinates
169         IF( ln_zps ) THEN
170            ! check parameters for partial steps
171            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
172               WRITE(*,*) 'incompatible e3zps_min between grids'
173               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
174               WRITE(*,*) 'child grid  :',e3zps_min
175               WRITE(*,*) 'those values should be identical'
176               STOP
177            ENDIF         
178            IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN
179               WRITE(*,*) 'incompatible e3zps_rat between grids'
180               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
181               WRITE(*,*) 'child grid  :',e3zps_rat
182               WRITE(*,*) 'those values should be identical'                 
183               STOP
184            ENDIF
185         ENDIF
186      ENDIF
187       
188      CALL Agrif_Update_tra(0)
189      CALL Agrif_Update_dyn(0)
190
191      nbcline = 0
192      !
193      DEALLOCATE(tabtemp)
194      !
195   END SUBROUTINE Agrif_InitValues_cont
196
197   SUBROUTINE agrif_declare_var
198      !!----------------------------------------------------------------------
199      !!                 *** ROUTINE agrif_declarE_var ***
200      !!
201      !! ** Purpose :: Declaration of variables to be interpolated
202      !!----------------------------------------------------------------------
203      USE agrif_util
204      USE oce
205      IMPLICIT NONE
206   
207      ! 1. Declaration of the type of variable which have to be interpolated
208      !---------------------------------------------------------------------
209      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tn_id)
210      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sn_id)
211      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),tb_id)
212      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sb_id)
213      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ta_id)
214      CALL agrif_declare_variable((/2,2,0/),(/3,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),sa_id)
215         
216      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),un_id)
217      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),vn_id)
218      CALL agrif_declare_variable((/1,2,0/),(/2,3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),ua_id)
219      CALL agrif_declare_variable((/2,1,0/),(/3,2,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),va_id)
220   
221      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
222      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
223
224      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),sshn_id)
225      CALL agrif_declare_variable((/2,2/),(/3,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),gcb_id)
226       
227      ! 2. Type of interpolation
228      !-------------------------
229      CALL Agrif_Set_bcinterp(tn_id,interp=AGRIF_linear)
230      CALL Agrif_Set_bcinterp(sn_id,interp=AGRIF_linear)
231      CALL Agrif_Set_bcinterp(ta_id,interp=AGRIF_linear)
232      CALL Agrif_Set_bcinterp(sa_id,interp=AGRIF_linear)
233   
234      Call Agrif_Set_bcinterp(un_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
235      Call Agrif_Set_bcinterp(vn_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
236
237      Call Agrif_Set_bcinterp(ua_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
238      Call Agrif_Set_bcinterp(va_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
239
240      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
241      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
242
243      ! 3. Location of interpolation
244      !-----------------------------
245      Call Agrif_Set_bc(un_id,(/0,1/))
246      Call Agrif_Set_bc(vn_id,(/0,1/))
247
248      Call Agrif_Set_bc(e1u_id,(/0,0/))
249      Call Agrif_Set_bc(e2v_id,(/0,0/))
250
251      Call Agrif_Set_bc(tn_id,(/0,1/))
252      Call Agrif_Set_bc(sn_id,(/0,1/))
253
254      Call Agrif_Set_bc(ta_id,(/-3*Agrif_irhox(),0/))
255      Call Agrif_Set_bc(sa_id,(/-3*Agrif_irhox(),0/))
256
257      Call Agrif_Set_bc(ua_id,(/-2*Agrif_irhox(),0/))
258      Call Agrif_Set_bc(va_id,(/-2*Agrif_irhox(),0/))
259
260      ! 5. Update type
261      !---------------
262      Call Agrif_Set_Updatetype(tn_id, update = AGRIF_Update_Average)
263      Call Agrif_Set_Updatetype(sn_id, update = AGRIF_Update_Average)
264
265      Call Agrif_Set_Updatetype(tb_id, update = AGRIF_Update_Average)
266      Call Agrif_Set_Updatetype(sb_id, update = AGRIF_Update_Average)
267
268      Call Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average)
269      Call Agrif_Set_Updatetype(gcb_id,update = AGRIF_Update_Average)
270
271      Call Agrif_Set_Updatetype(un_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
272      Call Agrif_Set_Updatetype(vn_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
273
274      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
275      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
276
277   END SUBROUTINE agrif_declare_var
278# endif
279   
280# if defined key_top
281   SUBROUTINE Agrif_InitValues_cont_top
282      !!----------------------------------------------------------------------
283      !!                 *** ROUTINE Agrif_InitValues_cont_top ***
284      !!
285      !! ** Purpose :: Declaration of variables to be interpolated
286      !!----------------------------------------------------------------------
287      USE Agrif_Util
288      USE oce 
289      USE dom_oce
290      USE nemogcm
291      USE trc
292      USE in_out_manager
293      USE agrif_top_update
294      USE agrif_top_interp
295      USE agrif_top_sponge
296      !!
297      IMPLICIT NONE
298      !!
299      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp
300      LOGICAL :: check_namelist
301      !!----------------------------------------------------------------------
302
303      ALLOCATE(tabtrtemp(jpi, jpj, jpk, jptra))
304     
305     
306      ! 1. Declaration of the type of variable which have to be interpolated
307      !---------------------------------------------------------------------
308      CALL agrif_declare_var_top
309
310      ! 2. First interpolations of potentially non zero fields
311      !-------------------------------------------------------
312      Agrif_SpecialValue=0.
313      Agrif_UseSpecialValue = .TRUE.
314      Call Agrif_Bc_variable(tabtrtemp,trn_id,calledweight=1.)
315      Call Agrif_Bc_variable(tabtrtemp,tra_id,calledweight=1.,procname=interptrn)
316      Agrif_UseSpecialValue = .FALSE.
317
318      ! 3. Some controls
319      !-----------------
320      check_namelist = .true.
321           
322      IF( check_namelist ) THEN
323#  if defined offline     
324         ! Check time steps           
325         IF( nint(Agrif_Rhot()) * nint(rdt) .ne. Agrif_Parent(rdt) ) THEN
326            WRITE(*,*) 'incompatible time step between grids'
327            WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt)
328            WRITE(*,*) 'child  grid value : ',nint(rdt)
329            WRITE(*,*) 'value on parent grid should be : ',rdt*Agrif_Rhot()
330            STOP
331         ENDIF
332         
333         ! Check run length
334         IF( Agrif_IRhot() * (Agrif_Parent(nitend)- &
335            Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN
336            WRITE(*,*) 'incompatible run length between grids'
337            WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- &
338               Agrif_Parent(nit000)+1),' time step'
339            WRITE(*,*) 'child  grid value : ', &
340               (nitend-nit000+1),' time step'
341            WRITE(*,*) 'value on child grid should be : ', &
342               Agrif_IRhot() * (Agrif_Parent(nitend)- &
343               Agrif_Parent(nit000)+1)
344            STOP
345         ENDIF
346         
347         ! Check coordinates
348         IF( ln_zps ) THEN
349            ! check parameters for partial steps
350            IF( Agrif_Parent(e3zps_min) .ne. e3zps_min ) THEN
351               WRITE(*,*) 'incompatible e3zps_min between grids'
352               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_min)
353               WRITE(*,*) 'child grid  :',e3zps_min
354               WRITE(*,*) 'those values should be identical'
355               STOP
356            ENDIF         
357            IF( Agrif_Parent(e3zps_rat) .ne. e3zps_rat ) THEN
358               WRITE(*,*) 'incompatible e3zps_rat between grids'
359               WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat)
360               WRITE(*,*) 'child grid  :',e3zps_rat
361               WRITE(*,*) 'those values should be identical'                 
362               STOP
363            ENDIF
364         ENDIF
365#  endif         
366        ! Check passive tracer cell
367        IF( nn_dttrc .ne. 1 ) THEN
368           WRITE(*,*) 'nn_dttrc should be equal to 1'
369        ENDIF
370      ENDIF
371       
372      CALL Agrif_Update_trc(0)
373      nbcline_trc = 0
374      !
375      DEALLOCATE(tabtrtemp)
376      !
377   END SUBROUTINE Agrif_InitValues_cont_top
378
379
380   SUBROUTINE agrif_declare_var_top
381      !!----------------------------------------------------------------------
382      !!                 *** ROUTINE agrif_declare_var_top ***
383      !!
384      !! ** Purpose :: Declaration of TOP variables to be interpolated
385      !!----------------------------------------------------------------------
386      USE agrif_util
387      USE dom_oce
388      USE trc
389     
390      IMPLICIT NONE
391   
392      ! 1. Declaration of the type of variable which have to be interpolated
393      !---------------------------------------------------------------------
394      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
395      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trn_id)
396      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0/),(/'x','y','N','N'/),  &
397      &                           (/1,1,1,1/),(/jpi,jpj,jpk,jptra/),trb_id)
398      CALL agrif_declare_variable((/2,2,0,0/),(/3,3,0,0,jptra/),(/'x','y','N','N'/),  &
399      &                           (/1,1,1,1/),(/jpi,jpj,jpk/),tra_id)
400           
401#  if defined key_offline
402      CALL agrif_declare_variable((/1,2/),(/2,3/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e1u_id)
403      CALL agrif_declare_variable((/2,1/),(/3,2/),(/'x','y'/),(/1,1/),(/jpi,jpj/),e2v_id)
404#  endif
405       
406      ! 2. Type of interpolation
407      !-------------------------
408      CALL Agrif_Set_bcinterp(trn_id,interp=AGRIF_linear)
409      CALL Agrif_Set_bcinterp(tra_id,interp=AGRIF_linear)
410   
411#  if defined key_offline
412      Call Agrif_Set_bcinterp(e1u_id,interp1=Agrif_linear,interp2=AGRIF_ppm)
413      Call Agrif_Set_bcinterp(e2v_id,interp1=AGRIF_ppm,interp2=Agrif_linear)
414#  endif
415
416      ! 3. Location of interpolation
417      !-----------------------------
418#  if defined key_offline
419      Call Agrif_Set_bc(e1u_id,(/0,0/))
420      Call Agrif_Set_bc(e2v_id,(/0,0/))
421#  endif
422      Call Agrif_Set_bc(trn_id,(/0,1/))
423      Call Agrif_Set_bc(tra_id,(/-3*Agrif_irhox(),0/))
424
425      ! 5. Update type
426      !---------------
427      Call Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average)
428      Call Agrif_Set_Updatetype(trb_id, update = AGRIF_Update_Average)
429
430#  if defined key_offline
431      Call Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
432      Call Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
433#  endif
434
435   END SUBROUTINE agrif_declare_var_top
436# endif
437   
438   SUBROUTINE Agrif_detect( g, sizex )
439      !!----------------------------------------------------------------------
440      !!   *** ROUTINE Agrif_detect ***
441      !!----------------------------------------------------------------------
442      USE Agrif_Types
443      !!
444      INTEGER, DIMENSION(2) :: sizex
445      INTEGER, DIMENSION(sizex(1),sizex(2)) :: g 
446      !!----------------------------------------------------------------------
447      !
448      RETURN
449      !
450   END SUBROUTINE Agrif_detect
451
452
453   SUBROUTINE agrif_nemo_init
454      !!----------------------------------------------------------------------
455      !!                     *** ROUTINE agrif_init ***
456      !!----------------------------------------------------------------------
457      USE agrif_oce 
458      USE in_out_manager
459      USE lib_mpp
460      !!
461      IMPLICIT NONE
462      !!
463      NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn
464      INTEGER :: ierr
465      !!----------------------------------------------------------------------
466      !
467      REWIND( numnam )                ! Read namagrif namelist
468      READ  ( numnam, namagrif )
469      !
470      IF(lwp) THEN                    ! control print
471         WRITE(numout,*)
472         WRITE(numout,*) 'agrif_nemo_init : AGRIF parameters'
473         WRITE(numout,*) '~~~~~~~~~~~~~~~'
474         WRITE(numout,*) '   Namelist namagrif : set AGRIF parameters'
475         WRITE(numout,*) '      baroclinic update frequency       nn_cln_update = ', nn_cln_update
476         WRITE(numout,*) '      sponge coefficient for tracers    rn_sponge_tra = ', rn_sponge_tra, ' s'
477         WRITE(numout,*) '      sponge coefficient for dynamics   rn_sponge_tra = ', rn_sponge_dyn, ' s'
478         WRITE(numout,*) '      use special values for dynamics   ln_spc_dyn    = ', ln_spc_dyn
479         WRITE(numout,*) 
480      ENDIF
481      !
482      ! convert DOCTOR namelist name into OLD names
483      nbclineupdate = nn_cln_update
484      visc_tra      = rn_sponge_tra
485      visc_dyn      = rn_sponge_dyn
486      !
487      ierr = agrif_oce_alloc()
488      IF( ierr  > 0 )   CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed')
489      !
490    END SUBROUTINE agrif_nemo_init
491
492# if defined key_mpp_mpi
493
494   SUBROUTINE Agrif_InvLoc( indloc, nprocloc, i, indglob )
495      !!----------------------------------------------------------------------
496      !!                     *** ROUTINE Agrif_detect ***
497      !!----------------------------------------------------------------------
498      USE dom_oce
499      !!
500      IMPLICIT NONE
501      !!
502      INTEGER :: indglob,indloc,nprocloc,i
503      !!----------------------------------------------------------------------
504      !
505      SELECT CASE( i )
506      CASE(1)   ;   indglob = indloc + nimppt(nprocloc+1) - 1
507      CASE(2)   ;   indglob = indloc + njmppt(nprocloc+1) - 1 
508      CASE(3)   ;   indglob = indloc
509      CASE(4)   ;   indglob = indloc
510      END SELECT
511      !
512   END SUBROUTINE Agrif_InvLoc
513
514# endif
515
516#else
517   SUBROUTINE Subcalledbyagrif
518      !!----------------------------------------------------------------------
519      !!   *** ROUTINE Subcalledbyagrif ***
520      !!----------------------------------------------------------------------
521      WRITE(*,*) 'Impossible to be here'
522   END SUBROUTINE Subcalledbyagrif
523#endif
Note: See TracBrowser for help on using the repository browser.