[mpich-discuss] MPI_allgather

koppole at aim.com koppole at aim.com
Mon Apr 14 09:03:07 CDT 2008

Hello there,

I have a question/problem regarding mpi_allgather.

When I try to call mpi_allgather, the computations from the 0 (rank =0) 
are filled properly while from all other process, I just get something 
but the numbers are not correct.

Could any one help me ?

For your information, here is part of my FORTRAN CODE. I try to compute 
the dihedral angle on all my nodes in the commreplica communicator. 
Please follow my FORTRAN code below:

FYI:  I have numtasks = 3 with mytaskid going from 0,1,2


!! I allocate the required memory for the dihedral arrays phi_arr and 
phi_prt, which is a 2-D array of length dihe_num

       allocate(phi_arr(3,dihe_num), stat = alloc_failed)

        if (alloc_failed .ne. 0) call setup_alloc_error

        allocate(phi_prt(3,dihe_num), stat = alloc_failed)

        if (alloc_failed .ne. 0) call setup_alloc_error

!! Here I compute the dihedral on all my nodes ; mytaskid = rank of my 
process and numtasks = no. of processors in this communicator

          do i=(1+mytaskid), dihe_num, numtasks

                    one(1:3,1) = atm_crd(1:3,dihe_arr(1,i))

                    two(1:3,1) = atm_crd(1:3,dihe_arr(2,i))

                  three(1:3,1) = atm_crd(1:3,dihe_arr(3,i))

                   four(1:3,1) = atm_crd(1:3,dihe_arr(4,i))

!! phipsi is a subroutine which compute the dihedral angle on the given 
processor from the coordinates of the 4 atoms, which returns phid as 
the dihedral angle

                  call phipsi(phid,one,two,three,four)

                      phi_prt(1,i) = phid

!! here I compute the cos and sin of the returned dihedral angle.

                      phi_prt(2,i) = dcos(phid)

                      phi_prt(3,i) = dsin(phid)

!! "j" keeps track of the number of angles filled.

                 j = j +1

          end do

      call mpi_allgather(phi_prt,3*j,mpi_double_precision, &

                                   phi_arr,3*j,mpi_double_precision, &


      if (mytaskid .eq. 0) then

         do i=1,dihe_num

          write(mdout,'(i3,3(1x,f7.3))') i, phi_arr(1:3,i)

         end do

      end if


when I do this: I just get the data from i=1,4,6,7 are correct, all 
other indices is wrong :(. Am i doing something wrong ?

Can anyone help ?

Thanks a lot,



Sampath Koppole,

The Computational Molecular Biophysics Group,                           

Interdisciplinary Center for Scientific Computing (IWR),

368, Im Neuenheimer Feld,

Heidelberg. D-69120.


Office   : +49-6221-54-8803

Home     : +49-6221-7293083

Mobile   : +49-173-660-5660

Email    : sampath.koppole at iwr.uni-heidelberg.de

Web Home : http://www.sampath.koppole.com

More information about the mpich-discuss mailing list