forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Fortran 2003 and 2008 features
Goto page Previous  1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Suggestions
View previous topic :: View next topic  
Author Message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Thu Aug 12, 2021 10:26 am    Post subject: Reply with quote

FLOOR and CEILING have now been added for the next release of FTN95.
Back to top
View user's profile Send private message AIM Address
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Wed Feb 23, 2022 4:22 am    Post subject: Reply with quote

Hi Paul,
Would it be difficult to add SOURCE= as an optional argument to ALLOCATE? I believe it is a 2003 standard.
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Wed Feb 23, 2022 8:30 am    Post subject: Reply with quote

Simon

I don't know off hand but I will add it to the list for investigation.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Mon Feb 28, 2022 5:38 pm    Post subject: Reply with quote

At first sight, implementing SOURCE= may not be very difficult but "allocate on assignment" is already provided. It is similar and more direct.

Code:
program main
 integer a(10)
 integer,allocatable::b(:)
 a = 7
 b = a
 print*,b
end program main
Back to top
View user's profile Send private message AIM Address
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Tue Mar 01, 2022 4:50 am    Post subject: Reply with quote

Many thanks Paul. The allocate on assignment will work for most instances I need.
Back to top
View user's profile Send private message
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Wed Jun 01, 2022 3:05 am    Post subject: Reply with quote

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.
Code:

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"?)
Code:

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:

Code:
Module p
Contains
 Subroutine s
   Character(Len=:), Allocatable, Save :: c
   c = 'A'
   Print*, c
 End Subroutine s
End Module p
[/code]
Back to top
View user's profile Send private message
DanRRight



Joined: 10 Mar 2008
Posts: 2532
Location: South Pole, Antarctica

PostPosted: Thu Jun 02, 2022 2:43 am    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Thu Jun 02, 2022 6:48 am    Post subject: Reply with quote

Simon

I will add Example 1 to the wish list and Example 2 demonstrates an omission that needs fixing.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Thu Jun 02, 2022 11:53 am    Post subject: Reply with quote

Dan

Thanks for the feedback. We will explore the possibility of adding to the wiki.
Back to top
View user's profile Send private message AIM Address
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Sat Jun 11, 2022 3:32 pm    Post subject: Reply with quote

Sorry to add more to the wish-list - it would be nice to get the 2008 intrinsic functions FindLoc, MaxLoc and MinLoc added.
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Mon Jun 13, 2022 7:20 am    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message AIM Address
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Tue Jun 14, 2022 4:20 pm    Post subject: Reply with quote

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!
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Wed Jun 15, 2022 7:15 am    Post subject: Reply with quote

Simon

For a quick work-around you could use MINLOC. For example, for a 1D array

Code:
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.
Back to top
View user's profile Send private message AIM Address
simon



Joined: 05 Jul 2006
Posts: 221

PostPosted: Thu Jun 16, 2022 9:11 pm    Post subject: Reply with quote

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).
Code:
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
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7297
Location: Salford, UK

PostPosted: Fri Jun 17, 2022 7:03 am    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message AIM Address
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Suggestions All times are GMT + 1 Hour
Goto page Previous  1, 2, 3, 4, 5  Next
Page 4 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group