- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello everyone,
I have an elemental subroutine which is basically like this:
elemental subroutine calc_stuff(x, a, b, c) real, intent(in) :: a, b, c real, intent(out) :: x x = a/b + c end subroutine calc_stuff
Now I changed this to:
elemental subroutine calc_stuff(x, a, t) real, intent(in) :: a type(mytype), intent(in) :: t real, intent(out) :: x x = a/t%b + t%c end subroutine calc_stuff
Where "mytype" is a type containing various integer and real scalars, as well as a real allocatable array. The second code compiles fine on various compilers (GFortran, Intel, NEC, Cray), but now I saw that the Fortran standard says for elemental subroutines:
"All dummy arguments must be scalar, and must not have the ALLOCATABLE or POINTER attribute."
So, is my code not standard conforming and all the compilers "know" what I want but should actually complain, or am I misunderstanding the standard and everything is fine? It would be very good if I could use the second version, as I intend to branch the code where the calculation would then be something like "x = a/t%b + t%c/t%d" and I would not a have to change all calls to this function with the second version.
Thanks everyone in advance,
Johannes
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your dummy argument mytype is nonpointer, nonallocatable, scalar data object, which can be intrinsic or derived type. So that is fine. The result variable is scalar and is neither a pointer nor allocatable, so that is also fine. You didn't show the definition of mytype, so one cannot see what t%b or t%c actually are, but they need to be scalars, but they could be either pointers or allocatables. So, your code is standard conforming AFAIC tell.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page