source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/build/ppsrc/INCA_PARA/mod_inca_mpi_transfert.f90 @ 6610

Last change on this file since 6610 was 6610, checked in by acosce, 10 months ago

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 56.0 KB
Line 
1
2
3
4
5
6
7
8
9
10
11
12MODULE mod_inca_mpi_transfert
13
14
15  INTERFACE bcast_mpi
16    MODULE PROCEDURE bcast_mpi_c,bcast_mpi_c1,                                        &
17                     bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, &
18                     bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4,bcast_mpi_r5, &
19                     bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4
20  END INTERFACE
21
22  INTERFACE scatter_mpi
23    MODULE PROCEDURE scatter_mpi_i,scatter_mpi_i1,scatter_mpi_i2,scatter_mpi_i3, &
24                     scatter_mpi_r,scatter_mpi_r1,scatter_mpi_r2,scatter_mpi_r3, &
25                     scatter_mpi_l,scatter_mpi_l1,scatter_mpi_l2,scatter_mpi_l3
26  END INTERFACE
27
28 
29  INTERFACE gather_mpi
30    MODULE PROCEDURE gather_mpi_i,gather_mpi_i1,gather_mpi_i2,gather_mpi_i3, &
31                     gather_mpi_r,gather_mpi_r1,gather_mpi_r2,gather_mpi_r3, &
32                     gather_mpi_l,gather_mpi_l1,gather_mpi_l2,gather_mpi_l3 
33  END INTERFACE
34 
35  INTERFACE scatter2D_mpi
36    MODULE PROCEDURE scatter2D_mpi_i,scatter2D_mpi_i1,scatter2D_mpi_i2,scatter2D_mpi_i3, &
37                     scatter2D_mpi_r,scatter2D_mpi_r1,scatter2D_mpi_r2,scatter2D_mpi_r3, &
38                     scatter2D_mpi_l,scatter2D_mpi_l1,scatter2D_mpi_l2,scatter2D_mpi_l3
39  END INTERFACE
40
41  INTERFACE gather2D_mpi
42    MODULE PROCEDURE gather2D_mpi_i,gather2D_mpi_i1,gather2D_mpi_i2,gather2D_mpi_i3, &
43                     gather2D_mpi_r,gather2D_mpi_r1,gather2D_mpi_r2,gather2D_mpi_r3, &
44                     gather2D_mpi_l,gather2D_mpi_l1,gather2D_mpi_l2,gather2D_mpi_l3
45  END INTERFACE
46 
47  INTERFACE reduce_sum_mpi
48    MODULE PROCEDURE reduce_sum_mpi_i,reduce_sum_mpi_i1,reduce_sum_mpi_i2,reduce_sum_mpi_i3,reduce_sum_mpi_i4, &
49                     reduce_sum_mpi_r,reduce_sum_mpi_r1,reduce_sum_mpi_r2,reduce_sum_mpi_r3,reduce_sum_mpi_r4
50  END INTERFACE
51
52 INTERFACE grid1dTo2d_mpi
53    MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, &
54                     grid1dTo2d_mpi_r,grid1dTo2d_mpi_r1,grid1dTo2d_mpi_r2,grid1dTo2d_mpi_r3, &
55                     grid1dTo2d_mpi_l,grid1dTo2d_mpi_l1,grid1dTo2d_mpi_l2,grid1dTo2d_mpi_l3
56 END INTERFACE
57
58 INTERFACE grid2dTo1d_mpi
59    MODULE PROCEDURE grid2dTo1d_mpi_i,grid2dTo1d_mpi_i1,grid2dTo1d_mpi_i2,grid2dTo1d_mpi_i3, &
60                     grid2dTo1d_mpi_r,grid2dTo1d_mpi_r1,grid2dTo1d_mpi_r2,grid2dTo1d_mpi_r3, &
61                     grid2dTo1d_mpi_l,grid2dTo1d_mpi_l1,grid2dTo1d_mpi_l2,grid2dTo1d_mpi_l3
62 END INTERFACE
63   
64
65CONTAINS
66
67!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
68!! Definition des Broadcast --> 4D   !!
69!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
70
71!! -- Les chaine de charactère -- !!
72
73  SUBROUTINE bcast_mpi_c(var1)
74  IMPLICIT NONE
75    CHARACTER(LEN=*),INTENT(INOUT) :: Var1
76    CHARACTER(LEN=len(Var1)),DIMENSION(1) :: Var2
77   
78    Var2(1)=Var1
79    CALL bcast_mpi_cgen(Var2,len(Var1))
80    Var1=Var2(1)
81  END SUBROUTINE bcast_mpi_c
82
83  SUBROUTINE bcast_mpi_c1(var1)
84  IMPLICIT NONE
85    CHARACTER(LEN=*),INTENT(INOUT) :: Var1(:)
86   
87
88    CALL bcast_mpi_cgen(Var1,len(Var1)*size(Var1))
89  END SUBROUTINE bcast_mpi_c1
90 
91!! -- Les entiers -- !!
92 
93  SUBROUTINE bcast_mpi_i(var1)
94  IMPLICIT NONE
95    INTEGER,INTENT(INOUT) :: Var1
96    CALL bcast_mpi_igen(Var1,1)
97  END SUBROUTINE bcast_mpi_i
98
99  SUBROUTINE bcast_mpi_i1(var)
100  IMPLICIT NONE
101    INTEGER,INTENT(INOUT) :: Var(:)
102   
103    CALL bcast_mpi_igen(Var,size(Var))
104  END SUBROUTINE bcast_mpi_i1
105
106  SUBROUTINE bcast_mpi_i2(var)
107  IMPLICIT NONE
108    INTEGER,INTENT(INOUT) :: Var(:,:)
109   
110    CALL bcast_mpi_igen(Var,size(Var))
111  END SUBROUTINE bcast_mpi_i2
112
113  SUBROUTINE bcast_mpi_i3(var)
114  IMPLICIT NONE
115    INTEGER,INTENT(INOUT) :: Var(:,:,:)
116   
117    CALL bcast_mpi_igen(Var,size(Var))
118  END SUBROUTINE bcast_mpi_i3
119
120  SUBROUTINE bcast_mpi_i4(var)
121  IMPLICIT NONE
122    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
123   
124    CALL bcast_mpi_igen(Var,size(Var))
125  END SUBROUTINE bcast_mpi_i4
126
127
128!! -- Les reels -- !!
129
130  SUBROUTINE bcast_mpi_r(var)
131  IMPLICIT NONE
132    REAL,INTENT(INOUT) :: Var
133   
134    CALL bcast_mpi_rgen(Var,1)
135  END SUBROUTINE bcast_mpi_r
136
137  SUBROUTINE bcast_mpi_r1(var)
138  IMPLICIT NONE
139    REAL,INTENT(INOUT) :: Var(:)
140   
141    CALL bcast_mpi_rgen(Var,size(Var))
142  END SUBROUTINE bcast_mpi_r1
143
144  SUBROUTINE bcast_mpi_r2(var)
145  IMPLICIT NONE
146    REAL,INTENT(INOUT) :: Var(:,:)
147   
148    CALL bcast_mpi_rgen(Var,size(Var))
149  END SUBROUTINE bcast_mpi_r2
150
151  SUBROUTINE bcast_mpi_r3(var)
152  IMPLICIT NONE
153    REAL,INTENT(INOUT) :: Var(:,:,:)
154   
155    CALL bcast_mpi_rgen(Var,size(Var))
156  END SUBROUTINE bcast_mpi_r3
157
158  SUBROUTINE bcast_mpi_r4(var)
159  IMPLICIT NONE
160    REAL,INTENT(INOUT) :: Var(:,:,:,:)
161   
162    CALL bcast_mpi_rgen(Var,size(Var))
163  END SUBROUTINE bcast_mpi_r4
164 
165!Modif_Oth
166  SUBROUTINE bcast_mpi_r5(var)
167  IMPLICIT NONE
168    REAL,INTENT(INOUT) :: Var(:,:,:,:,:)
169   
170    CALL bcast_mpi_rgen(Var,size(Var))
171  END SUBROUTINE bcast_mpi_r5
172 
173!! -- Les booleans -- !!
174
175  SUBROUTINE bcast_mpi_l(var)
176  IMPLICIT NONE
177    LOGICAL,INTENT(INOUT) :: Var
178   
179    CALL bcast_mpi_lgen(Var,1)
180  END SUBROUTINE bcast_mpi_l
181
182  SUBROUTINE bcast_mpi_l1(var)
183  IMPLICIT NONE
184    LOGICAL,INTENT(INOUT) :: Var(:)
185   
186    CALL bcast_mpi_lgen(Var,size(Var))
187  END SUBROUTINE bcast_mpi_l1
188
189  SUBROUTINE bcast_mpi_l2(var)
190  IMPLICIT NONE
191    LOGICAL,INTENT(INOUT) :: Var(:,:)
192   
193    CALL bcast_mpi_lgen(Var,size(Var))
194  END SUBROUTINE bcast_mpi_l2
195
196  SUBROUTINE bcast_mpi_l3(var)
197  IMPLICIT NONE
198    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
199   
200    CALL bcast_mpi_lgen(Var,size(Var))
201  END SUBROUTINE bcast_mpi_l3
202
203  SUBROUTINE bcast_mpi_l4(var)
204  IMPLICIT NONE
205    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
206   
207    CALL bcast_mpi_lgen(Var,size(Var))
208  END SUBROUTINE bcast_mpi_l4
209 
210!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
211!! Definition des Scatter   --> 4D   !!
212!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
213
214  SUBROUTINE scatter_mpi_i(VarIn, VarOut)
215    USE mod_inca_mpi_data, ONLY :  is_mpi_root
216    IMPLICIT NONE
217 
218    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
219    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
220
221    INTEGER :: dummy(1)
222
223
224     IF (is_mpi_root) THEN
225      CALL scatter_mpi_igen(VarIn,Varout,1)
226     ELSE
227      CALL scatter_mpi_igen(dummy,Varout,1)
228    ENDIF
229   
230  END SUBROUTINE scatter_mpi_i
231
232  SUBROUTINE scatter_mpi_i1(VarIn, VarOut)
233    USE mod_inca_mpi_data, ONLY :  is_mpi_root
234    IMPLICIT NONE
235 
236    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
237    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
238   
239    INTEGER :: dummy(1)
240
241    IF (is_mpi_root) THEN
242      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2))
243    ELSE
244      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2))
245    ENDIF
246   
247  END SUBROUTINE scatter_mpi_i1
248 
249  SUBROUTINE scatter_mpi_i2(VarIn, VarOut)
250    USE mod_inca_mpi_data, ONLY :  is_mpi_root
251    IMPLICIT NONE
252 
253    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
254    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
255   
256    INTEGER :: dummy(1)
257   
258    IF (is_mpi_root) THEN
259      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
260    ELSE
261      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
262    ENDIF
263  END SUBROUTINE scatter_mpi_i2
264
265  SUBROUTINE scatter_mpi_i3(VarIn, VarOut)
266    USE mod_inca_mpi_data, ONLY :  is_mpi_root
267    IMPLICIT NONE
268 
269    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
270    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
271   
272    INTEGER :: dummy(1)
273   
274    IF (is_mpi_root) THEN
275      CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
276    ELSE
277      CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
278    ENDIF
279 
280  END SUBROUTINE scatter_mpi_i3
281
282
283  SUBROUTINE scatter_mpi_r(VarIn, VarOut)
284    USE mod_inca_mpi_data, ONLY :  is_mpi_root
285    IMPLICIT NONE
286 
287    REAL,INTENT(IN),DIMENSION(:) :: VarIn
288    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
289   
290    REAL :: dummy(1)
291   
292    IF (is_mpi_root) THEN
293      CALL scatter_mpi_rgen(VarIn,Varout,1)
294    ELSE
295      CALL scatter_mpi_rgen(dummy,Varout,1)
296    ENDIF
297 
298  END SUBROUTINE scatter_mpi_r
299
300  SUBROUTINE scatter_mpi_r1(VarIn, VarOut)
301  USE mod_inca_mpi_data, ONLY :  is_mpi_root
302  IMPLICIT NONE
303 
304    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
305    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
306   
307    REAL :: dummy(1)
308   
309    IF (is_mpi_root) THEN
310      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2))
311    ELSE
312      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2))     
313    ENDIF
314 
315  END SUBROUTINE scatter_mpi_r1
316 
317  SUBROUTINE scatter_mpi_r2(VarIn, VarOut)
318    USE mod_inca_mpi_data, ONLY :  is_mpi_root
319    IMPLICIT NONE
320 
321    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
322    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
323   
324    REAL :: dummy(1)
325   
326    IF (is_mpi_root) THEN
327      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
328    ELSE
329      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
330    ENDIF
331 
332  END SUBROUTINE scatter_mpi_r2
333
334  SUBROUTINE scatter_mpi_r3(VarIn, VarOut)
335    USE mod_inca_mpi_data, ONLY :  is_mpi_root
336    IMPLICIT NONE
337 
338    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
339    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
340   
341    REAL :: dummy(1)
342   
343    IF (is_mpi_root) THEN
344      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
345    ELSE
346      CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
347    ENDIF
348 
349  END SUBROUTINE scatter_mpi_r3
350
351
352  SUBROUTINE scatter_mpi_l(VarIn, VarOut)
353    USE mod_inca_mpi_data, ONLY :  is_mpi_root
354    IMPLICIT NONE
355 
356    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
357    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
358   
359    LOGICAL :: dummy(1)
360   
361    IF (is_mpi_root) THEN
362      CALL scatter_mpi_lgen(VarIn,Varout,1)
363    ELSE
364      CALL scatter_mpi_lgen(dummy,Varout,1)
365    ENDIF
366   
367  END SUBROUTINE scatter_mpi_l
368
369  SUBROUTINE scatter_mpi_l1(VarIn, VarOut)
370    USE mod_inca_mpi_data, ONLY :  is_mpi_root
371    IMPLICIT NONE
372 
373    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
374    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
375   
376    LOGICAL :: dummy(1)
377   
378    IF (is_mpi_root) THEN
379      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2))
380    ELSE
381      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2))     
382    ENDIF
383 
384  END SUBROUTINE scatter_mpi_l1
385 
386  SUBROUTINE scatter_mpi_l2(VarIn, VarOut)
387    USE mod_inca_mpi_data, ONLY :  is_mpi_root
388    IMPLICIT NONE
389 
390    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
391    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
392   
393    LOGICAL :: dummy(1)
394   
395    IF (is_mpi_root) THEN
396      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
397    ELSE
398      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
399    ENDIF
400 
401  END SUBROUTINE scatter_mpi_l2
402
403  SUBROUTINE scatter_mpi_l3(VarIn, VarOut)
404    USE mod_inca_mpi_data, ONLY :  is_mpi_root
405    IMPLICIT NONE
406 
407    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
408    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
409   
410    LOGICAL :: dummy(1)
411   
412    IF (is_mpi_root) THEN
413      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
414    ELSE
415      CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
416    ENDIF
417 
418  END SUBROUTINE scatter_mpi_l3 
419
420!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
421!! Definition des Gather   --> 4D   !!
422!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
423 
424!!!!! --> Les entiers
425
426  SUBROUTINE gather_mpi_i(VarIn, VarOut)
427    USE mod_inca_mpi_data, ONLY :  is_mpi_root
428    IMPLICIT NONE
429 
430    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
431    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
432   
433    INTEGER :: dummy(1)
434
435
436    IF (is_mpi_root) THEN
437      CALL gather_mpi_igen(VarIn,VarOut,1)
438    ELSE
439      CALL gather_mpi_igen(VarIn,dummy,1)
440    ENDIF
441 
442  END SUBROUTINE gather_mpi_i
443 
444 
445 
446 
447
448!!!!!
449
450  SUBROUTINE gather_mpi_i1(VarIn, VarOut)
451    USE mod_inca_mpi_data, ONLY :  is_mpi_root
452    IMPLICIT NONE
453 
454    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
455    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
456   
457    INTEGER :: dummy(1)
458   
459
460    IF (is_mpi_root) THEN
461      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2))
462    ELSE
463      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2))
464    ENDIF
465 
466  END SUBROUTINE gather_mpi_i1
467
468!!!!!
469 
470  SUBROUTINE gather_mpi_i2(VarIn, VarOut)
471    USE mod_inca_mpi_data, ONLY :  is_mpi_root
472    IMPLICIT NONE
473 
474    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
475    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
476   
477    INTEGER :: dummy(1)
478   
479
480    IF (is_mpi_root) THEN
481      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
482    ELSE
483      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
484    ENDIF
485 
486  END SUBROUTINE gather_mpi_i2
487
488!!!!!
489
490  SUBROUTINE gather_mpi_i3(VarIn, VarOut)
491    USE mod_inca_mpi_data, ONLY :  is_mpi_root
492    IMPLICIT NONE
493 
494    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
495    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
496   
497    INTEGER :: dummy(1)
498   
499
500    IF (is_mpi_root) THEN
501      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
502    ELSE
503      CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
504    ENDIF
505 
506  END SUBROUTINE gather_mpi_i3
507
508!!!!! --> Les reels
509
510  SUBROUTINE gather_mpi_r(VarIn, VarOut)
511    USE mod_inca_mpi_data, ONLY :  is_mpi_root
512    IMPLICIT NONE
513 
514    REAL,INTENT(IN),DIMENSION(:) :: VarIn
515    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
516   
517    REAL :: dummy(1)
518   
519
520    IF (is_mpi_root) THEN
521      CALL gather_mpi_rgen(VarIn,VarOut,1)
522    ELSE
523      CALL gather_mpi_rgen(VarIn,dummy,1)
524    ENDIF
525 
526  END SUBROUTINE gather_mpi_r
527
528!!!!!
529
530  SUBROUTINE gather_mpi_r1(VarIn, VarOut)
531    USE mod_inca_mpi_data, ONLY :  is_mpi_root
532    IMPLICIT NONE
533 
534    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
535    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
536   
537    REAL :: dummy(1)
538   
539
540    IF (is_mpi_root) THEN
541      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2))
542    ELSE
543      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2))
544    ENDIF
545 
546  END SUBROUTINE gather_mpi_r1
547
548!!!!!
549 
550  SUBROUTINE gather_mpi_r2(VarIn, VarOut)
551    USE mod_inca_mpi_data, ONLY :  is_mpi_root
552    IMPLICIT NONE
553 
554    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
555    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
556   
557    REAL :: dummy(1)
558   
559
560    IF (is_mpi_root) THEN
561      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
562    ELSE
563      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))     
564    ENDIF
565 
566  END SUBROUTINE gather_mpi_r2
567
568!!!!!
569
570  SUBROUTINE gather_mpi_r3(VarIn, VarOut)
571    USE mod_inca_mpi_data, ONLY :  is_mpi_root
572    IMPLICIT NONE
573 
574    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
575    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
576   
577    REAL :: dummy(1)
578   
579
580    IF (is_mpi_root) THEN
581      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
582    ELSE
583      CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
584    ENDIF
585 
586  END SUBROUTINE gather_mpi_r3
587
588!!!!! --> Les booleen
589
590  SUBROUTINE gather_mpi_l(VarIn, VarOut)
591    USE mod_inca_mpi_data, ONLY :  is_mpi_root
592    IMPLICIT NONE
593 
594    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
595    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
596   
597    LOGICAL :: dummy(1)
598   
599
600    IF (is_mpi_root) THEN
601      CALL gather_mpi_lgen(VarIn,VarOut,1)
602    ELSE
603      CALL gather_mpi_lgen(VarIn,dummy,1)     
604    ENDIF
605 
606  END SUBROUTINE gather_mpi_l
607
608!!!!!
609
610  SUBROUTINE gather_mpi_l1(VarIn, VarOut)
611    USE mod_inca_mpi_data, ONLY :  is_mpi_root
612    IMPLICIT NONE
613 
614    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
615    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
616   
617    LOGICAL :: dummy(1)
618   
619
620    IF (is_mpi_root) THEN
621      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2))
622    ELSE
623      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2))
624    ENDIF
625 
626  END SUBROUTINE gather_mpi_l1
627
628!!!!!
629 
630  SUBROUTINE gather_mpi_l2(VarIn, VarOut)
631    USE mod_inca_mpi_data, ONLY :  is_mpi_root
632    IMPLICIT NONE
633 
634    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
635    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
636   
637    LOGICAL :: dummy(1)
638   
639
640    IF (is_mpi_root) THEN
641      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
642    ELSE
643      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
644    ENDIF
645 
646  END SUBROUTINE gather_mpi_l2
647
648!!!!!
649
650  SUBROUTINE gather_mpi_l3(VarIn, VarOut)
651    USE mod_inca_mpi_data, ONLY :  is_mpi_root
652    IMPLICIT NONE
653 
654    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
655    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
656   
657    LOGICAL :: dummy(1)
658   
659
660    IF (is_mpi_root) THEN
661      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
662    ELSE
663      CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))     
664    ENDIF
665 
666  END SUBROUTINE gather_mpi_l3
667
668!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
669!! Definition des Scatter2D   --> 4D   !!
670!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
671
672  SUBROUTINE scatter2D_mpi_i(VarIn, VarOut)
673    USE mod_grid_inca
674    IMPLICIT NONE
675 
676    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
677    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
678
679    INTEGER,DIMENSION(plon_glo) :: Var_tmp   
680   
681    CALL grid2dTo1d_glo(VarIn,Var_tmp)
682    CALL scatter_mpi(Var_tmp,VarOut)
683
684  END SUBROUTINE scatter2D_mpi_i
685
686  SUBROUTINE scatter2D_mpi_i1(VarIn, VarOut)
687    USE mod_grid_inca
688    IMPLICIT NONE
689 
690    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
691    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
692   
693    CALL body(VarIn,VarOut,size(VarOut,2))
694 
695    CONTAINS
696      SUBROUTINE body(VarIn,VarOut,s1)
697        INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
698        INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
699        INTEGER,INTENT(IN) :: s1
700       
701        INTEGER,DIMENSION(plon_glo,s1) :: Var_tmp
702       
703        CALL grid2dTo1d_glo(VarIn,Var_tmp)
704        CALL scatter_mpi(Var_tmp,VarOut)
705      END SUBROUTINE body
706
707  END SUBROUTINE scatter2D_mpi_i1
708
709  SUBROUTINE scatter2D_mpi_i2(VarIn, VarOut)
710    USE mod_grid_inca
711    IMPLICIT NONE
712 
713    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
714    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
715   
716    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
717 
718    CONTAINS
719      SUBROUTINE body(VarIn,VarOut,s1,s2)
720        INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
721        INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
722        INTEGER,INTENT(IN) :: s1,s2
723       
724        INTEGER,DIMENSION(plon_glo,s1,s2) :: Var_tmp
725       
726        CALL grid2dTo1d_glo(VarIn,Var_tmp)
727        CALL scatter_mpi(Var_tmp,VarOut)
728      END SUBROUTINE body
729
730  END SUBROUTINE scatter2D_mpi_i2
731 
732  SUBROUTINE scatter2D_mpi_i3(VarIn, VarOut)
733    USE mod_grid_inca
734    IMPLICIT NONE
735 
736    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
737    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
738   
739    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
740 
741    CONTAINS
742      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
743        INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
744        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
745        INTEGER,INTENT(IN) :: s1,s2,s3
746       
747        INTEGER,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
748       
749        CALL grid2dTo1d_glo(VarIn,Var_tmp)
750        CALL scatter_mpi(Var_tmp,VarOut)
751      END SUBROUTINE body
752 
753 
754  END SUBROUTINE scatter2D_mpi_i3
755
756
757
758  SUBROUTINE scatter2D_mpi_r(VarIn, VarOut)
759    USE mod_grid_inca
760    IMPLICIT NONE
761 
762    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
763    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
764
765    REAL,DIMENSION(plon_glo) :: Var_tmp   
766   
767    CALL grid2dTo1d_glo(VarIn,Var_tmp)
768    CALL scatter_mpi(Var_tmp,VarOut)
769
770  END SUBROUTINE scatter2D_mpi_R
771
772
773  SUBROUTINE scatter2D_mpi_r1(VarIn, VarOut)
774    USE mod_grid_inca
775    IMPLICIT NONE
776    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
777    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
778
779    CALL body(VarIn,VarOut,size(VarOut,2))
780 
781    CONTAINS
782      SUBROUTINE body(VarIn,VarOut,s1)
783        REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
784        REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
785        INTEGER,INTENT(IN) :: s1
786       
787        REAL,DIMENSION(plon_glo,s1) :: Var_tmp
788       
789        CALL grid2dTo1d_glo(VarIn,Var_tmp)
790        CALL scatter_mpi(Var_tmp,VarOut)
791      END SUBROUTINE body
792
793  END SUBROUTINE scatter2D_mpi_r1
794
795
796  SUBROUTINE scatter2D_mpi_r2(VarIn, VarOut)
797    USE mod_grid_inca
798    IMPLICIT NONE
799 
800    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
801    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
802   
803    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
804 
805    CONTAINS
806      SUBROUTINE body(VarIn,VarOut,s1,s2)
807        REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
808        REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
809        INTEGER,INTENT(IN) :: s1,s2
810       
811        REAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
812       
813        CALL grid2dTo1d_glo(VarIn,Var_tmp)
814        CALL scatter_mpi(Var_tmp,VarOut)
815      END SUBROUTINE body
816
817  END SUBROUTINE scatter2D_mpi_r2
818 
819  SUBROUTINE scatter2D_mpi_r3(VarIn, VarOut)
820    USE mod_grid_inca
821    IMPLICIT NONE
822 
823    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
824    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
825   
826    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
827 
828    CONTAINS
829      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
830        REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
831        REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
832        INTEGER,INTENT(IN) :: s1,s2,s3
833       
834        REAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
835       
836        CALL grid2dTo1d_glo(VarIn,Var_tmp)
837        CALL scatter_mpi(Var_tmp,VarOut)
838      END SUBROUTINE body
839 
840  END SUBROUTINE scatter2D_mpi_r3
841 
842 
843  SUBROUTINE scatter2D_mpi_l(VarIn, VarOut)
844    USE mod_grid_inca
845    IMPLICIT NONE
846 
847    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
848    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
849
850    LOGICAL,DIMENSION(plon_glo) :: Var_tmp   
851   
852    CALL grid2dTo1d_glo(VarIn,Var_tmp)
853    CALL scatter_mpi(Var_tmp,VarOut)
854
855  END SUBROUTINE scatter2D_mpi_l
856
857
858  SUBROUTINE scatter2D_mpi_l1(VarIn, VarOut)
859    USE mod_grid_inca
860    IMPLICIT NONE
861 
862    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
863    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
864   
865    CALL body(VarIn,VarOut,size(VarOut,2))
866 
867    CONTAINS
868      SUBROUTINE body(VarIn,VarOut,s1)
869        LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
870        LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
871        INTEGER,INTENT(IN) :: s1
872       
873        LOGICAL,DIMENSION(plon_glo,s1) :: Var_tmp
874       
875        CALL grid2dTo1d_glo(VarIn,Var_tmp)
876        CALL scatter_mpi(Var_tmp,VarOut)
877      END SUBROUTINE body
878 
879  END SUBROUTINE scatter2D_mpi_l1
880
881
882  SUBROUTINE scatter2D_mpi_l2(VarIn, VarOut)
883    USE mod_grid_inca
884    IMPLICIT NONE
885 
886    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
887    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
888   
889    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
890 
891    CONTAINS
892      SUBROUTINE body(VarIn,VarOut,s1,s2)
893        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
894        LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
895        INTEGER,INTENT(IN) :: s1,s2
896       
897        LOGICAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
898       
899        CALL grid2dTo1d_glo(VarIn,Var_tmp)
900        CALL scatter_mpi(Var_tmp,VarOut)
901      END SUBROUTINE body
902
903  END SUBROUTINE scatter2D_mpi_l2
904 
905  SUBROUTINE scatter2D_mpi_l3(VarIn, VarOut)
906    USE mod_grid_inca
907    IMPLICIT NONE
908 
909    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
910    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
911   
912    CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
913 
914    CONTAINS
915      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
916        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
917        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
918        INTEGER,INTENT(IN) :: s1,s2,s3
919       
920        LOGICAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
921       
922        CALL grid2dTo1d_glo(VarIn,Var_tmp)
923        CALL scatter_mpi(Var_tmp,VarOut)
924      END SUBROUTINE body
925 
926  END SUBROUTINE scatter2D_mpi_l3
927 
928 
929!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
930!! Definition des Gather2D   --> 4D   !!
931!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
932
933  SUBROUTINE gather2D_mpi_i(VarIn, VarOut)
934    USE mod_grid_inca
935    IMPLICIT NONE
936 
937    INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
938    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
939   
940    INTEGER,DIMENSION(plon_glo) :: Var_tmp
941   
942    CALL gather_mpi(VarIn,Var_tmp)
943    CALL grid1dTo2d_glo(Var_tmp,VarOut)
944
945  END SUBROUTINE gather2D_mpi_i
946
947  SUBROUTINE gather2D_mpi_i1(VarIn, VarOut)
948    USE mod_grid_inca
949    IMPLICIT NONE
950 
951    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
952    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
953   
954    CALL body(VarIn,VarOut,size(VarOut,3))
955 
956    CONTAINS
957      SUBROUTINE body(VarIn,VarOut,s1)
958        INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
959        INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
960        INTEGER,INTENT(IN) :: s1
961       
962        INTEGER,DIMENSION(plon_glo,s1) :: Var_tmp
963       
964        CALL gather_mpi(VarIn,Var_tmp)
965        CALL grid1dTo2d_glo(Var_tmp,VarOut)
966      END SUBROUTINE body
967
968  END SUBROUTINE gather2D_mpi_i1
969
970  SUBROUTINE gather2D_mpi_i2(VarIn, VarOut)
971    USE mod_grid_inca
972    IMPLICIT NONE
973 
974    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
975    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
976   
977    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
978 
979    CONTAINS
980      SUBROUTINE body(VarIn,VarOut,s1,s2)
981        INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
982        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
983        INTEGER,INTENT(IN) :: s1,s2
984       
985        INTEGER,DIMENSION(plon_glo,s1,s2) :: Var_tmp
986       
987        CALL gather_mpi(VarIn,Var_tmp)
988        CALL grid1dTo2d_glo(Var_tmp,VarOut)
989      END SUBROUTINE body
990
991  END SUBROUTINE gather2D_mpi_i2
992 
993  SUBROUTINE gather2D_mpi_i3(VarIn, VarOut)
994    USE mod_grid_inca
995    IMPLICIT NONE
996 
997    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
998    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
999   
1000    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1001 
1002    CONTAINS
1003      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1004        INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1005        INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1006        INTEGER,INTENT(IN) :: s1,s2,s3
1007       
1008        INTEGER,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1009       
1010        CALL gather_mpi(VarIn,Var_tmp)
1011        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1012      END SUBROUTINE body
1013
1014  END SUBROUTINE gather2D_mpi_i3
1015
1016
1017
1018  SUBROUTINE gather2D_mpi_r(VarIn, VarOut)
1019    USE mod_grid_inca
1020    IMPLICIT NONE
1021 
1022    REAL,INTENT(IN),DIMENSION(:) :: VarIn
1023    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1024   
1025    REAL,DIMENSION(plon_glo) :: Var_tmp
1026   
1027    CALL gather_mpi(VarIn,Var_tmp)
1028    CALL grid1dTo2d_glo(Var_tmp,VarOut)
1029
1030  END SUBROUTINE gather2D_mpi_r
1031
1032  SUBROUTINE gather2D_mpi_r1(VarIn, VarOut)
1033    USE mod_grid_inca
1034    IMPLICIT NONE
1035 
1036    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1037    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1038   
1039    CALL body(VarIn,VarOut,size(VarOut,3))
1040 
1041    CONTAINS
1042      SUBROUTINE body(VarIn,VarOut,s1)
1043        REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1044        REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1045        INTEGER,INTENT(IN) :: s1
1046       
1047        REAL,DIMENSION(plon_glo,s1) :: Var_tmp
1048       
1049        CALL gather_mpi(VarIn,Var_tmp)
1050        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1051      END SUBROUTINE body
1052
1053  END SUBROUTINE gather2D_mpi_r1
1054
1055  SUBROUTINE gather2D_mpi_r2(VarIn, VarOut)
1056    USE mod_grid_inca
1057    IMPLICIT NONE
1058 
1059    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1060    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1061   
1062    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
1063 
1064    CONTAINS
1065      SUBROUTINE body(VarIn,VarOut,s1,s2)
1066        REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1067        REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1068        INTEGER,INTENT(IN) :: s1,s2
1069       
1070        REAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1071       
1072        CALL gather_mpi(VarIn,Var_tmp)
1073        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1074      END SUBROUTINE body
1075
1076  END SUBROUTINE gather2D_mpi_r2
1077 
1078  SUBROUTINE gather2D_mpi_r3(VarIn, VarOut)
1079    USE mod_grid_inca
1080    IMPLICIT NONE
1081 
1082    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1083    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1084   
1085    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1086 
1087    CONTAINS
1088      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1089        REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1090        REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1091        INTEGER,INTENT(IN) :: s1,s2,s3
1092       
1093        REAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1094       
1095        CALL gather_mpi(VarIn,Var_tmp)
1096        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1097      END SUBROUTINE body
1098
1099  END SUBROUTINE gather2D_mpi_r3
1100
1101 
1102 
1103  SUBROUTINE gather2D_mpi_l(VarIn, VarOut)
1104    USE mod_grid_inca
1105    IMPLICIT NONE
1106 
1107    LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
1108    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1109   
1110    LOGICAL,DIMENSION(plon_glo) :: Var_tmp
1111   
1112    CALL gather_mpi(VarIn,Var_tmp)
1113    CALL grid1dTo2d_glo(Var_tmp,VarOut)
1114
1115  END SUBROUTINE gather2D_mpi_l
1116
1117  SUBROUTINE gather2D_mpi_l1(VarIn, VarOut)
1118    USE mod_grid_inca
1119    IMPLICIT NONE
1120 
1121    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1122    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1123   
1124    CALL body(VarIn,VarOut,size(VarOut,3))
1125 
1126    CONTAINS
1127      SUBROUTINE body(VarIn,VarOut,s1)
1128        LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1129        LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1130        INTEGER,INTENT(IN) :: s1
1131       
1132        LOGICAL,DIMENSION(plon_glo,s1) :: Var_tmp
1133       
1134        CALL gather_mpi(VarIn,Var_tmp)
1135        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1136      END SUBROUTINE body
1137
1138  END SUBROUTINE gather2D_mpi_l1
1139
1140  SUBROUTINE gather2D_mpi_l2(VarIn, VarOut)
1141    USE mod_grid_inca
1142    IMPLICIT NONE
1143 
1144    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1145    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1146   
1147    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
1148 
1149    CONTAINS
1150      SUBROUTINE body(VarIn,VarOut,s1,s2)
1151        LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1152        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1153        INTEGER,INTENT(IN) :: s1,s2
1154       
1155        LOGICAL,DIMENSION(plon_glo,s1,s2) :: Var_tmp
1156       
1157        CALL gather_mpi(VarIn,Var_tmp)
1158        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1159      END SUBROUTINE body
1160
1161  END SUBROUTINE gather2D_mpi_l2
1162 
1163  SUBROUTINE gather2D_mpi_l3(VarIn, VarOut)
1164    USE mod_grid_inca
1165    IMPLICIT NONE
1166 
1167    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1168    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1169   
1170    CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
1171 
1172    CONTAINS
1173      SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
1174        LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1175        LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
1176        INTEGER,INTENT(IN) :: s1,s2,s3
1177       
1178        LOGICAL,DIMENSION(plon_glo,s1,s2,s3) :: Var_tmp
1179       
1180        CALL gather_mpi(VarIn,Var_tmp)
1181        CALL grid1dTo2d_glo(Var_tmp,VarOut)
1182      END SUBROUTINE body
1183
1184  END SUBROUTINE gather2D_mpi_l3
1185 
1186 
1187!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1188!! Definition des reduce_sum   --> 4D   !!
1189!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1190
1191  SUBROUTINE reduce_sum_mpi_i(VarIn, VarOut)
1192    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1193    IMPLICIT NONE
1194 
1195    INTEGER,INTENT(IN)  :: VarIn
1196    INTEGER,INTENT(OUT) :: VarOut
1197   
1198    INTEGER :: dummy
1199   
1200
1201    IF (is_mpi_root) THEN
1202      CALL reduce_sum_mpi_igen(VarIn,Varout,1)
1203    ELSE
1204      CALL reduce_sum_mpi_igen(VarIn,dummy,1)
1205    ENDIF
1206 
1207  END SUBROUTINE reduce_sum_mpi_i
1208
1209  SUBROUTINE reduce_sum_mpi_i1(VarIn, VarOut)
1210    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1211    IMPLICIT NONE
1212 
1213    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
1214    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
1215   
1216    INTEGER :: dummy(1)
1217   
1218
1219    IF (is_mpi_root) THEN
1220      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1221    ELSE
1222      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1223    ENDIF
1224 
1225  END SUBROUTINE reduce_sum_mpi_i1
1226
1227  SUBROUTINE reduce_sum_mpi_i2(VarIn, VarOut)
1228    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1229    IMPLICIT NONE
1230 
1231    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
1232    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
1233   
1234    INTEGER :: dummy(1,1)
1235   
1236
1237    IF (is_mpi_root) THEN
1238      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1239    ELSE
1240      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1241    ENDIF
1242 
1243  END SUBROUTINE reduce_sum_mpi_i2
1244
1245  SUBROUTINE reduce_sum_mpi_i3(VarIn, VarOut)
1246    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1247    IMPLICIT NONE
1248 
1249    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1250    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1251   
1252    INTEGER :: dummy(1,1,1)
1253   
1254
1255    IF (is_mpi_root) THEN
1256      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1257    ELSE
1258      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1259    ENDIF
1260 
1261  END SUBROUTINE reduce_sum_mpi_i3
1262
1263  SUBROUTINE reduce_sum_mpi_i4(VarIn, VarOut)
1264    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1265    IMPLICIT NONE
1266 
1267    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1268    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1269   
1270    INTEGER :: dummy(1,1,1,1)
1271   
1272
1273    IF (is_mpi_root) THEN
1274      CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
1275    ELSE
1276      CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
1277    ENDIF
1278 
1279  END SUBROUTINE reduce_sum_mpi_i4                 
1280 
1281 
1282  SUBROUTINE reduce_sum_mpi_r(VarIn, VarOut)
1283    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1284    IMPLICIT NONE
1285 
1286    REAL,INTENT(IN)  :: VarIn
1287    REAL,INTENT(OUT) :: VarOut
1288   
1289    REAL :: dummy
1290   
1291
1292    IF (is_mpi_root) THEN
1293      CALL reduce_sum_mpi_rgen(VarIn,Varout,1)
1294    ELSE
1295      CALL reduce_sum_mpi_rgen(VarIn,dummy,1)
1296    ENDIF
1297 
1298  END SUBROUTINE reduce_sum_mpi_r
1299
1300  SUBROUTINE reduce_sum_mpi_r1(VarIn, VarOut)
1301    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1302    IMPLICIT NONE
1303 
1304    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
1305    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
1306   
1307    REAL :: dummy(1)
1308   
1309
1310    IF (is_mpi_root) THEN
1311      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1312    ELSE
1313      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1314    ENDIF
1315 
1316  END SUBROUTINE reduce_sum_mpi_r1
1317
1318  SUBROUTINE reduce_sum_mpi_r2(VarIn, VarOut)
1319    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1320    IMPLICIT NONE
1321 
1322    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
1323    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
1324   
1325    REAL :: dummy(1,1)
1326   
1327
1328    IF (is_mpi_root) THEN
1329      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1330    ELSE
1331      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1332    ENDIF
1333 
1334  END SUBROUTINE reduce_sum_mpi_r2
1335
1336  SUBROUTINE reduce_sum_mpi_r3(VarIn, VarOut)
1337    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1338    IMPLICIT NONE
1339 
1340    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
1341    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
1342   
1343    REAL :: dummy(1,1,1)
1344   
1345
1346    IF (is_mpi_root) THEN
1347      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1348    ELSE
1349      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1350    ENDIF
1351 
1352  END SUBROUTINE reduce_sum_mpi_r3
1353
1354  SUBROUTINE reduce_sum_mpi_r4(VarIn, VarOut)
1355    USE mod_inca_mpi_data, ONLY :  is_mpi_root
1356    IMPLICIT NONE
1357 
1358    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
1359    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
1360   
1361    REAL :: dummy(1,1,1,1)
1362   
1363
1364    IF (is_mpi_root) THEN
1365      CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
1366    ELSE
1367      CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
1368    ENDIF
1369 
1370  END SUBROUTINE reduce_sum_mpi_r4 
1371 
1372
1373
1374!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1375!! SUBROUTINE grid1dTo2d  !! 
1376!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1377
1378
1379  SUBROUTINE grid1dTo2d_mpi_i(VarIn,VarOut) 
1380  IMPLICIT NONE 
1381    INTEGER,INTENT(IN),DIMENSION(:)     :: VarIn
1382    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1383   
1384    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,1)
1385 
1386  END SUBROUTINE grid1dTo2d_mpi_i
1387 
1388
1389  SUBROUTINE grid1dTo2d_mpi_i1(VarIn,VarOut) 
1390  IMPLICIT NONE 
1391    INTEGER,INTENT(IN),DIMENSION(:,:)     :: VarIn
1392    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1393   
1394    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2))
1395 
1396  END SUBROUTINE grid1dTo2d_mpi_i1
1397
1398  SUBROUTINE grid1dTo2d_mpi_i2(VarIn,VarOut) 
1399  IMPLICIT NONE 
1400    INTEGER,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1401    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1402   
1403    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1404 
1405  END SUBROUTINE grid1dTo2d_mpi_i2
1406 
1407  SUBROUTINE grid1dTo2d_mpi_i3(VarIn,VarOut) 
1408  IMPLICIT NONE 
1409    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1410    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1411   
1412    CALL grid1dTo2d_mpi_igen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1413 
1414  END SUBROUTINE grid1dTo2d_mpi_i3
1415
1416
1417  SUBROUTINE grid1dTo2d_mpi_r(VarIn,VarOut) 
1418  IMPLICIT NONE 
1419    REAL,INTENT(IN),DIMENSION(:)     :: VarIn
1420    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1421   
1422    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,1)
1423 
1424  END SUBROUTINE grid1dTo2d_mpi_r
1425 
1426
1427  SUBROUTINE grid1dTo2d_mpi_r1(VarIn,VarOut) 
1428  IMPLICIT NONE 
1429    REAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
1430    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1431   
1432    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2))
1433 
1434  END SUBROUTINE grid1dTo2d_mpi_r1
1435
1436  SUBROUTINE grid1dTo2d_mpi_r2(VarIn,VarOut) 
1437  IMPLICIT NONE 
1438    REAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1439    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1440   
1441    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1442 
1443  END SUBROUTINE grid1dTo2d_mpi_r2
1444 
1445  SUBROUTINE grid1dTo2d_mpi_r3(VarIn,VarOut) 
1446  IMPLICIT NONE 
1447    REAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1448    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1449   
1450    CALL grid1dTo2d_mpi_rgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1451 
1452  END SUBROUTINE grid1dTo2d_mpi_r3
1453 
1454 
1455 
1456  SUBROUTINE grid1dTo2d_mpi_l(VarIn,VarOut) 
1457  IMPLICIT NONE 
1458    LOGICAL,INTENT(IN),DIMENSION(:)     :: VarIn
1459    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1460   
1461    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,1)
1462 
1463  END SUBROUTINE grid1dTo2d_mpi_l
1464 
1465
1466  SUBROUTINE grid1dTo2d_mpi_l1(VarIn,VarOut) 
1467  IMPLICIT NONE 
1468    LOGICAL,INTENT(IN),DIMENSION(:,:)     :: VarIn
1469    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1470   
1471    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2))
1472 
1473  END SUBROUTINE grid1dTo2d_mpi_l1
1474
1475  SUBROUTINE grid1dTo2d_mpi_l2(VarIn,VarOut) 
1476  IMPLICIT NONE 
1477    LOGICAL,INTENT(IN),DIMENSION(:,:,:)     :: VarIn
1478    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1479   
1480    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3))
1481 
1482  END SUBROUTINE grid1dTo2d_mpi_l2
1483 
1484  SUBROUTINE grid1dTo2d_mpi_l3(VarIn,VarOut) 
1485  IMPLICIT NONE 
1486    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:)     :: VarIn
1487    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:)  :: VarOut
1488   
1489    CALL grid1dTo2d_mpi_lgen(VarIn,VarOut,size(VarIn,2)*size(VarIn,3)*size(VarIn,4))
1490 
1491  END SUBROUTINE grid1dTo2d_mpi_l3
1492
1493
1494  SUBROUTINE grid2dTo1d_mpi_i(VarIn,VarOut) 
1495  IMPLICIT NONE 
1496    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
1497    INTEGER,INTENT(OUT),DIMENSION(:)  :: VarOut
1498   
1499    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,1)
1500 
1501  END SUBROUTINE grid2dTo1d_mpi_i
1502 
1503
1504  SUBROUTINE grid2dTo1d_mpi_i1(VarIn,VarOut) 
1505  IMPLICIT NONE 
1506    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1507    INTEGER,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1508   
1509    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3))
1510 
1511  END SUBROUTINE grid2dTo1d_mpi_i1
1512
1513  SUBROUTINE grid2dTo1d_mpi_i2(VarIn,VarOut) 
1514  IMPLICIT NONE 
1515    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1516    INTEGER,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1517   
1518    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1519 
1520  END SUBROUTINE grid2dTo1d_mpi_i2
1521 
1522  SUBROUTINE grid2dTo1d_mpi_i3(VarIn,VarOut) 
1523  IMPLICIT NONE 
1524    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1525    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1526   
1527    CALL grid2dTo1d_mpi_igen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1528 
1529  END SUBROUTINE grid2dTo1d_mpi_i3
1530 
1531
1532
1533
1534  SUBROUTINE grid2dTo1d_mpi_r(VarIn,VarOut) 
1535  IMPLICIT NONE 
1536    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1537    REAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1538   
1539    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,1)
1540 
1541  END SUBROUTINE grid2dTo1d_mpi_r
1542 
1543
1544  SUBROUTINE grid2dTo1d_mpi_r1(VarIn,VarOut) 
1545  IMPLICIT NONE 
1546    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1547    REAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1548   
1549    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3))
1550 
1551  END SUBROUTINE grid2dTo1d_mpi_r1
1552
1553  SUBROUTINE grid2dTo1d_mpi_r2(VarIn,VarOut) 
1554  IMPLICIT NONE 
1555    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1556    REAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1557   
1558    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1559 
1560  END SUBROUTINE grid2dTo1d_mpi_r2
1561 
1562  SUBROUTINE grid2dTo1d_mpi_r3(VarIn,VarOut) 
1563  IMPLICIT NONE 
1564    REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1565    REAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1566   
1567    CALL grid2dTo1d_mpi_rgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1568 
1569  END SUBROUTINE grid2dTo1d_mpi_r3
1570
1571
1572
1573  SUBROUTINE grid2dTo1d_mpi_l(VarIn,VarOut) 
1574  IMPLICIT NONE 
1575    LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
1576    LOGICAL,INTENT(OUT),DIMENSION(:)  :: VarOut
1577   
1578    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,1)
1579 
1580  END SUBROUTINE grid2dTo1d_mpi_l
1581 
1582
1583  SUBROUTINE grid2dTo1d_mpi_l1(VarIn,VarOut) 
1584  IMPLICIT NONE 
1585    LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
1586    LOGICAL,INTENT(OUT),DIMENSION(:,:)  :: VarOut
1587   
1588    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3))
1589 
1590  END SUBROUTINE grid2dTo1d_mpi_l1
1591
1592
1593
1594  SUBROUTINE grid2dTo1d_mpi_l2(VarIn,VarOut) 
1595  IMPLICIT NONE 
1596    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
1597    LOGICAL,INTENT(OUT),DIMENSION(:,:,:)  :: VarOut
1598   
1599    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4))
1600 
1601  END SUBROUTINE grid2dTo1d_mpi_l2
1602
1603 
1604  SUBROUTINE grid2dTo1d_mpi_l3(VarIn,VarOut) 
1605  IMPLICIT NONE 
1606    LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
1607    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:)  :: VarOut
1608   
1609    CALL grid2dTo1d_mpi_lgen(VarIn,VarOut,size(VarIn,3)*size(VarIn,4)*size(VarIn,5))
1610 
1611  END SUBROUTINE grid2dTo1d_mpi_l3
1612
1613
1614!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1615!! SUBROUTINE grid2dTo1d  !! 
1616!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1617
1618
1619
1620END MODULE mod_inca_mpi_transfert
1621
1622
1623!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1624!! DEFINITION DES FONCTIONS DE TRANSFERT GENERIQUES !
1625!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1626
1627  SUBROUTINE bcast_mpi_cgen(var,nb)
1628    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1629    IMPLICIT NONE
1630   
1631    CHARACTER,DIMENSION(nb),INTENT(INOUT) :: Var
1632    INTEGER,INTENT(IN) :: nb
1633   
1634    INCLUDE 'mpif.h'
1635    INTEGER :: ierr
1636
1637    IF (.not.is_ok_mpi) RETURN
1638   
1639    CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_root_x,MPI_COMM_INCA,ierr)
1640       
1641  END SUBROUTINE bcast_mpi_cgen
1642
1643
1644     
1645  SUBROUTINE bcast_mpi_igen(var,nb)
1646    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1647    IMPLICIT NONE
1648   
1649    INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var
1650    INTEGER,INTENT(IN) :: nb
1651   
1652    INCLUDE 'mpif.h'
1653    INTEGER :: ierr
1654
1655    IF (.not.is_ok_mpi) RETURN
1656
1657    CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_root_x,MPI_COMM_INCA,ierr)
1658       
1659  END SUBROUTINE bcast_mpi_igen
1660
1661
1662
1663 
1664  SUBROUTINE bcast_mpi_rgen(var,nb)
1665    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1666    IMPLICIT NONE
1667   
1668    REAL,DIMENSION(nb),INTENT(INOUT) :: Var
1669    INTEGER,INTENT(IN) :: nb
1670   
1671    INCLUDE 'mpif.h'
1672    INTEGER :: ierr
1673
1674    IF (.not.is_ok_mpi) RETURN
1675
1676    CALL MPI_BCAST(Var,nb,MPI_REAL_INCA,mpi_root_x,MPI_COMM_INCA,ierr)
1677   
1678  END SUBROUTINE bcast_mpi_rgen
1679 
1680
1681
1682
1683  SUBROUTINE bcast_mpi_lgen(var,nb)
1684    USE mod_inca_mpi_data ,  mpi_root_x=>mpi_root
1685    IMPLICIT NONE
1686   
1687    LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var
1688    INTEGER,INTENT(IN) :: nb
1689   
1690    INCLUDE 'mpif.h'
1691    INTEGER :: ierr
1692
1693    IF (.not.is_ok_mpi) RETURN
1694
1695    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_root_x,MPI_COMM_INCA,ierr)
1696
1697  END SUBROUTINE bcast_mpi_lgen
1698
1699 
1700
1701  SUBROUTINE scatter_mpi_igen(VarIn, VarOut, dimsize)
1702    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1703    USE mod_grid_inca
1704    IMPLICIT NONE
1705 
1706    INTEGER,INTENT(IN) :: dimsize
1707    INTEGER,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
1708    INTEGER,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
1709 
1710    INCLUDE 'mpif.h'
1711    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1712    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1713    INTEGER,DIMENSION(dimsize*plon_glo) :: VarTmp
1714    INTEGER :: nb,i,index,rank
1715    INTEGER :: ierr
1716
1717
1718    IF (.not.is_ok_mpi) THEN
1719      VarOut(:,:)=VarIn(:,:)
1720      RETURN
1721    ENDIF
1722
1723   
1724    IF (is_mpi_root) THEN
1725      Index=1
1726      DO rank=0,mpi_size-1
1727        nb=plon_mpi_para_nb(rank)
1728        displs(rank)=Index-1
1729        counts(rank)=nb*dimsize
1730        DO i=1,dimsize
1731          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
1732          Index=Index+nb
1733        ENDDO
1734      ENDDO
1735    ENDIF
1736     
1737    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,plon_mpi*dimsize,   &
1738                      MPI_INTEGER,mpi_root_x, MPI_COMM_INCA,ierr)
1739
1740  END SUBROUTINE scatter_mpi_igen
1741
1742  SUBROUTINE scatter_mpi_rgen(VarIn, VarOut, dimsize)
1743    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1744    USE mod_grid_inca
1745    IMPLICIT NONE
1746 
1747    INTEGER,INTENT(IN) :: dimsize
1748    REAL,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
1749    REAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
1750 
1751    INCLUDE 'mpif.h'
1752
1753    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1754    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1755    REAL,DIMENSION(dimsize*plon_glo) :: VarTmp
1756    INTEGER :: nb,i,index,rank
1757    INTEGER :: ierr
1758
1759    IF (.not.is_ok_mpi) THEN
1760      VarOut(:,:)=VarIn(:,:)
1761      RETURN
1762    ENDIF
1763   
1764    IF (is_mpi_root) THEN
1765      Index=1
1766      DO rank=0,mpi_size-1
1767        nb=plon_mpi_para_nb(rank)
1768        displs(rank)=Index-1
1769        counts(rank)=nb*dimsize
1770        DO i=1,dimsize
1771          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
1772          Index=Index+nb
1773        ENDDO
1774      ENDDO
1775    ENDIF
1776     
1777    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_INCA,VarOut,plon_mpi*dimsize,   &
1778                      MPI_REAL_INCA,mpi_root_x, MPI_COMM_INCA,ierr)
1779
1780
1781  END SUBROUTINE scatter_mpi_rgen
1782
1783 
1784  SUBROUTINE scatter_mpi_lgen(VarIn, VarOut, dimsize)
1785    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1786    USE mod_grid_inca
1787    IMPLICIT NONE
1788 
1789    INTEGER,INTENT(IN) :: dimsize
1790    LOGICAL,INTENT(IN),DIMENSION(plon_glo,dimsize) :: VarIn
1791    LOGICAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize) :: VarOut
1792 
1793    INCLUDE 'mpif.h'
1794
1795    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1796    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1797    LOGICAL,DIMENSION(dimsize*plon_glo) :: VarTmp
1798    INTEGER :: nb,i,index,rank
1799    INTEGER :: ierr
1800
1801    IF (.not.is_ok_mpi) THEN
1802      VarOut(:,:)=VarIn(:,:)
1803      RETURN
1804    ENDIF
1805   
1806    IF (is_mpi_root) THEN
1807      Index=1
1808      DO rank=0,mpi_size-1
1809        nb=plon_mpi_para_nb(rank)
1810        displs(rank)=Index-1
1811        counts(rank)=nb*dimsize
1812        DO i=1,dimsize
1813          VarTmp(Index:Index+nb-1)=VarIn(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)
1814          Index=Index+nb
1815        ENDDO
1816      ENDDO
1817    ENDIF
1818     
1819    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,plon_mpi*dimsize,   &
1820                      MPI_LOGICAL,mpi_root_x, MPI_COMM_INCA,ierr)
1821
1822  END SUBROUTINE scatter_mpi_lgen 
1823
1824
1825
1826
1827  SUBROUTINE gather_mpi_igen(VarIn, VarOut, dimsize)
1828    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1829    USE mod_grid_inca
1830    IMPLICIT NONE
1831 
1832    INCLUDE 'mpif.h'
1833   
1834    INTEGER,INTENT(IN) :: dimsize
1835    INTEGER,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
1836    INTEGER,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
1837 
1838    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1839    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1840    INTEGER,DIMENSION(dimsize*plon_glo) :: VarTmp
1841    INTEGER :: nb,i,index,rank
1842    INTEGER :: ierr
1843
1844    IF (.not.is_ok_mpi) THEN
1845      VarOut(:,:)=VarIn(:,:)
1846      RETURN
1847    ENDIF
1848
1849    IF (is_mpi_root) THEN
1850      Index=1
1851      DO rank=0,mpi_size-1
1852        nb=plon_mpi_para_nb(rank)
1853        displs(rank)=Index-1
1854        counts(rank)=nb*dimsize
1855        Index=Index+nb*dimsize
1856      ENDDO
1857     
1858    ENDIF
1859   
1860    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
1861                     MPI_INTEGER,mpi_root_x, MPI_COMM_INCA,ierr)
1862
1863                         
1864    IF (is_mpi_root) THEN
1865      Index=1
1866      DO rank=0,mpi_size-1
1867        nb=plon_mpi_para_nb(rank)
1868        DO i=1,dimsize
1869          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
1870          Index=Index+nb
1871        ENDDO
1872      ENDDO
1873    ENDIF
1874
1875  END SUBROUTINE gather_mpi_igen 
1876
1877  SUBROUTINE gather_mpi_rgen(VarIn, VarOut, dimsize)
1878    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1879    USE mod_grid_inca
1880    IMPLICIT NONE
1881 
1882    INCLUDE 'mpif.h'
1883   
1884    INTEGER,INTENT(IN) :: dimsize
1885    REAL,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
1886    REAL,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
1887 
1888    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1889    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1890    REAL,DIMENSION(dimsize*plon_glo) :: VarTmp
1891    INTEGER :: nb,i,index,rank
1892    INTEGER :: ierr
1893
1894    IF (is_mpi_root) THEN
1895      Index=1
1896      DO rank=0,mpi_size-1
1897        nb=plon_mpi_para_nb(rank)
1898        displs(rank)=Index-1
1899        counts(rank)=nb*dimsize
1900        Index=Index+nb*dimsize
1901      ENDDO
1902    ENDIF
1903   
1904    IF (.not.is_ok_mpi) THEN
1905      VarOut(:,:)=VarIn(:,:)
1906      RETURN
1907    ENDIF
1908
1909    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_REAL_INCA,VarTmp,counts,displs,   &
1910                      MPI_REAL_INCA,mpi_root_x, MPI_COMM_INCA,ierr)
1911                         
1912    IF (is_mpi_root) THEN
1913      Index=1
1914      DO rank=0,mpi_size-1
1915        nb=plon_mpi_para_nb(rank)
1916        DO i=1,dimsize
1917          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
1918          Index=Index+nb
1919        ENDDO
1920      ENDDO
1921    ENDIF
1922
1923  END SUBROUTINE gather_mpi_rgen 
1924
1925  SUBROUTINE gather_mpi_lgen(VarIn, VarOut, dimsize)
1926    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1927    USE mod_grid_inca
1928    IMPLICIT NONE
1929 
1930    INTEGER,INTENT(IN) :: dimsize
1931    LOGICAL,INTENT(IN),DIMENSION(plon_mpi,dimsize) :: VarIn
1932    LOGICAL,INTENT(OUT),DIMENSION(plon_glo,dimsize) :: VarOut
1933 
1934    INCLUDE 'mpif.h'
1935
1936    INTEGER,DIMENSION(0:mpi_size-1) :: displs
1937    INTEGER,DIMENSION(0:mpi_size-1) :: counts
1938    LOGICAL,DIMENSION(dimsize*plon_glo) :: VarTmp
1939    INTEGER :: nb,i,index,rank
1940    INTEGER :: ierr
1941   
1942    IF (.not.is_ok_mpi) THEN
1943      VarOut(:,:)=VarIn(:,:)
1944      RETURN
1945    ENDIF
1946
1947    IF (is_mpi_root) THEN
1948      Index=1
1949      DO rank=0,mpi_size-1
1950        nb=plon_mpi_para_nb(rank)
1951        displs(rank)=Index-1
1952        counts(rank)=nb*dimsize
1953        Index=Index+nb*dimsize
1954      ENDDO
1955    ENDIF
1956   
1957
1958    CALL MPI_GATHERV(VarIn,plon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
1959                      MPI_LOGICAL,mpi_root_x, MPI_COMM_INCA,ierr)
1960                         
1961    IF (is_mpi_root) THEN
1962      Index=1
1963      DO rank=0,mpi_size-1
1964        nb=plon_mpi_para_nb(rank)
1965        DO i=1,dimsize
1966          VarOut(plon_mpi_para_begin(rank):plon_mpi_para_end(rank),i)=VarTmp(Index:Index+nb-1)
1967          Index=Index+nb
1968        ENDDO
1969      ENDDO
1970    ENDIF
1971
1972  END SUBROUTINE gather_mpi_lgen
1973 
1974
1975
1976  SUBROUTINE reduce_sum_mpi_igen(VarIn,VarOut,nb)
1977    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
1978    USE mod_grid_inca
1979    IMPLICIT NONE
1980   
1981    INCLUDE 'mpif.h'
1982   
1983    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
1984    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
1985    INTEGER,INTENT(IN) :: nb
1986    INTEGER :: ierr
1987   
1988    IF (.not.is_ok_mpi) THEN
1989      VarOut(:)=VarIn(:)
1990      RETURN
1991    ENDIF
1992
1993
1994    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_SUM,mpi_root_x,MPI_COMM_INCA,ierr)
1995           
1996  END SUBROUTINE reduce_sum_mpi_igen
1997 
1998  SUBROUTINE reduce_sum_mpi_rgen(VarIn,VarOut,nb)
1999    USE mod_inca_mpi_data , mpi_root_x=>mpi_root
2000    USE mod_grid_inca
2001
2002    IMPLICIT NONE
2003
2004    INCLUDE 'mpif.h'
2005   
2006    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
2007    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
2008    INTEGER,INTENT(IN) :: nb
2009    INTEGER :: ierr
2010 
2011    IF (.not.is_ok_mpi) THEN
2012      VarOut(:)=VarIn(:)
2013      RETURN
2014    ENDIF
2015   
2016    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_INCA,MPI_SUM,mpi_root_x,MPI_COMM_INCA,ierr)
2017       
2018  END SUBROUTINE reduce_sum_mpi_rgen
2019
2020
2021
2022  SUBROUTINE grid1dTo2d_mpi_igen(VarIn,VarOut,dimsize)
2023    USE mod_inca_mpi_data
2024    USE mod_grid_inca
2025    IMPLICIT NONE
2026   
2027    INTEGER,INTENT(IN) :: dimsize
2028    INTEGER,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2029    INTEGER,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2030    INTEGER :: i,ij,Offset
2031
2032   
2033    VarOut(1:nbp_lon,:)=0
2034    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=0
2035   
2036    offset=ii_begin
2037    IF (is_north_pole) Offset=nbp_lon
2038   
2039   
2040    DO i=1,dimsize
2041      DO ij=1,plon_mpi
2042        VarOut(ij+offset-1,i)=VarIn(ij,i)
2043      ENDDO
2044    ENDDO
2045   
2046   
2047    IF (is_north_pole) THEN
2048      DO i=1,dimsize
2049        DO ij=1,nbp_lon
2050         VarOut(ij,i)=VarIn(1,i)
2051        ENDDO
2052      ENDDO
2053    ENDIF
2054   
2055    IF (is_south_pole) THEN
2056      DO i=1,dimsize
2057        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2058         VarOut(ij,i)=VarIn(plon_mpi,i)
2059        ENDDO
2060      ENDDO
2061    ENDIF
2062
2063  END SUBROUTINE grid1dTo2d_mpi_igen   
2064
2065
2066  SUBROUTINE grid1dTo2d_mpi_rgen(VarIn,VarOut,dimsize)
2067    USE mod_inca_mpi_data
2068    USE mod_grid_inca
2069    IMPLICIT NONE
2070   
2071    INTEGER,INTENT(IN) :: dimsize
2072    REAL,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2073    REAL,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2074    INTEGER :: i,ij,Offset
2075
2076   
2077    VarOut(1:nbp_lon,:)=0
2078    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=0
2079   
2080    offset=ii_begin
2081    IF (is_north_pole) Offset=nbp_lon
2082   
2083   
2084    DO i=1,dimsize
2085      DO ij=1,plon_mpi
2086        VarOut(ij+offset-1,i)=VarIn(ij,i)
2087      ENDDO
2088    ENDDO
2089   
2090   
2091    IF (is_north_pole) THEN
2092      DO i=1,dimsize
2093        DO ij=1,nbp_lon
2094         VarOut(ij,i)=VarIn(1,i)
2095        ENDDO
2096      ENDDO
2097    ENDIF
2098   
2099    IF (is_south_pole) THEN
2100      DO i=1,dimsize
2101        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2102         VarOut(ij,i)=VarIn(plon_mpi,i)
2103        ENDDO
2104      ENDDO
2105    ENDIF
2106
2107   END SUBROUTINE grid1dTo2d_mpi_rgen   
2108
2109
2110
2111  SUBROUTINE grid1dTo2d_mpi_lgen(VarIn,VarOut,dimsize)
2112    USE mod_inca_mpi_data
2113    USE mod_grid_inca
2114    IMPLICIT NONE
2115   
2116    INTEGER,INTENT(IN) :: dimsize
2117    LOGICAL,INTENT(IN) ,DIMENSION(plon_mpi,dimsize)       :: VarIn
2118    LOGICAL,INTENT(OUT),DIMENSION(nbp_lon*jj_nb,dimsize)  :: VarOut
2119    INTEGER :: i,ij,Offset
2120
2121   
2122    VarOut(1:nbp_lon,:)=.FALSE.
2123    VarOut(nbp_lon*(jj_nb-1)+1:nbp_lon*jj_nb,:)=.FALSE.
2124   
2125    offset=ii_begin
2126    IF (is_north_pole) Offset=nbp_lon
2127   
2128   
2129    DO i=1,dimsize
2130      DO ij=1,plon_mpi
2131        VarOut(ij+offset-1,i)=VarIn(ij,i)
2132      ENDDO
2133    ENDDO
2134   
2135   
2136    IF (is_north_pole) THEN
2137      DO i=1,dimsize
2138        DO ij=1,nbp_lon
2139         VarOut(ij,i)=VarIn(1,i)
2140        ENDDO
2141      ENDDO
2142    ENDIF
2143   
2144    IF (is_south_pole) THEN
2145      DO i=1,dimsize
2146        DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
2147         VarOut(ij,i)=VarIn(plon_mpi,i)
2148        ENDDO
2149      ENDDO
2150    ENDIF
2151
2152   END SUBROUTINE grid1dTo2d_mpi_lgen   
2153
2154 
2155
2156
2157  SUBROUTINE grid2dTo1d_mpi_igen(VarIn,VarOut,dimsize)
2158    USE mod_inca_mpi_data
2159    USE mod_grid_inca
2160    IMPLICIT NONE
2161   
2162    INTEGER,INTENT(IN) :: dimsize
2163    INTEGER,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2164    INTEGER,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2165    INTEGER :: i,ij,offset
2166
2167    offset=ii_begin
2168    IF (is_north_pole) offset=nbp_lon
2169
2170    DO i=1,dimsize
2171      DO ij=1,plon_mpi
2172        VarOut(ij,i)=VarIn(ij+offset-1,i)
2173      ENDDO
2174    ENDDO
2175
2176    IF (is_north_pole) THEN
2177      DO i=1,dimsize
2178        VarOut(1,i)=VarIn(1,i)
2179      ENDDO
2180    ENDIF
2181   
2182   
2183  END SUBROUTINE grid2dTo1d_mpi_igen   
2184
2185
2186
2187  SUBROUTINE grid2dTo1d_mpi_rgen(VarIn,VarOut,dimsize)
2188    USE mod_inca_mpi_data
2189    USE mod_grid_inca
2190    IMPLICIT NONE
2191   
2192    INTEGER,INTENT(IN) :: dimsize
2193    REAL,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2194    REAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2195    INTEGER :: i,ij,offset
2196
2197    offset=ii_begin
2198    IF (is_north_pole) offset=nbp_lon
2199
2200    DO i=1,dimsize
2201      DO ij=1,plon_mpi
2202        VarOut(ij,i)=VarIn(ij+offset-1,i)
2203      ENDDO
2204    ENDDO
2205
2206    IF (is_north_pole) THEN
2207      DO i=1,dimsize
2208         VarOut(1,i)=VarIn(1,i)
2209      ENDDO
2210    ENDIF
2211   
2212   
2213  END SUBROUTINE grid2dTo1d_mpi_rgen   
2214 
2215
2216  SUBROUTINE grid2dTo1d_mpi_lgen(VarIn,VarOut,dimsize)
2217    USE mod_inca_mpi_data
2218    USE mod_grid_inca
2219    IMPLICIT NONE
2220   
2221    INTEGER,INTENT(IN) :: dimsize
2222    LOGICAL,INTENT(IN) ,DIMENSION(nbp_lon*jj_nb,dimsize) :: VarIn
2223    LOGICAL,INTENT(OUT),DIMENSION(plon_mpi,dimsize)      :: VarOut
2224    INTEGER :: i,ij,offset
2225
2226    offset=ii_begin
2227    IF (is_north_pole) offset=nbp_lon
2228
2229    DO i=1,dimsize
2230      DO ij=1,plon_mpi
2231        VarOut(ij,i)=VarIn(ij+offset-1,i)
2232      ENDDO
2233    ENDDO
2234
2235    IF (is_north_pole) THEN
2236      DO i=1,dimsize
2237        VarOut(1,i)=VarIn(1,i)
2238      ENDDO
2239    ENDIF
2240   
2241   
2242  END SUBROUTINE grid2dTo1d_mpi_lgen   
2243
2244
2245!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2246!  DEFINITION DES SUBROUTINES GENERIQUES   !
2247!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Note: See TracBrowser for help on using the repository browser.