source: LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_transfert_para.f90 @ 5829

Last change on this file since 5829 was 5829, checked in by rkazeroni, 2 months ago

Add reduce_max functionality, similarly to reduce_min

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