You will find the MPI Fortran 2008 bindings to be significantly better
w.r.t. MPI types.  See e.g. MPI 3.1 section 17.2.5 where it describes
TYPE(MPI_Status), which means that the status object is a first-class type
in the Fortran 2008 interface, rather than being an error prone INTEGER
array.

I haven't used Fortran 2008 bindings in a nontrivial way yet, but it is my
understanding that Open-MPI has a good implementation of them and has for a
relatively long time.

For multilingual MPI programmers, the Fortran 2008 bindings will be quite
easy to understand from the perspective of the C bindings, since they are
quite similar in many respects.

Jeff

On Fri, Jan 22, 2016 at 7:12 AM, Paweł Jarzębski <pj...@ippt.pan.pl> wrote:

> Thx a lot. I will be more careful with declaration of the MPI variables.
>
> Pawel J.
>
> W dniu 2016-01-22 o 16:06, Nick Papior pisze:
>
> The status field should be
>
> integer :: stat(MPI_STATUS_SIZE)
>
> Perhaps n is located stackwise just after the stat variable, which then
> overwrites it.
>
> 2016-01-22 15:37 GMT+01:00 Paweł Jarzębski <pj...@ippt.pan.pl>:
>
>> Hi,
>>
>> I wrote this code:
>>
>>       program hello
>>        implicit none
>>
>>        include 'mpif.h'
>>        integer :: rank, dest, source, tag, ierr, stat
>>        integer :: n
>>        integer :: taskinfo, ptr
>>
>>        call MPI_INIT(ierr)
>>        call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
>>
>>        if(rank.eq.0) then
>>         write(*,*) 'Hello'
>>
>>         n = 20
>>         dest = 1
>>         tag = 1
>>         taskinfo = n
>>         call MPI_SEND(taskinfo, 1, MPI_INTEGER, dest, tag,
>>      1       MPI_COMM_WORLD, ierr)
>>
>>         tag = tag + 1
>>         call MPI_SEND(ptr, 1, MPI_INTEGER, dest, tag,
>>      1       MPI_COMM_WORLD, ierr)
>>
>>        else
>>         source = 0
>>         tag = 1
>>
>> !        n = 1
>>         call MPI_RECV(taskinfo, 1, MPI_INTEGER, source, tag,
>>      1       MPI_COMM_WORLD, stat, ierr)
>>
>>         n = taskinfo
>>
>>         tag = tag + 1
>>
>>         write(*,*) 'n1 ', n
>>         write(*,*) 'taskinfo1 ', taskinfo
>>         call MPI_RECV(ptr, 1, MPI_INTEGER, source, tag,
>>      1       MPI_COMM_WORLD, stat, ierr)
>>         write(*,*) 'n2 ', n
>>         write(*,*) 'taskinfo2 ', taskinfo
>>        endif
>>
>>        call MPI_FINALIZE(ierr)
>>       end
>>
>>
>> I supposed that it should produce this:
>>  Hello
>>  n1           20
>>  taskinfo1           20
>>  n2            20
>>  taskinfo2           20
>>
>> But in fact it produces this:
>>  Hello
>>  n1           20
>>  taskinfo1           20
>>  n2            2
>>  taskinfo2           20
>>
>> It's strange to me that variable "n" is changed after call to MPI
>> subroutine, but I dont even put it in calls to MPI.
>> If I comment line 13 with " write(*,*) 'Hello' " everything is ok. If I
>> uncomment line 30 with "n = 1", everything is ok as well.
>>
>> Could anybody explain me what is happening?
>>
>> I tested it on:
>>   1) intel fortran compiler 14.0 and openmpi 1.6.5
>>   1) intel fortran compiler 13.1.3 and openmpi 1.8.4
>>
>> Best regards,
>> Pawel J.
>>
>>
>>
>>
>> _______________________________________________
>> users mailing list
>> us...@open-mpi.org
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
>> Link to this post:
>> http://www.open-mpi.org/community/lists/users/2016/01/28334.php
>>
>
>
>
> --
> Kind regards Nick
>
>
> _______________________________________________
> users mailing listus...@open-mpi.org
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> Link to this post: 
> http://www.open-mpi.org/community/lists/users/2016/01/28336.php
>
>
>
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
> Link to this post:
> http://www.open-mpi.org/community/lists/users/2016/01/28337.php
>



-- 
Jeff Hammond
jeff.scie...@gmail.com
http://jeffhammond.github.io/

Reply via email to