<div dir="auto"><div data-smartmail="gmail_signature" dir="auto"><br></div><div class="gmail_quote" dir="auto"><div dir="ltr">Hi there, My name is Pedro Ricardo and I'm currently a researcher at a Fluid Dynamics Laboratory in Brazil.<br>We have a CFD software with 12 continuous years of development mostly in Fortran, and we've been using Mpich and Openmpi since the very beginning.<div><br><div>Recently we started to refactor the code and write it using Fortran2008 standard and this includes the usage of the the newest MPI module for Fortran "<font face="monospace"><b>mpi_f08</b></font>".<br></div></div><div><br></div><div>So far no errors were present in Openmpi implementations and everything worked like a charm, but when we started compiling with Mpich lots of errors happened during execution.</div><div><br></div><div>I was able so isolate and reproduce the error in a simpler code. Whenever<span style="font-family:arial,sans-serif"> "</span><font face="monospace"><b>use mpi_f08</b></font><span style="font-family:arial,sans-serif">" is present, the arrays passed to a MPI subroutine return with <b>C</b>-like indexes. If I allocate an standard array in Fortran (that starts with index <b>1</b>), after the call of some MPI routine this array come back starting with index <b>0</b>. </span></div><div><font face="arial, sans-serif">And you can imagine that all access to this array will be wrong after that.</font></div><div dir="auto"><font face="arial, sans-serif">It is a funny behavior because if you put  </font><span style="font-family:arial,sans-serif">"</span><font face="monospace"><b>use mpi</b></font><span style="font-family:arial,sans-serif">" instead of </span><span style="font-family:arial,sans-serif">"</span><font face="monospace"><b>use mpi_f08</b></font><span style="font-family:arial,sans-serif">", the indexes do not change.</span></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">The test is simple, allocate and array, print it's bound indexes, calls a </font><b><font face="monospace">MPI_Reduce</font></b><font face="arial, sans-serif"> routine and print the array bounds again. I've also tested other routines like </font><b><font face="monospace">MPI_ISend</font></b><font face="arial, sans-serif"> and the error also happens.</font></div><div><font face="arial, sans-serif"><br></font></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">program check_bounds</font><font face="monospace"><br></font><font face="monospace">    !Check Works<br></font><font face="monospace">    ! use mpi</font><font face="monospace"><br></font><font face="monospace">    !Check Fails<br></font><font face="monospace">    use mpi_f08<br></font><font face="monospace">   <br> </font><font face="monospace">    implicit none<br></font><font face="monospace">    integer:: mpi_ierr, proc_id, n_proc<br></font><font face="monospace">    real, allocatable, dimension(:):: t1, t1_0</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    call MPI_Init(mpi_ierr)  <br></font><font face="monospace">    call MPI_Comm_rank(MPI_COMM_WORLD, proc_id, mpi_ierr)<br></font><font face="monospace">    call MPI_Comm_size(MPI_COMM_WORLD, n_proc, mpi_ierr)</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    allocate(t1(5), t1_0(5))<br></font><font face="monospace">    t1 = 1.0; t1_0 = 1.0</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    if (proc_id==0) then<br></font><font face="monospace">        write(*,*)'Array Configuration Before:'<br></font><font face="monospace">        write(*,'(a6,2(1x,i2))')'Low:',lbound(t1),lbound(t1_0)<br></font><font face="monospace">        write(*,'(a6,2(1x,i2))')'Upper:',ubound(t1),ubound(t1_0)<br></font><font face="monospace">    end if</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    CALL MPI_REDUCE(t1, t1_0, 5, MPI_REAL, MPI_SUM, 0, MPI_COMM_WORLD, mpi_ierr)</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    if (proc_id==0) then<br></font><font face="monospace">        write(*,*)'Array Configuration After:'<br></font><font face="monospace">        write(*,'(a6,2(1x,i2))')'Low:',lbound(t1),lbound(t1_0)<br></font><font face="monospace">        write(*,'(a6,2(1x,i2))')'Upper:',ubound(t1),ubound(t1_0)<br></font><font face="monospace">    end if</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">    deallocate(t1, t1_0)</font><font face="monospace"><br></font><font face="monospace">    call MPI_Finalize(mpi_ierr)</font> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace"><br></font><font face="monospace">end program check_bounds</font></blockquote><div><br></div></blockquote><div><br></div><span style="font-family:arial,sans-serif">Thanks for the attention,</span><div><font face="arial, sans-serif"><br></font></div><div>--<br>Best regards,<br>M.Sc.Eng. Pedro Ricardo C. Souza</div></div>
</div></div>