[J3] Question on parent component naming
Vipul Parekh
parekhvs at gmail.com
Tue Apr 9 14:56:05 UTC 2024
On Mon, Apr 8, 2024 at 10:22 AM Bader, Reinhold via J3 <
j3 at mailman.j3-fortran.org> wrote:
> ..
>
> Any opinions?
>
Hello Reinhold,
Apologies - even though you asked everyone on the distribution list to
ignore your last email, most of us do not have a "Neuralyzer" to erase
memory! :-))
That is, your point, "The question from my point of view simply was: what
is the correct way to write the code?" stays etched!!
So with that in mind, re: your question in your original email "Any
opinions?" why not simply do as follows which removes from consideration
any complication due to renaming :
* o_my_t%p => o_my_t%data*
Thus please consider the following variant of your program with a block
introduced for data output, the program using two processors produces
output as per my expectations. Do all the 4 processors you are studying
concur with this? If yes, this can be conforming way to write code that is
portable across conformant processors. Additionally, I expect this will be
a clearer instruction for any readers of said code who can also be a
program author in a future incarnation and who may get confused with
options (x) and (y)!
MODULE mod
TYPE :: t
REAL, POINTER :: p(:) => null()
END TYPE
END MODULE
PROGRAM ref_parent
USE mod, my_t => t
TYPE, EXTENDS(my_t) :: td
REAL :: data(3)
END TYPE
TYPE(td), TARGET :: o_my_t
! o_my_t%my_t = my_t(o_my_t%data) ! (x)
! o_my_t%t = my_t(o_my_t%data) ! (y)
o_my_t%p => o_my_t%data ! (z)
block
use, intrinsic :: iso_c_binding, only : c_loc, I8 => c_intptr_t
print "(g0,z0)", "Address in memory of o_my_t%p: ", transfer(
source=c_loc(o_my_t%p), mold=1_i8 )
print "(g0,z0)", "Address in memory of o_my_t%data: ", transfer(
source=c_loc(o_my_t%data), mold=1_i8 )
print *, "Is associated( pointer=o_my_t%p, target=o_my_t%data )? ", &
associated( pointer=o_my_t%p, target=o_my_t%data ), "; expected is
T"
end block
END PROGRAM
An output from one processor:
C:\temp>gfortran -ffree-form p.f -o p.exe
C:\temp>p.exe
Address in memory of o_my_t%p: 7FF7DE52E080
Address in memory of o_my_t%data: 7FF7DE52E080
Is associated( pointer=o_my_t%p, target=o_my_t%data )? T ; expected is T
Regards,
Vipul Parekh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20240409/32d9c6c9/attachment.htm>
More information about the J3
mailing list