SommeVecVecPAR.f90

program Somme
implicit none
include 'mpif.h'

integer, dimension( MPI_STATUS_SIZE ) :: statut
integer, parameter :: etiquette=100

integer :: A(10),B(10),C(10),Aloc(5),Bloc(5),Cloc(5)
integer :: i
integer :: nb_procs,rang,code

call MPI_INIT(code)

call MPI_COMM_SIZE(MPI_COMM_WORLD,nb_procs,code)
call MPI_COMM_RANK(MPI_COMM_WORLD,rang,code)

if (rang .eq. 0) then
   do i=1,10
     A(i) = i
     B(i) = 10 - i
   enddo

   write ( *, * ) 'LES DEUX VECTEURS :'

   write (*,*) 'A = ',(A(i),i=1,10)
   write (*,*) 'B = ',(B(i),i=1,10)
endif

call MPI_BARRIER ( MPI_COMM_WORLD ,code)

if (rang .eq. 0) then
  call MPI_SEND (A(1:5),5, MPI_INTEGER ,0,etiquette, MPI_COMM_WORLD,code)
  call MPI_SEND (A(6:10),5, MPI_INTEGER ,1,etiquette, MPI_COMM_WORLD,code)
  call MPI_SEND (B(1:5),5, MPI_INTEGER ,0,etiquette+1, MPI_COMM_WORLD,code)
  call MPI_SEND (B(6:10),5, MPI_INTEGER ,1,etiquette+1, MPI_COMM_WORLD,code)
endif

call MPI_RECV (Aloc,5, MPI_INTEGER ,0,etiquette, MPI_COMM_WORLD,statut,code)
call MPI_RECV (Bloc,5, MPI_INTEGER ,0,etiquette+1, MPI_COMM_WORLD,statut,code)

call MPI_BARRIER ( MPI_COMM_WORLD ,code)
if (rang .eq. 0) then
   write ( *, * ) 'LES DEUX VECTEURS LOCAUX :'
endif


print *,'Je suis le proc ',rang,'parmi ',nb_procs,' processus'
write (*,*) 'A local ( proc ',rang,' )  = ',(Aloc(i),i=1,5)
write (*,*) 'B local ( proc ',rang,' )  = ',(Bloc(i),i=1,5)

call MPI_BARRIER ( MPI_COMM_WORLD ,code)
do i=1,5
      Cloc(i) = Aloc(i) + Bloc(i)
enddo

if (rang .eq. 0) then
   write ( *, * ) 'LE VECTEUR SOMME LOCAL : '
endif

call MPI_BARRIER ( MPI_COMM_WORLD ,code)

write (*,*) 'C local ( proc ',rang,' )  = ',(Cloc(i),i=1,5)

call MPI_BARRIER ( MPI_COMM_WORLD ,code)

call MPI_SEND (Cloc(1:5),5, MPI_INTEGER ,0,etiquette, MPI_COMM_WORLD,code)

if (rang .eq. 0) then
  call MPI_RECV (C(1:5),5, MPI_INTEGER ,0,etiquette, MPI_COMM_WORLD,statut,code)
  call MPI_RECV (C(6:10),5, MPI_INTEGER ,1,etiquette, MPI_COMM_WORLD,statut,code)
endif

if (rang .eq. 0) then
   write ( *, * ) 'LE VECTEUR SOMME :'
   write (*,*) 'C = ',(C(i),i=1,10)
endif


call MPI_FINALIZE(code)

end program