source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/src/INCA_PARA/mod_inca_mpi_transfert.F90 @ 6610

Last change on this file since 6610 was 6610, checked in by acosce, 10 months ago

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 71.4 KB
Line 
1MODULE mod_inca_mpi_transfert
2
3
4  INTERFACE bcast_mpi
5    MODULE PROCEDURE bcast_mpi_c,bcast_mpi_c1,                                        &
6                     bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, &
7                     bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4,bcast_mpi_r5, &
8                     bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4
9  END INTERFACE
10
11  INTERFACE scatter_mpi
12    MODULE PROCEDURE scatter_mpi_i,scatter_mpi_i1,scatter_mpi_i2,scatter_mpi_i3, &
13                     scatter_mpi_r,scatter_mpi_r1,scatter_mpi_r2,scatter_mpi_r3, &
14                     scatter_mpi_l,scatter_mpi_l1,scatter_mpi_l2,scatter_mpi_l3
15  END INTERFACE
16
17 
18  INTERFACE gather_mpi
19    MODULE PROCEDURE gather_mpi_i,gather_mpi_i1,gather_mpi_i2,gather_mpi_i3, &
20                     gather_mpi_r,gather_mpi_r1,gather_mpi_r2,gather_mpi_r3, &
21                     gather_mpi_l,gather_mpi_l1,gather_mpi_l2,gather_mpi_l3 
22  END INTERFACE
23 
24  INTERFACE scatter2D_mpi
25    MODULE PROCEDURE scatter2D_mpi_i,scatter2D_mpi_i1,scatter2D_mpi_i2,scatter2D_mpi_i3, &
26                     scatter2D_mpi_r,scatter2D_mpi_r1,scatter2D_mpi_r2,scatter2D_mpi_r3, &
27                     scatter2D_mpi_l,scatter2D_mpi_l1,scatter2D_mpi_l2,scatter2D_mpi_l3
28  END INTERFACE
29
30  INTERFACE gather2D_mpi
31    MODULE PROCEDURE gather2D_mpi_i,gather2D_mpi_i1,gather2D_mpi_i2,gather2D_mpi_i3, &
32                     gather2D_mpi_r,gather2D_mpi_r1,gather2D_mpi_r2,gather2D_mpi_r3, &
33                     gather2D_mpi_l,gather2D_mpi_l1,gather2D_mpi_l2,gather2D_mpi_l3
34  END INTERFACE
35 
36  INTERFACE reduce_sum_mpi
37    MODULE PROCEDURE reduce_sum_mpi_i,reduce_sum_mpi_i1,reduce_sum_mpi_i2,reduce_sum_mpi_i3,reduce_sum_mpi_i4, &
38                     reduce_sum_mpi_r,reduce_sum_mpi_r1,reduce_sum_mpi_r2,reduce_sum_mpi_r3,reduce_sum_mpi_r4
39  END INTERFACE
40
41 INTERFACE grid1dTo2d_mpi
42    MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, &
43                     grid1dTo2d_mpi_r,grid1dTo2d_mpi_r1,grid1dTo2d_mpi_r2,grid1dTo2d_mpi_r3, &
44                     grid1dTo2d_mpi_l,grid1dTo2d_mpi_l1,grid1dTo2d_mpi_l2,grid1dTo2d_mpi_l3
45 END INTERFACE
46
47 INTERFACE grid2dTo1d_mpi
48    MODULE PROCEDURE grid2dTo1d_mpi_i,grid2dTo1d_mpi_i1,grid2dTo1d_mpi_i2,grid2dTo1d_mpi_i3, &
49                     grid2dTo1d_mpi_r,grid2dTo1d_mpi_r1,grid2dTo1d_mpi_r2,grid2dTo1d_mpi_r3, &
50                     grid2dTo1d_mpi_l,grid2dTo1d_mpi_l1,grid2dTo1d_mpi_l2,grid2dTo1d_mpi_l3
51 END INTERFACE
52   
53
54CONTAINS
55
56!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
57!! Definition des Broadcast --> 4D   !!
58!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
59
60!! -- Les chaine de charactère -- !!
61
62  SUBROUTINE bcast_mpi_c(var1)
63  IMPLICIT NONE
64    CHARACTER(LEN=*),INTENT(INOUT) :: Var1
65    CHARACTER(LEN=len(Var1)),DIMENSION(1) :: Var2
66   
67#ifndef CPP_PARA
68    RETURN
69#endif
70    Var2(1)=Var1
71    CALL bcast_mpi_cgen(Var2,len(Var1))
72    Var1=Var2(1)
73  END SUBROUTINE bcast_mpi_c
74
75  SUBROUTINE bcast_mpi_c1(var1)
76  IMPLICIT NONE
77    CHARACTER(LEN=*),INTENT(INOUT) :: Var1(:)
78   
79#ifndef CPP_PARA
80    RETURN
81#endif
82
83    CALL bcast_mpi_cgen(Var1,len(Var1)*size(Var1))
84  END SUBROUTINE bcast_mpi_c1
85 
86!! -- Les entiers -- !!
87 
88#ifdef Modif_Oth_mpi
89  SUBROUTINE bcast_mpi_i(var1)
90  IMPLICIT NONE
91    INTEGER,INTENT(INOUT) :: Var1
92    INTEGER,DIMENSION(1)  :: Var2
93#ifndef CPP_PARA
94    RETURN
95#endif
96    Var2(1)=Var1
97    CALL bcast_mpi_igen(Var2,1)
98    Var1=Var2(1)
99  END SUBROUTINE bcast_mpi_i
100#else
101  SUBROUTINE bcast_mpi_i(var1)
102  IMPLICIT NONE
103    INTEGER,INTENT(INOUT) :: Var1
104#ifndef CPP_PARA
105    RETURN
106#endif
107    CALL bcast_mpi_igen(Var1,1)
108  END SUBROUTINE bcast_mpi_i
109#endif
110
111  SUBROUTINE bcast_mpi_i1(var)
112  IMPLICIT NONE
113    INTEGER,INTENT(INOUT) :: Var(:)
114   
115#ifndef CPP_PARA
116    RETURN
117#endif
118    CALL bcast_mpi_igen(Var,size(Var))
119  END SUBROUTINE bcast_mpi_i1
120
121  SUBROUTINE bcast_mpi_i2(var)
122  IMPLICIT NONE
123    INTEGER,INTENT(INOUT) :: Var(:,:)
124   
125#ifndef CPP_PARA
126    RETURN
127#endif
128    CALL bcast_mpi_igen(Var,size(Var))
129  END SUBROUTINE bcast_mpi_i2
130
131  SUBROUTINE bcast_mpi_i3(var)
132  IMPLICIT NONE
133    INTEGER,INTENT(INOUT) :: Var(:,:,:)
134   
135#ifndef CPP_PARA
136    RETURN
137#endif
138    CALL bcast_mpi_igen(Var,size(Var))
139  END SUBROUTINE bcast_mpi_i3
140
141  SUBROUTINE bcast_mpi_i4(var)
142  IMPLICIT NONE
143    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
144   
145#ifndef CPP_PARA
146    RETURN
147#endif
148    CALL bcast_mpi_igen(Var,size(Var))
149  END SUBROUTINE bcast_mpi_i4
150
151
152!! -- Les reels -- !!
153
154#ifdef Modif_Oth_mpi
155  SUBROUTINE bcast_mpi_r(var)
156  IMPLICIT NONE
157    REAL,INTENT(INOUT) :: Var
158    REAL,DIMENSION(1)  :: Var2
159   
160#ifndef CPP_PARA
161    RETURN
162#endif
163    Var2(1)=Var
164    CALL bcast_mpi_rgen(Var2,1)
165    Var=Var2(1)
166  END SUBROUTINE bcast_mpi_r
167#else
168  SUBROUTINE bcast_mpi_r(var)
169  IMPLICIT NONE
170    REAL,INTENT(INOUT) :: Var
171   
172#ifndef CPP_PARA
173    RETURN
174#endif
175    CALL bcast_mpi_rgen(Var,1)
176  END SUBROUTINE bcast_mpi_r
177#endif
178
179  SUBROUTINE bcast_mpi_r1(var)
180  IMPLICIT NONE
181    REAL,INTENT(INOUT) :: Var(:)
182   
183#ifndef CPP_PARA
184    RETURN
185#endif
186    CALL bcast_mpi_rgen(Var,size(Var))
187  END SUBROUTINE bcast_mpi_r1
188
189  SUBROUTINE bcast_mpi_r2(var)
190  IMPLICIT NONE
191    REAL,INTENT(INOUT) :: Var(:,:)
192   
193#ifndef CPP_PARA
194    RETURN
195#endif
196    CALL bcast_mpi_rgen(Var,size(Var))
197  END SUBROUTINE bcast_mpi_r2
198
199  SUBROUTINE bcast_mpi_r3(var)
200  IMPLICIT NONE
201    REAL,INTENT(INOUT) :: Var(:,:,:)
202   
203#ifndef CPP_PARA
204    RETURN
205#endif
206    CALL bcast_mpi_rgen(Var,size(Var))
207  END SUBROUTINE bcast_mpi_r3
208
209  SUBROUTINE bcast_mpi_r4(var)
210  IMPLICIT NONE
211    REAL,INTENT(INOUT) :: Var(:,:,:,:)
212   
213#ifndef CPP_PARA
214    RETURN
215#endif
216    CALL bcast_mpi_rgen(Var,size(Var))
217  END SUBROUTINE bcast_mpi_r4
218 
219!Modif_Oth
220  SUBROUTINE bcast_mpi_r5(var)
221  IMPLICIT NONE
222    REAL,INTENT(INOUT) :: Var(:,:,:,:,:)
223   
224#ifndef CPP_PARA
225    RETURN
226#endif
227    CALL bcast_mpi_rgen(Var,size(Var))
228  END SUBROUTINE bcast_mpi_r5
229 
230!! -- Les booleans -- !!
231
232#ifdef Modif_Oth_mpi
233  SUBROUTINE bcast_mpi_l(var)
234  IMPLICIT NONE
235    LOGICAL,INTENT(INOUT) :: Var
236    LOGICAL,DIMENSION(1)  :: Var2
237   
238#ifndef CPP_PARA
239    RETURN
240#endif
241    Var2(1)=Var
242    CALL bcast_mpi_lgen(Var2,1)
243    Var=Var2(1)
244  END SUBROUTINE bcast_mpi_l
245#else
246  SUBROUTINE bcast_mpi_l(var)
247  IMPLICIT NONE
248    LOGICAL,INTENT(INOUT) :: Var
249   
250#ifndef CPP_PARA
251    RETURN
252#endif
253    CALL bcast_mpi_lgen(Var,1)
254  END SUBROUTINE bcast_mpi_l
255#endif
256
257  SUBROUTINE bcast_mpi_l1(var)
258  IMPLICIT NONE
259    LOGICAL,INTENT(INOUT) :: Var(:)
260   
261#ifndef CPP_PARA
262    RETURN
263#endif
264    CALL bcast_mpi_lgen(Var,size(Var))
265  END SUBROUTINE bcast_mpi_l1
266
267  SUBROUTINE bcast_mpi_l2(var)
268  IMPLICIT NONE
269    LOGICAL,INTENT(INOUT) :: Var(:,:)
270   
271#ifndef CPP_PARA
272    RETURN
273#endif
274    CALL bcast_mpi_lgen(Var,size(Var))
275  END SUBROUTINE bcast_mpi_l2
276
277  SUBROUTINE bcast_mpi_l3(var)
278  IMPLICIT NONE
279    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
280   
281#ifndef CPP_PARA
282    RETURN
283#endif
284    CALL bcast_mpi_lgen(Var,size(Var))
285  END SUBROUTINE bcast_mpi_l3
286
287  SUBROUTINE bcast_mpi_l4(var)
288  IMPLICIT NONE
289    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
290   
291#ifndef CPP_PARA
292    RETURN
293#endif
294    CALL bcast_mpi_lgen(Var,size(Var))
295  END SUBROUTINE bcast_mpi_l4
296 
297!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
298!! Definition des Scatter   --> 4D   !!
299!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
300
301  SUBROUTINE scatter_mpi_i(VarIn, VarOut)
302    USE mod_inca_mpi_data, ONLY :  is_mpi_root
303    IMPLICIT NONE
304 
305    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
306    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
307
308    INTEGER :: dummy(1)
309
310#ifndef CPP_PARA
311    VarOut(:)=VarIn(:)
312    RETURN
313#endif
314
315     IF (is_mpi_root) THEN
316      CALL scatter_mpi_igen(VarIn,Varout,1)
317     ELSE
318      CALL scatter_mpi_igen(dummy,Varout,1)
319    ENDIF
320   
321  END SUBROUTINE scatter_mpi_i
322
323  SUBROUTINE scatter_mpi_i1(VarIn, VarOut)
324    USE mod_inca_mpi_data, ONLY :  is_mpi_root
325    IMPLICIT NONE
326 
327    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
328    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
329   
330    INTEGER :: dummy(1)
331
332#ifndef CPP_PARA
333    VarOut(:,:)=VarIn(:,:)
334    RETURN
335#endif
336    IF (is_mpi_root) THEN
337      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2))
338    ELSE
339      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2))
340    ENDIF
341   
342  END SUBROUTINE scatter_mpi_i1
343 
344  SUBROUTINE scatter_mpi_i2(VarIn, VarOut)
345    USE mod_inca_mpi_data, ONLY :  is_mpi_root
346    IMPLICIT NONE
347 
348    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
349    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
350   
351    INTEGER :: dummy(1)
352   
353#ifndef CPP_PARA
354    VarOut(:,:,:)=VarIn(:,:,:)
355    RETURN
356#endif
357    IF (is_mpi_root) THEN
358      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
359    ELSE
360      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
361    ENDIF
362  END SUBROUTINE scatter_mpi_i2
363
364  SUBROUTINE scatter_mpi_i3(VarIn, VarOut)
365    USE mod_inca_mpi_data, ONLY :  is_mpi_root
366    IMPLICIT NONE
367 
368    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
369    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
370   
371    INTEGER :: dummy(1)
372   
373#ifndef CPP_PARA
374    VarOut(:,:,:,:)=VarIn(:,:,:,:)
375    RETURN
376#endif
377    IF (is_mpi_root) THEN
378      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
379    ELSE
380      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
381    ENDIF
382 
383  END SUBROUTINE scatter_mpi_i3
384
385
386  SUBROUTINE scatter_mpi_r(VarIn, VarOut)
387    USE mod_inca_mpi_data, ONLY :  is_mpi_root
388    IMPLICIT NONE
389 
390    REAL,INTENT(IN),DIMENSION(:) :: VarIn
391    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
392   
393    REAL :: dummy(1)
394   
395#ifndef CPP_PARA
396    VarOut(:)=VarIn(:)
397    RETURN
398#endif
399    IF (is_mpi_root) THEN
400      CALL scatter_mpi_rgen(VarIn,Varout,1)
401    ELSE
402      CALL scatter_mpi_rgen(dummy,Varout,1)
403    ENDIF
404 
405  END SUBROUTINE scatter_mpi_r
406
407  SUBROUTINE scatter_mpi_r1(VarIn, VarOut)
408  USE mod_inca_mpi_data, ONLY :  is_mpi_root
409  IMPLICIT NONE
410 
411    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
412    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
413   
414    REAL :: dummy(1)
415   
416#ifndef CPP_PARA
417    VarOut(:,:)=VarIn(:,:)
418    RETURN
419#endif
420    IF (is_mpi_root) THEN
421      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2))
422    ELSE
423      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2))     
424    ENDIF
425 
426  END SUBROUTINE scatter_mpi_r1
427 
428  SUBROUTINE scatter_mpi_r2(VarIn, VarOut)
429    USE mod_inca_mpi_data, ONLY :  is_mpi_root
430    IMPLICIT NONE
431 
432    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
433    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
434   
435    REAL :: dummy(1)
436   
437#ifndef CPP_PARA
438    VarOut(:,:,:)=VarIn(:,:,:)
439    RETURN
440#endif
441    IF (is_mpi_root) THEN
442      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
443    ELSE
444      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
445    ENDIF
446 
447  END SUBROUTINE scatter_mpi_r2
448
449  SUBROUTINE scatter_mpi_r3(VarIn, VarOut)
450    USE mod_inca_mpi_data, ONLY :  is_mpi_root
451    IMPLICIT NONE
452 
453    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
454    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
455   
456    REAL :: dummy(1)
457   
458#ifndef CPP_PARA
459    VarOut(:,:,:,:)=VarIn(:,:,:,:)
460    RETURN
461#endif
462    IF (is_mpi_root) THEN
463      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
464    ELSE
465      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
466    ENDIF
467 
468  END SUBROUTINE scatter_mpi_r3
469
470
471  SUBROUTINE scatter_mpi_l(VarIn, VarOut)
472    USE mod_inca_mpi_data, ONLY :  is_mpi_root
473    IMPLICIT NONE
474 
475    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
476    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
477   
478    LOGICAL :: dummy(1)
479   
480#ifndef CPP_PARA
481    VarOut(:)=VarIn(:)
482    RETURN
483#endif
484    IF (is_mpi_root) THEN
485      CALL scatter_mpi_lgen(VarIn,Varout,1)
486    ELSE
487      CALL scatter_mpi_lgen(dummy,Varout,1)
488    ENDIF
489   
490  END SUBROUTINE scatter_mpi_l
491
492  SUBROUTINE scatter_mpi_l1(VarIn, VarOut)
493    USE mod_inca_mpi_data, ONLY :  is_mpi_root
494    IMPLICIT NONE
495 
496    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
497    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
498   
499    LOGICAL :: dummy(1)
500   
501#ifndef CPP_PARA
502    VarOut(:,:)=VarIn(:,:)
503    RETURN
504#endif
505    IF (is_mpi_root) THEN
506      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2))
507    ELSE
508      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2))     
509    ENDIF
510 
511  END SUBROUTINE scatter_mpi_l1
512 
513  SUBROUTINE scatter_mpi_l2(VarIn, VarOut)
514    USE mod_inca_mpi_data, ONLY :  is_mpi_root
515    IMPLICIT NONE
516 
517    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
518    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
519   
520    LOGICAL :: dummy(1)
521   
522#ifndef CPP_PARA
523    VarOut(:,:,:)=VarIn(:,:,:)
524    RETURN
525#endif
526    IF (is_mpi_root) THEN
527      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
528    ELSE
529      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
530    ENDIF
531 
532  END SUBROUTINE scatter_mpi_l2
533
534  SUBROUTINE scatter_mpi_l3(VarIn, VarOut)
535    USE mod_inca_mpi_data, ONLY :  is_mpi_root
536    IMPLICIT NONE
537 
538    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
539    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
540   
541    LOGICAL :: dummy(1)
542   
543#ifndef CPP_PARA
544    VarOut(:,:,:,:)=VarIn(:,:,:,:)
545    RETURN
546#endif
547    IF (is_mpi_root) THEN
548      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
549    ELSE
550      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
551    ENDIF
552 
553  END SUBROUTINE scatter_mpi_l3 
554
555!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
556!! Definition des Gather   --> 4D   !!
557!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
558 
559!!!!! --> Les entiers
560
561  SUBROUTINE gather_mpi_i(VarIn, VarOut)
562    USE mod_inca_mpi_data, ONLY :  is_mpi_root
563    IMPLICIT NONE
564 
565    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
566    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
567   
568    INTEGER :: dummy(1)
569
570#ifndef CPP_PARA
571    VarOut(:)=VarIn(:)
572    RETURN
573#endif
574
575    IF (is_mpi_root) THEN
576      CALL gather_mpi_igen(VarIn,VarOut,1)
577    ELSE
578      CALL gather_mpi_igen(VarIn,dummy,1)
579    ENDIF
580 
581  END SUBROUTINE gather_mpi_i
582 
583 
584 
585 
586
587!!!!!
588
589  SUBROUTINE gather_mpi_i1(VarIn, VarOut)
590    USE mod_inca_mpi_data, ONLY :  is_mpi_root
591    IMPLICIT NONE
592 
593    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
594    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
595   
596    INTEGER :: dummy(1)
597   
598#ifndef CPP_PARA
599    VarOut(:,:)=VarIn(:,:)
600    RETURN
601#endif
602
603    IF (is_mpi_root) THEN
604      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2))
605    ELSE
606      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2))
607    ENDIF
608 
609  END SUBROUTINE gather_mpi_i1
610
611!!!!!
612 
613  SUBROUTINE gather_mpi_i2(VarIn, VarOut)
614    USE mod_inca_mpi_data, ONLY :  is_mpi_root
615    IMPLICIT NONE
616 
617    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
618    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
619   
620    INTEGER :: dummy(1)
621   
622#ifndef CPP_PARA
623    VarOut(:,:,:)=VarIn(:,:,:)
624    RETURN
625#endif
626
627    IF (is_mpi_root) THEN
628      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
629    ELSE
630      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
631    ENDIF
632 
633  END SUBROUTINE gather_mpi_i2
634
635!!!!!
636
637  SUBROUTINE gather_mpi_i3(VarIn, VarOut)
638    USE mod_inca_mpi_data, ONLY :  is_mpi_root
639    IMPLICIT NONE
640 
641    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
642    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
643   
644    INTEGER :: dummy(1)
645   
646#ifndef CPP_PARA
647    VarOut(:,:,:,:)=VarIn(:,:,:,:)
648    RETURN
649#endif
650
651    IF (is_mpi_root) THEN
652      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
653    ELSE
654      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
655    ENDIF
656 
657  END SUBROUTINE gather_mpi_i3
658
659!!!!! --> Les reels
660
661  SUBROUTINE gather_mpi_r(VarIn, VarOut)
662    USE mod_inca_mpi_data, ONLY :  is_mpi_root
663    IMPLICIT NONE
664 
665    REAL,INTENT(IN),DIMENSION(:) :: VarIn
666    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
667   
668    REAL :: dummy(1)
669   
670#ifndef CPP_PARA
671    VarOut(:)=VarIn(:)
672    RETURN
673#endif
674
675    IF (is_mpi_root) THEN
676      CALL gather_mpi_rgen(VarIn,VarOut,1)
677    ELSE
678      CALL gather_mpi_rgen(VarIn,dummy,1)
679    ENDIF
680 
681  END SUBROUTINE gather_mpi_r
682
683!!!!!
684
685  SUBROUTINE gather_mpi_r1(VarIn, VarOut)
686    USE mod_inca_mpi_data, ONLY :  is_mpi_root
687    IMPLICIT NONE
688 
689    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
690    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
691   
692    REAL :: dummy(1)
693   
694#ifndef CPP_PARA
695    VarOut(:,:)=VarIn(:,:)
696    RETURN
697#endif
698
699    IF (is_mpi_root) THEN
700      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2))
701    ELSE
702      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2))
703    ENDIF
704 
705  END SUBROUTINE gather_mpi_r1
706
707!!!!!
708 
709  SUBROUTINE gather_mpi_r2(VarIn, VarOut)
710    USE mod_inca_mpi_data, ONLY :  is_mpi_root
711    IMPLICIT NONE
712 
713    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
714    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
715   
716    REAL :: dummy(1)
717   
718#ifndef CPP_PARA
719    VarOut(:,:,:)=VarIn(:,:,:)
720    RETURN
721#endif
722
723    IF (is_mpi_root) THEN
724      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
725    ELSE
726      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))     
727    ENDIF
728 
729  END SUBROUTINE gather_mpi_r2
730
731!!!!!
732
733  SUBROUTINE gather_mpi_r3(VarIn, VarOut)
734    USE mod_inca_mpi_data, ONLY :  is_mpi_root
735    IMPLICIT NONE
736 
737    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
738    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
739   
740    REAL :: dummy(1)
741   
742#ifndef CPP_PARA
743    VarOut(:,:,:,:)=VarIn(:,:,:,:)
744    RETURN
745#endif
746
747    IF (is_mpi_root) THEN
748      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
749    ELSE
750      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
751    ENDIF
752 
753  END SUBROUTINE gather_mpi_r3
754
755!!!!! --> Les booleen
756
757  SUBROUTINE gather_mpi_l(VarIn, VarOut)
758    USE mod_inca_mpi_data, ONLY :  is_mpi_root
759    IMPLICIT NONE
760 
761    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
762    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
763   
764    LOGICAL :: dummy(1)
765   
766#ifndef CPP_PARA
767    VarOut(:)=VarIn(:)
768    RETURN
769#endif
770
771    IF (is_mpi_root) THEN
772      CALL gather_mpi_lgen(VarIn,VarOut,1)
773    ELSE
774      CALL gather_mpi_lgen(VarIn,dummy,1)     
775    ENDIF
776 
777  END SUBROUTINE gather_mpi_l
778
779!!!!!
780
781  SUBROUTINE gather_mpi_l1(VarIn, VarOut)
782    USE mod_inca_mpi_data, ONLY :  is_mpi_root
783    IMPLICIT NONE
784 
785    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
786    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
787   
788    LOGICAL :: dummy(1)
789   
790#ifndef CPP_PARA
791    VarOut(:,:)=VarIn(:,:)
792    RETURN
793#endif
794
795    IF (is_mpi_root) THEN
796      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2))
797    ELSE
798      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2))
799    ENDIF
800 
801  END SUBROUTINE gather_mpi_l1
802
803!!!!!
804 
805  SUBROUTINE gather_mpi_l2(VarIn, VarOut)
806    USE mod_inca_mpi_data, ONLY :  is_mpi_root
807    IMPLICIT NONE
808 
809    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
810    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
811   
812    LOGICAL :: dummy(1)
813   
814#ifndef CPP_PARA
815    VarOut(:,:,:)=VarIn(:,:,:)
816    RETURN
817#endif
818
819    IF (is_mpi_root) THEN
820      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
821    ELSE
822      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
823    ENDIF
824 
825  END SUBROUTINE gather_mpi_l2
826
827!!!!!
828
829  SUBROUTINE gather_mpi_l3(VarIn, VarOut)
830    USE mod_inca_mpi_data, ONLY :  is_mpi_root
831    IMPLICIT NONE
832 
833    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
834    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
835   
836    LOGICAL :: dummy(1)
837   
838#ifndef CPP_PARA
839    VarOut(:,:,:,:)=VarIn(:,:,:,:)
840    RETURN
841#endif
842
843    IF (is_mpi_root) THEN
844      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
845    ELSE
846      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))     
847    ENDIF
848 
849  END SUBROUTINE gather_mpi_l3
850
851!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
852!! Definition des Scatter2D   --> 4D   !!
853!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
854
855  SUBROUTINE scatter2D_mpi_i(VarIn, VarOut)
856    USE mod_grid_inca
857    IMPLICIT NONE
858 
859    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
860    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
861
862    INTEGER,DIMENSION(plon_glo) :: Var_tmp   
863   
864    CALL grid2dTo1d_glo(VarIn,Var_tmp)
865    CALL scatter_mpi(Var_tmp,VarOut)
866
867  END SUBROUTINE scatter2D_mpi_i
868
869  SUBROUTINE scatter2D_mpi_i1(VarIn, VarOut)
870    USE mod_grid_inca
871    IMPLICIT NONE
872 
873    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
874    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
875   
876    CALL body(VarIn,VarOut,size(VarOut,2))
877 
878    CONTAINS
879      SUBROUTINE body(VarIn,VarOut,s1)
880        INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
881        INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
882        INTEGER,INTENT(IN) :: s1
883       
884        INTEGER,DIMENSION(plon_glo,s1) :: Var_tmp
885       
886        CALL grid2dTo1d_glo(VarIn,Var_tmp)
887        CALL scatter_mpi(Var_tmp,VarOut)
888      END SUBROUTINE body
889
890  END SUBROUTINE scatter2D_mpi_i1
891
892  SUBROUTINE scatter2D_mpi_i2(VarIn, VarOut)
893    USE mod_grid_inca
894    IMPLICIT NONE
895 
896    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
897    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
898   
899    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
900 
901    CONTAINS
902      SUBROUTINE body(VarIn,VarOut,s1,s2)
903        INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
904        INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
905        INTEGER,INTENT(IN) :: s1,s2
906       
907        INTEGER,DIMENSION(plon_glo,s1,s2) :: Var_tmp
908       
909        CALL grid2dTo1d_glo(VarIn,Var_tmp)
910        CALL scatter_mpi(Var_tmp,VarOut)
911      END SUBROUTINE body
912
913  END SUBROUTINE scatter2D_mpi_i2
914 
915  SUBROUTINE scatter2D_mpi_i3(VarIn, VarOut)
916    USE mod_grid_inca
917    IMPLICIT NONE
918 
919    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
920    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
921   
922    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
923 
924    CONTAINS
925      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
926        INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
927        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
928        INTEGER,INTENT(IN) :: s1,s2,s3
929       
930        INTEGER,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
931       
932        CALL grid2dTo1d_glo(VarIn,Var_tmp)
933        CALL scatter_mpi(Var_tmp,VarOut)
934      END SUBROUTINE body
935 
936 
937  END SUBROUTINE scatter2D_mpi_i3
938
939
940
941  SUBROUTINE scatter2D_mpi_r(VarIn, VarOut)
942    USE mod_grid_inca
943    IMPLICIT NONE
944 
945    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
946    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
947
948    REAL,DIMENSION(plon_glo) :: Var_tmp   
949   
950    CALL grid2dTo1d_glo(VarIn,Var_tmp)
951    CALL scatter_mpi(Var_tmp,VarOut)
952
953  END SUBROUTINE scatter2D_mpi_R
954
955
956  SUBROUTINE scatter2D_mpi_r1(VarIn, VarOut)
957    USE mod_grid_inca
958    IMPLICIT NONE
959    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
960    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
961
962    CALL body(VarIn,VarOut,size(VarOut,2))
963 
964    CONTAINS
965      SUBROUTINE body(VarIn,VarOut,s1)
966        REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
967        REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
968        INTEGER,INTENT(IN) :: s1
969       
970        REAL,DIMENSION(plon_glo,s1) :: Var_tmp
971       
972        CALL grid2dTo1d_glo(VarIn,Var_tmp)
973        CALL scatter_mpi(Var_tmp,VarOut)
974      END SUBROUTINE body
975
976  END SUBROUTINE scatter2D_mpi_r1
977
978
979  SUBROUTINE scatter2D_mpi_r2(VarIn, VarOut)
980    USE mod_grid_inca
981    IMPLICIT NONE
982 
983    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
984    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
985   
986    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
987 
988    CONTAINS
989      SUBROUTINE body(VarIn,VarOut,s1,s2)
990        REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
991        REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
992        INTEGER,INTENT(IN) :: s1,s2
993       
994        REAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
995       
996        CALL grid2dTo1d_glo(VarIn,Var_tmp)
997        CALL scatter_mpi(Var_tmp,VarOut)
998      END SUBROUTINE body
999
1000  END SUBROUTINE scatter2D_mpi_r2
1001 
1002  SUBROUTINE scatter2D_mpi_r3(VarIn, VarOut)
1003    USE mod_grid_inca
1004    IMPLICIT NONE
1005 
1006    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1007    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1008   
1009    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
1010 
1011    CONTAINS
1012      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1013        REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1014        REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1015        INTEGER,INTENT(IN) :: s1,s2,s3
1016       
1017        REAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1018       
1019        CALL grid2dTo1d_glo(VarIn,Var_tmp)
1020        CALL scatter_mpi(Var_tmp,VarOut)
1021      END SUBROUTINE body
1022 
1023  END SUBROUTINE scatter2D_mpi_r3
1024 
1025 
1026  SUBROUTINE scatter2D_mpi_l(VarIn, VarOut)
1027    USE mod_grid_inca
1028    IMPLICIT NONE
1029 
1030    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1031    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
1032
1033    LOGICAL,DIMENSION(plon_glo) :: Var_tmp   
1034   
1035    CALL grid2dTo1d_glo(VarIn,Var_tmp)
1036    CALL scatter_mpi(Var_tmp,VarOut)
1037
1038  END SUBROUTINE scatter2D_mpi_l
1039
1040
1041  SUBROUTINE scatter2D_mpi_l1(VarIn, VarOut)
1042    USE mod_grid_inca
1043    IMPLICIT NONE
1044 
1045    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1046    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1047   
1048    CALL body(VarIn,VarOut,size(VarOut,2))
1049 
1050    CONTAINS
1051      SUBROUTINE body(VarIn,VarOut,s1)
1052        LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1053        LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1054        INTEGER,INTENT(IN) :: s1
1055       
1056        LOGICAL,DIMENSION(plon_glo,s1) :: Var_tmp
1057       
1058        CALL grid2dTo1d_glo(VarIn,Var_tmp)
1059        CALL scatter_mpi(Var_tmp,VarOut)
1060      END SUBROUTINE body
1061 
1062  END SUBROUTINE scatter2D_mpi_l1
1063
1064
1065  SUBROUTINE scatter2D_mpi_l2(VarIn, VarOut)
1066    USE mod_grid_inca
1067    IMPLICIT NONE
1068 
1069    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1070    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1071   
1072    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
1073 
1074    CONTAINS
1075      SUBROUTINE body(VarIn,VarOut,s1,s2)
1076        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1077        LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1078        INTEGER,INTENT(IN) :: s1,s2
1079       
1080        LOGICAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1081       
1082        CALL grid2dTo1d_glo(VarIn,Var_tmp)
1083        CALL scatter_mpi(Var_tmp,VarOut)
1084      END SUBROUTINE body
1085
1086  END SUBROUTINE scatter2D_mpi_l2
1087 
1088  SUBROUTINE scatter2D_mpi_l3(VarIn, VarOut)
1089    USE mod_grid_inca
1090    IMPLICIT NONE
1091 
1092    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1093    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1094   
1095    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
1096 
1097    CONTAINS
1098      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1099        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1100        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1101        INTEGER,INTENT(IN) :: s1,s2,s3
1102       
1103        LOGICAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1104       
1105        CALL grid2dTo1d_glo(VarIn,Var_tmp)
1106        CALL scatter_mpi(Var_tmp,VarOut)
1107      END SUBROUTINE body
1108 
1109  END SUBROUTINE scatter2D_mpi_l3
1110 
1111 
1112!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1113!! Definition des Gather2D   --> 4D   !!
1114!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1115
1116  SUBROUTINE gather2D_mpi_i(VarIn, VarOut)
1117    USE mod_grid_inca
1118    IMPLICIT NONE
1119 
1120    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
1121    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1122   
1123    INTEGER,DIMENSION(plon_glo) :: Var_tmp
1124   
1125    CALL gather_mpi(VarIn,Var_tmp)
1126    CALL grid1dTo2d_glo(Var_tmp,VarOut)
1127
1128  END SUBROUTINE gather2D_mpi_i
1129
1130  SUBROUTINE gather2D_mpi_i1(VarIn, VarOut)
1131    USE mod_grid_inca
1132    IMPLICIT NONE
1133 
1134    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1135    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1136   
1137    CALL body(VarIn,VarOut,size(VarOut,3))
1138 
1139    CONTAINS
1140      SUBROUTINE body(VarIn,VarOut,s1)
1141        INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1142        INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1143        INTEGER,INTENT(IN) :: s1
1144       
1145        INTEGER,DIMENSION(plon_glo,s1) :: Var_tmp
1146       
1147        CALL gather_mpi(VarIn,Var_tmp)
1148        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1149      END SUBROUTINE body
1150
1151  END SUBROUTINE gather2D_mpi_i1
1152
1153  SUBROUTINE gather2D_mpi_i2(VarIn, VarOut)
1154    USE mod_grid_inca
1155    IMPLICIT NONE
1156 
1157    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1158    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1159   
1160    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
1161 
1162    CONTAINS
1163      SUBROUTINE body(VarIn,VarOut,s1,s2)
1164        INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1165        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1166        INTEGER,INTENT(IN) :: s1,s2
1167       
1168        INTEGER,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1169       
1170        CALL gather_mpi(VarIn,Var_tmp)
1171        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1172      END SUBROUTINE body
1173
1174  END SUBROUTINE gather2D_mpi_i2
1175 
1176  SUBROUTINE gather2D_mpi_i3(VarIn, VarOut)
1177    USE mod_grid_inca
1178    IMPLICIT NONE
1179 
1180    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1181    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1182   
1183    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1184 
1185    CONTAINS
1186      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1187        INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1188        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1189        INTEGER,INTENT(IN) :: s1,s2,s3
1190       
1191        INTEGER,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1192       
1193        CALL gather_mpi(VarIn,Var_tmp)
1194        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1195      END SUBROUTINE body
1196
1197  END SUBROUTINE gather2D_mpi_i3
1198
1199
1200
1201  SUBROUTINE gather2D_mpi_r(VarIn, VarOut)
1202    USE mod_grid_inca
1203    IMPLICIT NONE
1204 
1205    REAL,INTENT(IN),DIMENSION(:) :: VarIn
1206    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1207   
1208    REAL,DIMENSION(plon_glo) :: Var_tmp
1209   
1210    CALL gather_mpi(VarIn,Var_tmp)
1211    CALL grid1dTo2d_glo(Var_tmp,VarOut)
1212
1213  END SUBROUTINE gather2D_mpi_r
1214
1215  SUBROUTINE gather2D_mpi_r1(VarIn, VarOut)
1216    USE mod_grid_inca
1217    IMPLICIT NONE
1218 
1219    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1220    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1221   
1222    CALL body(VarIn,VarOut,size(VarOut,3))
1223 
1224    CONTAINS
1225      SUBROUTINE body(VarIn,VarOut,s1)
1226        REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1227        REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1228        INTEGER,INTENT(IN) :: s1
1229       
1230        REAL,DIMENSION(plon_glo,s1) :: Var_tmp
1231       
1232        CALL gather_mpi(VarIn,Var_tmp)
1233        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1234      END SUBROUTINE body
1235
1236  END SUBROUTINE gather2D_mpi_r1
1237
1238  SUBROUTINE gather2D_mpi_r2(VarIn, VarOut)
1239    USE mod_grid_inca
1240    IMPLICIT NONE
1241 
1242    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1243    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1244   
1245    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
1246 
1247    CONTAINS
1248      SUBROUTINE body(VarIn,VarOut,s1,s2)
1249        REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1250        REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1251        INTEGER,INTENT(IN) :: s1,s2
1252       
1253        REAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1254       
1255        CALL gather_mpi(VarIn,Var_tmp)
1256        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1257      END SUBROUTINE body
1258
1259  END SUBROUTINE gather2D_mpi_r2
1260 
1261  SUBROUTINE gather2D_mpi_r3(VarIn, VarOut)
1262    USE mod_grid_inca
1263    IMPLICIT NONE
1264 
1265    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1266    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1267   
1268    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1269 
1270    CONTAINS
1271      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1272        REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1273        REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1274        INTEGER,INTENT(IN) :: s1,s2,s3
1275       
1276        REAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1277       
1278        CALL gather_mpi(VarIn,Var_tmp)
1279        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1280      END SUBROUTINE body
1281
1282  END SUBROUTINE gather2D_mpi_r3
1283
1284 
1285 
1286  SUBROUTINE gather2D_mpi_l(VarIn, VarOut)
1287    USE mod_grid_inca
1288    IMPLICIT NONE
1289 
1290    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
1291    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1292   
1293    LOGICAL,DIMENSION(plon_glo) :: Var_tmp
1294   
1295    CALL gather_mpi(VarIn,Var_tmp)
1296    CALL grid1dTo2d_glo(Var_tmp,VarOut)
1297
1298  END SUBROUTINE gather2D_mpi_l
1299
1300  SUBROUTINE gather2D_mpi_l1(VarIn, VarOut)
1301    USE mod_grid_inca
1302    IMPLICIT NONE
1303 
1304    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1305    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1306   
1307    CALL body(VarIn,VarOut,size(VarOut,3))
1308 
1309    CONTAINS
1310      SUBROUTINE body(VarIn,VarOut,s1)
1311        LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1312        LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1313        INTEGER,INTENT(IN) :: s1
1314       
1315        LOGICAL,DIMENSION(plon_glo,s1) :: Var_tmp
1316       
1317        CALL gather_mpi(VarIn,Var_tmp)
1318        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1319      END SUBROUTINE body
1320
1321  END SUBROUTINE gather2D_mpi_l1
1322
1323  SUBROUTINE gather2D_mpi_l2(VarIn, VarOut)
1324    USE mod_grid_inca
1325    IMPLICIT NONE
1326 
1327    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1328    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1329   
1330    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
1331 
1332    CONTAINS
1333      SUBROUTINE body(VarIn,VarOut,s1,s2)
1334        LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1335        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1336        INTEGER,INTENT(IN) :: s1,s2
1337       
1338        LOGICAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1339       
1340        CALL gather_mpi(VarIn,Var_tmp)
1341        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1342      END SUBROUTINE body
1343
1344  END SUBROUTINE gather2D_mpi_l2
1345 
1346  SUBROUTINE gather2D_mpi_l3(VarIn, VarOut)
1347    USE mod_grid_inca
1348    IMPLICIT NONE
1349 
1350    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1351    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1352   
1353    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1354 
1355    CONTAINS
1356      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1357        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1358        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1359        INTEGER,INTENT(IN) :: s1,s2,s3
1360       
1361        LOGICAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1362       
1363        CALL gather_mpi(VarIn,Var_tmp)
1364        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1365      END SUBROUTINE body
1366
1367  END SUBROUTINE gather2D_mpi_l3
1368 
1369 
1370!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1371!! Definition des reduce_sum   --> 4D   !!
1372!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1373
1374#ifndef Modif_Oth_mpi
1375  SUBROUTINE reduce_sum_mpi_i(VarIn, VarOut)
1376    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1377    IMPLICIT NONE
1378 
1379    INTEGER,INTENT(IN)  :: VarIn
1380    INTEGER,INTENT(OUT) :: VarOut
1381   
1382    INTEGER :: dummy
1383   
1384#ifndef CPP_PARA
1385    VarOut=VarIn
1386    RETURN
1387#endif
1388
1389    IF (is_mpi_root) THEN
1390      CALL reduce_sum_mpi_igen(VarIn,Varout,1)
1391    ELSE
1392      CALL reduce_sum_mpi_igen(VarIn,dummy,1)
1393    ENDIF
1394 
1395  END SUBROUTINE reduce_sum_mpi_i
1396#else
1397  SUBROUTINE reduce_sum_mpi_i(VarIn, VarOut)
1398    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1399    IMPLICIT NONE
1400 
1401    INTEGER, INTENT(IN)  :: VarIn
1402    INTEGER, INTENT(OUT) :: VarOut
1403    INTEGER, DIMENSION(1) :: VarIn1
1404    INTEGER, DIMENSION(1) :: VarOut1
1405   
1406    INTEGER :: dummy(1)
1407
1408#ifndef CPP_PARA
1409    VarOut=VarIn
1410    RETURN
1411#endif
1412
1413    IF (is_mpi_root) THEN
1414      VarIn1(1)=VarIn   
1415      CALL reduce_sum_mpi_igen(VarIn1,Varout1,1)
1416      VarOut=VarOut1(1)
1417    ELSE
1418      CALL reduce_sum_mpi_igen(VarIn1,dummy,1)
1419    ENDIF
1420
1421 
1422  END SUBROUTINE reduce_sum_mpi_i
1423#endif
1424
1425  SUBROUTINE reduce_sum_mpi_i1(VarIn, VarOut)
1426    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1427    IMPLICIT NONE
1428 
1429    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
1430    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
1431   
1432    INTEGER :: dummy(1)
1433   
1434#ifndef CPP_PARA
1435    VarOut(:)=VarIn(:)
1436    RETURN
1437#endif
1438
1439    IF (is_mpi_root) THEN
1440      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1441    ELSE
1442      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1443    ENDIF
1444 
1445  END SUBROUTINE reduce_sum_mpi_i1
1446
1447  SUBROUTINE reduce_sum_mpi_i2(VarIn, VarOut)
1448    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1449    IMPLICIT NONE
1450 
1451    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
1452    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1453   
1454    INTEGER :: dummy(1,1)
1455   
1456#ifndef CPP_PARA
1457    VarOut(:,:)=VarIn(:,:)
1458    RETURN
1459#endif
1460
1461    IF (is_mpi_root) THEN
1462      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1463    ELSE
1464      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1465    ENDIF
1466 
1467  END SUBROUTINE reduce_sum_mpi_i2
1468
1469  SUBROUTINE reduce_sum_mpi_i3(VarIn, VarOut)
1470    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1471    IMPLICIT NONE
1472 
1473    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1474    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1475   
1476    INTEGER :: dummy(1,1,1)
1477   
1478#ifndef CPP_PARA
1479    VarOut(:,:,:)=VarIn(:,:,:)
1480    RETURN
1481#endif
1482
1483    IF (is_mpi_root) THEN
1484      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1485    ELSE
1486      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1487    ENDIF
1488 
1489  END SUBROUTINE reduce_sum_mpi_i3
1490
1491  SUBROUTINE reduce_sum_mpi_i4(VarIn, VarOut)
1492    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1493    IMPLICIT NONE
1494 
1495    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1496    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1497   
1498    INTEGER :: dummy(1,1,1,1)
1499   
1500#ifndef CPP_PARA
1501    VarOut(:,:,:,:)=VarIn(:,:,:,:)
1502    RETURN
1503#endif
1504
1505    IF (is_mpi_root) THEN
1506      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1507    ELSE
1508      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1509    ENDIF
1510 
1511  END SUBROUTINE reduce_sum_mpi_i4                 
1512 
1513 
1514#ifndef Modif_Oth_mpi
1515  SUBROUTINE reduce_sum_mpi_r(VarIn, VarOut)
1516    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1517    IMPLICIT NONE
1518 
1519    REAL,INTENT(IN)  :: VarIn
1520    REAL,INTENT(OUT) :: VarOut
1521   
1522    REAL :: dummy
1523   
1524#ifndef CPP_PARA
1525    VarOut=VarIn
1526    RETURN
1527#endif
1528
1529    IF (is_mpi_root) THEN
1530      CALL reduce_sum_mpi_rgen(VarIn,Varout,1)
1531    ELSE
1532      CALL reduce_sum_mpi_rgen(VarIn,dummy,1)
1533    ENDIF
1534 
1535  END SUBROUTINE reduce_sum_mpi_r
1536#else
1537  SUBROUTINE reduce_sum_mpi_r(VarIn, VarOut)
1538    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1539    IMPLICIT NONE
1540 
1541    REAL,INTENT(IN)  :: VarIn
1542    REAL,INTENT(OUT) :: VarOut
1543    REAL, DIMENSION(1) :: VarIn1
1544    REAL, DIMENSION(1) :: VarOut1
1545   
1546    REAL :: dummy(1)
1547   
1548#ifndef CPP_PARA
1549    VarOut=VarIn
1550    RETURN
1551#endif
1552
1553    IF (is_mpi_root) THEN
1554      VarIn1(1)=VarIn
1555      CALL reduce_sum_mpi_rgen(VarIn1,Varout1,1)
1556      VarOut=VarOut1(1)
1557    ELSE
1558      CALL reduce_sum_mpi_rgen(VarIn1,dummy,1)
1559    ENDIF
1560
1561  END SUBROUTINE reduce_sum_mpi_r
1562#endif
1563
1564  SUBROUTINE reduce_sum_mpi_r1(VarIn, VarOut)
1565    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1566    IMPLICIT NONE
1567 
1568    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
1569    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
1570   
1571    REAL :: dummy(1)
1572   
1573#ifndef CPP_PARA
1574    VarOut(:)=VarIn(:)
1575    RETURN
1576#endif
1577
1578    IF (is_mpi_root) THEN
1579      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1580    ELSE
1581      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1582    ENDIF
1583 
1584  END SUBROUTINE reduce_sum_mpi_r1
1585
1586  SUBROUTINE reduce_sum_mpi_r2(VarIn, VarOut)
1587    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1588    IMPLICIT NONE
1589 
1590    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
1591    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1592   
1593    REAL :: dummy(1,1)
1594   
1595#ifndef CPP_PARA
1596    VarOut(:,:)=VarIn(:,:)
1597    RETURN
1598#endif
1599
1600    IF (is_mpi_root) THEN
1601      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1602    ELSE
1603      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1604    ENDIF
1605 
1606  END SUBROUTINE reduce_sum_mpi_r2
1607
1608  SUBROUTINE reduce_sum_mpi_r3(VarIn, VarOut)
1609    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1610    IMPLICIT NONE
1611 
1612    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1613    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1614   
1615    REAL :: dummy(1,1,1)
1616   
1617#ifndef CPP_PARA
1618    VarOut(:,:,:)=VarIn(:,:,:)
1619    RETURN
1620#endif
1621
1622    IF (is_mpi_root) THEN
1623      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1624    ELSE
1625      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1626    ENDIF
1627 
1628  END SUBROUTINE reduce_sum_mpi_r3
1629
1630  SUBROUTINE reduce_sum_mpi_r4(VarIn, VarOut)
1631    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1632    IMPLICIT NONE
1633 
1634    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1635    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1636   
1637    REAL :: dummy(1,1,1,1)
1638   
1639#ifndef CPP_PARA
1640    VarOut(:,:,:,:)=VarIn(:,:,:,:)
1641    RETURN
1642#endif
1643
1644    IF (is_mpi_root) THEN
1645      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1646    ELSE
1647      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1648    ENDIF
1649 
1650  END SUBROUTINE reduce_sum_mpi_r4 
1651 
1652
1653
1654!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1655!! SUBROUTINE grid1dTo2d  !! 
1656!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1657
1658
1659  SUBROUTINE grid1dTo2d_mpi_i(VarIn,VarOut) 
1660  IMPLICIT NONE 
1661    INTEGER,INTENT(IN),DIMENSION(:)     :: VarIn
1662    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1663   
1664    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,1)
1665 
1666  END SUBROUTINE grid1dTo2d_mpi_i
1667 
1668
1669  SUBROUTINE grid1dTo2d_mpi_i1(VarIn,VarOut) 
1670  IMPLICIT NONE 
1671    INTEGER,INTENT(IN),DIMENSION(:,:)     :: VarIn
1672    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1673   
1674    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2))
1675 
1676  END SUBROUTINE grid1dTo2d_mpi_i1
1677
1678  SUBROUTINE grid1dTo2d_mpi_i2(VarIn,VarOut) 
1679  IMPLICIT NONE 
1680    INTEGER,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1681    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1682   
1683    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1684 
1685  END SUBROUTINE grid1dTo2d_mpi_i2
1686 
1687  SUBROUTINE grid1dTo2d_mpi_i3(VarIn,VarOut) 
1688  IMPLICIT NONE 
1689    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1690    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1691   
1692    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1693 
1694  END SUBROUTINE grid1dTo2d_mpi_i3
1695
1696
1697  SUBROUTINE grid1dTo2d_mpi_r(VarIn,VarOut) 
1698  IMPLICIT NONE 
1699    REAL,INTENT(IN),DIMENSION(:)     :: VarIn
1700    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1701   
1702    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,1)
1703 
1704  END SUBROUTINE grid1dTo2d_mpi_r
1705 
1706
1707  SUBROUTINE grid1dTo2d_mpi_r1(VarIn,VarOut) 
1708  IMPLICIT NONE 
1709    REAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
1710    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1711   
1712    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2))
1713 
1714  END SUBROUTINE grid1dTo2d_mpi_r1
1715
1716  SUBROUTINE grid1dTo2d_mpi_r2(VarIn,VarOut) 
1717  IMPLICIT NONE 
1718    REAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1719    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1720   
1721    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1722 
1723  END SUBROUTINE grid1dTo2d_mpi_r2
1724 
1725  SUBROUTINE grid1dTo2d_mpi_r3(VarIn,VarOut) 
1726  IMPLICIT NONE 
1727    REAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1728    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1729   
1730    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1731 
1732  END SUBROUTINE grid1dTo2d_mpi_r3
1733 
1734 
1735 
1736  SUBROUTINE grid1dTo2d_mpi_l(VarIn,VarOut) 
1737  IMPLICIT NONE 
1738    LOGICAL,INTENT(IN),DIMENSION(:)     :: VarIn
1739    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1740   
1741    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,1)
1742 
1743  END SUBROUTINE grid1dTo2d_mpi_l
1744 
1745
1746  SUBROUTINE grid1dTo2d_mpi_l1(VarIn,VarOut) 
1747  IMPLICIT NONE 
1748    LOGICAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
1749    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1750   
1751    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2))
1752 
1753  END SUBROUTINE grid1dTo2d_mpi_l1
1754
1755  SUBROUTINE grid1dTo2d_mpi_l2(VarIn,VarOut) 
1756  IMPLICIT NONE 
1757    LOGICAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1758    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1759   
1760    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1761 
1762  END SUBROUTINE grid1dTo2d_mpi_l2
1763 
1764  SUBROUTINE grid1dTo2d_mpi_l3(VarIn,VarOut) 
1765  IMPLICIT NONE 
1766    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1767    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1768   
1769    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1770 
1771  END SUBROUTINE grid1dTo2d_mpi_l3
1772
1773
1774  SUBROUTINE grid2dTo1d_mpi_i(VarIn,VarOut) 
1775  IMPLICIT NONE 
1776    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1777    INTEGER,INTENT(OUT),DIMENSION(:)  :: VarOut
1778   
1779    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,1)
1780 
1781  END SUBROUTINE grid2dTo1d_mpi_i
1782 
1783
1784  SUBROUTINE grid2dTo1d_mpi_i1(VarIn,VarOut) 
1785  IMPLICIT NONE 
1786    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1787    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1788   
1789    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3))
1790 
1791  END SUBROUTINE grid2dTo1d_mpi_i1
1792
1793  SUBROUTINE grid2dTo1d_mpi_i2(VarIn,VarOut) 
1794  IMPLICIT NONE 
1795    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1796    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1797   
1798    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1799 
1800  END SUBROUTINE grid2dTo1d_mpi_i2
1801 
1802  SUBROUTINE grid2dTo1d_mpi_i3(VarIn,VarOut) 
1803  IMPLICIT NONE 
1804    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1805    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1806   
1807    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1808 
1809  END SUBROUTINE grid2dTo1d_mpi_i3
1810 
1811
1812
1813
1814  SUBROUTINE grid2dTo1d_mpi_r(VarIn,VarOut) 
1815  IMPLICIT NONE 
1816    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1817    REAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1818   
1819    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,1)
1820 
1821  END SUBROUTINE grid2dTo1d_mpi_r
1822 
1823
1824  SUBROUTINE grid2dTo1d_mpi_r1(VarIn,VarOut) 
1825  IMPLICIT NONE 
1826    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1827    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1828   
1829    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3))
1830 
1831  END SUBROUTINE grid2dTo1d_mpi_r1
1832
1833  SUBROUTINE grid2dTo1d_mpi_r2(VarIn,VarOut) 
1834  IMPLICIT NONE 
1835    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1836    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1837   
1838    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1839 
1840  END SUBROUTINE grid2dTo1d_mpi_r2
1841 
1842  SUBROUTINE grid2dTo1d_mpi_r3(VarIn,VarOut) 
1843  IMPLICIT NONE 
1844    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1845    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1846   
1847    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1848 
1849  END SUBROUTINE grid2dTo1d_mpi_r3
1850
1851
1852
1853  SUBROUTINE grid2dTo1d_mpi_l(VarIn,VarOut) 
1854  IMPLICIT NONE 
1855    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1856    LOGICAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1857   
1858    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,1)
1859 
1860  END SUBROUTINE grid2dTo1d_mpi_l
1861 
1862
1863  SUBROUTINE grid2dTo1d_mpi_l1(VarIn,VarOut) 
1864  IMPLICIT NONE 
1865    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1866    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1867   
1868    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3))
1869 
1870  END SUBROUTINE grid2dTo1d_mpi_l1
1871
1872
1873
1874  SUBROUTINE grid2dTo1d_mpi_l2(VarIn,VarOut) 
1875  IMPLICIT NONE 
1876    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1877    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1878   
1879    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1880 
1881  END SUBROUTINE grid2dTo1d_mpi_l2
1882
1883 
1884  SUBROUTINE grid2dTo1d_mpi_l3(VarIn,VarOut) 
1885  IMPLICIT NONE 
1886    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1887    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1888   
1889    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1890 
1891  END SUBROUTINE grid2dTo1d_mpi_l3
1892
1893
1894!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1895!! SUBROUTINE grid2dTo1d  !! 
1896!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1897
1898
1899#if 0
1900  SUBROUTINE inca_grid2dTo1d_i(VarIn,VarOut) 
1901  IMPLICIT NONE 
1902    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1903    INTEGER,INTENT(OUT),DIMENSION(:)  :: VarOut
1904   
1905    CALL inca_grid2dTo1d_igen(VarIn,VarOut,1)
1906 
1907  END SUBROUTINE inca_grid2dTo1d_i
1908 
1909
1910  SUBROUTINE inca_grid2dTo1d_i1(VarIn,VarOut) 
1911  IMPLICIT NONE 
1912    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1913    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1914   
1915    CALL inca_grid2dTo1d_igen(VarIn,VarOut,size(VarIn,3))
1916 
1917  END SUBROUTINE inca_grid2dTo1d_i1
1918
1919  SUBROUTINE inca_grid2dTo1d_i2(VarIn,VarOut) 
1920  IMPLICIT NONE 
1921    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1922    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1923   
1924    CALL inca_grid2dTo1d_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1925 
1926  END SUBROUTINE inca_grid2dTo1d_i2
1927 
1928  SUBROUTINE inca_grid2dTo1d_i3(VarIn,VarOut) 
1929  IMPLICIT NONE 
1930    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1931    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1932   
1933    CALL inca_grid2dTo1d_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1934 
1935  END SUBROUTINE inca_grid2dTo1d_i3
1936 
1937
1938
1939
1940  SUBROUTINE inca_grid2dTo1d_r(VarIn,VarOut) 
1941  IMPLICIT NONE 
1942    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1943    REAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1944   
1945    CALL inca_grid2dTo1d_rgen(VarIn,VarOut,1)
1946 
1947  END SUBROUTINE inca_grid2dTo1d_r
1948 
1949
1950  SUBROUTINE inca_grid2dTo1d_r1(VarIn,VarOut) 
1951  IMPLICIT NONE 
1952    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1953    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1954   
1955    CALL inca_grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3))
1956 
1957  END SUBROUTINE inca_grid2dTo1d_r1
1958
1959  SUBROUTINE inca_grid2dTo1d_r2(VarIn,VarOut) 
1960  IMPLICIT NONE 
1961    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1962    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1963   
1964    CALL inca_grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1965 
1966  END SUBROUTINE inca_grid2dTo1d_r2
1967 
1968  SUBROUTINE inca_grid2dTo1d_r3(VarIn,VarOut) 
1969  IMPLICIT NONE 
1970    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1971    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1972   
1973    CALL inca_grid2dTo1d_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1974 
1975  END SUBROUTINE inca_grid2dTo1d_r3
1976
1977
1978
1979  SUBROUTINE inca_grid2dTo1d_l(VarIn,VarOut) 
1980  IMPLICIT NONE 
1981    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1982    LOGICAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1983   
1984    CALL inca_grid2dTo1d_lgen(VarIn,VarOut,1)
1985 
1986  END SUBROUTINE inca_grid2dTo1d_l
1987 
1988
1989  SUBROUTINE inca_grid2dTo1d_l1(VarIn,VarOut) 
1990  IMPLICIT NONE 
1991    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1992    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1993   
1994    CALL inca_grid2dTo1d_lgen(VarIn,VarOut,size(VarIn,3))
1995 
1996  END SUBROUTINE inca_grid2dTo1d_l1
1997
1998  SUBROUTINE inca_grid2dTo1d_l2(VarIn,VarOut) 
1999  IMPLICIT NONE 
2000    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
2001    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
2002   
2003    CALL inca_grid2dTo1d_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
2004 
2005  END SUBROUTINE inca_grid2dTo1d_l2
2006 
2007  SUBROUTINE inca_grid2dTo1d_l3(VarIn,VarOut) 
2008  IMPLICIT NONE 
2009    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
2010    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
2011   
2012    CALL inca_grid2dTo1d_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
2013 
2014  END SUBROUTINE inca_grid2dTo1d_l3
2015
2016 
2017!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2018!! SUBROUTINE grid1dTo2d  !! 
2019!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2020
2021
2022  SUBROUTINE inca_grid1dTo2d_i(VarIn,VarOut) 
2023  IMPLICIT NONE 
2024    INTEGER,INTENT(IN),DIMENSION(:)     :: VarIn
2025    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
2026   
2027    CALL inca_grid1dTo2d_igen(VarIn,VarOut,1)
2028 
2029  END SUBROUTINE inca_grid1dTo2d_i
2030 
2031
2032  SUBROUTINE inca_grid1dTo2d_i1(VarIn,VarOut) 
2033  IMPLICIT NONE 
2034    INTEGER,INTENT(IN),DIMENSION(:,:)     :: VarIn
2035    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
2036   
2037    CALL inca_grid1dTo2d_igen(VarIn,VarOut,size(VarIn,2))
2038 
2039  END SUBROUTINE inca_grid1dTo2d_i1
2040
2041  SUBROUTINE inca_grid1dTo2d_i2(VarIn,VarOut) 
2042  IMPLICIT NONE 
2043    INTEGER,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
2044    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
2045   
2046    CALL inca_grid1dTo2d_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
2047 
2048  END SUBROUTINE inca_grid1dTo2d_i2
2049 
2050  SUBROUTINE inca_grid1dTo2d_i3(VarIn,VarOut) 
2051  IMPLICIT NONE 
2052    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
2053    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
2054   
2055    CALL inca_grid1dTo2d_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
2056 
2057  END SUBROUTINE inca_grid1dTo2d_i3
2058
2059
2060  SUBROUTINE inca_grid1dTo2d_r(VarIn,VarOut) 
2061  IMPLICIT NONE 
2062    REAL,INTENT(IN),DIMENSION(:)     :: VarIn
2063    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
2064   
2065    CALL inca_grid1dTo2d_rgen(VarIn,VarOut,1)
2066 
2067  END SUBROUTINE inca_grid1dTo2d_r
2068 
2069
2070  SUBROUTINE inca_grid1dTo2d_r1(VarIn,VarOut) 
2071  IMPLICIT NONE 
2072    REAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
2073    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
2074   
2075    CALL inca_grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2))
2076 
2077  END SUBROUTINE inca_grid1dTo2d_r1
2078
2079  SUBROUTINE inca_grid1dTo2d_r2(VarIn,VarOut) 
2080  IMPLICIT NONE 
2081    REAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
2082    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
2083   
2084    CALL inca_grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
2085 
2086  END SUBROUTINE inca_grid1dTo2d_r2
2087 
2088  SUBROUTINE inca_grid1dTo2d_r3(VarIn,VarOut) 
2089  IMPLICIT NONE 
2090    REAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
2091    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
2092   
2093    CALL inca_grid1dTo2d_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
2094 
2095  END SUBROUTINE inca_grid1dTo2d_r3
2096 
2097 
2098 
2099  SUBROUTINE inca_grid1dTo2d_l(VarIn,VarOut) 
2100  IMPLICIT NONE 
2101    LOGICAL,INTENT(IN),DIMENSION(:)     :: VarIn
2102    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
2103   
2104    CALL inca_grid1dTo2d_lgen(VarIn,VarOut,1)
2105 
2106  END SUBROUTINE inca_grid1dTo2d_l
2107 
2108
2109  SUBROUTINE inca_grid1dTo2d_l1(VarIn,VarOut) 
2110  IMPLICIT NONE 
2111    LOGICAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
2112    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
2113   
2114    CALL inca_grid1dTo2d_lgen(VarIn,VarOut,size(VarIn,2))
2115 
2116  END SUBROUTINE inca_grid1dTo2d_l1
2117
2118  SUBROUTINE inca_grid1dTo2d_l2(VarIn,VarOut) 
2119  IMPLICIT NONE 
2120    LOGICAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
2121    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
2122   
2123    CALL inca_grid1dTo2d_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
2124 
2125  END SUBROUTINE inca_grid1dTo2d_l2
2126 
2127  SUBROUTINE inca_grid1dTo2d_l3(VarIn,VarOut) 
2128  IMPLICIT NONE 
2129    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
2130    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
2131   
2132    CALL inca_grid1dTo2d_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
2133 
2134  END SUBROUTINE inca_grid1dTo2d_l3
2135#endif
2136
2137#ifndef Modif_Oth_mpi
2138END MODULE mod_inca_mpi_transfert
2139#endif
2140
2141
2142!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2143!! DEFINITION DES FONCTIONS DE TRANSFERT GENERIQUES !
2144!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2145
2146  SUBROUTINE bcast_mpi_cgen(var,nb)
2147    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2148    IMPLICIT NONE
2149   
2150    CHARACTER,DIMENSION(nb),INTENT(INOUT) :: Var
2151    INTEGER,INTENT(IN) :: nb
2152   
2153#ifdef CPP_PARA
2154    INCLUDE 'mpif.h'
2155#endif
2156    INTEGER :: ierr
2157
2158    IF (.not.is_ok_mpi) RETURN
2159   
2160#ifdef CPP_PARA
2161    CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_root_x,MPI_COMM_INCA,ierr)
2162#endif
2163       
2164  END SUBROUTINE bcast_mpi_cgen
2165
2166
2167     
2168  SUBROUTINE bcast_mpi_igen(var,nb)
2169    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2170    IMPLICIT NONE
2171   
2172    INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var
2173    INTEGER,INTENT(IN) :: nb
2174   
2175#ifdef CPP_PARA
2176    INCLUDE 'mpif.h'
2177#endif
2178    INTEGER :: ierr
2179
2180    IF (.not.is_ok_mpi) RETURN
2181
2182#ifdef CPP_PARA
2183    CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_root_x,MPI_COMM_INCA,ierr)
2184#endif
2185       
2186  END SUBROUTINE bcast_mpi_igen
2187
2188
2189
2190 
2191  SUBROUTINE bcast_mpi_rgen(var,nb)
2192    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2193    IMPLICIT NONE
2194   
2195    REAL,DIMENSION(nb),INTENT(INOUT) :: Var
2196    INTEGER,INTENT(IN) :: nb
2197   
2198#ifdef CPP_PARA
2199    INCLUDE 'mpif.h'
2200#endif
2201    INTEGER :: ierr
2202
2203    IF (.not.is_ok_mpi) RETURN
2204
2205#ifdef CPP_PARA
2206    CALL MPI_BCAST(Var,nb,MPI_REAL_INCA,mpi_root_x,MPI_COMM_INCA,ierr)
2207#endif
2208   
2209  END SUBROUTINE bcast_mpi_rgen
2210 
2211
2212
2213
2214  SUBROUTINE bcast_mpi_lgen(var,nb)
2215    USE mod_inca_mpi_data ,  mpi_root_x=>mpi_root
2216    IMPLICIT NONE
2217   
2218    LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var
2219    INTEGER,INTENT(IN) :: nb
2220   
2221#ifdef CPP_PARA
2222    INCLUDE 'mpif.h'
2223#endif
2224    INTEGER :: ierr
2225
2226    IF (.not.is_ok_mpi) RETURN
2227
2228#ifdef CPP_PARA
2229    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_root_x,MPI_COMM_INCA,ierr)
2230#endif
2231
2232  END SUBROUTINE bcast_mpi_lgen
2233
2234 
2235
2236  SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize)
2237    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2238    USE mod_grid_inca
2239    IMPLICIT NONE
2240 
2241    INTEGER,INTENT(IN) :: dimsize
2242    INTEGER,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
2243    INTEGER,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
2244 
2245#ifdef CPP_PARA
2246    INCLUDE 'mpif.h'
2247#endif
2248    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2249    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2250    INTEGER,DIMENSION(dimsize*plon_glo) :: VarTmp
2251    INTEGER :: nb,i,index,rank
2252    INTEGER :: ierr
2253
2254
2255    IF (.not.is_ok_mpi) THEN
2256      VarOut(:,:)=VarIn(:,:)
2257      RETURN
2258    ENDIF
2259
2260   
2261    IF (is_mpi_root) THEN
2262      Index=1
2263      DO rank=0,mpi_size-1
2264        nb=plon_mpi_para_nb(rank)
2265        displs(rank)=Index-1
2266        counts(rank)=nb*dimsize
2267        DO i=1,dimsize
2268          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
2269          Index=Index+nb
2270        ENDDO
2271      ENDDO
2272    ENDIF
2273     
2274#ifdef CPP_PARA 
2275    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,plon_mpi*dimsize,   &
2276                      MPI_INTEGER,mpi_root_x, MPI_COMM_INCA,ierr)
2277#endif
2278
2279  END SUBROUTINE scatter_mpi_igen
2280
2281  SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize)
2282    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2283    USE mod_grid_inca
2284    IMPLICIT NONE
2285 
2286    INTEGER,INTENT(IN) :: dimsize
2287    REAL,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
2288    REAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
2289 
2290#ifdef CPP_PARA
2291    INCLUDE 'mpif.h'
2292#endif
2293
2294    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2295    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2296    REAL,DIMENSION(dimsize*plon_glo) :: VarTmp
2297    INTEGER :: nb,i,index,rank
2298    INTEGER :: ierr
2299
2300    IF (.not.is_ok_mpi) THEN
2301      VarOut(:,:)=VarIn(:,:)
2302      RETURN
2303    ENDIF
2304   
2305    IF (is_mpi_root) THEN
2306      Index=1
2307      DO rank=0,mpi_size-1
2308        nb=plon_mpi_para_nb(rank)
2309        displs(rank)=Index-1
2310        counts(rank)=nb*dimsize
2311        DO i=1,dimsize
2312          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
2313          Index=Index+nb
2314        ENDDO
2315      ENDDO
2316    ENDIF
2317     
2318#ifdef CPP_PARA 
2319    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_INCA,VarOut,plon_mpi*dimsize,   &
2320                      MPI_REAL_INCA,mpi_root_x, MPI_COMM_INCA,ierr)
2321
2322#endif
2323
2324  END SUBROUTINE scatter_mpi_rgen
2325
2326 
2327  SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize)
2328    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2329    USE mod_grid_inca
2330    IMPLICIT NONE
2331 
2332    INTEGER,INTENT(IN) :: dimsize
2333    LOGICAL,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
2334    LOGICAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
2335 
2336#ifdef CPP_PARA
2337    INCLUDE 'mpif.h'
2338#endif
2339
2340    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2341    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2342    LOGICAL,DIMENSION(dimsize*plon_glo) :: VarTmp
2343    INTEGER :: nb,i,index,rank
2344    INTEGER :: ierr
2345
2346    IF (.not.is_ok_mpi) THEN
2347      VarOut(:,:)=VarIn(:,:)
2348      RETURN
2349    ENDIF
2350   
2351    IF (is_mpi_root) THEN
2352      Index=1
2353      DO rank=0,mpi_size-1
2354        nb=plon_mpi_para_nb(rank)
2355        displs(rank)=Index-1
2356        counts(rank)=nb*dimsize
2357        DO i=1,dimsize
2358          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
2359          Index=Index+nb
2360        ENDDO
2361      ENDDO
2362    ENDIF
2363     
2364#ifdef CPP_PARA
2365    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,plon_mpi*dimsize,   &
2366                      MPI_LOGICAL,mpi_root_x, MPI_COMM_INCA,ierr)
2367#endif
2368
2369  END SUBROUTINE scatter_mpi_lgen 
2370
2371
2372
2373
2374  SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize)
2375    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2376    USE mod_grid_inca
2377    IMPLICIT NONE
2378 
2379#ifdef CPP_PARA
2380    INCLUDE 'mpif.h'
2381#endif
2382   
2383    INTEGER,INTENT(IN) :: dimsize
2384    INTEGER,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
2385    INTEGER,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
2386 
2387    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2388    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2389    INTEGER,DIMENSION(dimsize*plon_glo) :: VarTmp
2390    INTEGER :: nb,i,index,rank
2391    INTEGER :: ierr
2392
2393    IF (.not.is_ok_mpi) THEN
2394      VarOut(:,:)=VarIn(:,:)
2395      RETURN
2396    ENDIF
2397
2398    IF (is_mpi_root) THEN
2399      Index=1
2400      DO rank=0,mpi_size-1
2401        nb=plon_mpi_para_nb(rank)
2402        displs(rank)=Index-1
2403        counts(rank)=nb*dimsize
2404        Index=Index+nb*dimsize
2405      ENDDO
2406     
2407    ENDIF
2408   
2409#ifdef CPP_PARA
2410    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
2411                     MPI_INTEGER,mpi_root_x, MPI_COMM_INCA,ierr)
2412#endif
2413
2414                         
2415    IF (is_mpi_root) THEN
2416      Index=1
2417      DO rank=0,mpi_size-1
2418        nb=plon_mpi_para_nb(rank)
2419        DO i=1,dimsize
2420          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
2421          Index=Index+nb
2422        ENDDO
2423      ENDDO
2424    ENDIF
2425
2426  END SUBROUTINE gather_mpi_igen 
2427
2428  SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize)
2429    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2430    USE mod_grid_inca
2431    IMPLICIT NONE
2432 
2433#ifdef CPP_PARA
2434    INCLUDE 'mpif.h'
2435#endif
2436   
2437    INTEGER,INTENT(IN) :: dimsize
2438    REAL,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
2439    REAL,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
2440 
2441    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2442    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2443    REAL,DIMENSION(dimsize*plon_glo) :: VarTmp
2444    INTEGER :: nb,i,index,rank
2445    INTEGER :: ierr
2446
2447    IF (is_mpi_root) THEN
2448      Index=1
2449      DO rank=0,mpi_size-1
2450        nb=plon_mpi_para_nb(rank)
2451        displs(rank)=Index-1
2452        counts(rank)=nb*dimsize
2453        Index=Index+nb*dimsize
2454      ENDDO
2455    ENDIF
2456   
2457    IF (.not.is_ok_mpi) THEN
2458      VarOut(:,:)=VarIn(:,:)
2459      RETURN
2460    ENDIF
2461
2462#ifdef CPP_PARA
2463    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_REAL_INCA,VarTmp,counts,displs,   &
2464                      MPI_REAL_INCA,mpi_root_x, MPI_COMM_INCA,ierr)
2465#endif
2466                         
2467    IF (is_mpi_root) THEN
2468      Index=1
2469      DO rank=0,mpi_size-1
2470        nb=plon_mpi_para_nb(rank)
2471        DO i=1,dimsize
2472          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
2473          Index=Index+nb
2474        ENDDO
2475      ENDDO
2476    ENDIF
2477
2478  END SUBROUTINE gather_mpi_rgen 
2479
2480  SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize)
2481    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2482    USE mod_grid_inca
2483    IMPLICIT NONE
2484 
2485    INTEGER,INTENT(IN) :: dimsize
2486    LOGICAL,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
2487    LOGICAL,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
2488 
2489#ifdef CPP_PARA
2490    INCLUDE 'mpif.h'
2491#endif
2492
2493    INTEGER,DIMENSION(0:mpi_size-1) :: displs
2494    INTEGER,DIMENSION(0:mpi_size-1) :: counts
2495    LOGICAL,DIMENSION(dimsize*plon_glo) :: VarTmp
2496    INTEGER :: nb,i,index,rank
2497    INTEGER :: ierr
2498   
2499    IF (.not.is_ok_mpi) THEN
2500      VarOut(:,:)=VarIn(:,:)
2501      RETURN
2502    ENDIF
2503
2504    IF (is_mpi_root) THEN
2505      Index=1
2506      DO rank=0,mpi_size-1
2507        nb=plon_mpi_para_nb(rank)
2508        displs(rank)=Index-1
2509        counts(rank)=nb*dimsize
2510        Index=Index+nb*dimsize
2511      ENDDO
2512    ENDIF
2513   
2514
2515#ifdef CPP_PARA
2516    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
2517                      MPI_LOGICAL,mpi_root_x, MPI_COMM_INCA,ierr)
2518#endif
2519                         
2520    IF (is_mpi_root) THEN
2521      Index=1
2522      DO rank=0,mpi_size-1
2523        nb=plon_mpi_para_nb(rank)
2524        DO i=1,dimsize
2525          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
2526          Index=Index+nb
2527        ENDDO
2528      ENDDO
2529    ENDIF
2530
2531  END SUBROUTINE gather_mpi_lgen
2532 
2533
2534
2535  SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb)
2536    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2537    USE mod_grid_inca
2538    IMPLICIT NONE
2539   
2540#ifdef CPP_PARA
2541    INCLUDE 'mpif.h'
2542#endif
2543   
2544    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
2545    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
2546    INTEGER,INTENT(IN) :: nb
2547    INTEGER :: ierr
2548   
2549    IF (.not.is_ok_mpi) THEN
2550      VarOut(:)=VarIn(:)
2551      RETURN
2552    ENDIF
2553
2554
2555#ifdef CPP_PARA
2556    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_SUM,mpi_root_x,MPI_COMM_INCA,ierr)
2557#endif
2558           
2559  END SUBROUTINE reduce_sum_mpi_igen
2560 
2561  SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb)
2562    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2563    USE mod_grid_inca
2564
2565    IMPLICIT NONE
2566
2567#ifdef CPP_PARA
2568    INCLUDE 'mpif.h'
2569#endif
2570   
2571    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
2572    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
2573    INTEGER,INTENT(IN) :: nb
2574    INTEGER :: ierr
2575 
2576    IF (.not.is_ok_mpi) THEN
2577      VarOut(:)=VarIn(:)
2578      RETURN
2579    ENDIF
2580   
2581#ifdef CPP_PARA
2582    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_INCA,MPI_SUM,mpi_root_x,MPI_COMM_INCA,ierr)
2583#endif
2584       
2585  END SUBROUTINE reduce_sum_mpi_rgen
2586
2587
2588
2589  SUBROUTINE grid1dTo2d_mpi_igen(VarIn,VarOut,dimsize)
2590    USE mod_inca_mpi_data
2591    USE mod_grid_inca
2592    IMPLICIT NONE
2593   
2594    INTEGER,INTENT(IN) :: dimsize
2595    INTEGER,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2596    INTEGER,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2597    INTEGER :: i,ij,Offset
2598
2599   
2600    VarOut(1:nbp_lon,:)=0
2601    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=0
2602   
2603    offset=ii_begin
2604    IF (is_north_pole) Offset=nbp_lon
2605   
2606   
2607    DO i=1,dimsize
2608      DO ij=1,plon_mpi
2609        VarOut(ij+offset-1,i)=VarIn(ij,i)
2610      ENDDO
2611    ENDDO
2612   
2613   
2614    IF (is_north_pole) THEN
2615      DO i=1,dimsize
2616        DO ij=1,nbp_lon
2617         VarOut(ij,i)=VarIn(1,i)
2618        ENDDO
2619      ENDDO
2620    ENDIF
2621   
2622    IF (is_south_pole) THEN
2623      DO i=1,dimsize
2624        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2625         VarOut(ij,i)=VarIn(plon_mpi,i)
2626        ENDDO
2627      ENDDO
2628    ENDIF
2629
2630  END SUBROUTINE grid1dTo2d_mpi_igen   
2631
2632
2633  SUBROUTINE grid1dTo2d_mpi_rgen(VarIn,VarOut,dimsize)
2634    USE mod_inca_mpi_data
2635    USE mod_grid_inca
2636    IMPLICIT NONE
2637   
2638    INTEGER,INTENT(IN) :: dimsize
2639    REAL,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2640    REAL,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2641    INTEGER :: i,ij,Offset
2642
2643   
2644    VarOut(1:nbp_lon,:)=0
2645    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=0
2646   
2647    offset=ii_begin
2648    IF (is_north_pole) Offset=nbp_lon
2649   
2650   
2651    DO i=1,dimsize
2652      DO ij=1,plon_mpi
2653        VarOut(ij+offset-1,i)=VarIn(ij,i)
2654      ENDDO
2655    ENDDO
2656   
2657   
2658    IF (is_north_pole) THEN
2659      DO i=1,dimsize
2660        DO ij=1,nbp_lon
2661         VarOut(ij,i)=VarIn(1,i)
2662        ENDDO
2663      ENDDO
2664    ENDIF
2665   
2666    IF (is_south_pole) THEN
2667      DO i=1,dimsize
2668        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2669         VarOut(ij,i)=VarIn(plon_mpi,i)
2670        ENDDO
2671      ENDDO
2672    ENDIF
2673
2674   END SUBROUTINE grid1dTo2d_mpi_rgen   
2675
2676
2677
2678  SUBROUTINE grid1dTo2d_mpi_lgen(VarIn,VarOut,dimsize)
2679    USE mod_inca_mpi_data
2680    USE mod_grid_inca
2681    IMPLICIT NONE
2682   
2683    INTEGER,INTENT(IN) :: dimsize
2684    LOGICAL,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2685    LOGICAL,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2686    INTEGER :: i,ij,Offset
2687
2688   
2689    VarOut(1:nbp_lon,:)=.FALSE.
2690    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=.FALSE.
2691   
2692    offset=ii_begin
2693    IF (is_north_pole) Offset=nbp_lon
2694   
2695   
2696    DO i=1,dimsize
2697      DO ij=1,plon_mpi
2698        VarOut(ij+offset-1,i)=VarIn(ij,i)
2699      ENDDO
2700    ENDDO
2701   
2702   
2703    IF (is_north_pole) THEN
2704      DO i=1,dimsize
2705        DO ij=1,nbp_lon
2706         VarOut(ij,i)=VarIn(1,i)
2707        ENDDO
2708      ENDDO
2709    ENDIF
2710   
2711    IF (is_south_pole) THEN
2712      DO i=1,dimsize
2713        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2714         VarOut(ij,i)=VarIn(plon_mpi,i)
2715        ENDDO
2716      ENDDO
2717    ENDIF
2718
2719   END SUBROUTINE grid1dTo2d_mpi_lgen   
2720
2721 
2722
2723
2724  SUBROUTINE grid2dTo1d_mpi_igen(VarIn,VarOut,dimsize)
2725    USE mod_inca_mpi_data
2726    USE mod_grid_inca
2727    IMPLICIT NONE
2728   
2729    INTEGER,INTENT(IN) :: dimsize
2730    INTEGER,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2731    INTEGER,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2732    INTEGER :: i,ij,offset
2733
2734    offset=ii_begin
2735    IF (is_north_pole) offset=nbp_lon
2736
2737    DO i=1,dimsize
2738      DO ij=1,plon_mpi
2739        VarOut(ij,i)=VarIn(ij+offset-1,i)
2740      ENDDO
2741    ENDDO
2742
2743    IF (is_north_pole) THEN
2744      DO i=1,dimsize
2745        VarOut(1,i)=VarIn(1,i)
2746      ENDDO
2747    ENDIF
2748   
2749   
2750  END SUBROUTINE grid2dTo1d_mpi_igen   
2751
2752
2753
2754  SUBROUTINE grid2dTo1d_mpi_rgen(VarIn,VarOut,dimsize)
2755    USE mod_inca_mpi_data
2756    USE mod_grid_inca
2757    IMPLICIT NONE
2758   
2759    INTEGER,INTENT(IN) :: dimsize
2760    REAL,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2761    REAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2762    INTEGER :: i,ij,offset
2763
2764    offset=ii_begin
2765    IF (is_north_pole) offset=nbp_lon
2766
2767    DO i=1,dimsize
2768      DO ij=1,plon_mpi
2769        VarOut(ij,i)=VarIn(ij+offset-1,i)
2770      ENDDO
2771    ENDDO
2772
2773    IF (is_north_pole) THEN
2774      DO i=1,dimsize
2775         VarOut(1,i)=VarIn(1,i)
2776      ENDDO
2777    ENDIF
2778   
2779   
2780  END SUBROUTINE grid2dTo1d_mpi_rgen   
2781 
2782
2783  SUBROUTINE grid2dTo1d_mpi_lgen(VarIn,VarOut,dimsize)
2784    USE mod_inca_mpi_data
2785    USE mod_grid_inca
2786    IMPLICIT NONE
2787   
2788    INTEGER,INTENT(IN) :: dimsize
2789    LOGICAL,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2790    LOGICAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2791    INTEGER :: i,ij,offset
2792
2793    offset=ii_begin
2794    IF (is_north_pole) offset=nbp_lon
2795
2796    DO i=1,dimsize
2797      DO ij=1,plon_mpi
2798        VarOut(ij,i)=VarIn(ij+offset-1,i)
2799      ENDDO
2800    ENDDO
2801
2802    IF (is_north_pole) THEN
2803      DO i=1,dimsize
2804        VarOut(1,i)=VarIn(1,i)
2805      ENDDO
2806    ENDIF
2807   
2808   
2809  END SUBROUTINE grid2dTo1d_mpi_lgen   
2810
2811#ifdef Modif_Oth_mpi
2812END MODULE mod_inca_mpi_transfert
2813#endif
2814
2815!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2816!  DEFINITION DES SUBROUTINES GENERIQUES   !
2817!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2818#if 0
2819  SUBROUTINE inca_grid1dTo2d_igen(VarIn,VarOut,dimsize)
2820    USE inca_data_para 
2821    IMPLICIT NONE
2822   
2823    INTEGER,INTENT(IN) :: dimsize
2824    INTEGER,INTENT(IN) ,DIMENSION(nbp_mpi,dimsize)       :: VarIn
2825    INTEGER,INTENT(OUT),DIMENSION(iim_glo,jj_nb,dimsize)  :: VarOut
2826    INTEGER :: i,j
2827
2828    DO j=1,dimsize
2829      DO i=1,nbp_mpi
2830        VarOut(index_i(i),index_j(i),j)=VarIn(i,j)
2831      ENDDO
2832    ENDDO
2833
2834    IF (is_north_pole) THEN
2835      DO j=1,dimsize
2836        DO i=2,iim_glo
2837          VarOut(i,1,j)=VarOut(1,1,j)
2838        ENDDO
2839      ENDDO
2840    ENDIF
2841   
2842    IF (is_south_pole) THEN
2843      DO j=1,dimsize
2844        DO i=2,iim_glo
2845          VarOut(i,jj_nb,j)=VarOut(1,jj_nb,j)
2846        ENDDO
2847      ENDDO
2848    ENDIF
2849
2850   END SUBROUTINE inca_grid1dTo2d_igen   
2851
2852  SUBROUTINE inca_grid1dTo2d_rgen(VarIn,VarOut,dimsize)
2853    USE mod_inca_mpi_data
2854    USE inca_data_para 
2855    IMPLICIT NONE
2856   
2857    INTEGER,INTENT(IN) :: dimsize
2858    REAL,INTENT(IN) ,DIMENSION(nbp_mpi,dimsize)       :: VarIn
2859    REAL,INTENT(OUT),DIMENSION(iim_glo,jj_nb,dimsize)   :: VarOut
2860    INTEGER :: i,j
2861
2862    DO j=1,dimsize
2863      DO i=1,nbp_mpi
2864        VarOut(index_i(i),index_j(i),j)=VarIn(i,j)
2865      ENDDO
2866    ENDDO
2867   
2868    IF (is_north_pole) THEN
2869      DO j=1,dimsize
2870        DO i=2,iim_glo
2871          VarOut(i,1,j)=VarOut(1,1,j)
2872        ENDDO
2873      ENDDO
2874    ENDIF
2875   
2876    IF (is_south_pole) THEN
2877      DO j=1,dimsize
2878        DO i=2,iim_glo
2879          VarOut(i,jj_nb,j)=VarOut(1,jj_nb,j)
2880        ENDDO
2881      ENDDO
2882    ENDIF
2883   
2884
2885   END SUBROUTINE inca_grid1dTo2d_rgen   
2886
2887
2888
2889
2890  SUBROUTINE inca_grid1dTo2d_lgen(VarIn,VarOut,dimsize)
2891  USE inca_data_para 
2892  IMPLICIT NONE
2893   
2894    INTEGER,INTENT(IN) :: dimsize
2895    LOGICAL,INTENT(IN) ,DIMENSION(nbp_mpi,dimsize)       :: VarIn
2896    LOGICAL,INTENT(OUT),DIMENSION(iim_glo,jj_nb,dimsize)   :: VarOut
2897    INTEGER :: i,j
2898
2899    DO j=1,dimsize
2900      DO i=1,nbp_mpi
2901        VarOut(index_i(i),index_j(i),j)=VarIn(i,j)
2902      ENDDO
2903    ENDDO
2904
2905    IF (is_north_pole) THEN
2906      DO j=1,dimsize
2907        DO i=2,iim_glo
2908          VarOut(i,1,j)=VarOut(1,1,j)
2909        ENDDO
2910      ENDDO
2911    ENDIF
2912   
2913    IF (is_south_pole) THEN
2914      DO j=1,dimsize
2915        DO i=2,iim_glo
2916          VarOut(i,jj_nb,j)=VarOut(1,jj_nb,j)
2917        ENDDO
2918      ENDDO
2919    ENDIF
2920
2921  END SUBROUTINE inca_grid1dTo2d_lgen   
2922
2923
2924
2925
2926  SUBROUTINE inca_grid2dTo1d_igen(VarIn,VarOut,dimsize)
2927  USE inca_data_para 
2928  IMPLICIT NONE
2929   
2930    INTEGER,INTENT(IN) :: dimsize
2931    INTEGER,INTENT(IN) ,DIMENSION(iim_glo,jj_nb,dimsize) :: VarIn
2932    INTEGER,INTENT(OUT),DIMENSION(nbp_mpi,dimsize)     :: VarOut
2933    INTEGER :: i,j
2934
2935    DO j=1,dimsize
2936      DO i=1,nbp_mpi
2937        VarOut(i,j)=VarIn(index_i(i),index_j(i),j)
2938      ENDDO
2939    ENDDO
2940
2941   END SUBROUTINE inca_grid2dTo1d_igen   
2942
2943
2944
2945  SUBROUTINE inca_grid2dTo1d_rgen(VarIn,VarOut,dimsize)
2946  USE inca_data_para 
2947  IMPLICIT NONE
2948   
2949    INTEGER,INTENT(IN) :: dimsize
2950    REAL,INTENT(IN) ,DIMENSION(iim_glo,jj_nb,dimsize) :: VarIn
2951    REAL,INTENT(OUT),DIMENSION(nbp_mpi,dimsize)     :: VarOut
2952    INTEGER :: i,j
2953
2954    DO j=1,dimsize
2955      DO i=1,nbp_mpi
2956        VarOut(i,j)=VarIn(index_i(i),index_j(i),j)
2957      ENDDO
2958    ENDDO
2959
2960   END SUBROUTINE inca_grid2dTo1d_rgen   
2961
2962
2963
2964  SUBROUTINE inca_grid2dTo1d_lgen(VarIn,VarOut,dimsize)
2965  USE inca_data_para 
2966  IMPLICIT NONE
2967   
2968    INTEGER,INTENT(IN) :: dimsize
2969    LOGICAL,INTENT(IN) ,DIMENSION(iim_glo,jj_nb,dimsize) :: VarIn
2970    LOGICAL,INTENT(OUT),DIMENSION(nbp_mpi,dimsize)     :: VarOut
2971    INTEGER :: i,j
2972
2973    DO j=1,dimsize
2974      DO i=1,nbp_mpi
2975        VarOut(i,j)=VarIn(index_i(i),index_j(i),j)
2976      ENDDO
2977    ENDDO
2978
2979   END SUBROUTINE inca_grid2dTo1d_lgen   
2980#endif
Note: See TracBrowser for help on using the repository browser.