Hi,<br><br>I&#39;m having a strange problem with derived types and mpich2 using certain compiler configurations. The attached Fortran 90 sample program (main3.f90) defines a type<br>
<br> type sample<br>&nbsp;&nbsp;&nbsp;&nbsp; sequence<br>&nbsp;&nbsp;&nbsp;&nbsp; complex*16 :: H<br>&nbsp;&nbsp;&nbsp;&nbsp; complex*16 :: rho(MAX_R_VALS)<br>end type sample<br><br>type(sample) :: s<br><br>and
then just tries to send s%H (not the entire struct, just the one
component) from process 1 to process 0. This works, but it seems that
the variable which I use to store the rank of the process (I call this
&#39;iam&#39;),<br>
<br>integer :: iam<br>! ...<br>call MPI_COMM_RANK(MPI_COMM_WORLD, iam,&nbsp;&nbsp; mpierr)<br><br>is
modified during mpi_recv in process 0, depending on the compiler that I use and the options I pass. On my machine, with mpich2-1.0.8, iam
is 0 before mpi_recv and 1 afterward. I actually tried this with openmpi as well on a cluster and found a value of 16 afterward. *However*, if I comment out the line<br>
<br>complex*16 :: rho(MAX_R_VALS)<br><br>in type sample above, then the problem goes away on both machines.<br><br>The compilers I&#39;ve been trying are:<br><br>- GNU Fortran (Ubuntu 4.3.2-1ubuntu11) 4.3.2<br>- ifort (IFORT) 10.1 20080801<br>
<br>gfortran gives the strange behavior with any compiler flags I&#39;ve tried, including all -O flags.<br><br>ifort gives the strange behavior with -O2 and above, but not -O0 or -O1.<br><br>To compile and run:<br><br>mpif90 main3.f90 -o test<br>
mpiexec -l -n 2 ./test<br><br>Does anyone have any insight into this? Is there an error in my usage of the MPI calls?<br><br>Thanks,<br>Chris