(j3.2006) (DE)ALLOCATE with STAT= question
Tobias Burnus
burnus
Tue Dec 20 09:36:01 EST 2011
Hello,
I am not sure whether I have completely understood the result of
(DE)ALLOCATE with stat.
Assume the following (with num_images() > 1):
integer, allocatable :: A[*], B, C
integer :: stat
allocate(B)
if (this_image() > 1) stop
ALLOCATE (A[*], B, C, stat=stat)
i.e. "C" can be allocated, "A" cannot as other images have initiated
termination of execution, and "B" is already allocated.
Which value does "stat" have at the end? Does the result depend on the
order of the allocate-object-list and if so, how?* And what's the
allocation status of A, B and C?
(* For DEALLOCATE one can find the following, I didn't spot something
regarding the order for ALLOCATE: [F2008, 6.7.3.1, para. 4] "When more
than one allocated object is deallocated by execution of a DEALLOCATE
statement, the order of deallocation is processor dependent.")
Similarly for:
integer, allocatable :: A[*], B, C
integer :: stat
allocate(C, A[*])
if (this_image() > 1) stop
DEALLOCATE (A[*], B, C, stat=stat)
What's the value of stat and the allocation status of A, B and C?
My understanding is that:
- For ALLOCATE, B remains allocated, C gets allocated and A remains
unallocated
- For DEALLOCATE, A remains allocated, C gets deallocated and B remains
unallocated
- The STAT= value is STAT_STOPPED_IMAGE in all cases, independent of the
order.
Is this the correct reading? Or can be the value for STAT= also different?
Tobias
From "6.7.4 STAT= specifier":
"If an ALLOCATE or DEALLOCATE statement with a coarray allocate-object
is executed when one or more images has initiated termination of
execution, the stat-variable becomes defined with the
processor-dependent positive integer value of the constant
STAT_STOPPED_IMAGE from the intrinsic module ISO_FORTRAN_ENV (13.8.2).
If any other error condition occurs during execution of the ALLOCATE or
DEALLOCATE statement, the stat-variable becomes defined with a
processor-dependent positive integer value different from
STAT_STOPPED_IMAGE. In either case, each allocate-object has a
processor-dependent status:
* each allocate-object that was successfully allocated shall have an
allocation status of allocated or a pointer association status of
associated;
* each allocate-object that was successfully deallocated shall have an
allocation status of unallocated or a pointer association status of
disassociated;
* each allocate-object that was not successfully allocated or
deallocated shall retain its previous allocation status or pointer
association status."
More information about the J3
mailing list