Simon
I don't know off hand but I will add it to the list for investigation.
Welcome to our forums
Simon
I don't know off hand but I will add it to the list for investigation.
At first sight, implementing SOURCE= may not be very difficult but 'allocate on assignment' is already provided. It is similar and more direct.
program main
integer a(10)
integer,allocatable::b(:)
a = 7
b = a
print*,b
end program main
Many thanks Paul. The allocate on assignment will work for most instances I need.
I noticed a couple of character-handling features at fortranwiki.org that do not work in FTN95. Would it be possible to get these implemented?
Example 1: initialization of elements of a character array without having to provide padding to make all the elements the same length. This code generates a compile-time error.
Program p
Character(Len=8), Dimension(4) :: c = &
[Character(Len=8) :: 'A', 'AB', 'ABC', 'ABCD']
End Program p
Example 2: Allocatable characters. This code does not print the correct value. (There is a similar post from StamK on 12 Oct 2016 in the 64-bit forum, and a response from Paul indicating that allocatable characters have been implemented. Perhaps this example does not work because it is using 'allocate on assignment'?)
Program p
Character(Len=:), Allocatable :: c
c = 'A'
Print*, c
End Program p
Note that if c is declared with the Save attribute, a compilation error is returned. For example:
Module p
Contains
Subroutine s
Character(Len=:), Allocatable, Save :: c
c = 'A'
Print*, c
End Subroutine s
End Module p
[/code]
As to Fortranwiki, would be good to see FTN95 in this table https://fortranwiki.org/fortran/show/Fortran+2003+status
Though the major addition to FTN95 would be probably parallelization with MPI. And optimization on Polyhedron tests
Simon
I will add Example 1 to the wish list and Example 2 demonstrates an omission that needs fixing.
Dan
Thanks for the feedback. We will explore the possibility of adding to the wiki.
Sorry to add more to the wish-list - it would be nice to get the 2008 intrinsic functions FindLoc, MaxLoc and MinLoc added.
Simon
MAXLOC and MINLOC are in the Fortran 90/95 standard (unless you need the extra KIND or BACK arguments) so they are already provided.
I could add FINDLOC to the wish list but it will be of limited use for real arrays where a test for equality usually needs a tollerance value.
Thanks Paul - I was only interested in FindLoc for integer arrays. I'd forgotten that MaxLoc and MinLoc were already available - sorry, but that's at least something less for you to do!
Simon
For a quick work-around you could use MINLOC. For example, for a 1D array
integer a(10),b(1),val
...
b = MINLOC(a, abs(a-val) == 0)
At first sight it looks like FINDLOC could be defined in terms of MINLOC but with the extra mask abs(a-val) == 0.
Hi Paul, That's a nice work around for now. But I'm curious as to why the following code does not allow line 8 (the second instance of MinLoc), but does allow line 7 (the first instance).
Program p
Integer, Parameter :: n1 = 5
Integer, Dimension(n1) :: ia1 = [2,4,3,5,1]
Integer, Dimension(n1) :: ia2
Integer :: i = 5
Integer :: j
j = MinLoc(ia1(:), (Abs(ia1(:)-i) == 0))
ia2(1) = MinLoc(ia1(:), (Abs(ia1(:)-i) == 0))
End Program p
Simon
The Standard defines the result as being a vector (in this context) so the compiler should complain when you assign a vector to a scalar.
Note also that, in general, (:) is not helpful because FTN95 does not always distinguish this from an array section which generates in a temporary copy.
Hi Paul, Since j is a scalar, should not the compiler complain at line 7? Simon
Simon
Yes. I may need to take a closer look at this.
Is it important? Can you get it to work?
Hi Paul, Not important. I have worked around this. In this case I'm simply working from the attitude that all bug reports may be potentially useful. Thanks, Simon
FINDLOC has now been added to FTN95 and the associated DLLs but without the KIND and BACK arguments at the momnent.
Excellent! Thank you. On another 2008 topic, are there any plans for submodules? Again not urgent from my side. I would simply use them to break up some large files, so their absence is not a big issue.
Simon
The subject of SUBMODULEs has been raised recently elsewhere on this forum and I did briefly look at its definition.
A SUBMODULE is not a simple extension of the concept of a MODULE. Also a MODULE is already extremely complex from point of view of the compiler. You can have modules within modules and at each level components can be private to the module. Then there is the complexity of USE ONLY.
So my initial impression is that to add SUBMODULEs would involve a very large investment of time.
Understood. I can certainly manage without submodules high on the priority list fo rnow.