Hi,

section 4.11

http://www.mpi-forum.org/docs/mpi-20-html/node54.htm

describes how memory allocation can be done in a Fortran program:

REAL A 
POINTER (P, A(100,100))   ! no memory is allocated 
CALL MPI_ALLOC_MEM(4*100*100, MPI_INFO_NULL, P, IERR) 
! memory is allocated 
... 
A(3,5) = 2.71; 
... 
CALL MPI_FREE_MEM(A, IERR) ! memory is freed

However, this uses non-standard Cray pointers. I am wondering how this
can be coded using the standard iso_c_binding module - I do not have
much experience using that module, but apparently it provides C
pointers:

use, intrinsic :: iso_c_binding, only: c_float, c_ptr, c_f_pointer
real (c_float), pointer :: a(:,:)
type (c_ptr) :: p

call MPI_Alloc_mem(4*100*100, MPI_INFO_NULL, p, ierr)
call c_f_pointer(p, a, (/100, 100/))
...
a(3,5) = 2.71
...
call MPI_Free_mem(a, ierr)

Is that going to work? Or is there a different way of recoding the
example?

Thanks in advance!

Cheers,
Martin

-- 
Martin Siegert
Head, Research Computing
WestGrid/ComputeCanada Site Lead
IT Services                                phone: 778 782-4691
Simon Fraser University                    fax:   778 782-4242
Burnaby, British Columbia                  email: sieg...@sfu.ca
Canada  V5A 1S6

Reply via email to