- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, everyone,
I tried to compile the source code below but the Intel Visual Fortran compiler 2013 issues a compiler error saying that error #8169: The specified interface is not declared at line 16.
However, the same source code can be compiled using the Portland Visual Fortran 12.10. Can anyone help me out with figuring out anything wrong in my program? Thanks!
Li
PS. I have the Visual Studio 2010 solution file attached. Also, the error list generated by the IVF compiler and the results obtained by the PVF compiler are enclosed in the attachment.
[fortran]
MODULE toolbox
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: fvec1p, fvec2p
ABSTRACT INTERFACE
FUNCTION functions_system(x) RESULT(y)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(SIZE(x)) :: y
END FUNCTION
END INTERFACE
ABSTRACT INTERFACE
FUNCTION middle_function_template(x,fvec_p,proc_p) RESULT(y)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
REAL :: y
END FUNCTION
END INTERFACE
PROCEDURE(functions_system), POINTER :: proc1p, proc2p
CONTAINS
FUNCTION func_system1(x) RESULT(y)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(size(x)) :: y
y(1)=x(1)
y(2)=x(2)
END FUNCTION func_system1
! the major program returns the normalization of
! a given vector
SUBROUTINE MajorSolver(ans,x,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: ans
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
PROCEDURE(middle_function_template), POINTER :: proc3p
REAL, DIMENSION(SIZE(x)), TARGET :: y ! kept for other use
REAL :: z
fvec_p=>y
proc3p=>MiddleFunction
z=AssistantSolver(x,proc3p,fvec_p,proc_p)
ans=fvec_p**2/z
END SUBROUTINE MajorSolver
FUNCTION AssistantSolver(x,func,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
procedure(middle_function_template), pointer :: func
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
REAL :: AssistantSolver
AssistantSolver=func(x,fvec_p,proc_p)
END FUNCTION AssistantSolver
! return the innder product of the vector proc_p evaluated at x
FUNCTION MiddleFunction(x,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
REAL :: MiddleFunction
fvec_p=proc_p(x)
MiddleFunction=dot_product(fvec_p,fvec_p)
END FUNCTION
END MODULE toolbox
PROGRAM main
USE toolbox
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: ans
REAL :: data2(2)
data2=[1.,2.]
proc1p=>func_system1
allocate(ans(size(data2)))
call MajorSolver(ans,data2,fvec1p,proc1p)
write(*,'(a,2(f7.3))'),'Equations system 1: Ans= ',ans
nullify(ans,proc1p)
END PROGRAM main
[/fortran]
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
As in another recent post ( http://software.intel.com/en-us/forums/topic/404621 ), you need IMPORT statements to make properties/attributes available by host association in an interface body.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page