Вам нужно, чтобы свойства функции были известны вызывающему. Самый простой способ - поместить его в модуль и «использовать» этот модуль. В ваших примерах в вашей основной программе вы объявляете массив «F18», который не является функцией.
module mystuff
contains
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
end module mystuff
program test
use mystuff
implicit none
real a(3)
a = (/1,2,3/)
print *, F18(a,3)
end program test