LMDZ
mod_phys_lmdz_transfert_para.F90
Go to the documentation of this file.
1 !
2 !$Id$
3 !
5 
8 
9 
10 
11  INTERFACE bcast
12  MODULE PROCEDURE bcast_c, &
16  END INTERFACE
17 
18  INTERFACE scatter
19  MODULE PROCEDURE scatter_i,scatter_i1,scatter_i2,scatter_i3, &
22  END INTERFACE
23 
24 
25  INTERFACE gather
26  MODULE PROCEDURE gather_i,gather_i1,gather_i2,gather_i3, &
29  END INTERFACE
30 
31  INTERFACE scatter2d
35  END INTERFACE
36 
37  INTERFACE gather2d
38  MODULE PROCEDURE gather2d_i,gather2d_i1,gather2d_i2,gather2d_i3, &
41  END INTERFACE
42 
43  INTERFACE reduce_sum
46  END INTERFACE
47 
48 
49 CONTAINS
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 !! -- Les entiers -- !!
69 
70  SUBROUTINE bcast_i(var)
71  IMPLICIT NONE
72  INTEGER,INTENT(INOUT) :: Var
73 !$OMP MASTER
74  CALL bcast_mpi(var)
75 !$OMP END MASTER
76  CALL bcast_omp(var)
77 
78  END SUBROUTINE bcast_i
79 
80  SUBROUTINE bcast_i1(var)
81  IMPLICIT NONE
82  INTEGER,INTENT(INOUT) :: Var(:)
83 
84 !$OMP MASTER
85  CALL bcast_mpi(var)
86 !$OMP END MASTER
87  CALL bcast_omp(var)
88 
89  END SUBROUTINE bcast_i1
90 
91 
92  SUBROUTINE bcast_i2(var)
93  IMPLICIT NONE
94  INTEGER,INTENT(INOUT) :: Var(:,:)
95 
96 !$OMP MASTER
97  CALL bcast_mpi(var)
98 !$OMP END MASTER
99  CALL bcast_omp(var)
100 
101  END SUBROUTINE bcast_i2
102 
103 
104  SUBROUTINE bcast_i3(var)
105  IMPLICIT NONE
106  INTEGER,INTENT(INOUT) :: Var(:,:,:)
107 
108 !$OMP MASTER
109  CALL bcast_mpi(var)
110 !$OMP END MASTER
111  CALL bcast_omp(var)
112 
113  END SUBROUTINE bcast_i3
114 
115 
116  SUBROUTINE bcast_i4(var)
117  IMPLICIT NONE
118  INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
119 
120 !$OMP MASTER
121  CALL bcast_mpi(var)
122 !$OMP END MASTER
123  CALL bcast_omp(var)
124 
125  END SUBROUTINE bcast_i4
126 
127 
128 !! -- Les reels -- !!
129 
130  SUBROUTINE bcast_r(var)
131  IMPLICIT NONE
132  REAL,INTENT(INOUT) :: Var
133 
134 !$OMP MASTER
135  CALL bcast_mpi(var)
136 !$OMP END MASTER
137  CALL bcast_omp(var)
138 
139  END SUBROUTINE bcast_r
140 
141  SUBROUTINE bcast_r1(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_r1
151 
152 
153  SUBROUTINE bcast_r2(var)
154  IMPLICIT NONE
155  REAL,INTENT(INOUT) :: Var(:,:)
156 
157 !$OMP MASTER
158  CALL bcast_mpi(var)
159 !$OMP END MASTER
160  CALL bcast_omp(var)
161 
162  END SUBROUTINE bcast_r2
163 
164 
165  SUBROUTINE bcast_r3(var)
166  IMPLICIT NONE
167  REAL,INTENT(INOUT) :: Var(:,:,:)
168 
169 !$OMP MASTER
170  CALL bcast_mpi(var)
171 !$OMP END MASTER
172  CALL bcast_omp(var)
173 
174  END SUBROUTINE bcast_r3
175 
176 
177  SUBROUTINE bcast_r4(var)
178  IMPLICIT NONE
179  REAL,INTENT(INOUT) :: Var(:,:,:,:)
180 
181 !$OMP MASTER
182  CALL bcast_mpi(var)
183 !$OMP END MASTER
184  CALL bcast_omp(var)
185 
186  END SUBROUTINE bcast_r4
187 
188 
189 !! -- Les booleens -- !!
190 
191  SUBROUTINE bcast_l(var)
192  IMPLICIT NONE
193  LOGICAL,INTENT(INOUT) :: Var
194 !$OMP MASTER
195  CALL bcast_mpi(var)
196 !$OMP END MASTER
197  CALL bcast_omp(var)
198 
199  END SUBROUTINE bcast_l
200 
201  SUBROUTINE bcast_l1(var)
202  IMPLICIT NONE
203  LOGICAL,INTENT(INOUT) :: Var(:)
204 
205 !$OMP MASTER
206  CALL bcast_mpi(var)
207 !$OMP END MASTER
208  CALL bcast_omp(var)
209 
210  END SUBROUTINE bcast_l1
211 
212 
213  SUBROUTINE bcast_l2(var)
214  IMPLICIT NONE
215  LOGICAL,INTENT(INOUT) :: Var(:,:)
216 
217 !$OMP MASTER
218  CALL bcast_mpi(var)
219 !$OMP END MASTER
220  CALL bcast_omp(var)
221 
222  END SUBROUTINE bcast_l2
223 
224 
225  SUBROUTINE bcast_l3(var)
226  IMPLICIT NONE
227  LOGICAL,INTENT(INOUT) :: Var(:,:,:)
228 
229 !$OMP MASTER
230  CALL bcast_mpi(var)
231 !$OMP END MASTER
232  CALL bcast_omp(var)
233 
234  END SUBROUTINE bcast_l3
235 
236 
237  SUBROUTINE bcast_l4(var)
238  IMPLICIT NONE
239  LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
240 
241 !$OMP MASTER
242  CALL bcast_mpi(var)
243 !$OMP END MASTER
244  CALL bcast_omp(var)
245 
246  END SUBROUTINE bcast_l4
247 
248 
249 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
250 !! Definition des Scatter --> 4D !!
251 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
252 
253  SUBROUTINE scatter_i(VarIn, VarOut)
255  IMPLICIT NONE
256 
257  INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
258  INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
259 
260  INTEGER,DIMENSION(klon_mpi) :: Var_tmp
261 
262 !$OMP MASTER
263  CALL scatter_mpi(varin,var_tmp)
264 !$OMP END MASTER
265 
266  CALL scatter_omp(var_tmp,varout)
267 
268  END SUBROUTINE scatter_i
269 
270 
271  SUBROUTINE scatter_i1(VarIn, VarOut)
273  IMPLICIT NONE
274 
275  INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
276  INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
277 
278  INTEGER,DIMENSION(klon_mpi,SIZE(Varout,2)) :: Var_tmp
279 
280 !$OMP MASTER
281  CALL scatter_mpi(varin,var_tmp)
282 !$OMP END MASTER
283  CALL scatter_omp(var_tmp,varout)
284 
285  END SUBROUTINE scatter_i1
286 
287 
288  SUBROUTINE scatter_i2(VarIn, VarOut)
290  IMPLICIT NONE
291 
292  INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
293  INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
294 
295  INTEGER,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
296 
297 !$OMP MASTER
298  CALL scatter_mpi(varin,var_tmp)
299 !$OMP END MASTER
300  CALL scatter_omp(var_tmp,varout)
301 
302  END SUBROUTINE scatter_i2
303 
304 
305  SUBROUTINE scatter_i3(VarIn, VarOut)
307  IMPLICIT NONE
308 
309  INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
310  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
311 
312  INTEGER,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
313 
314 !$OMP MASTER
315  CALL scatter_mpi(varin,var_tmp)
316 !$OMP END MASTER
317  CALL scatter_omp(var_tmp,varout)
318 
319  END SUBROUTINE scatter_i3
320 
321 
322  SUBROUTINE scatter_r(VarIn, VarOut)
324  IMPLICIT NONE
325 
326  REAL,INTENT(IN),DIMENSION(:) :: VarIn
327  REAL,INTENT(OUT),DIMENSION(:) :: VarOut
328 
329  REAL,DIMENSION(klon_mpi) :: Var_tmp
330 
331 !$OMP MASTER
332  CALL scatter_mpi(varin,var_tmp)
333 !$OMP END MASTER
334 
335  CALL scatter_omp(var_tmp,varout)
336 
337  END SUBROUTINE scatter_r
338 
339 
340  SUBROUTINE scatter_r1(VarIn, VarOut)
342  IMPLICIT NONE
343 
344  REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
345  REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
346 
347  REAL,DIMENSION(klon_mpi,SIZE(Varout,2)) :: Var_tmp
348 
349 !$OMP MASTER
350  CALL scatter_mpi(varin,var_tmp)
351 !$OMP END MASTER
352  CALL scatter_omp(var_tmp,varout)
353 
354  END SUBROUTINE scatter_r1
355 
356 
357  SUBROUTINE scatter_r2(VarIn, VarOut)
359  IMPLICIT NONE
360 
361  REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
362  REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
363 
364  REAL,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
365 
366 !$OMP MASTER
367  CALL scatter_mpi(varin,var_tmp)
368 !$OMP END MASTER
369  CALL scatter_omp(var_tmp,varout)
370 
371  END SUBROUTINE scatter_r2
372 
373 
374  SUBROUTINE scatter_r3(VarIn, VarOut)
376  IMPLICIT NONE
377 
378  REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
379  REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
380 
381  REAL,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
382 
383 !$OMP MASTER
384  CALL scatter_mpi(varin,var_tmp)
385 !$OMP END MASTER
386  CALL scatter_omp(var_tmp,varout)
387 
388  END SUBROUTINE scatter_r3
389 
390 
391 
392  SUBROUTINE scatter_l(VarIn, VarOut)
394  IMPLICIT NONE
395 
396  LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
397  LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
398 
399  LOGICAL,DIMENSION(klon_mpi) :: Var_tmp
400 
401 !$OMP MASTER
402  CALL scatter_mpi(varin,var_tmp)
403 !$OMP END MASTER
404 
405  CALL scatter_omp(var_tmp,varout)
406 
407  END SUBROUTINE scatter_l
408 
409 
410  SUBROUTINE scatter_l1(VarIn, VarOut)
412  IMPLICIT NONE
413 
414  LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
415  LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
416 
417  LOGICAL,DIMENSION(klon_mpi,SIZE(Varout,2)) :: Var_tmp
418 
419 !$OMP MASTER
420  CALL scatter_mpi(varin,var_tmp)
421 !$OMP END MASTER
422  CALL scatter_omp(var_tmp,varout)
423 
424  END SUBROUTINE scatter_l1
425 
426 
427  SUBROUTINE scatter_l2(VarIn, VarOut)
429  IMPLICIT NONE
430 
431  LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
432  LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
433 
434  LOGICAL,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
435 
436 !$OMP MASTER
437  CALL scatter_mpi(varin,var_tmp)
438 !$OMP END MASTER
439  CALL scatter_omp(var_tmp,varout)
440 
441  END SUBROUTINE scatter_l2
442 
443 
444  SUBROUTINE scatter_l3(VarIn, VarOut)
446  IMPLICIT NONE
447 
448  LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
449  LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
450 
451  LOGICAL,DIMENSION(klon_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
452 
453 !$OMP MASTER
454  CALL scatter_mpi(varin,var_tmp)
455 !$OMP END MASTER
456  CALL scatter_omp(var_tmp,varout)
457 
458  END SUBROUTINE scatter_l3
459 
460 
461 
462 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
463 !! Definition des Gather --> 4D !!
464 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
465 
466 !!!!! --> Les entiers
467 
468  SUBROUTINE gather_i(VarIn, VarOut)
470  IMPLICIT NONE
471 
472  INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
473  INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
474 
475  INTEGER, DIMENSION(klon_mpi) :: Var_tmp
476 
477  CALL gather_omp(varin,var_tmp)
478 !$OMP MASTER
479  CALL gather_mpi(var_tmp,varout)
480 !$OMP END MASTER
481 
482  END SUBROUTINE gather_i
483 
484 
485  SUBROUTINE gather_i1(VarIn, VarOut)
487  IMPLICIT NONE
488 
489  INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
490  INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
491 
492  INTEGER, DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
493 
494  CALL gather_omp(varin,var_tmp)
495 !$OMP MASTER
496  CALL gather_mpi(var_tmp,varout)
497 !$OMP END MASTER
498 
499  END SUBROUTINE gather_i1
500 
501 
502  SUBROUTINE gather_i2(VarIn, VarOut)
504  IMPLICIT NONE
505 
506  INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
507  INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
508 
509  INTEGER, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
510 
511  CALL gather_omp(varin,var_tmp)
512 !$OMP MASTER
513  CALL gather_mpi(var_tmp,varout)
514 !$OMP END MASTER
515 
516  END SUBROUTINE gather_i2
517 
518 
519  SUBROUTINE gather_i3(VarIn, VarOut)
521  IMPLICIT NONE
522 
523  INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
524  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
525 
526  INTEGER, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
527 
528  CALL gather_omp(varin,var_tmp)
529 !$OMP MASTER
530  CALL gather_mpi(var_tmp,varout)
531 !$OMP END MASTER
532 
533  END SUBROUTINE gather_i3
534 
535 
536 !!!!! --> Les reels
537 
538  SUBROUTINE gather_r(VarIn, VarOut)
540  IMPLICIT NONE
541 
542  REAL,INTENT(IN),DIMENSION(:) :: VarIn
543  REAL,INTENT(OUT),DIMENSION(:) :: VarOut
544 
545  REAL, DIMENSION(klon_mpi) :: Var_tmp
546 
547  CALL gather_omp(varin,var_tmp)
548 !$OMP MASTER
549  CALL gather_mpi(var_tmp,varout)
550 !$OMP END MASTER
551 
552  END SUBROUTINE gather_r
553 
554 
555  SUBROUTINE gather_r1(VarIn, VarOut)
557  IMPLICIT NONE
558 
559  REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
560  REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
561 
562  REAL, DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
563 
564  CALL gather_omp(varin,var_tmp)
565 !$OMP MASTER
566  CALL gather_mpi(var_tmp,varout)
567 !$OMP END MASTER
568 
569  END SUBROUTINE gather_r1
570 
571 
572  SUBROUTINE gather_r2(VarIn, VarOut)
574  IMPLICIT NONE
575 
576  REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
577  REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
578 
579  REAL, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: 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_r2
587 
588 
589  SUBROUTINE gather_r3(VarIn, VarOut)
591  IMPLICIT NONE
592 
593  REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
594  REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
595 
596  REAL, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
597 
598  CALL gather_omp(varin,var_tmp)
599 !$OMP MASTER
600  CALL gather_mpi(var_tmp,varout)
601 !$OMP END MASTER
602 
603  END SUBROUTINE gather_r3
604 
605 
606 !!!!! --> Les booleens
607 
608  SUBROUTINE gather_l(VarIn, VarOut)
610  IMPLICIT NONE
611 
612  LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
613  LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
614 
615  LOGICAL, DIMENSION(klon_mpi) :: Var_tmp
616 
617  CALL gather_omp(varin,var_tmp)
618 !$OMP MASTER
619  CALL gather_mpi(var_tmp,varout)
620 !$OMP END MASTER
621 
622  END SUBROUTINE gather_l
623 
624 
625  SUBROUTINE gather_l1(VarIn, VarOut)
627  IMPLICIT NONE
628 
629  LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
630  LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
631 
632  LOGICAL, DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
633 
634  CALL gather_omp(varin,var_tmp)
635 !$OMP MASTER
636  CALL gather_mpi(var_tmp,varout)
637 !$OMP END MASTER
638 
639  END SUBROUTINE gather_l1
640 
641 
642  SUBROUTINE gather_l2(VarIn, VarOut)
644  IMPLICIT NONE
645 
646  LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
647  LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
648 
649  LOGICAL, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
650 
651  CALL gather_omp(varin,var_tmp)
652 !$OMP MASTER
653  CALL gather_mpi(var_tmp,varout)
654 !$OMP END MASTER
655 
656  END SUBROUTINE gather_l2
657 
658 
659  SUBROUTINE gather_l3(VarIn, VarOut)
661  IMPLICIT NONE
662 
663  LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
664  LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
665 
666  LOGICAL, DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
667 
668  CALL gather_omp(varin,var_tmp)
669 !$OMP MASTER
670  CALL gather_mpi(var_tmp,varout)
671 !$OMP END MASTER
672 
673  END SUBROUTINE gather_l3
674 
675 
676 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
677 !! Definition des Scatter2D --> 4D !!
678 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
679 
680 
681 !!!!! --> Les entiers
682 
683  SUBROUTINE scatter2d_i(VarIn, VarOut)
685  IMPLICIT NONE
686 
687  INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
688  INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
689 
690  INTEGER,DIMENSION(klon_mpi) :: Var_tmp
691 
692 !$OMP MASTER
693  CALL scatter2d_mpi(varin,var_tmp)
694 !$OMP END MASTER
695  CALL scatter_omp(var_tmp,varout)
696 
697  END SUBROUTINE scatter2d_i
698 
699 
700  SUBROUTINE scatter2d_i1(VarIn, VarOut)
702  IMPLICIT NONE
703 
704  INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
705  INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
706 
707  INTEGER,DIMENSION(klon_mpi,SIZE(VarOut,2)) :: Var_tmp
708 
709 !$OMP MASTER
710  CALL scatter2d_mpi(varin,var_tmp)
711 !$OMP END MASTER
712  CALL scatter_omp(var_tmp,varout)
713 
714  END SUBROUTINE scatter2d_i1
715 
716 
717  SUBROUTINE scatter2d_i2(VarIn, VarOut)
719  IMPLICIT NONE
720 
721  INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
722  INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
723 
724  INTEGER,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3)) :: Var_tmp
725 
726 !$OMP MASTER
727  CALL scatter2d_mpi(varin,var_tmp)
728 !$OMP END MASTER
729  CALL scatter_omp(var_tmp,varout)
730 
731  END SUBROUTINE scatter2d_i2
732 
733 
734  SUBROUTINE scatter2d_i3(VarIn, VarOut)
736  IMPLICIT NONE
737 
738  INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
739  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
740 
741  INTEGER,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
742 
743 !$OMP MASTER
744  CALL scatter2d_mpi(varin,var_tmp)
745 !$OMP END MASTER
746  CALL scatter_omp(var_tmp,varout)
747 
748  END SUBROUTINE scatter2d_i3
749 
750 
751 !!!!! --> Les reels
752 
753  SUBROUTINE scatter2d_r(VarIn, VarOut)
755  IMPLICIT NONE
756 
757  REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
758  REAL,INTENT(OUT),DIMENSION(:) :: VarOut
759 
760  REAL,DIMENSION(klon_mpi) :: Var_tmp
761 
762 !$OMP MASTER
763  CALL scatter2d_mpi(varin,var_tmp)
764 !$OMP END MASTER
765  CALL scatter_omp(var_tmp,varout)
766 
767  END SUBROUTINE scatter2d_r
768 
769 
770  SUBROUTINE scatter2d_r1(VarIn, VarOut)
772  IMPLICIT NONE
773 
774  REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
775  REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
776 
777  REAL,DIMENSION(klon_mpi,SIZE(VarOut,2)) :: Var_tmp
778 
779 !$OMP MASTER
780  CALL scatter2d_mpi(varin,var_tmp)
781 !$OMP END MASTER
782  CALL scatter_omp(var_tmp,varout)
783 
784  END SUBROUTINE scatter2d_r1
785 
786 
787  SUBROUTINE scatter2d_r2(VarIn, VarOut)
789  IMPLICIT NONE
790 
791  REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
792  REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
793 
794  REAL,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3)) :: Var_tmp
795 
796 !$OMP MASTER
797  CALL scatter2d_mpi(varin,var_tmp)
798 !$OMP END MASTER
799  CALL scatter_omp(var_tmp,varout)
800 
801  END SUBROUTINE scatter2d_r2
802 
803 
804  SUBROUTINE scatter2d_r3(VarIn, VarOut)
806  IMPLICIT NONE
807 
808  REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
809  REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
810 
811  REAL,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
812 
813 !$OMP MASTER
814  CALL scatter2d_mpi(varin,var_tmp)
815 !$OMP END MASTER
816  CALL scatter_omp(var_tmp,varout)
817 
818  END SUBROUTINE scatter2d_r3
819 
820 
821 !!!!! --> Les booleens
822 
823 
824  SUBROUTINE scatter2d_l(VarIn, VarOut)
826  IMPLICIT NONE
827 
828  LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
829  LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
830 
831  LOGICAL,DIMENSION(klon_mpi) :: Var_tmp
832 
833 !$OMP MASTER
834  CALL scatter2d_mpi(varin,var_tmp)
835 !$OMP END MASTER
836  CALL scatter_omp(var_tmp,varout)
837 
838  END SUBROUTINE scatter2d_l
839 
840 
841  SUBROUTINE scatter2d_l1(VarIn, VarOut)
843  IMPLICIT NONE
844 
845  LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
846  LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
847 
848  LOGICAL,DIMENSION(klon_mpi,SIZE(VarOut,2)) :: Var_tmp
849 
850 !$OMP MASTER
851  CALL scatter2d_mpi(varin,var_tmp)
852 !$OMP END MASTER
853  CALL scatter_omp(var_tmp,varout)
854 
855  END SUBROUTINE scatter2d_l1
856 
857 
858  SUBROUTINE scatter2d_l2(VarIn, VarOut)
860  IMPLICIT NONE
861 
862  LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
863  LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
864 
865  LOGICAL,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3)) :: Var_tmp
866 
867 !$OMP MASTER
868  CALL scatter2d_mpi(varin,var_tmp)
869 !$OMP END MASTER
870  CALL scatter_omp(var_tmp,varout)
871 
872  END SUBROUTINE scatter2d_l2
873 
874 
875  SUBROUTINE scatter2d_l3(VarIn, VarOut)
877  IMPLICIT NONE
878 
879  LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
880  LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
881 
882  LOGICAL,DIMENSION(klon_mpi,SIZE(VarOut,2),SIZE(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
883 
884 !$OMP MASTER
885  CALL scatter2d_mpi(varin,var_tmp)
886 !$OMP END MASTER
887  CALL scatter_omp(var_tmp,varout)
888 
889  END SUBROUTINE scatter2d_l3
890 
891 
892 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
893 !! Definition des Gather2D --> 4D !!
894 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
895 
896 !!!!! --> Les entiers
897 
898  SUBROUTINE gather2d_i(VarIn, VarOut)
900  IMPLICIT NONE
901 
902  INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
903  INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
904 
905  INTEGER,DIMENSION(klon_mpi) :: Var_tmp
906 
907  CALL gather_omp(varin,var_tmp)
908 !$OMP MASTER
909  CALL gather2d_mpi(var_tmp,varout)
910 !$OMP END MASTER
911 
912  END SUBROUTINE gather2d_i
913 
914 
915  SUBROUTINE gather2d_i1(VarIn, VarOut)
917  IMPLICIT NONE
918 
919  INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
920  INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
921 
922  INTEGER,DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
923 
924  CALL gather_omp(varin,var_tmp)
925 !$OMP MASTER
926  CALL gather2d_mpi(var_tmp,varout)
927 !$OMP END MASTER
928 
929  END SUBROUTINE gather2d_i1
930 
931 
932  SUBROUTINE gather2d_i2(VarIn, VarOut)
934  IMPLICIT NONE
935 
936  INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
937  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
938 
939  INTEGER,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
940 
941  CALL gather_omp(varin,var_tmp)
942 !$OMP MASTER
943  CALL gather2d_mpi(var_tmp,varout)
944 !$OMP END MASTER
945 
946  END SUBROUTINE gather2d_i2
947 
948 
949  SUBROUTINE gather2d_i3(VarIn, VarOut)
951  IMPLICIT NONE
952 
953  INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
954  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
955 
956  INTEGER,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
957 
958  CALL gather_omp(varin,var_tmp)
959 !$OMP MASTER
960  CALL gather2d_mpi(var_tmp,varout)
961 !$OMP END MASTER
962 
963  END SUBROUTINE gather2d_i3
964 
965 
966 !!!!! --> Les reels
967 
968  SUBROUTINE gather2d_r(VarIn, VarOut)
970  IMPLICIT NONE
971 
972  REAL,INTENT(IN),DIMENSION(:) :: VarIn
973  REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
974 
975  REAL,DIMENSION(klon_mpi) :: Var_tmp
976 
977  CALL gather_omp(varin,var_tmp)
978 !$OMP MASTER
979  CALL gather2d_mpi(var_tmp,varout)
980 !$OMP END MASTER
981 
982  END SUBROUTINE gather2d_r
983 
984 
985  SUBROUTINE gather2d_r1(VarIn, VarOut)
987  IMPLICIT NONE
988 
989  REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
990  REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
991 
992  REAL,DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
993 
994  CALL gather_omp(varin,var_tmp)
995 !$OMP MASTER
996  CALL gather2d_mpi(var_tmp,varout)
997 !$OMP END MASTER
998 
999  END SUBROUTINE gather2d_r1
1000 
1001 
1002  SUBROUTINE gather2d_r2(VarIn, VarOut)
1004  IMPLICIT NONE
1005 
1006  REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1007  REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1008 
1009  REAL,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
1010 
1011  CALL gather_omp(varin,var_tmp)
1012 !$OMP MASTER
1013  CALL gather2d_mpi(var_tmp,varout)
1014 !$OMP END MASTER
1015 
1016  END SUBROUTINE gather2d_r2
1017 
1018 
1019  SUBROUTINE gather2d_r3(VarIn, VarOut)
1021  IMPLICIT NONE
1022 
1023  REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1024  REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1025 
1026  REAL,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
1027 
1028  CALL gather_omp(varin,var_tmp)
1029 !$OMP MASTER
1030  CALL gather2d_mpi(var_tmp,varout)
1031 !$OMP END MASTER
1032 
1033  END SUBROUTINE gather2d_r3
1034 
1035 
1036 !!!!! --> Les booleens
1037 
1038  SUBROUTINE gather2d_l(VarIn, VarOut)
1040  IMPLICIT NONE
1041 
1042  LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
1043  LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1044 
1045  LOGICAL,DIMENSION(klon_mpi) :: Var_tmp
1046 
1047  CALL gather_omp(varin,var_tmp)
1048 !$OMP MASTER
1049  CALL gather2d_mpi(var_tmp,varout)
1050 !$OMP END MASTER
1051 
1052  END SUBROUTINE gather2d_l
1053 
1054 
1055  SUBROUTINE gather2d_l1(VarIn, VarOut)
1057  IMPLICIT NONE
1058 
1059  LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1060  LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1061 
1062  LOGICAL,DIMENSION(klon_mpi,SIZE(VarIn,2)) :: Var_tmp
1063 
1064  CALL gather_omp(varin,var_tmp)
1065 !$OMP MASTER
1066  CALL gather2d_mpi(var_tmp,varout)
1067 !$OMP END MASTER
1068 
1069  END SUBROUTINE gather2d_l1
1070 
1071 
1072  SUBROUTINE gather2d_l2(VarIn, VarOut)
1074  IMPLICIT NONE
1075 
1076  LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1077  LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1078 
1079  LOGICAL,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
1080 
1081  CALL gather_omp(varin,var_tmp)
1082 !$OMP MASTER
1083  CALL gather2d_mpi(var_tmp,varout)
1084 !$OMP END MASTER
1085 
1086  END SUBROUTINE gather2d_l2
1087 
1088 
1089  SUBROUTINE gather2d_l3(VarIn, VarOut)
1091  IMPLICIT NONE
1092 
1093  LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1094  LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1095 
1096  LOGICAL,DIMENSION(klon_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
1097 
1098  CALL gather_omp(varin,var_tmp)
1099 !$OMP MASTER
1100  CALL gather2d_mpi(var_tmp,varout)
1101 !$OMP END MASTER
1102 
1103  END SUBROUTINE gather2d_l3
1104 
1105 
1106 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1107 !! Definition des reduce_sum --> 4D !!
1108 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1109 
1110 ! Les entiers
1111 
1112  SUBROUTINE reduce_sum_i(VarIn, VarOut)
1113  IMPLICIT NONE
1114 
1115  INTEGER,INTENT(IN) :: VarIn
1116  INTEGER,INTENT(OUT) :: VarOut
1117 
1118  INTEGER :: Var_tmp
1119 
1120  CALL reduce_sum_omp(varin,var_tmp)
1121 !$OMP MASTER
1122  CALL reduce_sum_mpi(var_tmp,varout)
1123 !$OMP END MASTER
1124 
1125  END SUBROUTINE reduce_sum_i
1126 
1127 
1128  SUBROUTINE reduce_sum_i1(VarIn, VarOut)
1129  IMPLICIT NONE
1130 
1131  INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
1132  INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
1133 
1134  INTEGER,DIMENSION(SIZE(VarIn)) :: Var_tmp
1135 
1136  CALL reduce_sum_omp(varin,var_tmp)
1137 !$OMP MASTER
1138  CALL reduce_sum_mpi(var_tmp,varout)
1139 !$OMP END MASTER
1140 
1141  END SUBROUTINE reduce_sum_i1
1142 
1143 
1144  SUBROUTINE reduce_sum_i2(VarIn, VarOut)
1145  IMPLICIT NONE
1146 
1147  INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1148  INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1149 
1150  INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
1151 
1152  CALL reduce_sum_omp(varin,var_tmp)
1153 !$OMP MASTER
1154  CALL reduce_sum_mpi(var_tmp,varout)
1155 !$OMP END MASTER
1156 
1157  END SUBROUTINE reduce_sum_i2
1158 
1159 
1160  SUBROUTINE reduce_sum_i3(VarIn, VarOut)
1161  IMPLICIT NONE
1162 
1163  INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1164  INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1165 
1166  INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
1167 
1168  CALL reduce_sum_omp(varin,var_tmp)
1169 !$OMP MASTER
1170  CALL reduce_sum_mpi(var_tmp,varout)
1171 !$OMP END MASTER
1172 
1173  END SUBROUTINE reduce_sum_i3
1174 
1175 
1176  SUBROUTINE reduce_sum_i4(VarIn, VarOut)
1177  IMPLICIT NONE
1178 
1179  INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1180  INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1181 
1182  INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
1183 
1184  CALL reduce_sum_omp(varin,var_tmp)
1185 !$OMP MASTER
1186  CALL reduce_sum_mpi(var_tmp,varout)
1187 !$OMP END MASTER
1188 
1189  END SUBROUTINE reduce_sum_i4
1190 
1191 
1192 ! Les reels
1193 
1194  SUBROUTINE reduce_sum_r(VarIn, VarOut)
1195  IMPLICIT NONE
1196 
1197  REAL,INTENT(IN) :: VarIn
1198  REAL,INTENT(OUT) :: VarOut
1199 
1200  REAL :: Var_tmp
1201 
1202  CALL reduce_sum_omp(varin,var_tmp)
1203 !$OMP MASTER
1204  CALL reduce_sum_mpi(var_tmp,varout)
1205 !$OMP END MASTER
1206 
1207  END SUBROUTINE reduce_sum_r
1208 
1209 
1210  SUBROUTINE reduce_sum_r1(VarIn, VarOut)
1211  IMPLICIT NONE
1212 
1213  REAL,INTENT(IN),DIMENSION(:) :: VarIn
1214  REAL,INTENT(OUT),DIMENSION(:) :: VarOut
1215 
1216  REAL,DIMENSION(SIZE(VarIn)) :: Var_tmp
1217 
1218  CALL reduce_sum_omp(varin,var_tmp)
1219 !$OMP MASTER
1220  CALL reduce_sum_mpi(var_tmp,varout)
1221 !$OMP END MASTER
1222 
1223  END SUBROUTINE reduce_sum_r1
1224 
1225 
1226  SUBROUTINE reduce_sum_r2(VarIn, VarOut)
1227  IMPLICIT NONE
1228 
1229  REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1230  REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1231 
1232  REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
1233 
1234  CALL reduce_sum_omp(varin,var_tmp)
1235 !$OMP MASTER
1236  CALL reduce_sum_mpi(var_tmp,varout)
1237 !$OMP END MASTER
1238 
1239  END SUBROUTINE reduce_sum_r2
1240 
1241 
1242  SUBROUTINE reduce_sum_r3(VarIn, VarOut)
1243  IMPLICIT NONE
1244 
1245  REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1246  REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1247 
1248  REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
1249 
1250  CALL reduce_sum_omp(varin,var_tmp)
1251 !$OMP MASTER
1252  CALL reduce_sum_mpi(var_tmp,varout)
1253 !$OMP END MASTER
1254 
1255  END SUBROUTINE reduce_sum_r3
1256 
1257 
1258  SUBROUTINE reduce_sum_r4(VarIn, VarOut)
1259  IMPLICIT NONE
1260 
1261  REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1262  REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1263 
1264  REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
1265 
1266  CALL reduce_sum_omp(varin,var_tmp)
1267 !$OMP MASTER
1268  CALL reduce_sum_mpi(var_tmp,varout)
1269 !$OMP END MASTER
1270 
1271  END SUBROUTINE reduce_sum_r4
1272 
1273 
1275