source: branches/publications/ORCHIDEE_CAN_r3069/src_parallel/mod_orchidee_transfert_para.F90 @ 7346

Last change on this file since 7346 was 1962, checked in by matthew.mcgrath, 10 years ago

DEV: Trunk changes up to and including r1925

File size: 17.2 KB
Line 
1! High level MPI/OpenMP parallel communication encapsulations for ORCHIDEE.
2
3!-
4!- $Header: /home/ssipsl/CVSREP/ORCHIDEE/src_parallel/Attic/mod_orchidee_transfert_para.F90,v 1.1.2.2 2008/08/29 14:01:40 ssipsl Exp $
5!-
6
7MODULE mod_orchidee_transfert_para
8
9  USE mod_orchidee_para_var
10  USE mod_orchidee_mpi_transfert
11  USE mod_orchidee_omp_transfert 
12 
13
14
15  INTERFACE bcast
16    MODULE PROCEDURE bcast_c, bcast_c1,                           &
17                     bcast_i,bcast_i1,bcast_i2,bcast_i3,bcast_i4, &
18                     bcast_r,bcast_r1,bcast_r2,bcast_r3,bcast_r4, &
19                     bcast_l,bcast_l1,bcast_l2,bcast_l3,bcast_l4
20  END INTERFACE
21
22  INTERFACE scatter
23    MODULE PROCEDURE scatter_i,scatter_i1,scatter_i2,scatter_i3, &
24                     scatter_r,scatter_r1,scatter_r2,scatter_r3, &
25                     scatter_l,scatter_l1,scatter_l2,scatter_l3
26  END INTERFACE
27
28 
29  INTERFACE gather
30    MODULE PROCEDURE gather_i,gather_i1,gather_i2,gather_i3, &
31                     gather_r,gather_r1,gather_r2,gather_r3, &
32                     gather_l,gather_l1,gather_l2,gather_l3 
33  END INTERFACE
34 
35
36  INTERFACE reduce_sum
37    MODULE PROCEDURE reduce_sum_i,reduce_sum_i1,reduce_sum_i2,reduce_sum_i3,reduce_sum_i4, &
38                     reduce_sum_r,reduce_sum_r1,reduce_sum_r2,reduce_sum_r3,reduce_sum_r4
39  END INTERFACE
40
41   
42CONTAINS
43
44!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
45!! Definition des Broadcast --> 4D   !!
46!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
47
48!! -- Les chaine de charactère -- !!
49
50  SUBROUTINE bcast_c(var)
51  IMPLICIT NONE
52    CHARACTER(LEN=*),INTENT(INOUT) :: Var
53   
54   
55    IF (is_omp_root) CALL bcast_mpi(Var)
56    CALL bcast_omp(Var)
57   
58  END SUBROUTINE bcast_c
59
60  SUBROUTINE bcast_c1(var)
61  IMPLICIT NONE
62    CHARACTER(LEN=*),INTENT(INOUT) :: Var(:)
63   
64   
65    IF (is_omp_root) CALL bcast_mpi(Var)
66    CALL bcast_omp(Var)
67   
68  END SUBROUTINE bcast_c1
69
70!! -- Les entiers -- !!
71 
72  SUBROUTINE bcast_i(var)
73  IMPLICIT NONE
74    INTEGER,INTENT(INOUT) :: Var
75   
76    IF (is_omp_root) CALL bcast_mpi(Var)
77    CALL bcast_omp(Var)
78   
79  END SUBROUTINE bcast_i
80
81  SUBROUTINE bcast_i1(var)
82  IMPLICIT NONE
83    INTEGER,INTENT(INOUT) :: Var(:)
84   
85   
86    IF (is_omp_root) CALL bcast_mpi(Var)
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   
97    IF (is_omp_root) CALL bcast_mpi(Var)
98    CALL bcast_omp(Var)
99   
100  END SUBROUTINE bcast_i2
101
102
103  SUBROUTINE bcast_i3(var)
104  IMPLICIT NONE
105    INTEGER,INTENT(INOUT) :: Var(:,:,:)
106   
107   
108    IF (is_omp_root) CALL bcast_mpi(Var)
109    CALL bcast_omp(Var)
110   
111  END SUBROUTINE bcast_i3
112
113
114  SUBROUTINE bcast_i4(var)
115  IMPLICIT NONE
116    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
117   
118   
119    IF (is_omp_root) CALL bcast_mpi(Var)
120    CALL bcast_omp(Var)
121   
122  END SUBROUTINE bcast_i4
123
124 
125!! -- Les reels -- !!
126 
127  SUBROUTINE bcast_r(var)
128  IMPLICIT NONE
129    REAL(r_std),INTENT(INOUT) :: Var
130
131   
132    IF (is_omp_root) CALL bcast_mpi(Var)
133    CALL bcast_omp(Var)
134   
135  END SUBROUTINE bcast_r
136
137  SUBROUTINE bcast_r1(var)
138  IMPLICIT NONE
139    REAL(r_std),INTENT(INOUT) :: Var(:)
140   
141   
142    IF (is_omp_root) CALL bcast_mpi(Var)
143    CALL bcast_omp(Var)
144   
145  END SUBROUTINE bcast_r1
146
147
148  SUBROUTINE bcast_r2(var)
149  IMPLICIT NONE
150    REAL(r_std),INTENT(INOUT) :: Var(:,:)
151   
152   
153    IF (is_omp_root) CALL bcast_mpi(Var)
154    CALL bcast_omp(Var)
155   
156  END SUBROUTINE bcast_r2
157
158
159  SUBROUTINE bcast_r3(var)
160  IMPLICIT NONE
161    REAL(r_std),INTENT(INOUT) :: Var(:,:,:)
162   
163   
164    IF (is_omp_root) CALL bcast_mpi(Var)
165    CALL bcast_omp(Var)
166   
167  END SUBROUTINE bcast_r3
168
169
170  SUBROUTINE bcast_r4(var)
171  IMPLICIT NONE
172    REAL(r_std),INTENT(INOUT) :: Var(:,:,:,:)
173   
174    IF (is_omp_root) CALL bcast_mpi(Var)
175    CALL bcast_omp(Var)
176   
177  END SUBROUTINE bcast_r4 
178
179
180!! -- Les booleens -- !!
181 
182  SUBROUTINE bcast_l(var)
183  IMPLICIT NONE
184    LOGICAL,INTENT(INOUT) :: Var
185   
186    IF (is_omp_root) CALL bcast_mpi(Var)
187    CALL bcast_omp(Var)
188   
189  END SUBROUTINE bcast_l
190
191  SUBROUTINE bcast_l1(var)
192  IMPLICIT NONE
193    LOGICAL,INTENT(INOUT) :: Var(:)
194   
195    IF (is_omp_root) CALL bcast_mpi(Var)
196    CALL bcast_omp(Var)
197   
198  END SUBROUTINE bcast_l1
199
200
201  SUBROUTINE bcast_l2(var)
202  IMPLICIT NONE
203    LOGICAL,INTENT(INOUT) :: Var(:,:)
204   
205   
206    IF (is_omp_root) CALL bcast_mpi(Var)
207    CALL bcast_omp(Var)
208   
209  END SUBROUTINE bcast_l2
210
211
212  SUBROUTINE bcast_l3(var)
213  IMPLICIT NONE
214    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
215   
216    IF (is_omp_root) CALL bcast_mpi(Var)
217    CALL bcast_omp(Var)
218   
219  END SUBROUTINE bcast_l3
220
221
222  SUBROUTINE bcast_l4(var)
223  IMPLICIT NONE
224    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
225     
226    IF (is_omp_root) CALL bcast_mpi(Var)
227
228    CALL bcast_omp(Var)
229   
230  END SUBROUTINE bcast_l4
231
232
233!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
234!! Definition des Scatter   --> 4D   !!
235!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
236
237  SUBROUTINE scatter_i(VarIn, VarOut)
238  IMPLICIT NONE
239 
240    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
241    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
242
243    INTEGER,DIMENSION(nbp_mpi) :: Var_tmp
244   
245   
246    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
247    CALL scatter_omp(Var_tmp,Varout)
248   
249  END SUBROUTINE scatter_i
250
251
252  SUBROUTINE scatter_i1(VarIn, VarOut)
253  IMPLICIT NONE
254 
255    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
256    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
257
258    INTEGER,DIMENSION(nbp_mpi,SIZE(Varout,2)) :: Var_tmp
259
260   
261    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
262    CALL scatter_omp(Var_tmp,Varout)
263   
264  END SUBROUTINE scatter_i1
265
266
267  SUBROUTINE scatter_i2(VarIn, VarOut)
268  IMPLICIT NONE
269 
270    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
271    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
272   
273    INTEGER,DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
274
275   
276    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
277    CALL scatter_omp(Var_tmp,Varout)
278   
279  END SUBROUTINE scatter_i2
280
281
282  SUBROUTINE scatter_i3(VarIn, VarOut)
283  IMPLICIT NONE
284 
285    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
286    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
287
288    INTEGER,DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
289
290   
291    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
292    CALL scatter_omp(Var_tmp,VarOut)
293   
294  END SUBROUTINE scatter_i3
295
296
297  SUBROUTINE scatter_r(VarIn, VarOut)
298  IMPLICIT NONE
299 
300    REAL(r_std),INTENT(IN),DIMENSION(:) :: VarIn
301    REAL(r_std),INTENT(OUT),DIMENSION(:) :: VarOut
302
303    REAL(r_std),DIMENSION(nbp_mpi) :: Var_tmp
304   
305    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
306    CALL scatter_omp(Var_tmp,Varout)
307   
308  END SUBROUTINE scatter_r
309
310
311  SUBROUTINE scatter_r1(VarIn, VarOut)
312  IMPLICIT NONE
313 
314    REAL(r_std),INTENT(IN),DIMENSION(:,:) :: VarIn
315    REAL(r_std),INTENT(OUT),DIMENSION(:,:) :: VarOut
316
317    REAL(r_std),DIMENSION(nbp_mpi,SIZE(Varout,2)) :: Var_tmp
318
319   
320    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
321    CALL scatter_omp(Var_tmp,Varout)
322   
323  END SUBROUTINE scatter_r1
324
325
326  SUBROUTINE scatter_r2(VarIn, VarOut)
327  IMPLICIT NONE
328 
329    REAL(r_std),INTENT(IN),DIMENSION(:,:,:) :: VarIn
330    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:) :: VarOut
331   
332    REAL(r_std),DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
333
334   
335    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
336    CALL scatter_omp(Var_tmp,Varout)
337   
338  END SUBROUTINE scatter_r2
339
340
341  SUBROUTINE scatter_r3(VarIn, VarOut)
342  IMPLICIT NONE
343 
344    REAL(r_std),INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
345    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
346
347    REAL(r_std),DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
348
349   
350    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
351    CALL scatter_omp(Var_tmp,VarOut)
352   
353  END SUBROUTINE scatter_r3
354 
355 
356
357  SUBROUTINE scatter_l(VarIn, VarOut)
358  IMPLICIT NONE
359 
360    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
361    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
362
363    LOGICAL,DIMENSION(nbp_mpi) :: Var_tmp
364   
365   
366    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
367    CALL scatter_omp(Var_tmp,Varout)
368   
369  END SUBROUTINE scatter_l
370
371
372  SUBROUTINE scatter_l1(VarIn, VarOut)
373  IMPLICIT NONE
374 
375    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
376    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
377
378    LOGICAL,DIMENSION(nbp_mpi,SIZE(Varout,2)) :: Var_tmp
379
380   
381    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
382    CALL scatter_omp(Var_tmp,Varout)
383   
384  END SUBROUTINE scatter_l1
385
386
387  SUBROUTINE scatter_l2(VarIn, VarOut)
388  IMPLICIT NONE
389 
390    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
391    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
392   
393    LOGICAL,DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3)) :: Var_tmp
394
395   
396    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
397    CALL scatter_omp(Var_tmp,Varout)
398   
399  END SUBROUTINE scatter_l2
400
401
402  SUBROUTINE scatter_l3(VarIn, VarOut)
403  IMPLICIT NONE
404 
405    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
406    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
407
408    LOGICAL,DIMENSION(nbp_mpi,SIZE(Varout,2),SIZE(Varout,3),SIZE(Varout,4)) :: Var_tmp
409
410   
411    IF (is_omp_root) CALL scatter_mpi(VarIn,Var_tmp)
412    CALL scatter_omp(Var_tmp,VarOut)
413   
414  END SUBROUTINE scatter_l3
415
416
417
418!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
419!! Definition des Gather   --> 4D   !!
420!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
421 
422!!!!! --> Les entiers
423
424  SUBROUTINE gather_i(VarIn, VarOut)
425  IMPLICIT NONE
426 
427    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
428    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
429   
430    INTEGER, DIMENSION(nbp_mpi) :: Var_tmp
431   
432    CALL gather_omp(VarIn,Var_tmp)
433   
434    IF (is_omp_root) CALL gather_mpi(Var_tmp,Varout)
435 
436  END SUBROUTINE gather_i
437
438
439  SUBROUTINE gather_i1(VarIn, VarOut)
440  IMPLICIT NONE
441 
442    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
443    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
444   
445    INTEGER, DIMENSION(nbp_mpi,SIZE(VarIn,2)) :: Var_tmp
446   
447    CALL gather_omp(VarIn,Var_tmp)
448   
449    IF (is_omp_root) CALL gather_mpi(Var_tmp,Varout)
450
451 
452  END SUBROUTINE gather_i1
453
454
455  SUBROUTINE gather_i2(VarIn, VarOut)
456  IMPLICIT NONE
457 
458    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
459    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
460   
461    INTEGER, DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
462   
463    CALL gather_omp(VarIn,Var_tmp)
464   
465    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
466 
467  END SUBROUTINE gather_i2
468
469
470  SUBROUTINE gather_i3(VarIn, VarOut)
471  IMPLICIT NONE
472 
473    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
474    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
475   
476    INTEGER, DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
477   
478    CALL gather_omp(VarIn,Var_tmp)
479   
480    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
481
482 
483  END SUBROUTINE gather_i3
484
485
486!!!!! --> Les reels
487
488  SUBROUTINE gather_r(VarIn, VarOut)
489  IMPLICIT NONE
490 
491    REAL(r_std),INTENT(IN),DIMENSION(:) :: VarIn
492    REAL(r_std),INTENT(OUT),DIMENSION(:) :: VarOut
493   
494    REAL(r_std), DIMENSION(nbp_mpi) :: Var_tmp
495   
496    CALL gather_omp(VarIn,Var_tmp)
497   
498    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
499 
500  END SUBROUTINE gather_r
501
502
503  SUBROUTINE gather_r1(VarIn, VarOut)
504  IMPLICIT NONE
505 
506    REAL(r_std),INTENT(IN),DIMENSION(:,:) :: VarIn
507    REAL(r_std),INTENT(OUT),DIMENSION(:,:) :: VarOut
508   
509    REAL(r_std), DIMENSION(nbp_mpi,SIZE(VarIn,2)) :: Var_tmp
510   
511    CALL gather_omp(VarIn,Var_tmp)
512   
513    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
514 
515  END SUBROUTINE gather_r1
516
517
518  SUBROUTINE gather_r2(VarIn, VarOut)
519  IMPLICIT NONE
520 
521    REAL(r_std),INTENT(IN),DIMENSION(:,:,:) :: VarIn
522    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:) :: VarOut
523   
524    REAL(r_std), DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
525   
526    CALL gather_omp(VarIn,Var_tmp)
527   
528    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
529 
530  END SUBROUTINE gather_r2
531
532
533  SUBROUTINE gather_r3(VarIn, VarOut)
534  IMPLICIT NONE
535 
536    REAL(r_std),INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
537    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
538   
539    REAL(r_std), DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
540   
541    CALL gather_omp(VarIn,Var_tmp)
542   
543    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
544 
545  END SUBROUTINE gather_r3
546
547
548!!!!! --> Les booleens
549
550  SUBROUTINE gather_l(VarIn, VarOut)
551  IMPLICIT NONE
552 
553    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
554    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
555   
556    LOGICAL, DIMENSION(nbp_mpi) :: Var_tmp
557   
558    CALL gather_omp(VarIn,Var_tmp)
559   
560    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
561 
562  END SUBROUTINE gather_l
563
564
565  SUBROUTINE gather_l1(VarIn, VarOut)
566  IMPLICIT NONE
567 
568    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
569    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
570   
571    LOGICAL, DIMENSION(nbp_mpi,SIZE(VarIn,2)) :: Var_tmp
572   
573    CALL gather_omp(VarIn,Var_tmp)
574   
575    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
576 
577  END SUBROUTINE gather_l1
578
579
580  SUBROUTINE gather_l2(VarIn, VarOut)
581  IMPLICIT NONE
582 
583    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
584    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
585   
586    LOGICAL, DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp
587   
588    CALL gather_omp(VarIn,Var_tmp)
589    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
590 
591  END SUBROUTINE gather_l2
592
593
594  SUBROUTINE gather_l3(VarIn, VarOut)
595  IMPLICIT NONE
596 
597    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
598    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
599   
600    LOGICAL, DIMENSION(nbp_mpi,SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp
601   
602    CALL gather_omp(VarIn,Var_tmp)
603   
604    IF (is_omp_root) CALL gather_mpi(Var_tmp,VarOut)
605 
606  END SUBROUTINE gather_l3
607
608
609!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
610!! Definition des reduce_sum   --> 4D   !!
611!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
612
613! Les entiers
614
615  SUBROUTINE reduce_sum_i(VarIn, VarOut)
616  IMPLICIT NONE
617 
618    INTEGER,INTENT(IN)  :: VarIn
619    INTEGER,INTENT(OUT) :: VarOut
620   
621    INTEGER             :: Var_tmp
622           
623    CALL reduce_sum_omp(VarIn,Var_tmp)
624   
625    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
626 
627  END SUBROUTINE reduce_sum_i 
628
629
630  SUBROUTINE reduce_sum_i1(VarIn, VarOut)
631  IMPLICIT NONE
632 
633    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
634    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
635   
636    INTEGER,DIMENSION(SIZE(VarIn))   :: Var_tmp
637           
638    CALL reduce_sum_omp(VarIn,Var_tmp)
639   
640    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
641 
642  END SUBROUTINE reduce_sum_i1 
643
644
645  SUBROUTINE reduce_sum_i2(VarIn, VarOut)
646  IMPLICIT NONE
647 
648    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
649    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
650   
651    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
652           
653    CALL reduce_sum_omp(VarIn,Var_tmp)
654   
655    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
656
657  END SUBROUTINE reduce_sum_i2 
658 
659
660  SUBROUTINE reduce_sum_i3(VarIn, VarOut)
661  IMPLICIT NONE
662 
663    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
664    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
665   
666    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))  :: Var_tmp
667           
668    CALL reduce_sum_omp(VarIn,Var_tmp)
669   
670    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
671 
672  END SUBROUTINE reduce_sum_i3 
673
674
675  SUBROUTINE reduce_sum_i4(VarIn, VarOut)
676  IMPLICIT NONE
677 
678    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
679    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
680   
681    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))  :: Var_tmp
682           
683    CALL reduce_sum_omp(VarIn,Var_tmp)
684   
685    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
686 
687  END SUBROUTINE reduce_sum_i4 
688
689
690! Les reels
691
692  SUBROUTINE reduce_sum_r(VarIn, VarOut)
693  IMPLICIT NONE
694 
695    REAL(r_std),INTENT(IN)  :: VarIn
696    REAL(r_std),INTENT(OUT) :: VarOut
697   
698    REAL(r_std)             :: Var_tmp
699           
700    CALL reduce_sum_omp(VarIn,Var_tmp)
701   
702    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
703  END SUBROUTINE reduce_sum_r 
704
705
706  SUBROUTINE reduce_sum_r1(VarIn, VarOut)
707  IMPLICIT NONE
708 
709    REAL(r_std),INTENT(IN),DIMENSION(:)  :: VarIn
710    REAL(r_std),INTENT(OUT),DIMENSION(:) :: VarOut
711   
712    REAL(r_std),DIMENSION(SIZE(VarIn))   :: Var_tmp
713           
714    CALL reduce_sum_omp(VarIn,Var_tmp)
715   
716    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
717  END SUBROUTINE reduce_sum_r1 
718
719
720  SUBROUTINE reduce_sum_r2(VarIn, VarOut)
721  IMPLICIT NONE
722 
723    REAL(r_std),INTENT(IN),DIMENSION(:,:)  :: VarIn
724    REAL(r_std),INTENT(OUT),DIMENSION(:,:) :: VarOut
725   
726    REAL(r_std),DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
727           
728    CALL reduce_sum_omp(VarIn,Var_tmp)
729   
730    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
731  END SUBROUTINE reduce_sum_r2 
732 
733
734  SUBROUTINE reduce_sum_r3(VarIn, VarOut)
735  IMPLICIT NONE
736 
737    REAL(r_std),INTENT(IN),DIMENSION(:,:,:)  :: VarIn
738    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:) :: VarOut
739   
740    REAL(r_std),DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))  :: Var_tmp
741           
742    CALL reduce_sum_omp(VarIn,Var_tmp)
743   
744    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
745  END SUBROUTINE reduce_sum_r3 
746
747
748  SUBROUTINE reduce_sum_r4(VarIn, VarOut)
749  IMPLICIT NONE
750 
751    REAL(r_std),INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
752    REAL(r_std),INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
753   
754    REAL(r_std),DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))  :: Var_tmp
755           
756    CALL reduce_sum_omp(VarIn,Var_tmp)
757   
758    IF (is_omp_root) CALL reduce_sum_mpi(Var_tmp,VarOut)
759  END SUBROUTINE reduce_sum_r4 
760
761   
762END MODULE mod_orchidee_transfert_para
763
Note: See TracBrowser for help on using the repository browser.