source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/src/INCA_PARA/mod_inca_transfert_para.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: 40.2 KB
Line 
1MODULE MOD_INCA_TRANSFERT_PARA
2
3  USE MOD_INCA_MPI_TRANSFERT
4  USE MOD_INCA_OMP_TRANSFERT 
5
6  INTERFACE bcast
7    MODULE PROCEDURE &
8       bcast_c,bcast_c1,                                     &
9       bcast_i,bcast_i1,bcast_i2,bcast_i3,bcast_i4,          &
10       bcast_r,bcast_r1,bcast_r2,bcast_r3,bcast_r4,bcast_r5, &
11       bcast_l,bcast_l1,bcast_l2,bcast_l3,bcast_l4
12  END INTERFACE
13
14  INTERFACE scatter
15    MODULE PROCEDURE &
16       scatter_i,scatter_i1,scatter_i2,scatter_i3, &
17       scatter_r,scatter_r1,scatter_r2,scatter_r3, &
18       scatter_l,scatter_l1,scatter_l2,scatter_l3
19  END INTERFACE
20 
21  INTERFACE gather
22    MODULE PROCEDURE &
23       gather_i,gather_i1,gather_i2,gather_i3, &
24       gather_r,gather_r1,gather_r2,gather_r3, &
25       gather_l,gather_l1,gather_l2,gather_l3 
26  END INTERFACE
27 
28  INTERFACE scatter2D
29    MODULE PROCEDURE &
30       scatter2D_i,scatter2D_i1,scatter2D_i2,scatter2D_i3, &
31       scatter2D_r,scatter2D_r1,scatter2D_r2,scatter2D_r3, &
32       scatter2D_l,scatter2D_l1,scatter2D_l2,scatter2D_l3
33  END INTERFACE
34
35  INTERFACE gather2D
36    MODULE PROCEDURE &
37       gather2D_i,gather2D_i1,gather2D_i2,gather2D_i3, &
38       gather2D_r,gather2D_r1,gather2D_r2,gather2D_r3, &
39       gather2D_l,gather2D_l1,gather2D_l2,gather2D_l3
40  END INTERFACE
41 
42  INTERFACE reduce_sum
43    MODULE PROCEDURE &
44       reduce_sum_i,reduce_sum_i1,reduce_sum_i2,reduce_sum_i3,reduce_sum_i4, &
45       reduce_sum_r,reduce_sum_r1,reduce_sum_r2,reduce_sum_r3,reduce_sum_r4
46  END INTERFACE
47
48   
49CONTAINS
50
51!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
52!! Definition des Broadcast --> 4D   !!
53!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
54
55  !! -- Les chaine de charactère -- !!
56
57  SUBROUTINE bcast_c(var)
58  IMPLICIT NONE
59    CHARACTER(LEN=*),INTENT(INOUT) :: Var
60   
61!$OMP MASTER
62    CALL bcast_mpi(Var)
63!$OMP END MASTER
64    CALL bcast_omp(Var)
65   
66  END SUBROUTINE bcast_c
67 
68  SUBROUTINE bcast_c1(var)
69  IMPLICIT NONE
70    CHARACTER(LEN=*),INTENT(INOUT) :: Var(:)
71   
72!$OMP MASTER
73    CALL bcast_mpi(Var)
74!$OMP END MASTER
75    CALL bcast_omp(Var)
76   
77  END SUBROUTINE bcast_c1
78
79!! -- Les entiers -- !!
80 
81  SUBROUTINE bcast_i(var)
82  IMPLICIT NONE
83    INTEGER,INTENT(INOUT) :: Var
84!$OMP MASTER
85    CALL bcast_mpi(Var)
86!$OMP END MASTER
87    CALL bcast_omp(Var)
88   
89  END SUBROUTINE bcast_i
90
91  SUBROUTINE bcast_i1(var)
92  IMPLICIT NONE
93    INTEGER,INTENT(INOUT) :: Var(:)
94   
95!$OMP MASTER
96    CALL bcast_mpi(Var)
97!$OMP END MASTER
98    CALL bcast_omp(Var)
99   
100  END SUBROUTINE bcast_i1
101
102
103  SUBROUTINE bcast_i2(var)
104  IMPLICIT NONE
105    INTEGER,INTENT(INOUT) :: Var(:,:)
106   
107!$OMP MASTER
108    CALL bcast_mpi(Var)
109!$OMP END MASTER
110    CALL bcast_omp(Var)
111   
112  END SUBROUTINE bcast_i2
113
114
115  SUBROUTINE bcast_i3(var)
116  IMPLICIT NONE
117    INTEGER,INTENT(INOUT) :: Var(:,:,:)
118   
119!$OMP MASTER
120    CALL bcast_mpi(Var)
121!$OMP END MASTER
122    CALL bcast_omp(Var)
123   
124  END SUBROUTINE bcast_i3
125
126
127  SUBROUTINE bcast_i4(var)
128  IMPLICIT NONE
129    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
130   
131!$OMP MASTER
132    CALL bcast_mpi(Var)
133!$OMP END MASTER
134    CALL bcast_omp(Var)
135   
136  END SUBROUTINE bcast_i4
137
138 
139!! -- Les reels -- !!
140 
141  SUBROUTINE bcast_r(var)
142  IMPLICIT NONE
143    REAL,INTENT(INOUT) :: Var
144
145!$OMP MASTER
146    CALL bcast_mpi(Var)
147!$OMP END MASTER
148    CALL bcast_omp(Var)
149   
150  END SUBROUTINE bcast_r
151
152  SUBROUTINE bcast_r1(var)
153  IMPLICIT NONE
154    REAL,INTENT(INOUT) :: Var(:)
155   
156!$OMP MASTER
157    CALL bcast_mpi(Var)
158!$OMP END MASTER
159    CALL bcast_omp(Var)
160   
161  END SUBROUTINE bcast_r1
162
163
164  SUBROUTINE bcast_r2(var)
165  IMPLICIT NONE
166    REAL,INTENT(INOUT) :: Var(:,:)
167   
168!$OMP MASTER
169    CALL bcast_mpi(Var)
170!$OMP END MASTER
171    CALL bcast_omp(Var)
172   
173  END SUBROUTINE bcast_r2
174
175
176  SUBROUTINE bcast_r3(var)
177  IMPLICIT NONE
178    REAL,INTENT(INOUT) :: Var(:,:,:)
179   
180!$OMP MASTER
181    CALL bcast_mpi(Var)
182!$OMP END MASTER
183    CALL bcast_omp(Var)
184   
185  END SUBROUTINE bcast_r3
186
187
188  SUBROUTINE bcast_r4(var)
189  IMPLICIT NONE
190    REAL,INTENT(INOUT) :: Var(:,:,:,:)
191   
192!$OMP MASTER
193    CALL bcast_mpi(Var)
194!$OMP END MASTER
195    CALL bcast_omp(Var)
196   
197  END SUBROUTINE bcast_r4 
198
199  SUBROUTINE bcast_r5(var)
200  IMPLICIT NONE
201    REAL,INTENT(INOUT) :: Var(:,:,:,:,:)
202   
203!$OMP MASTER
204    CALL bcast_mpi(Var)
205!$OMP END MASTER
206    CALL bcast_omp(Var)
207   
208  END SUBROUTINE bcast_r5
209
210!! -- Les booleens -- !!
211 
212  SUBROUTINE bcast_l(var)
213  IMPLICIT NONE
214    LOGICAL,INTENT(INOUT) :: Var
215!$OMP MASTER
216    CALL bcast_mpi(Var)
217!$OMP END MASTER
218    CALL bcast_omp(Var)
219   
220  END SUBROUTINE bcast_l
221
222  SUBROUTINE bcast_l1(var)
223  IMPLICIT NONE
224    LOGICAL,INTENT(INOUT) :: Var(:)
225   
226!$OMP MASTER
227    CALL bcast_mpi(Var)
228!$OMP END MASTER
229    CALL bcast_omp(Var)
230   
231  END SUBROUTINE bcast_l1
232
233
234  SUBROUTINE bcast_l2(var)
235  IMPLICIT NONE
236    LOGICAL,INTENT(INOUT) :: Var(:,:)
237   
238!$OMP MASTER
239    CALL bcast_mpi(Var)
240!$OMP END MASTER
241    CALL bcast_omp(Var)
242   
243  END SUBROUTINE bcast_l2
244
245
246  SUBROUTINE bcast_l3(var)
247  IMPLICIT NONE
248    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
249   
250!$OMP MASTER
251    CALL bcast_mpi(Var)
252!$OMP END MASTER
253    CALL bcast_omp(Var)
254   
255  END SUBROUTINE bcast_l3
256
257
258  SUBROUTINE bcast_l4(var)
259  IMPLICIT NONE
260    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
261   
262!$OMP MASTER
263    CALL bcast_mpi(Var)
264!$OMP END MASTER
265    CALL bcast_omp(Var)
266   
267  END SUBROUTINE bcast_l4
268
269
270!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
271!! Definition des Scatter   --> 4D   !!
272!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
273
274  SUBROUTINE scatter_i(VarIn, VarOut)
275    USE mod_inca_mpi_data, ONLY : plon_mpi
276    IMPLICIT NONE
277 
278    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
279    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
280
281    INTEGER,DIMENSION(plon_mpi) :: Var_tmp
282   
283!$OMP MASTER
284      CALL scatter_mpi(VarIn,Var_tmp)
285!$OMP END MASTER
286
287      CALL scatter_omp(Var_tmp,Varout)
288   
289  END SUBROUTINE scatter_i
290
291
292  SUBROUTINE scatter_i1(VarIn, VarOut)
293    USE mod_inca_mpi_data, ONLY : plon_mpi
294    IMPLICIT NONE
295 
296    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
297    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
298
299    CALL body(VarIn,VarOut,SIZE(Varout,2))
300   
301  CONTAINS
302    SUBROUTINE body(VarIn,VarOut,s1)
303      INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
304      INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
305      INTEGER,INTENT(IN) :: s1
306      INTEGER,DIMENSION(plon_mpi,s1) :: Var_tmp
307     
308!$OMP MASTER
309        CALL scatter_mpi(VarIn,Var_tmp)
310!$OMP END MASTER
311        CALL scatter_omp(Var_tmp,Varout)
312    END SUBROUTINE body
313
314  END SUBROUTINE scatter_i1
315
316
317  SUBROUTINE scatter_i2(VarIn, VarOut)
318    USE mod_inca_mpi_data, ONLY : plon_mpi
319    IMPLICIT NONE
320 
321    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
322    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
323   
324    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3))
325   
326  CONTAINS
327    SUBROUTINE body(VarIn,VarOut,s1,s2)
328      INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
329      INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
330      INTEGER,INTENT(IN) :: s1,s2
331      INTEGER,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
332     
333!$OMP MASTER
334        CALL scatter_mpi(VarIn,Var_tmp)
335!$OMP END MASTER
336        CALL scatter_omp(Var_tmp,Varout)
337    END SUBROUTINE body
338   
339  END SUBROUTINE scatter_i2
340
341
342  SUBROUTINE scatter_i3(VarIn, VarOut)
343    USE mod_inca_mpi_data, ONLY : plon_mpi
344    IMPLICIT NONE
345 
346    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
347    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
348
349    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,3))
350   
351  CONTAINS
352    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
353      INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
354      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
355      INTEGER,INTENT(IN) :: s1,s2,s3
356      INTEGER,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
357     
358!$OMP MASTER
359        CALL scatter_mpi(VarIn,Var_tmp)
360!$OMP END MASTER
361        CALL scatter_omp(Var_tmp,Varout)
362    END SUBROUTINE body
363   
364  END SUBROUTINE scatter_i3
365
366
367  SUBROUTINE scatter_r(VarIn, VarOut)
368    USE mod_inca_mpi_data, ONLY : plon_mpi
369    IMPLICIT NONE
370 
371    REAL,INTENT(IN),DIMENSION(:) :: VarIn
372    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
373
374    REAL,DIMENSION(plon_mpi) :: Var_tmp
375   
376!$OMP MASTER
377      CALL scatter_mpi(VarIn,Var_tmp)
378!$OMP END MASTER
379
380      CALL scatter_omp(Var_tmp,Varout)
381   
382  END SUBROUTINE scatter_r
383
384
385  SUBROUTINE scatter_r1(VarIn, VarOut)
386    USE mod_inca_mpi_data, ONLY : plon_mpi
387    IMPLICIT NONE
388 
389    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
390    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
391
392    CALL body(VarIn,VarOut,SIZE(Varout,2))
393   
394  CONTAINS
395    SUBROUTINE body(VarIn,VarOut,s1)
396      REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
397      REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
398      INTEGER,INTENT(IN) :: s1
399      REAL,DIMENSION(plon_mpi,s1) :: Var_tmp
400     
401!$OMP MASTER
402        CALL scatter_mpi(VarIn,Var_tmp)
403!$OMP END MASTER
404        CALL scatter_omp(Var_tmp,Varout)
405    END SUBROUTINE body
406   
407  END SUBROUTINE scatter_r1
408
409
410  SUBROUTINE scatter_r2(VarIn, VarOut)
411    USE mod_inca_mpi_data, ONLY : plon_mpi
412    IMPLICIT NONE
413 
414    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
415    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
416   
417    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3))
418   
419  CONTAINS
420    SUBROUTINE body(VarIn,VarOut,s1,s2)
421      REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
422      REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
423      INTEGER,INTENT(IN) :: s1,s2
424      REAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
425     
426!$OMP MASTER
427        CALL scatter_mpi(VarIn,Var_tmp)
428!$OMP END MASTER
429        CALL scatter_omp(Var_tmp,Varout)
430    END SUBROUTINE body
431   
432  END SUBROUTINE scatter_r2
433
434
435  SUBROUTINE scatter_r3(VarIn, VarOut)
436    USE mod_inca_mpi_data, ONLY : plon_mpi
437    IMPLICIT NONE
438 
439    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
440    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
441
442    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,3))
443   
444  CONTAINS
445    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
446      REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
447      REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
448      INTEGER,INTENT(IN) :: s1,s2,s3
449      REAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
450     
451!$OMP MASTER
452        CALL scatter_mpi(VarIn,Var_tmp)
453!$OMP END MASTER
454        CALL scatter_omp(Var_tmp,Varout)
455    END SUBROUTINE body
456   
457  END SUBROUTINE scatter_r3
458 
459 
460
461  SUBROUTINE scatter_l(VarIn, VarOut)
462    USE mod_inca_mpi_data, ONLY : plon_mpi
463    IMPLICIT NONE
464 
465    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
466    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
467
468    LOGICAL,DIMENSION(plon_mpi) :: Var_tmp
469   
470!$OMP MASTER
471      CALL scatter_mpi(VarIn,Var_tmp)
472!$OMP END MASTER
473
474      CALL scatter_omp(Var_tmp,Varout)
475   
476  END SUBROUTINE scatter_l
477
478
479  SUBROUTINE scatter_l1(VarIn, VarOut)
480    USE mod_inca_mpi_data, ONLY : plon_mpi
481    IMPLICIT NONE
482 
483    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
484    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
485
486    CALL body(VarIn,VarOut,SIZE(Varout,2))
487   
488  CONTAINS
489    SUBROUTINE body(VarIn,VarOut,s1)
490      LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
491      LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
492      INTEGER,INTENT(IN) :: s1
493      LOGICAL,DIMENSION(plon_mpi,s1) :: Var_tmp
494     
495!$OMP MASTER
496        CALL scatter_mpi(VarIn,Var_tmp)
497!$OMP END MASTER
498        CALL scatter_omp(Var_tmp,Varout)
499    END SUBROUTINE body
500   
501  END SUBROUTINE scatter_l1
502
503
504  SUBROUTINE scatter_l2(VarIn, VarOut)
505    USE mod_inca_mpi_data, ONLY : plon_mpi
506    IMPLICIT NONE
507 
508    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
509    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
510   
511    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3))
512   
513  CONTAINS
514    SUBROUTINE body(VarIn,VarOut,s1,s2)
515      LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
516      LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
517      INTEGER,INTENT(IN) :: s1,s2
518      LOGICAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
519     
520!$OMP MASTER
521        CALL scatter_mpi(VarIn,Var_tmp)
522!$OMP END MASTER
523        CALL scatter_omp(Var_tmp,Varout)
524    END SUBROUTINE body
525
526  END SUBROUTINE scatter_l2
527
528
529  SUBROUTINE scatter_l3(VarIn, VarOut)
530    USE mod_inca_mpi_data, ONLY : plon_mpi
531    IMPLICIT NONE
532 
533    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
534    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
535
536    CALL body(VarIn,VarOut,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,3))
537   
538  CONTAINS
539    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
540      LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
541      LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
542      INTEGER,INTENT(IN) :: s1,s2,s3
543      LOGICAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
544     
545!$OMP MASTER
546        CALL scatter_mpi(VarIn,Var_tmp)
547!$OMP END MASTER
548        CALL scatter_omp(Var_tmp,Varout)
549    END SUBROUTINE body
550   
551  END SUBROUTINE scatter_l3
552
553
554
555!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
556!! Definition des Gather   --> 4D   !!
557!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
558 
559!!!!! --> Les entiers
560
561  SUBROUTINE gather_i(VarIn, VarOut)
562    USE mod_inca_mpi_data, ONLY : plon_mpi
563    IMPLICIT NONE
564 
565    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
566    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
567   
568    INTEGER, DIMENSION(plon_mpi) :: Var_tmp
569   
570    CALL gather_omp(VarIn,Var_tmp)
571!$OMP MASTER
572    CALL gather_mpi(Var_tmp,Varout)
573!$OMP END MASTER
574 
575  END SUBROUTINE gather_i
576
577
578  SUBROUTINE gather_i1(VarIn, VarOut)
579    USE mod_inca_mpi_data, ONLY : plon_mpi
580    IMPLICIT NONE
581 
582    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
583    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
584   
585    CALL body(VarIn,VarOut,SIZE(VarIn,2))
586   
587  CONTAINS
588    SUBROUTINE body(VarIn,VarOut,s1)
589      INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
590      INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
591      INTEGER,INTENT(IN) :: s1
592      INTEGER,DIMENSION(plon_mpi,s1) :: Var_tmp
593     
594      CALL gather_omp(VarIn,Var_tmp)
595!$OMP MASTER
596      CALL gather_mpi(Var_tmp,Varout)
597!$OMP END MASTER
598
599    END SUBROUTINE body
600 
601  END SUBROUTINE gather_i1
602
603
604  SUBROUTINE gather_i2(VarIn, VarOut)
605    USE mod_inca_mpi_data, ONLY : plon_mpi
606    IMPLICIT NONE
607 
608    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
609    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
610   
611    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
612   
613  CONTAINS
614    SUBROUTINE body(VarIn,VarOut,s1,s2)
615      INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
616      INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
617      INTEGER,INTENT(IN) :: s1,s2
618      INTEGER,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
619     
620      CALL gather_omp(VarIn,Var_tmp)
621!$OMP MASTER
622      CALL gather_mpi(Var_tmp,Varout)
623!$OMP END MASTER
624
625    END SUBROUTINE body
626 
627  END SUBROUTINE gather_i2
628
629
630  SUBROUTINE gather_i3(VarIn, VarOut)
631    USE mod_inca_mpi_data, ONLY : plon_mpi
632    IMPLICIT NONE
633 
634    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
635    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
636   
637    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
638   
639  CONTAINS
640    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
641      INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
642      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
643      INTEGER,INTENT(IN) :: s1,s2,s3
644      INTEGER,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
645     
646      CALL gather_omp(VarIn,Var_tmp)
647!$OMP MASTER
648      CALL gather_mpi(Var_tmp,Varout)
649!$OMP END MASTER
650
651    END SUBROUTINE body
652 
653  END SUBROUTINE gather_i3
654
655
656!!!!! --> Les reels
657
658  SUBROUTINE gather_r(VarIn, VarOut)
659    USE mod_inca_mpi_data, ONLY : plon_mpi
660    IMPLICIT NONE
661 
662    REAL,INTENT(IN),DIMENSION(:) :: VarIn
663    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
664   
665    REAL, DIMENSION(plon_mpi) :: Var_tmp
666   
667    CALL gather_omp(VarIn,Var_tmp)
668!$OMP MASTER
669    CALL gather_mpi(Var_tmp,VarOut)
670!$OMP END MASTER
671 
672  END SUBROUTINE gather_r
673
674
675  SUBROUTINE gather_r1(VarIn, VarOut)
676    USE mod_inca_mpi_data, ONLY : plon_mpi
677    IMPLICIT NONE
678 
679    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
680    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
681   
682    CALL body(VarIn,VarOut,SIZE(VarIn,2))
683   
684  CONTAINS
685    SUBROUTINE body(VarIn,VarOut,s1)
686      REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
687      REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
688      INTEGER,INTENT(IN) :: s1
689      REAL,DIMENSION(plon_mpi,s1) :: Var_tmp
690     
691      CALL gather_omp(VarIn,Var_tmp)
692!$OMP MASTER
693      CALL gather_mpi(Var_tmp,Varout)
694!$OMP END MASTER
695
696    END SUBROUTINE body
697 
698  END SUBROUTINE gather_r1
699
700
701  SUBROUTINE gather_r2(VarIn, VarOut)
702    USE mod_inca_mpi_data, ONLY : plon_mpi
703    IMPLICIT NONE
704 
705    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
706    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
707   
708    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
709   
710  CONTAINS
711    SUBROUTINE body(VarIn,VarOut,s1,s2)
712      REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
713      REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
714      INTEGER,INTENT(IN) :: s1,s2
715      REAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
716     
717      CALL gather_omp(VarIn,Var_tmp)
718!$OMP MASTER
719      CALL gather_mpi(Var_tmp,Varout)
720!$OMP END MASTER
721
722    END SUBROUTINE body
723 
724  END SUBROUTINE gather_r2
725
726
727  SUBROUTINE gather_r3(VarIn, VarOut)
728    USE mod_inca_mpi_data, ONLY : plon_mpi
729    IMPLICIT NONE
730 
731    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
732    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
733   
734    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
735   
736  CONTAINS
737    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
738      REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
739      REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
740      INTEGER,INTENT(IN) :: s1,s2,s3
741      REAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
742     
743      CALL gather_omp(VarIn,Var_tmp)
744!$OMP MASTER
745      CALL gather_mpi(Var_tmp,Varout)
746!$OMP END MASTER
747
748    END SUBROUTINE body
749 
750  END SUBROUTINE gather_r3
751
752
753!!!!! --> Les booleens
754
755  SUBROUTINE gather_l(VarIn, VarOut)
756    USE mod_inca_mpi_data, ONLY : plon_mpi
757    IMPLICIT NONE
758 
759    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
760    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
761   
762    LOGICAL, DIMENSION(plon_mpi) :: Var_tmp
763   
764    CALL gather_omp(VarIn,Var_tmp)
765!$OMP MASTER
766    CALL gather_mpi(Var_tmp,VarOut)
767!$OMP END MASTER
768 
769  END SUBROUTINE gather_l
770
771
772  SUBROUTINE gather_l1(VarIn, VarOut)
773    USE mod_inca_mpi_data, ONLY : plon_mpi
774    IMPLICIT NONE
775 
776    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
777    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
778   
779    CALL body(VarIn,VarOut,SIZE(VarIn,2))
780   
781  CONTAINS
782    SUBROUTINE body(VarIn,VarOut,s1)
783      LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
784      LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
785      INTEGER,INTENT(IN) :: s1
786      LOGICAL,DIMENSION(plon_mpi,s1) :: Var_tmp
787     
788      CALL gather_omp(VarIn,Var_tmp)
789!$OMP MASTER
790      CALL gather_mpi(Var_tmp,Varout)
791!$OMP END MASTER
792
793    END SUBROUTINE body
794 
795  END SUBROUTINE gather_l1
796
797
798  SUBROUTINE gather_l2(VarIn, VarOut)
799    USE mod_inca_mpi_data, ONLY : plon_mpi
800    IMPLICIT NONE
801 
802    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
803    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
804   
805    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
806   
807  CONTAINS
808    SUBROUTINE body(VarIn,VarOut,s1,s2)
809      LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
810      LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
811      INTEGER,INTENT(IN) :: s1,s2
812      LOGICAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
813     
814      CALL gather_omp(VarIn,Var_tmp)
815!$OMP MASTER
816      CALL gather_mpi(Var_tmp,Varout)
817!$OMP END MASTER
818
819    END SUBROUTINE body
820 
821  END SUBROUTINE gather_l2
822
823
824  SUBROUTINE gather_l3(VarIn, VarOut)
825    USE mod_inca_mpi_data, ONLY : plon_mpi
826    IMPLICIT NONE
827 
828    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
829    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
830   
831    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
832   
833  CONTAINS
834    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
835      LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
836      LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
837      INTEGER,INTENT(IN) :: s1,s2,s3
838      LOGICAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
839     
840      CALL gather_omp(VarIn,Var_tmp)
841!$OMP MASTER
842      CALL gather_mpi(Var_tmp,Varout)
843!$OMP END MASTER
844
845    END SUBROUTINE body
846 
847  END SUBROUTINE gather_l3
848
849
850!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
851!! Definition des Scatter2D   --> 4D   !!
852!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
853
854
855!!!!! --> Les entiers
856
857  SUBROUTINE scatter2D_i(VarIn, VarOut)
858    USE mod_inca_mpi_data, ONLY : plon_mpi
859    IMPLICIT NONE
860 
861    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
862    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
863
864    INTEGER,DIMENSION(plon_mpi) :: Var_tmp   
865
866!$OMP MASTER   
867    CALL scatter2D_mpi(VarIn,Var_tmp)
868!$OMP END MASTER
869    CALL scatter_omp(Var_tmp,VarOut)
870
871  END SUBROUTINE scatter2D_i
872
873
874  SUBROUTINE scatter2D_i1(VarIn, VarOut)
875    USE mod_inca_mpi_data, ONLY : plon_mpi
876    IMPLICIT NONE
877 
878    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
879    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
880
881    CALL body(VarIn,VarOut,SIZE(VarOut,2))
882   
883  CONTAINS
884    SUBROUTINE body(VarIn,VarOut,s1)
885      INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
886      INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
887      INTEGER,INTENT(IN) :: s1
888      INTEGER,DIMENSION(plon_mpi,s1) :: Var_tmp
889     
890!$OMP MASTER   
891      CALL scatter2D_mpi(VarIn,Var_tmp)
892!$OMP END MASTER
893      CALL scatter_omp(Var_tmp,VarOut)
894
895    END SUBROUTINE body
896
897  END SUBROUTINE scatter2D_i1
898 
899
900  SUBROUTINE scatter2D_i2(VarIn, VarOut)
901    USE mod_inca_mpi_data, ONLY : plon_mpi
902    IMPLICIT NONE
903 
904    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
905    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
906
907    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3))
908   
909  CONTAINS
910    SUBROUTINE body(VarIn,VarOut,s1,s2)
911      INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
912      INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
913      INTEGER,INTENT(IN) :: s1,s2
914      INTEGER,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
915     
916!$OMP MASTER   
917      CALL scatter2D_mpi(VarIn,Var_tmp)
918!$OMP END MASTER
919      CALL scatter_omp(Var_tmp,VarOut)
920
921    END SUBROUTINE body
922
923  END SUBROUTINE scatter2D_i2 
924
925
926  SUBROUTINE scatter2D_i3(VarIn, VarOut)
927    USE mod_inca_mpi_data, ONLY : plon_mpi
928    IMPLICIT NONE
929 
930    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
931    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
932
933    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4))
934   
935  CONTAINS
936    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
937      INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
938      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
939      INTEGER,INTENT(IN) :: s1,s2,s3
940      INTEGER,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
941     
942!$OMP MASTER   
943      CALL scatter2D_mpi(VarIn,Var_tmp)
944!$OMP END MASTER
945      CALL scatter_omp(Var_tmp,VarOut)
946
947    END SUBROUTINE body
948
949  END SUBROUTINE scatter2D_i3
950 
951
952!!!!! --> Les reels
953
954  SUBROUTINE scatter2D_r(VarIn, VarOut)
955    USE mod_inca_mpi_data, ONLY : plon_mpi
956    IMPLICIT NONE
957 
958    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
959    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
960
961    REAL,DIMENSION(plon_mpi) :: Var_tmp   
962
963!$OMP MASTER   
964    CALL scatter2D_mpi(VarIn,Var_tmp)
965!$OMP END MASTER
966    CALL scatter_omp(Var_tmp,VarOut)
967
968  END SUBROUTINE scatter2D_r
969
970
971  SUBROUTINE scatter2D_r1(VarIn, VarOut)
972    USE mod_inca_mpi_data, ONLY : plon_mpi
973    IMPLICIT NONE
974 
975    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
976    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
977
978    CALL body(VarIn,VarOut,SIZE(VarOut,2))
979   
980  CONTAINS
981    SUBROUTINE body(VarIn,VarOut,s1)
982      REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
983      REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
984      INTEGER,INTENT(IN) :: s1
985      REAL,DIMENSION(plon_mpi,s1) :: Var_tmp
986     
987!$OMP MASTER   
988      CALL scatter2D_mpi(VarIn,Var_tmp)
989!$OMP END MASTER
990      CALL scatter_omp(Var_tmp,VarOut)
991
992    END SUBROUTINE body
993
994  END SUBROUTINE scatter2D_r1
995 
996
997  SUBROUTINE scatter2D_r2(VarIn, VarOut)
998    USE mod_inca_mpi_data, ONLY : plon_mpi
999    IMPLICIT NONE
1000 
1001    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1002    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1003
1004    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3))
1005   
1006  CONTAINS
1007    SUBROUTINE body(VarIn,VarOut,s1,s2)
1008      REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1009      REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1010      INTEGER,INTENT(IN) :: s1,s2
1011      REAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
1012     
1013!$OMP MASTER   
1014      CALL scatter2D_mpi(VarIn,Var_tmp)
1015!$OMP END MASTER
1016      CALL scatter_omp(Var_tmp,VarOut)
1017
1018    END SUBROUTINE body
1019
1020  END SUBROUTINE scatter2D_r2 
1021
1022
1023  SUBROUTINE scatter2D_r3(VarIn, VarOut)
1024    USE mod_inca_mpi_data, ONLY : plon_mpi
1025    IMPLICIT NONE
1026 
1027    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1028    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1029
1030    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4))
1031   
1032  CONTAINS
1033    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1034      REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1035      REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1036      INTEGER,INTENT(IN) :: s1,s2,s3
1037      REAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
1038     
1039!$OMP MASTER   
1040      CALL scatter2D_mpi(VarIn,Var_tmp)
1041!$OMP END MASTER
1042      CALL scatter_omp(Var_tmp,VarOut)
1043
1044    END SUBROUTINE body
1045
1046  END SUBROUTINE scatter2D_r3
1047   
1048   
1049!!!!! --> Les booleens
1050
1051
1052  SUBROUTINE scatter2D_l(VarIn, VarOut)
1053    USE mod_inca_mpi_data, ONLY : plon_mpi
1054    IMPLICIT NONE
1055 
1056    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1057    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
1058
1059    LOGICAL,DIMENSION(plon_mpi) :: Var_tmp   
1060
1061!$OMP MASTER   
1062    CALL scatter2D_mpi(VarIn,Var_tmp)
1063!$OMP END MASTER
1064    CALL scatter_omp(Var_tmp,VarOut)
1065
1066  END SUBROUTINE scatter2D_l
1067
1068
1069  SUBROUTINE scatter2D_l1(VarIn, VarOut)
1070    USE mod_inca_mpi_data, ONLY : plon_mpi
1071    IMPLICIT NONE
1072 
1073    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1074    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1075
1076    CALL body(VarIn,VarOut,SIZE(VarOut,2))
1077   
1078  CONTAINS
1079    SUBROUTINE body(VarIn,VarOut,s1)
1080      LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1081      LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1082      INTEGER,INTENT(IN) :: s1
1083      LOGICAL,DIMENSION(plon_mpi,s1) :: Var_tmp
1084     
1085!$OMP MASTER   
1086      CALL scatter2D_mpi(VarIn,Var_tmp)
1087!$OMP END MASTER
1088      CALL scatter_omp(Var_tmp,VarOut)
1089
1090    END SUBROUTINE body
1091
1092  END SUBROUTINE scatter2D_l1
1093 
1094
1095  SUBROUTINE scatter2D_l2(VarIn, VarOut)
1096    USE mod_inca_mpi_data, ONLY : plon_mpi
1097    IMPLICIT NONE
1098 
1099    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1100    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1101
1102    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3))
1103   
1104  CONTAINS
1105    SUBROUTINE body(VarIn,VarOut,s1,s2)
1106      LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1107      LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1108      INTEGER,INTENT(IN) :: s1,s2
1109      LOGICAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
1110     
1111!$OMP MASTER   
1112      CALL scatter2D_mpi(VarIn,Var_tmp)
1113!$OMP END MASTER
1114      CALL scatter_omp(Var_tmp,VarOut)
1115
1116    END SUBROUTINE body
1117
1118  END SUBROUTINE scatter2D_l2 
1119
1120
1121  SUBROUTINE scatter2D_l3(VarIn, VarOut)
1122    USE mod_inca_mpi_data, ONLY : plon_mpi
1123    IMPLICIT NONE
1124 
1125    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1126    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1127
1128    CALL body(VarIn,VarOut,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4))
1129   
1130  CONTAINS
1131    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1132      LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1133      LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1134      INTEGER,INTENT(IN) :: s1,s2,s3
1135      LOGICAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
1136     
1137!$OMP MASTER   
1138      CALL scatter2D_mpi(VarIn,Var_tmp)
1139!$OMP END MASTER
1140      CALL scatter_omp(Var_tmp,VarOut)
1141
1142    END SUBROUTINE body
1143
1144  END SUBROUTINE scatter2D_l3
1145
1146
1147!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1148!! Definition des Gather2D   --> 4D   !!
1149!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1150
1151!!!!! --> Les entiers
1152
1153  SUBROUTINE gather2D_i(VarIn, VarOut)
1154    USE mod_inca_mpi_data, ONLY : plon_mpi
1155    IMPLICIT NONE
1156 
1157    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
1158    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1159   
1160    INTEGER,DIMENSION(plon_mpi) :: Var_tmp
1161
1162    CALL gather_omp(VarIn,Var_tmp)
1163!$OMP MASTER
1164    CALL gather2D_mpi(Var_tmp,VarOut)
1165!$OMP END MASTER   
1166
1167  END SUBROUTINE gather2D_i
1168 
1169
1170  SUBROUTINE gather2D_i1(VarIn, VarOut)
1171    USE mod_inca_mpi_data, ONLY : plon_mpi
1172    IMPLICIT NONE
1173    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1174    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1175   
1176    CALL body(VarIn,VarOut,SIZE(VarIn,2))
1177   
1178  CONTAINS
1179    SUBROUTINE body(VarIn,VarOut,s1)
1180      INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1181      INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1182      INTEGER,INTENT(IN) :: s1
1183      INTEGER,DIMENSION(plon_mpi,s1) :: Var_tmp
1184     
1185      CALL gather_omp(VarIn,Var_tmp)
1186!$OMP MASTER
1187      CALL gather2D_mpi(Var_tmp,VarOut)
1188!$OMP END MASTER   
1189
1190    END SUBROUTINE body
1191
1192  END SUBROUTINE gather2D_i1
1193
1194 
1195  SUBROUTINE gather2D_i2(VarIn, VarOut)
1196    USE mod_inca_mpi_data, ONLY : plon_mpi
1197    IMPLICIT NONE
1198 
1199    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1200    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1201   
1202    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
1203   
1204  CONTAINS
1205    SUBROUTINE body(VarIn,VarOut,s1,s2)
1206      INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1207      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1208      INTEGER,INTENT(IN) :: s1,s2
1209      INTEGER,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
1210     
1211      CALL gather_omp(VarIn,Var_tmp)
1212!$OMP MASTER
1213      CALL gather2D_mpi(Var_tmp,VarOut)
1214!$OMP END MASTER   
1215
1216    END SUBROUTINE body
1217
1218  END SUBROUTINE gather2D_i2
1219
1220
1221  SUBROUTINE gather2D_i3(VarIn, VarOut)
1222    USE mod_inca_mpi_data, ONLY : plon_mpi
1223    IMPLICIT NONE
1224 
1225    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1226    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1227   
1228    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
1229   
1230  CONTAINS
1231    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1232      INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1233      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1234      INTEGER,INTENT(IN) :: s1,s2,s3
1235      INTEGER,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
1236     
1237      CALL gather_omp(VarIn,Var_tmp)
1238!$OMP MASTER
1239      CALL gather2D_mpi(Var_tmp,VarOut)
1240!$OMP END MASTER   
1241
1242    END SUBROUTINE body
1243
1244  END SUBROUTINE gather2D_i3
1245
1246
1247!!!!! --> Les reels
1248
1249  SUBROUTINE gather2D_r(VarIn, VarOut)
1250    USE mod_inca_mpi_data, ONLY : plon_mpi
1251    IMPLICIT NONE
1252 
1253    REAL,INTENT(IN),DIMENSION(:) :: VarIn
1254    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1255   
1256    REAL,DIMENSION(plon_mpi) :: Var_tmp
1257
1258    CALL gather_omp(VarIn,Var_tmp)
1259!$OMP MASTER
1260    CALL gather2D_mpi(Var_tmp,VarOut)
1261!$OMP END MASTER   
1262
1263  END SUBROUTINE gather2D_r
1264 
1265
1266  SUBROUTINE gather2D_r1(VarIn, VarOut)
1267    USE mod_inca_mpi_data, ONLY : plon_mpi
1268    IMPLICIT NONE
1269 
1270    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1271    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1272   
1273    CALL body(VarIn,VarOut,SIZE(VarIn,2))
1274   
1275  CONTAINS
1276    SUBROUTINE body(VarIn,VarOut,s1)
1277      REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1278      REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1279      INTEGER,INTENT(IN) :: s1
1280      REAL,DIMENSION(plon_mpi,s1) :: Var_tmp
1281     
1282      CALL gather_omp(VarIn,Var_tmp)
1283!$OMP MASTER
1284      CALL gather2D_mpi(Var_tmp,VarOut)
1285!$OMP END MASTER   
1286
1287    END SUBROUTINE body
1288
1289  END SUBROUTINE gather2D_r1
1290
1291 
1292  SUBROUTINE gather2D_r2(VarIn, VarOut)
1293    USE mod_inca_mpi_data, ONLY : plon_mpi
1294    IMPLICIT NONE
1295 
1296    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1297    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1298   
1299    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
1300   
1301  CONTAINS
1302    SUBROUTINE body(VarIn,VarOut,s1,s2)
1303      REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1304      REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1305      INTEGER,INTENT(IN) :: s1,s2
1306      REAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
1307     
1308      CALL gather_omp(VarIn,Var_tmp)
1309!$OMP MASTER
1310      CALL gather2D_mpi(Var_tmp,VarOut)
1311!$OMP END MASTER   
1312
1313    END SUBROUTINE body
1314
1315  END SUBROUTINE gather2D_r2
1316
1317
1318  SUBROUTINE gather2D_r3(VarIn, VarOut)
1319    USE mod_inca_mpi_data, ONLY : plon_mpi
1320    IMPLICIT NONE
1321 
1322    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1323    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1324   
1325    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
1326   
1327  CONTAINS
1328    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1329      REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1330      REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1331      INTEGER,INTENT(IN) :: s1,s2,s3
1332      REAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
1333     
1334      CALL gather_omp(VarIn,Var_tmp)
1335!$OMP MASTER
1336      CALL gather2D_mpi(Var_tmp,VarOut)
1337!$OMP END MASTER   
1338
1339    END SUBROUTINE body
1340
1341  END SUBROUTINE gather2D_r3
1342 
1343
1344!!!!! --> Les booleens
1345
1346  SUBROUTINE gather2D_l(VarIn, VarOut)
1347    USE mod_inca_mpi_data, ONLY : plon_mpi
1348    IMPLICIT NONE
1349 
1350    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
1351    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1352   
1353    LOGICAL,DIMENSION(plon_mpi) :: Var_tmp
1354
1355    CALL gather_omp(VarIn,Var_tmp)
1356!$OMP MASTER
1357    CALL gather2D_mpi(Var_tmp,VarOut)
1358!$OMP END MASTER   
1359
1360  END SUBROUTINE gather2D_l
1361 
1362
1363  SUBROUTINE gather2D_l1(VarIn, VarOut)
1364    USE mod_inca_mpi_data, ONLY : plon_mpi
1365    IMPLICIT NONE
1366 
1367    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1368    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1369   
1370    CALL body(VarIn,VarOut,SIZE(VarIn,2))
1371   
1372  CONTAINS
1373    SUBROUTINE body(VarIn,VarOut,s1)
1374      LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1375      LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1376      INTEGER,INTENT(IN) :: s1
1377      LOGICAL,DIMENSION(plon_mpi,s1) :: Var_tmp
1378     
1379      CALL gather_omp(VarIn,Var_tmp)
1380!$OMP MASTER
1381      CALL gather2D_mpi(Var_tmp,VarOut)
1382!$OMP END MASTER   
1383
1384    END SUBROUTINE body
1385
1386  END SUBROUTINE gather2D_l1
1387
1388 
1389  SUBROUTINE gather2D_l2(VarIn, VarOut)
1390    USE mod_inca_mpi_data, ONLY : plon_mpi
1391    IMPLICIT NONE
1392 
1393    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1394    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1395   
1396    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3))
1397   
1398  CONTAINS
1399    SUBROUTINE body(VarIn,VarOut,s1,s2)
1400      LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1401      LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1402      INTEGER,INTENT(IN) :: s1,s2
1403      LOGICAL,DIMENSION(plon_mpi,s1,s2) :: Var_tmp
1404     
1405      CALL gather_omp(VarIn,Var_tmp)
1406!$OMP MASTER
1407      CALL gather2D_mpi(Var_tmp,VarOut)
1408!$OMP END MASTER   
1409
1410    END SUBROUTINE body
1411
1412  END SUBROUTINE gather2D_l2
1413
1414
1415  SUBROUTINE gather2D_l3(VarIn, VarOut)
1416    USE mod_inca_mpi_data, ONLY : plon_mpi
1417    IMPLICIT NONE
1418 
1419    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1420    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1421   
1422    CALL body(VarIn,VarOut,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
1423   
1424  CONTAINS
1425    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1426      LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1427      LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1428      INTEGER,INTENT(IN) :: s1,s2,s3
1429      LOGICAL,DIMENSION(plon_mpi,s1,s2,s3) :: Var_tmp
1430     
1431      CALL gather_omp(VarIn,Var_tmp)
1432!$OMP MASTER
1433      CALL gather2D_mpi(Var_tmp,VarOut)
1434!$OMP END MASTER   
1435
1436    END SUBROUTINE body
1437
1438  END SUBROUTINE gather2D_l3
1439 
1440
1441!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1442!! Definition des reduce_sum   --> 4D   !!
1443!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1444
1445! Les entiers
1446
1447  SUBROUTINE reduce_sum_i(VarIn, VarOut)
1448    IMPLICIT NONE
1449 
1450    INTEGER,INTENT(IN)  :: VarIn
1451    INTEGER,INTENT(OUT) :: VarOut
1452   
1453    INTEGER             :: Var_tmp
1454           
1455    CALL reduce_sum_omp(VarIn,Var_tmp)
1456!$OMP MASTER     
1457    CALL reduce_sum_mpi(Var_tmp,VarOut)
1458!$OMP END MASTER
1459 
1460  END SUBROUTINE reduce_sum_i 
1461
1462
1463  SUBROUTINE reduce_sum_i1(VarIn, VarOut)
1464    IMPLICIT NONE
1465 
1466    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
1467    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
1468   
1469    CALL body(VarIn,VarOut,SIZE(VarIn,1))
1470   
1471  CONTAINS
1472    SUBROUTINE body(VarIn,VarOut,s1)
1473      INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
1474      INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
1475      INTEGER,INTENT(IN) :: s1
1476      INTEGER,DIMENSION(s1) :: Var_tmp
1477     
1478      CALL reduce_sum_omp(VarIn,Var_tmp)
1479!$OMP MASTER     
1480      CALL reduce_sum_mpi(Var_tmp,VarOut)
1481!$OMP END MASTER
1482
1483    END SUBROUTINE body
1484 
1485  END SUBROUTINE reduce_sum_i1 
1486
1487
1488  SUBROUTINE reduce_sum_i2(VarIn, VarOut)
1489    IMPLICIT NONE
1490 
1491    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
1492    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1493   
1494    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2))
1495   
1496  CONTAINS
1497    SUBROUTINE body(VarIn,VarOut,s1,s2)
1498      INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1499      INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1500      INTEGER,INTENT(IN) :: s1,s2
1501      INTEGER,DIMENSION(s1,s2) :: Var_tmp
1502     
1503      CALL reduce_sum_omp(VarIn,Var_tmp)
1504!$OMP MASTER     
1505      CALL reduce_sum_mpi(Var_tmp,VarOut)
1506!$OMP END MASTER
1507
1508    END SUBROUTINE body
1509 
1510  END SUBROUTINE reduce_sum_i2 
1511 
1512
1513  SUBROUTINE reduce_sum_i3(VarIn, VarOut)
1514    IMPLICIT NONE
1515 
1516    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1517    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1518   
1519    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))
1520   
1521  CONTAINS
1522    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1523      INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1524      INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1525      INTEGER,INTENT(IN) :: s1,s2,s3
1526      INTEGER,DIMENSION(s1,s2,s3) :: Var_tmp
1527     
1528      CALL reduce_sum_omp(VarIn,Var_tmp)
1529!$OMP MASTER     
1530      CALL reduce_sum_mpi(Var_tmp,VarOut)
1531!$OMP END MASTER
1532
1533    END SUBROUTINE body
1534 
1535  END SUBROUTINE reduce_sum_i3 
1536
1537
1538  SUBROUTINE reduce_sum_i4(VarIn, VarOut)
1539    IMPLICIT NONE
1540 
1541    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1542    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1543   
1544    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
1545   
1546  CONTAINS
1547    SUBROUTINE body(VarIn,VarOut,s1,s2,s3,s4)
1548      INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1549      INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1550      INTEGER,INTENT(IN) :: s1,s2,s3,s4
1551      INTEGER,DIMENSION(s1,s2,s3,s4) :: Var_tmp
1552     
1553      CALL reduce_sum_omp(VarIn,Var_tmp)
1554!$OMP MASTER     
1555      CALL reduce_sum_mpi(Var_tmp,VarOut)
1556!$OMP END MASTER
1557
1558    END SUBROUTINE body
1559   
1560  END SUBROUTINE reduce_sum_i4 
1561
1562
1563! Les reels
1564
1565  SUBROUTINE reduce_sum_r(VarIn, VarOut)
1566    IMPLICIT NONE
1567 
1568    REAL,INTENT(IN)  :: VarIn
1569    REAL,INTENT(OUT) :: VarOut
1570   
1571    REAL             :: Var_tmp
1572           
1573    CALL reduce_sum_omp(VarIn,Var_tmp)
1574!$OMP MASTER     
1575    CALL reduce_sum_mpi(Var_tmp,VarOut)
1576!$OMP END MASTER
1577 
1578  END SUBROUTINE reduce_sum_r 
1579
1580
1581  SUBROUTINE reduce_sum_r1(VarIn, VarOut)
1582    IMPLICIT NONE
1583 
1584    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
1585    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
1586   
1587    CALL body(VarIn,VarOut,SIZE(VarIn,1))
1588   
1589  CONTAINS
1590    SUBROUTINE body(VarIn,VarOut,s1)
1591      REAL,INTENT(IN),DIMENSION(:) :: VarIn
1592      REAL,INTENT(OUT),DIMENSION(:) :: VarOut
1593      INTEGER,INTENT(IN) :: s1
1594      REAL,DIMENSION(s1) :: Var_tmp
1595     
1596      CALL reduce_sum_omp(VarIn,Var_tmp)
1597!$OMP MASTER     
1598      CALL reduce_sum_mpi(Var_tmp,VarOut)
1599!$OMP END MASTER
1600
1601    END SUBROUTINE body
1602 
1603  END SUBROUTINE reduce_sum_r1 
1604
1605
1606  SUBROUTINE reduce_sum_r2(VarIn, VarOut)
1607    IMPLICIT NONE
1608 
1609    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
1610    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1611   
1612    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2))
1613   
1614  CONTAINS
1615    SUBROUTINE body(VarIn,VarOut,s1,s2)
1616      REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1617      REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1618      INTEGER,INTENT(IN) :: s1,s2
1619      REAL,DIMENSION(s1,s2) :: Var_tmp
1620     
1621      CALL reduce_sum_omp(VarIn,Var_tmp)
1622!$OMP MASTER     
1623      CALL reduce_sum_mpi(Var_tmp,VarOut)
1624!$OMP END MASTER
1625
1626    END SUBROUTINE body
1627 
1628  END SUBROUTINE reduce_sum_r2 
1629 
1630
1631  SUBROUTINE reduce_sum_r3(VarIn, VarOut)
1632    IMPLICIT NONE
1633 
1634    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1635    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1636   
1637    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))
1638   
1639  CONTAINS
1640    SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1641      REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1642      REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1643      INTEGER,INTENT(IN) :: s1,s2,s3
1644      REAL,DIMENSION(s1,s2,s3) :: Var_tmp
1645     
1646      CALL reduce_sum_omp(VarIn,Var_tmp)
1647!$OMP MASTER     
1648      CALL reduce_sum_mpi(Var_tmp,VarOut)
1649!$OMP END MASTER
1650
1651    END SUBROUTINE body
1652 
1653  END SUBROUTINE reduce_sum_r3 
1654
1655
1656  SUBROUTINE reduce_sum_r4(VarIn, VarOut)
1657    IMPLICIT NONE
1658 
1659    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1660    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1661   
1662    CALL body(VarIn,VarOut,SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))
1663   
1664  CONTAINS
1665    SUBROUTINE body(VarIn,VarOut,s1,s2,s3,s4)
1666      REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1667      REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1668      INTEGER,INTENT(IN) :: s1,s2,s3,s4
1669      REAL,DIMENSION(s1,s2,s3,s4) :: Var_tmp
1670     
1671      CALL reduce_sum_omp(VarIn,Var_tmp)
1672!$OMP MASTER     
1673      CALL reduce_sum_mpi(Var_tmp,VarOut)
1674!$OMP END MASTER
1675
1676    END SUBROUTINE body
1677   
1678  END SUBROUTINE reduce_sum_r4 
1679
1680   
1681END MODULE mod_inca_transfert_para
1682
Note: See TracBrowser for help on using the repository browser.