I want to write a function that returns an allocatable array in fortran
program test
implicit none
real a(3)
real, allocatable :: F18(:)
a = (/1,2,3/)
print *, F18(a)
end program test
function F18(A)
implicit none
real A(:) ! An assumed shape array
real F18(size(A,1)) ! The function result itself is
! the second dimension of A.
F18 =A !
end function F18
It is expected to print "1 2 3" on the screen but I got an error:
forrtl: severe (157): Program Exception - access violation
What's the problem?
Also, I have tried code like this:
program test
implicit none
real a(3)
real, allocatable :: F18(:)
a = (/1,2,3/)
print *, F18(a,3)
end program test
function F18(A,n)
implicit none
integer n
real A(:) ! An assumed shape array
real F18(size(A,1)) ! The function result itself is
! the second dimension of A.
F18 =A !
end function F18
During compiling I got:
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.4.237 Build 20140805
Copyright (C) 1985-2014 Intel Corporation. All rights reserved.
D:\Fortran\Elephant.f90(6): error #6351: The number of subscripts is incorrect. [F18]
print *, F18(a,3)
-------------^
compilation aborted for D:\Fortran\Elephant.f90 (code 1)
I am really confused with fortran's function.
What is the right way to call Array-valued Functions in fortran?
@Fortranner
[], to delimit an array constructor. So,a = (/1,2,3/)can be writtena = [1, 2, 3]. It's easier to read.