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