Ignore:
Timestamp:
Oct 6, 2008, 11:11:53 AM (16 years ago)
Author:
Laurent Fairhead
Message:
  • Modifs sur le parallelisme: masquage dans la physique
  • Inclusion strato
  • mise en coherence etat0
  • le mode offline fonctionne maintenant en parallele,
  • les fichiers de la dynamiques sont correctement sortis et peuvent etre reconstruit avec rebuild
  • la version parallele de la dynamique peut s'executer sans MPI (sur 1 proc)
  • L'OPENMP fonctionne maintenant sans la parallelisation MPI.

YM
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/mod_phys_lmdz_mpi_transfert.F90

    r775 r1001  
    6666    CHARACTER(LEN=*),INTENT(INOUT) :: Var1
    6767   
    68 #ifndef CPP_PARA
    69     RETURN
    70 #endif
    71 
    7268    CALL bcast_mpi_cgen(Var1,len(Var1))
     69
    7370  END SUBROUTINE bcast_mpi_c
    7471
    7572!! -- Les entiers -- !!
    7673 
    77   SUBROUTINE bcast_mpi_i(var1)
     74  SUBROUTINE bcast_mpi_i(var)
     75  USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root
    7876  IMPLICIT NONE
    79     INTEGER,INTENT(INOUT) :: Var1
    80    
    81 #ifndef CPP_PARA
    82     RETURN
    83 #endif
    84     CALL bcast_mpi_igen(Var1,1)
     77    INTEGER,INTENT(INOUT) :: Var
     78   
     79    INTEGER               :: var_tmp(1)
     80   
     81    IF (is_mpi_root) var_tmp(1)=var
     82    CALL bcast_mpi_igen(Var_tmp,1)
     83    var=var_tmp(1)
     84   
    8585  END SUBROUTINE bcast_mpi_i
    8686
     
    8888  IMPLICIT NONE
    8989    INTEGER,INTENT(INOUT) :: Var(:)
    90    
    91 #ifndef CPP_PARA
    92     RETURN
    93 #endif
     90
    9491    CALL bcast_mpi_igen(Var,size(Var))
     92   
    9593  END SUBROUTINE bcast_mpi_i1
    9694
     
    9997    INTEGER,INTENT(INOUT) :: Var(:,:)
    10098   
    101 #ifndef CPP_PARA
    102     RETURN
    103 #endif
    10499    CALL bcast_mpi_igen(Var,size(Var))
     100 
    105101  END SUBROUTINE bcast_mpi_i2
    106102
     
    109105    INTEGER,INTENT(INOUT) :: Var(:,:,:)
    110106   
    111 #ifndef CPP_PARA
    112     RETURN
    113 #endif
    114107    CALL bcast_mpi_igen(Var,size(Var))
     108
    115109  END SUBROUTINE bcast_mpi_i3
    116110
     
    119113    INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
    120114   
    121 #ifndef CPP_PARA
    122     RETURN
    123 #endif
    124115    CALL bcast_mpi_igen(Var,size(Var))
     116
    125117  END SUBROUTINE bcast_mpi_i4
    126118
     
    129121
    130122  SUBROUTINE bcast_mpi_r(var)
     123  USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root
    131124  IMPLICIT NONE
    132125    REAL,INTENT(INOUT) :: Var
    133    
    134 #ifndef CPP_PARA
    135     RETURN
    136 #endif
    137     CALL bcast_mpi_rgen(Var,1)
     126    REAL               :: var_tmp(1)
     127   
     128    IF (is_mpi_root) var_tmp(1)=var
     129    CALL bcast_mpi_rgen(Var_tmp,1)
     130    var=var_tmp(1)   
     131
    138132  END SUBROUTINE bcast_mpi_r
    139133
     
    142136    REAL,INTENT(INOUT) :: Var(:)
    143137   
    144 #ifndef CPP_PARA
    145     RETURN
    146 #endif
    147138    CALL bcast_mpi_rgen(Var,size(Var))
     139
    148140  END SUBROUTINE bcast_mpi_r1
    149141
     
    152144    REAL,INTENT(INOUT) :: Var(:,:)
    153145   
    154 #ifndef CPP_PARA
    155     RETURN
    156 #endif
    157146    CALL bcast_mpi_rgen(Var,size(Var))
     147
    158148  END SUBROUTINE bcast_mpi_r2
    159149
     
    162152    REAL,INTENT(INOUT) :: Var(:,:,:)
    163153   
    164 #ifndef CPP_PARA
    165     RETURN
    166 #endif
    167154    CALL bcast_mpi_rgen(Var,size(Var))
     155
    168156  END SUBROUTINE bcast_mpi_r3
    169157
     
    172160    REAL,INTENT(INOUT) :: Var(:,:,:,:)
    173161   
    174 #ifndef CPP_PARA
    175     RETURN
    176 #endif
    177162    CALL bcast_mpi_rgen(Var,size(Var))
     163
    178164  END SUBROUTINE bcast_mpi_r4
    179165 
     
    181167
    182168  SUBROUTINE bcast_mpi_l(var)
     169  USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root
    183170  IMPLICIT NONE
    184171    LOGICAL,INTENT(INOUT) :: Var
    185    
    186 #ifndef CPP_PARA
    187     RETURN
    188 #endif
    189     CALL bcast_mpi_lgen(Var,1)
     172    LOGICAL               :: var_tmp(1)
     173   
     174    IF (is_mpi_root) var_tmp(1)=var
     175    CALL bcast_mpi_lgen(Var_tmp,1)
     176    var=var_tmp(1)   
     177
    190178  END SUBROUTINE bcast_mpi_l
    191179
     
    194182    LOGICAL,INTENT(INOUT) :: Var(:)
    195183   
    196 #ifndef CPP_PARA
    197     RETURN
    198 #endif
    199184    CALL bcast_mpi_lgen(Var,size(Var))
     185
    200186  END SUBROUTINE bcast_mpi_l1
    201187
     
    204190    LOGICAL,INTENT(INOUT) :: Var(:,:)
    205191   
    206 #ifndef CPP_PARA
    207     RETURN
    208 #endif
    209192    CALL bcast_mpi_lgen(Var,size(Var))
     193
    210194  END SUBROUTINE bcast_mpi_l2
    211195
     
    214198    LOGICAL,INTENT(INOUT) :: Var(:,:,:)
    215199   
    216 #ifndef CPP_PARA
    217     RETURN
    218 #endif
    219200    CALL bcast_mpi_lgen(Var,size(Var))
     201
    220202  END SUBROUTINE bcast_mpi_l3
    221203
     
    224206    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
    225207   
    226 #ifndef CPP_PARA
    227     RETURN
    228 #endif
    229208    CALL bcast_mpi_lgen(Var,size(Var))
     209
    230210  END SUBROUTINE bcast_mpi_l4
    231211 
     
    241221    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    242222
    243     INTEGER :: dummy
    244 
    245 #ifndef CPP_PARA
    246     VarOut(:)=VarIn(:)
    247     RETURN
    248 #endif
    249 
    250      IF (is_mpi_root) THEN
    251       CALL scatter_mpi_igen(VarIn,Varout,1)
    252      ELSE
    253       CALL scatter_mpi_igen(dummy,Varout,1)
    254     ENDIF
     223    CALL scatter_mpi_igen(VarIn,Varout,1)
    255224   
    256225  END SUBROUTINE scatter_mpi_i
     
    263232    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    264233   
    265     INTEGER :: dummy
    266 
    267 #ifndef CPP_PARA
    268     VarOut(:,:)=VarIn(:,:)
    269     RETURN
    270 #endif
    271     IF (is_mpi_root) THEN
    272       CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2))
    273     ELSE
    274       CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2))
    275     ENDIF
     234    CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2))
    276235   
    277236  END SUBROUTINE scatter_mpi_i1
     
    284243    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    285244   
    286     INTEGER :: dummy
    287    
    288 #ifndef CPP_PARA
    289     VarOut(:,:,:)=VarIn(:,:,:)
    290     RETURN
    291 #endif
    292     IF (is_mpi_root) THEN
    293       CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
    294     ELSE
    295       CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
    296     ENDIF
     245    CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
     246
    297247  END SUBROUTINE scatter_mpi_i2
    298248
     
    304254    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    305255   
    306     INTEGER :: dummy
    307    
    308 #ifndef CPP_PARA
    309     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    310     RETURN
    311 #endif
    312     IF (is_mpi_root) THEN
    313       CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    314     ELSE
    315       CALL scatter_mpi_igen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    316     ENDIF
     256    CALL scatter_mpi_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    317257 
    318258  END SUBROUTINE scatter_mpi_i3
     
    326266    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    327267   
    328     REAL :: dummy
    329    
    330 #ifndef CPP_PARA
    331     VarOut(:)=VarIn(:)
    332     RETURN
    333 #endif
    334     IF (is_mpi_root) THEN
    335268      CALL scatter_mpi_rgen(VarIn,Varout,1)
    336     ELSE
    337       CALL scatter_mpi_rgen(dummy,Varout,1)
    338     ENDIF
    339269 
    340270  END SUBROUTINE scatter_mpi_r
     
    347277    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    348278   
    349     REAL :: dummy
    350    
    351 #ifndef CPP_PARA
    352     VarOut(:,:)=VarIn(:,:)
    353     RETURN
    354 #endif
    355     IF (is_mpi_root) THEN
    356279      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2))
    357     ELSE
    358       CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2))     
    359     ENDIF
    360280 
    361281  END SUBROUTINE scatter_mpi_r1
     
    368288    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    369289   
    370     REAL :: dummy
    371    
    372 #ifndef CPP_PARA
    373     VarOut(:,:,:)=VarIn(:,:,:)
    374     RETURN
    375 #endif
    376     IF (is_mpi_root) THEN
    377290      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
    378     ELSE
    379       CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
    380     ENDIF
    381291 
    382292  END SUBROUTINE scatter_mpi_r2
     
    389299    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    390300   
    391     REAL :: dummy
    392    
    393 #ifndef CPP_PARA
    394     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    395     RETURN
    396 #endif
    397     IF (is_mpi_root) THEN
    398301      CALL scatter_mpi_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    399     ELSE
    400       CALL scatter_mpi_rgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    401     ENDIF
    402302 
    403303  END SUBROUTINE scatter_mpi_r3
     
    411311    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
    412312   
    413     LOGICAL :: dummy
    414    
    415 #ifndef CPP_PARA
    416     VarOut(:)=VarIn(:)
    417     RETURN
    418 #endif
    419     IF (is_mpi_root) THEN
    420313      CALL scatter_mpi_lgen(VarIn,Varout,1)
    421     ELSE
    422       CALL scatter_mpi_lgen(dummy,Varout,1)
    423     ENDIF
    424314   
    425315  END SUBROUTINE scatter_mpi_l
     
    432322    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    433323   
    434     LOGICAL :: dummy
    435    
    436 #ifndef CPP_PARA
    437     VarOut(:,:)=VarIn(:,:)
    438     RETURN
    439 #endif
    440     IF (is_mpi_root) THEN
    441324      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2))
    442     ELSE
    443       CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2))     
    444     ENDIF
    445325 
    446326  END SUBROUTINE scatter_mpi_l1
     
    453333    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    454334   
    455     LOGICAL :: dummy
    456    
    457 #ifndef CPP_PARA
    458     VarOut(:,:,:)=VarIn(:,:,:)
    459     RETURN
    460 #endif
    461     IF (is_mpi_root) THEN
    462335      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3))
    463     ELSE
    464       CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3))
    465     ENDIF
    466336 
    467337  END SUBROUTINE scatter_mpi_l2
     
    474344    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    475345   
    476     LOGICAL :: dummy
    477    
    478 #ifndef CPP_PARA
    479     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    480     RETURN
    481 #endif
    482     IF (is_mpi_root) THEN
    483346      CALL scatter_mpi_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    484     ELSE
    485       CALL scatter_mpi_lgen(dummy,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4))
    486     ENDIF
    487347 
    488348  END SUBROUTINE scatter_mpi_l3 
     
    501361    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    502362   
    503     INTEGER :: dummy
    504 
    505 #ifndef CPP_PARA
    506     VarOut(:)=VarIn(:)
    507     RETURN
    508 #endif
    509 
    510     IF (is_mpi_root) THEN
    511363      CALL gather_mpi_igen(VarIn,VarOut,1)
    512     ELSE
    513       CALL gather_mpi_igen(VarIn,dummy,1)
    514     ENDIF
    515364 
    516365  END SUBROUTINE gather_mpi_i
    517  
    518  
    519  
    520366 
    521367
     
    529375    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    530376   
    531     INTEGER :: dummy
    532    
    533 #ifndef CPP_PARA
    534     VarOut(:,:)=VarIn(:,:)
    535     RETURN
    536 #endif
    537 
    538     IF (is_mpi_root) THEN
    539377      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2))
    540     ELSE
    541       CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2))
    542     ENDIF
    543378 
    544379  END SUBROUTINE gather_mpi_i1
     
    553388    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    554389   
    555     INTEGER :: dummy
    556    
    557 #ifndef CPP_PARA
    558     VarOut(:,:,:)=VarIn(:,:,:)
    559     RETURN
    560 #endif
    561 
    562     IF (is_mpi_root) THEN
    563390      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
    564     ELSE
    565       CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
    566     ENDIF
    567391 
    568392  END SUBROUTINE gather_mpi_i2
     
    577401    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    578402   
    579     INTEGER :: dummy
    580    
    581 #ifndef CPP_PARA
    582     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    583     RETURN
    584 #endif
    585 
    586     IF (is_mpi_root) THEN
    587403      CALL gather_mpi_igen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    588     ELSE
    589       CALL gather_mpi_igen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    590     ENDIF
    591404 
    592405  END SUBROUTINE gather_mpi_i3
     
    601414    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    602415   
    603     REAL :: dummy
    604    
    605 #ifndef CPP_PARA
    606     VarOut(:)=VarIn(:)
    607     RETURN
    608 #endif
    609 
    610     IF (is_mpi_root) THEN
    611416      CALL gather_mpi_rgen(VarIn,VarOut,1)
    612     ELSE
    613       CALL gather_mpi_rgen(VarIn,dummy,1)
    614     ENDIF
    615417 
    616418  END SUBROUTINE gather_mpi_r
     
    625427    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    626428   
    627     REAL :: dummy
    628    
    629 #ifndef CPP_PARA
    630     VarOut(:,:)=VarIn(:,:)
    631     RETURN
    632 #endif
    633 
    634     IF (is_mpi_root) THEN
    635429      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2))
    636     ELSE
    637       CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2))
    638     ENDIF
    639430 
    640431  END SUBROUTINE gather_mpi_r1
     
    649440    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    650441   
    651     REAL :: dummy
    652    
    653 #ifndef CPP_PARA
    654     VarOut(:,:,:)=VarIn(:,:,:)
    655     RETURN
    656 #endif
    657 
    658     IF (is_mpi_root) THEN
    659442      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
    660     ELSE
    661       CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))     
    662     ENDIF
    663443 
    664444  END SUBROUTINE gather_mpi_r2
     
    673453    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    674454   
    675     REAL :: dummy
    676    
    677 #ifndef CPP_PARA
    678     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    679     RETURN
    680 #endif
    681 
    682     IF (is_mpi_root) THEN
    683455      CALL gather_mpi_rgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    684     ELSE
    685       CALL gather_mpi_rgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    686     ENDIF
    687456 
    688457  END SUBROUTINE gather_mpi_r3
     
    697466    LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
    698467   
    699     LOGICAL :: dummy
    700    
    701 #ifndef CPP_PARA
    702     VarOut(:)=VarIn(:)
    703     RETURN
    704 #endif
    705 
    706     IF (is_mpi_root) THEN
    707468      CALL gather_mpi_lgen(VarIn,VarOut,1)
    708     ELSE
    709       CALL gather_mpi_lgen(VarIn,dummy,1)     
    710     ENDIF
    711469 
    712470  END SUBROUTINE gather_mpi_l
     
    721479    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    722480   
    723     LOGICAL :: dummy
    724    
    725 #ifndef CPP_PARA
    726     VarOut(:,:)=VarIn(:,:)
    727     RETURN
    728 #endif
    729 
    730     IF (is_mpi_root) THEN
    731481      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2))
    732     ELSE
    733       CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2))
    734     ENDIF
    735482 
    736483  END SUBROUTINE gather_mpi_l1
     
    745492    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    746493   
    747     LOGICAL :: dummy
    748    
    749 #ifndef CPP_PARA
    750     VarOut(:,:,:)=VarIn(:,:,:)
    751     RETURN
    752 #endif
    753 
    754     IF (is_mpi_root) THEN
    755494      CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3))
    756     ELSE
    757       CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3))
    758     ENDIF
    759495 
    760496  END SUBROUTINE gather_mpi_l2
     
    769505    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    770506   
    771     LOGICAL :: dummy
    772    
    773 #ifndef CPP_PARA
    774     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    775     RETURN
    776 #endif
    777 
    778     IF (is_mpi_root) THEN
    779       CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    780     ELSE
    781       CALL gather_mpi_lgen(VarIn,dummy,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))     
    782     ENDIF
     507    CALL gather_mpi_lgen(VarIn,VarOut,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    783508 
    784509  END SUBROUTINE gather_mpi_l3
     
    808533    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    809534    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    810    
    811     CALL body(VarIn,VarOut,size(VarOut,2))
    812  
    813     CONTAINS
    814       SUBROUTINE body(VarIn,VarOut,s1)
    815         INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    816         INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    817         INTEGER,INTENT(IN) :: s1
    818        
    819         INTEGER,DIMENSION(klon_glo,s1) :: Var_tmp
    820        
    821         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    822         CALL scatter_mpi(Var_tmp,VarOut)
    823       END SUBROUTINE body
     535    INTEGER,DIMENSION(klon_glo,size(VarOut,2)) :: Var_tmp
     536
     537    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     538    CALL scatter_mpi(Var_tmp,VarOut)
    824539
    825540  END SUBROUTINE scatter2D_mpi_i1
     
    831546    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    832547    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    833    
    834     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
    835  
    836     CONTAINS
    837       SUBROUTINE body(VarIn,VarOut,s1,s2)
    838         INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    839         INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    840         INTEGER,INTENT(IN) :: s1,s2
    841        
    842         INTEGER,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    843        
    844         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    845         CALL scatter_mpi(Var_tmp,VarOut)
    846       END SUBROUTINE body
     548
     549    INTEGER,DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3)) :: Var_tmp
     550
     551    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     552    CALL scatter_mpi(Var_tmp,VarOut)
    847553
    848554  END SUBROUTINE scatter2D_mpi_i2
     
    854560    INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
    855561    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    856    
    857     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
    858  
    859     CONTAINS
    860       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    861         INTEGER,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
    862         INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    863         INTEGER,INTENT(IN) :: s1,s2,s3
    864        
    865         INTEGER,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    866        
    867         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    868         CALL scatter_mpi(Var_tmp,VarOut)
    869       END SUBROUTINE body
    870  
    871  
     562    INTEGER,DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3),size(VarOut,4)) :: Var_tmp
     563
     564    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     565    CALL scatter_mpi(Var_tmp,VarOut)
     566   
    872567  END SUBROUTINE scatter2D_mpi_i3
    873568
     
    894589    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    895590    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    896 
    897     CALL body(VarIn,VarOut,size(VarOut,2))
    898  
    899     CONTAINS
    900       SUBROUTINE body(VarIn,VarOut,s1)
    901         REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    902         REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    903         INTEGER,INTENT(IN) :: s1
    904        
    905         REAL,DIMENSION(klon_glo,s1) :: Var_tmp
    906        
    907         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    908         CALL scatter_mpi(Var_tmp,VarOut)
    909       END SUBROUTINE body
     591   
     592    REAL,DIMENSION(klon_glo,size(VarOut,2)) :: Var_tmp
     593   
     594    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     595    CALL scatter_mpi(Var_tmp,VarOut)
    910596
    911597  END SUBROUTINE scatter2D_mpi_r1
     
    918604    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    919605    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    920    
    921     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
    922  
    923     CONTAINS
    924       SUBROUTINE body(VarIn,VarOut,s1,s2)
    925         REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    926         REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    927         INTEGER,INTENT(IN) :: s1,s2
    928        
    929         REAL,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    930        
    931         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    932         CALL scatter_mpi(Var_tmp,VarOut)
    933       END SUBROUTINE body
     606
     607    REAL,DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3)) :: Var_tmp
     608   
     609    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     610    CALL scatter_mpi(Var_tmp,VarOut)
    934611
    935612  END SUBROUTINE scatter2D_mpi_r2
     
    942619    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    943620   
    944     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
    945  
    946     CONTAINS
    947       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    948         REAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
    949         REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    950         INTEGER,INTENT(IN) :: s1,s2,s3
    951        
    952         REAL,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    953        
    954         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    955         CALL scatter_mpi(Var_tmp,VarOut)
    956       END SUBROUTINE body
     621    REAL,DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3),size(VarOut,4)) :: Var_tmp
     622
     623    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     624    CALL scatter_mpi(Var_tmp,VarOut)
    957625 
    958626  END SUBROUTINE scatter2D_mpi_r3
     
    981649    LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    982650   
    983     CALL body(VarIn,VarOut,size(VarOut,2))
    984  
    985     CONTAINS
    986       SUBROUTINE body(VarIn,VarOut,s1)
    987         LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    988         LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    989         INTEGER,INTENT(IN) :: s1
    990        
    991         LOGICAL,DIMENSION(klon_glo,s1) :: Var_tmp
    992        
    993         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    994         CALL scatter_mpi(Var_tmp,VarOut)
    995       END SUBROUTINE body
     651    LOGICAL,DIMENSION(klon_glo,size(VarOut,2)) :: Var_tmp
     652
     653    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     654    CALL scatter_mpi(Var_tmp,VarOut)
    996655 
    997656  END SUBROUTINE scatter2D_mpi_l1
     
    1005664    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1006665   
    1007     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3))
    1008  
    1009     CONTAINS
    1010       SUBROUTINE body(VarIn,VarOut,s1,s2)
    1011         LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    1012         LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1013         INTEGER,INTENT(IN) :: s1,s2
    1014        
    1015         LOGICAL,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    1016        
    1017         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    1018         CALL scatter_mpi(Var_tmp,VarOut)
    1019       END SUBROUTINE body
     666    LOGICAL, DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3)) :: Var_tmp
     667 
     668    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     669    CALL scatter_mpi(Var_tmp,VarOut)
    1020670
    1021671  END SUBROUTINE scatter2D_mpi_l2
     
    1028678    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1029679   
    1030     CALL body(VarIn,VarOut,size(VarOut,2),size(VarOut,3),size(VarOut,4))
    1031  
    1032     CONTAINS
    1033       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    1034         LOGICAL,INTENT(IN),DIMENSION(:,:,:,:,:) :: VarIn
    1035         LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1036         INTEGER,INTENT(IN) :: s1,s2,s3
    1037        
    1038         LOGICAL,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    1039        
    1040         CALL grid2dTo1d_glo(VarIn,Var_tmp)
    1041         CALL scatter_mpi(Var_tmp,VarOut)
    1042       END SUBROUTINE body
     680    LOGICAL,DIMENSION(klon_glo,size(VarOut,2),size(VarOut,3),size(VarOut,4)) :: Var_tmp
     681
     682    CALL grid2dTo1d_glo(VarIn,Var_tmp)
     683    CALL scatter_mpi(Var_tmp,VarOut)
    1043684 
    1044685  END SUBROUTINE scatter2D_mpi_l3
     
    1069710    INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    1070711    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1071    
    1072     CALL body(VarIn,VarOut,size(VarOut,3))
    1073  
    1074     CONTAINS
    1075       SUBROUTINE body(VarIn,VarOut,s1)
    1076         INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    1077         INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1078         INTEGER,INTENT(IN) :: s1
    1079        
    1080         INTEGER,DIMENSION(klon_glo,s1) :: Var_tmp
    1081        
    1082         CALL gather_mpi(VarIn,Var_tmp)
    1083         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1084       END SUBROUTINE body
     712
     713    INTEGER,DIMENSION(klon_glo,size(VarOut,3)) :: Var_tmp
     714
     715    CALL gather_mpi(VarIn,Var_tmp)
     716    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1085717
    1086718  END SUBROUTINE gather2D_mpi_i1
     
    1092724    INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    1093725    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1094    
    1095     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
    1096  
    1097     CONTAINS
    1098       SUBROUTINE body(VarIn,VarOut,s1,s2)
    1099         INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    1100         INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1101         INTEGER,INTENT(IN) :: s1,s2
    1102        
    1103         INTEGER,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    1104        
    1105         CALL gather_mpi(VarIn,Var_tmp)
    1106         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1107       END SUBROUTINE body
     726
     727    INTEGER,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
     728   
     729    CALL gather_mpi(VarIn,Var_tmp)
     730    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1108731
    1109732  END SUBROUTINE gather2D_mpi_i2
     
    1115738    INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    1116739    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1117    
    1118     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
    1119  
    1120     CONTAINS
    1121       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    1122         INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    1123         INTEGER,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1124         INTEGER,INTENT(IN) :: s1,s2,s3
    1125        
    1126         INTEGER,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    1127        
    1128         CALL gather_mpi(VarIn,Var_tmp)
    1129         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1130       END SUBROUTINE body
     740 
     741    INTEGER,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5)) :: Var_tmp
     742   
     743    CALL gather_mpi(VarIn,Var_tmp)
     744    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1131745
    1132746  END SUBROUTINE gather2D_mpi_i3
     
    1155769    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1156770   
    1157     CALL body(VarIn,VarOut,size(VarOut,3))
    1158  
    1159     CONTAINS
    1160       SUBROUTINE body(VarIn,VarOut,s1)
    1161         REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    1162         REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1163         INTEGER,INTENT(IN) :: s1
    1164        
    1165         REAL,DIMENSION(klon_glo,s1) :: Var_tmp
    1166        
    1167         CALL gather_mpi(VarIn,Var_tmp)
    1168         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1169       END SUBROUTINE body
     771    REAL,DIMENSION(klon_glo,size(VarOut,3)) :: Var_tmp
     772
     773    CALL gather_mpi(VarIn,Var_tmp)
     774    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1170775
    1171776  END SUBROUTINE gather2D_mpi_r1
     
    1178783    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1179784   
    1180     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
    1181  
    1182     CONTAINS
    1183       SUBROUTINE body(VarIn,VarOut,s1,s2)
    1184         REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    1185         REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1186         INTEGER,INTENT(IN) :: s1,s2
    1187        
    1188         REAL,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    1189        
    1190         CALL gather_mpi(VarIn,Var_tmp)
    1191         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1192       END SUBROUTINE body
     785    REAL,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
     786
     787    CALL gather_mpi(VarIn,Var_tmp)
     788    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1193789
    1194790  END SUBROUTINE gather2D_mpi_r2
     
    1201797    REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1202798   
    1203     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
    1204  
    1205     CONTAINS
    1206       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    1207         REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    1208         REAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1209         INTEGER,INTENT(IN) :: s1,s2,s3
    1210        
    1211         REAL,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    1212        
    1213         CALL gather_mpi(VarIn,Var_tmp)
    1214         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1215       END SUBROUTINE body
     799    REAL,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5)) :: Var_tmp
     800   
     801    CALL gather_mpi(VarIn,Var_tmp)
     802    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1216803
    1217804  END SUBROUTINE gather2D_mpi_r3
     
    1240827    LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1241828   
    1242     CALL body(VarIn,VarOut,size(VarOut,3))
    1243  
    1244     CONTAINS
    1245       SUBROUTINE body(VarIn,VarOut,s1)
    1246         LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    1247         LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1248         INTEGER,INTENT(IN) :: s1
    1249        
    1250         LOGICAL,DIMENSION(klon_glo,s1) :: Var_tmp
    1251        
    1252         CALL gather_mpi(VarIn,Var_tmp)
    1253         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1254       END SUBROUTINE body
     829    LOGICAL,DIMENSION(klon_glo,size(VarOut,3)) :: Var_tmp
     830
     831    CALL gather_mpi(VarIn,Var_tmp)
     832    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1255833
    1256834  END SUBROUTINE gather2D_mpi_l1
     
    1263841    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1264842   
    1265     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4))
    1266  
    1267     CONTAINS
    1268       SUBROUTINE body(VarIn,VarOut,s1,s2)
    1269         LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    1270         LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1271         INTEGER,INTENT(IN) :: s1,s2
    1272        
    1273         LOGICAL,DIMENSION(klon_glo,s1,s2) :: Var_tmp
    1274        
    1275         CALL gather_mpi(VarIn,Var_tmp)
    1276         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1277       END SUBROUTINE body
     843    LOGICAL,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4)) :: Var_tmp
     844
     845    CALL gather_mpi(VarIn,Var_tmp)
     846    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1278847
    1279848  END SUBROUTINE gather2D_mpi_l2
     
    1286855    LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1287856   
    1288     CALL body(VarIn,VarOut,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5))
    1289  
    1290     CONTAINS
    1291       SUBROUTINE body(VarIn,VarOut,s1,s2,s3)
    1292         LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    1293         LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:,:) :: VarOut
    1294         INTEGER,INTENT(IN) :: s1,s2,s3
    1295        
    1296         LOGICAL,DIMENSION(klon_glo,s1,s2,s3) :: Var_tmp
    1297        
    1298         CALL gather_mpi(VarIn,Var_tmp)
    1299         CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1300       END SUBROUTINE body
     857    LOGICAL,DIMENSION(klon_glo,size(VarOut,3),SIZE(VarOut,4),SIZE(VarOut,5)) :: Var_tmp
     858   
     859    CALL gather_mpi(VarIn,Var_tmp)
     860    CALL grid1dTo2d_glo(Var_tmp,VarOut)
    1301861
    1302862  END SUBROUTINE gather2D_mpi_l3
     
    1313873    INTEGER,INTENT(IN)  :: VarIn
    1314874    INTEGER,INTENT(OUT) :: VarOut
    1315    
    1316     INTEGER :: dummy
    1317    
    1318 #ifndef CPP_PARA
    1319     VarOut=VarIn
    1320     RETURN
    1321 #endif
    1322 
    1323     IF (is_mpi_root) THEN
    1324       CALL reduce_sum_mpi_igen(VarIn,Varout,1)
    1325     ELSE
    1326       CALL reduce_sum_mpi_igen(VarIn,dummy,1)
    1327     ENDIF
    1328  
     875    INTEGER             :: VarIn_tmp(1)
     876    INTEGER             :: VarOut_tmp(1)
     877   
     878    VarIn_tmp(1)=VarIn   
     879    CALL reduce_sum_mpi_igen(VarIn_tmp,Varout_tmp,1)
     880    VarOut=VarOut_tmp(1)
     881   
    1329882  END SUBROUTINE reduce_sum_mpi_i
    1330883
     
    1336889    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    1337890   
    1338     INTEGER :: dummy
    1339    
    1340 #ifndef CPP_PARA
    1341     VarOut(:)=VarIn(:)
    1342     RETURN
    1343 #endif
    1344 
    1345     IF (is_mpi_root) THEN
    1346       CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1347     ELSE
    1348       CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
    1349     ENDIF
     891    CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1350892 
    1351893  END SUBROUTINE reduce_sum_mpi_i1
     
    1358900    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    1359901   
    1360     INTEGER :: dummy
    1361    
    1362 #ifndef CPP_PARA
    1363     VarOut(:,:)=VarIn(:,:)
    1364     RETURN
    1365 #endif
    1366 
    1367     IF (is_mpi_root) THEN
    1368       CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1369     ELSE
    1370       CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
    1371     ENDIF
     902    CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1372903 
    1373904  END SUBROUTINE reduce_sum_mpi_i2
     
    1380911    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1381912   
    1382     INTEGER :: dummy
    1383    
    1384 #ifndef CPP_PARA
    1385     VarOut(:,:,:)=VarIn(:,:,:)
    1386     RETURN
    1387 #endif
    1388 
    1389     IF (is_mpi_root) THEN
    1390       CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1391     ELSE
    1392       CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
    1393     ENDIF
     913    CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1394914 
    1395915  END SUBROUTINE reduce_sum_mpi_i3
     
    1402922    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1403923   
    1404     INTEGER :: dummy
    1405    
    1406 #ifndef CPP_PARA
    1407     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    1408     RETURN
    1409 #endif
    1410 
    1411     IF (is_mpi_root) THEN
    1412       CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1413     ELSE
    1414       CALL reduce_sum_mpi_igen(VarIn,dummy,SIZE(VarIn))     
    1415     ENDIF
     924    CALL reduce_sum_mpi_igen(VarIn,Varout,SIZE(VarIn))
    1416925 
    1417926  END SUBROUTINE reduce_sum_mpi_i4                 
     
    1424933    REAL,INTENT(IN)  :: VarIn
    1425934    REAL,INTENT(OUT) :: VarOut
    1426    
    1427     REAL :: dummy
    1428    
    1429 #ifndef CPP_PARA
    1430     VarOut=VarIn
    1431     RETURN
    1432 #endif
    1433 
    1434     IF (is_mpi_root) THEN
    1435       CALL reduce_sum_mpi_rgen(VarIn,Varout,1)
    1436     ELSE
    1437       CALL reduce_sum_mpi_rgen(VarIn,dummy,1)
    1438     ENDIF
     935    REAL             :: VarIn_tmp(1)
     936    REAL             :: VarOut_tmp(1)
     937   
     938    VarIn_tmp(1)=VarIn   
     939    CALL reduce_sum_mpi_rgen(VarIn_tmp,Varout_tmp,1)
     940    VarOut=VarOut_tmp(1)
    1439941 
    1440942  END SUBROUTINE reduce_sum_mpi_r
     
    1447949    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    1448950   
    1449     REAL :: dummy
    1450    
    1451 #ifndef CPP_PARA
    1452     VarOut(:)=VarIn(:)
    1453     RETURN
    1454 #endif
    1455 
    1456     IF (is_mpi_root) THEN
    1457       CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1458     ELSE
    1459       CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
    1460     ENDIF
    1461  
     951    CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
     952     
    1462953  END SUBROUTINE reduce_sum_mpi_r1
    1463954
     
    1469960    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    1470961   
    1471     REAL :: dummy
    1472    
    1473 #ifndef CPP_PARA
    1474     VarOut(:,:)=VarIn(:,:)
    1475     RETURN
    1476 #endif
    1477 
    1478     IF (is_mpi_root) THEN
    1479       CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1480     ELSE
    1481       CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
    1482     ENDIF
     962    CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1483963 
    1484964  END SUBROUTINE reduce_sum_mpi_r2
     
    1491971    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    1492972   
    1493     REAL :: dummy
    1494    
    1495 #ifndef CPP_PARA
    1496     VarOut(:,:,:)=VarIn(:,:,:)
    1497     RETURN
    1498 #endif
    1499 
    1500     IF (is_mpi_root) THEN
    1501       CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1502     ELSE
    1503       CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
    1504     ENDIF
     973    CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1505974 
    1506975  END SUBROUTINE reduce_sum_mpi_r3
     
    1513982    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    1514983   
    1515     REAL :: dummy
    1516    
    1517 #ifndef CPP_PARA
    1518     VarOut(:,:,:,:)=VarIn(:,:,:,:)
    1519     RETURN
    1520 #endif
    1521 
    1522     IF (is_mpi_root) THEN
    1523       CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1524     ELSE
    1525       CALL reduce_sum_mpi_rgen(VarIn,dummy,SIZE(VarIn))     
    1526     ENDIF
     984    CALL reduce_sum_mpi_rgen(VarIn,Varout,SIZE(VarIn))
    1527985 
    1528986  END SUBROUTINE reduce_sum_mpi_r4
     
    17691227  END SUBROUTINE grid2dTo1d_mpi_l3
    17701228
    1771 
    1772                            
    1773 END MODULE mod_phys_lmdz_mpi_transfert
     1229               
     1230
    17741231
    17751232
     
    17851242    INTEGER,INTENT(IN) :: nb
    17861243   
    1787 #ifdef CPP_PARA
     1244#ifdef CPP_MPI
    17881245    INCLUDE 'mpif.h'
    17891246#endif
    17901247    INTEGER :: ierr
    17911248
    1792     IF (.not.is_ok_mpi) RETURN
    1793    
    1794 #ifdef CPP_PARA
     1249    IF (.not.is_using_mpi) RETURN
     1250   
     1251#ifdef CPP_MPI
    17951252    CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_root_x,COMM_LMDZ_PHY,ierr)
    17961253#endif
     
    18071264    INTEGER,INTENT(IN) :: nb
    18081265   
    1809 #ifdef CPP_PARA
     1266#ifdef CPP_MPI
    18101267    INCLUDE 'mpif.h'
    18111268#endif
    18121269    INTEGER :: ierr
    18131270
    1814     IF (.not.is_ok_mpi) RETURN
    1815 
    1816 #ifdef CPP_PARA
     1271    IF (.not.is_using_mpi) RETURN
     1272
     1273#ifdef CPP_MPI
    18171274    CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_root_x,COMM_LMDZ_PHY,ierr)
    18181275#endif
     
    18301287    INTEGER,INTENT(IN) :: nb
    18311288   
    1832 #ifdef CPP_PARA
     1289#ifdef CPP_MPI
    18331290    INCLUDE 'mpif.h'
    18341291#endif
    18351292    INTEGER :: ierr
    18361293
    1837     IF (.not.is_ok_mpi) RETURN
    1838 
    1839 #ifdef CPP_PARA
     1294    IF (.not.is_using_mpi) RETURN
     1295
     1296#ifdef CPP_MPI
    18401297    CALL MPI_BCAST(Var,nb,MPI_REAL_LMDZ,mpi_root_x,COMM_LMDZ_PHY,ierr)
    18411298#endif
     
    18531310    INTEGER,INTENT(IN) :: nb
    18541311   
    1855 #ifdef CPP_PARA
     1312#ifdef CPP_MPI
    18561313    INCLUDE 'mpif.h'
    18571314#endif
    18581315    INTEGER :: ierr
    18591316
    1860     IF (.not.is_ok_mpi) RETURN
    1861 
    1862 #ifdef CPP_PARA
     1317    IF (.not.is_using_mpi) RETURN
     1318
     1319#ifdef CPP_MPI
    18631320    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_root_x,COMM_LMDZ_PHY,ierr)
    18641321#endif
     
    18771334    INTEGER,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    18781335 
    1879 #ifdef CPP_PARA
     1336#ifdef CPP_MPI
    18801337    INCLUDE 'mpif.h'
    18811338#endif
     
    18871344
    18881345
    1889     IF (.not.is_ok_mpi) THEN
     1346    IF (.not.is_using_mpi) THEN
    18901347      VarOut(:,:)=VarIn(:,:)
    18911348      RETURN
     
    19061363    ENDIF
    19071364     
    1908 #ifdef CPP_PARA
     1365#ifdef CPP_MPI
    19091366    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_INTEGER,VarOut,klon_mpi*dimsize,   &
    19101367                      MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    19221379    REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    19231380 
    1924 #ifdef CPP_PARA
     1381#ifdef CPP_MPI
    19251382    INCLUDE 'mpif.h'
    19261383#endif
     
    19321389    INTEGER :: ierr
    19331390
    1934     IF (.not.is_ok_mpi) THEN
     1391    IF (.not.is_using_mpi) THEN
    19351392      VarOut(:,:)=VarIn(:,:)
    19361393      RETURN
     
    19501407    ENDIF
    19511408     
    1952 #ifdef CPP_PARA
     1409#ifdef CPP_MPI
    19531410    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_REAL_LMDZ,VarOut,klon_mpi*dimsize,   &
    19541411                      MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    19681425    LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    19691426 
    1970 #ifdef CPP_PARA
     1427#ifdef CPP_MPI
    19711428    INCLUDE 'mpif.h'
    19721429#endif
     
    19781435    INTEGER :: ierr
    19791436
    1980     IF (.not.is_ok_mpi) THEN
     1437    IF (.not.is_using_mpi) THEN
    19811438      VarOut(:,:)=VarIn(:,:)
    19821439      RETURN
     
    19961453    ENDIF
    19971454     
    1998 #ifdef CPP_PARA
     1455#ifdef CPP_MPI
    19991456    CALL MPI_SCATTERV(VarTmp,counts,displs,MPI_LOGICAL,VarOut,klon_mpi*dimsize,   &
    20001457                      MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    20111468    IMPLICIT NONE
    20121469 
    2013 #ifdef CPP_PARA
     1470#ifdef CPP_MPI
    20141471    INCLUDE 'mpif.h'
    20151472#endif
     
    20251482    INTEGER :: ierr
    20261483
    2027     IF (.not.is_ok_mpi) THEN
     1484    IF (.not.is_using_mpi) THEN
    20281485      VarOut(:,:)=VarIn(:,:)
    20291486      RETURN
     
    20411498    ENDIF
    20421499   
    2043 #ifdef CPP_PARA
     1500#ifdef CPP_MPI
    20441501    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_INTEGER,VarTmp,counts,displs,   &
    20451502                     MPI_INTEGER,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    20651522    IMPLICIT NONE
    20661523 
    2067 #ifdef CPP_PARA
     1524#ifdef CPP_MPI
    20681525    INCLUDE 'mpif.h'
    20691526#endif
     
    20891546    ENDIF
    20901547   
    2091     IF (.not.is_ok_mpi) THEN
     1548    IF (.not.is_using_mpi) THEN
    20921549      VarOut(:,:)=VarIn(:,:)
    20931550      RETURN
    20941551    ENDIF
    20951552
    2096 #ifdef CPP_PARA
     1553#ifdef CPP_MPI
    20971554    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_REAL_LMDZ,VarTmp,counts,displs,   &
    20981555                      MPI_REAL_LMDZ,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    21211578    LOGICAL,INTENT(OUT),DIMENSION(klon_glo,dimsize) :: VarOut
    21221579 
    2123 #ifdef CPP_PARA
     1580#ifdef CPP_MPI
    21241581    INCLUDE 'mpif.h'
    21251582#endif
     
    21311588    INTEGER :: ierr
    21321589   
    2133     IF (.not.is_ok_mpi) THEN
     1590    IF (.not.is_using_mpi) THEN
    21341591      VarOut(:,:)=VarIn(:,:)
    21351592      RETURN
     
    21471604   
    21481605
    2149 #ifdef CPP_PARA
     1606#ifdef CPP_MPI
    21501607    CALL MPI_GATHERV(VarIn,klon_mpi*dimsize,MPI_LOGICAL,VarTmp,counts,displs,   &
    21511608                      MPI_LOGICAL,mpi_root_x, COMM_LMDZ_PHY,ierr)
     
    21721629    IMPLICIT NONE
    21731630   
    2174 #ifdef CPP_PARA
     1631#ifdef CPP_MPI
    21751632    INCLUDE 'mpif.h'
    21761633#endif
     
    21811638    INTEGER :: ierr
    21821639   
    2183     IF (.not.is_ok_mpi) THEN
     1640    IF (.not.is_using_mpi) THEN
    21841641      VarOut(:)=VarIn(:)
    21851642      RETURN
     
    21871644
    21881645
    2189 #ifdef CPP_PARA
     1646#ifdef CPP_MPI
    21901647    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_SUM,mpi_root_x,COMM_LMDZ_PHY,ierr)
    21911648#endif
     
    21991656    IMPLICIT NONE
    22001657
    2201 #ifdef CPP_PARA
     1658#ifdef CPP_MPI
    22021659    INCLUDE 'mpif.h'
    22031660#endif
     
    22081665    INTEGER :: ierr
    22091666 
    2210     IF (.not.is_ok_mpi) THEN
     1667    IF (.not.is_using_mpi) THEN
    22111668      VarOut(:)=VarIn(:)
    22121669      RETURN
    22131670    ENDIF
    22141671   
    2215 #ifdef CPP_PARA
     1672#ifdef CPP_MPI
    22161673    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_LMDZ,MPI_SUM,mpi_root_x,COMM_LMDZ_PHY,ierr)
    22171674#endif
     
    24431900  END SUBROUTINE grid2dTo1d_mpi_lgen   
    24441901
     1902END MODULE mod_phys_lmdz_mpi_transfert
Note: See TracChangeset for help on using the changeset viewer.