(j3.2006) Question about zero-sized array.

Clune, Thomas L. GSFC-6101 thomas.l.clune
Wed Jun 21 12:13:02 EDT 2017


On Jun 21, 2017, at 12:04 PM, John Reid <John.Reid at stfc.ac.uk<mailto:John.Reid at stfc.ac.uk>> wrote:



Daniel C Chen wrote:
Thanks John and Malcolm for your response. I didn't make the questions
clear enough so I will try again.

As for Q1,
non-allocatable case:
real :: x(0) ! x is always defined by the standard. What is its value at
this point?
allocatable case:
real, allocatable :: x(:)
allocate(x0)) ! at this point, x is defined by allocation. Again, what
is the value after allocation?

It is the value of a real array of rank 1 and size zero.

This begs the question for higher-rank arrays where there would also be shape information.   Presumably shape is also part of the value here, but it can be derived from ?rank 1? and ?size zero?.   Not so for ranks 2 and above.  I.e. the answer to what value does ?a? have after allocation would be:

It is the value of a real array of rank 2 and shape [7,0].


As for Q2, I actualy meant to ask 'x' rather than 'a'.
x = 0.0 ! Does x have value 0.0?

No. All the array elements are given the value 0.0, but this is a set of
size 0.

x = 1.0 ! x Does x have value 1.0?

No. Same reason.

As for Q3, if x in Q2 is defined with the value 0.0 or 1.0 and used in
the following statement respectively,
a(:,:) = 1.0
y(:) = MATMUL( a(:,:), x(:) )+ 2*y(:) ! Does the value of x affect the
result?

No.

Ok - I?ll ask a slightly different question.   If we instead had:

y = MATMUL(a, x)

Does the value of a affect the result?

I would argue that the answer is ?yes?.   This is because the shape is part of the value of both ?a? and ?y?, and the shape of ?y? is determined by ?a?.   In the original question the use of array slices negates the issue since variant shapes would be illegal.

- Tom





Hope this helps.

John.

Thanks,

Daniel

XL Fortran Development, Fortran Standard Representative
IBM Toronto Software Lab
Phone: 905-413-3056
Tie: 969-3056
Email: cdchen at ca.ibm.com<mailto:cdchen at ca.ibm.com>
http://www.ibm.com/software/awdtools/fortran/xlfortran

Inactive hide details for "Malcolm Cohen" ---06/20/2017 07:52:35
PM---Daniel Chen asks: > The standard specifies, "Zero-sized a"Malcolm
Cohen" ---06/20/2017 07:52:35 PM---Daniel Chen asks: > The standard
specifies, "Zero-sized arrays and zero-length strings are

From: "Malcolm Cohen" <malcolm at nag-j.co.jp<mailto:malcolm at nag-j.co.jp>>
To: "'fortran standards email list for J3'" <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>>
Date: 06/20/2017 07:52 PM
Subject: Re: (j3.2006) Question about zero-sized array.
Sent by: j3-bounces at mailman.j3-fortran.org<mailto:j3-bounces at mailman.j3-fortran.org>

------------------------------------------------------------------------



Daniel Chen asks:
The standard specifies, "Zero-sized arrays and zero-length strings are
always defined".
It also says "Allocation of a zero-sized array or zero-length character
variable causes the array or variable to become defined"

Question1: Does it have initial value at all?

John Reid opines:
Well, yes. It always has the same value, including initially.

No.  Being allocatable or a pointer it is initially undefined.
?initially? means at the beginning of execution; at that point the array
does not have any shape.

Daniel continues::
allocate(a(7,0),x(0),y(7))
a(:,:) = 0.0 !Q2: Is this legal? What is the value of a?

John replies:
Yes, you are broadcasting a scalar to every element of the array. a has
the value it always has when the size is zero.

?it always has? could be a little misleading here; being an array, the
shape is part of the value, so the value is the 7x0 empty array and not
the 0x23 empty array.  I?m not sure we have all this explicitly written
down anywhere though, except for derived types, where we say the array
bounds of a component are part of the value of the structure.  Outside
of a structure it is the shape that?s important rather than the bounds.

Cheers,
--
..............Malcolm Cohen, NAG Oxford/Tokyo.

*From:*j3-bounces at mailman.j3-fortran.org<mailto:j3-bounces at mailman.j3-fortran.org>
[mailto:j3-bounces at mailman.j3-fortran.org] *On Behalf Of *John Reid*
Sent:*Wednesday, June 21, 2017 12:53 AM*
To:*fortran standards email list for J3 <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>>*
Subject:*Re: (j3.2006) Question about zero-sized array.



Daniel C Chen wrote:
Hello,

The standard specifies, "Zero-sized arrays and zero-length strings are
always defined".
It also says "Allocation of a zero-sized array or zero-length character
variable causes the array or variable to become defined"

Question1: Does it have initial value at all?

Well, yes. It always has the same value, including initially.

Question2: Can it appear as the LHS of an assignment?

Yes.

Question3: Can it be used in an expression and have a defined result?

Yes.

Please consider the following example:

program test
real, dimension(:,:), allocatable:: a
real, dimension(:), allocatable :: x,y

allocate(a(7,0),x(0),y(7))
a(:,:) = 0.0 !Q2: Is this legal? What is the value of a?

Yes, you are broadcasting a scalar to every element of the array. a has
the value it always has when the size is zero.

x(:) = 0.0

Yes, you are again broadcasting a scalar to every element of the array.

y(:) = 1.0
y(:) = MATMUL( a(:,:), x(:) ) !Q3: Is this legal? what is the value of y?

Yes. Every element of y has the value 0.0.

end program test

Non-allocatable version:

Nothing is reallocated in the allocatable version, so this is the same.

Cheers,

John.

program test2
real :: a(7,0)
real :: x(0),y(7)

a = 0.0 !Q2: is this legal? What is the value of a?
x = 0.0
y = 1.0
y = MATMUL( a, x ) !Q3: is this legal? what is the value of y?
end program test2

Thanks,

Daniel

XL Fortran Development, Fortran Standard Representative
IBM Toronto Software Lab
Phone: 905-413-3056
Tie: 969-3056
Email: _cdchen at ca.ibm.com_ <mailto:cdchen at ca.ibm.com>
_http://www.ibm.com/software/awdtools/fortran/xlfortran_


_______________________________________________
J3 mailing list
_J3 at mailman.j3-fortran.org_ <mailto:J3 at mailman.j3-fortran.org>
_http://mailman.j3-fortran.org/mailman/listinfo/j3_

_______________________________________________
J3 mailing list_
__J3 at mailman.j3-fortran.org_ <mailto:J3 at mailman.j3-fortran.org>_
__http://mailman.j3-fortran.org/mailman/listinfo/j3_<http://mailman.j3-fortran.org/mailman/listinfo/j3_>

*Disclaimer*

The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses and malware, and may have
been automatically archived by Mimecast Ltd, an innovator in Software as
a Service (SaaS) for
business._______________________________________________
J3 mailing list
J3 at mailman.j3-fortran.org<mailto:J3 at mailman.j3-fortran.org>
http://mailman.j3-fortran.org/mailman/listinfo/j3




_______________________________________________
J3 mailing list
J3 at mailman.j3-fortran.org
http://mailman.j3-fortran.org/mailman/listinfo/j3

_______________________________________________
J3 mailing list
J3 at mailman.j3-fortran.org<mailto:J3 at mailman.j3-fortran.org>
http://mailman.j3-fortran.org/mailman/listinfo/j3

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.j3-fortran.org/pipermail/j3/attachments/20170621/310285b8/attachment-0001.html 



More information about the J3 mailing list