- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I also understand that my using the IMSL libraries from an earlier version of IVF could cause problems (although until now VNI\\CTT6.0 has worked fine for me with IVF11.1).
However, in my view, the following code segment should compile with XE2011(even if it doesn't do anything useful) since the compiler should not process the fit_surface(..) function.
subroutine FitSurface()
include 'link_f90_static.h'
use surface_fitting_int
use mp_types
real (8), automatic, pointer :: sData(:,:)
real (8), automatic, pointer :: Coeffs(:,:)
type (d_spline_knots), automatic :: knotX,knotY
!DEC$ if (__Intel_Compiler .eq. 1200)
! Do nothing if XE 2011
!DEC$ else
Coeffs = surface_fitting(data=sData,knotsx=knotX,knotsy=knotY)
!DEC$ endif
return
end subroutine
The compiler output (under Dev Studio 2010 on a 64-bit Windows machine) is:
Compiling with Intel Visual Fortran Compiler XE 12.0.0.104 [IA-32]...
Fit.for
fortcom: Fatal: There has been an internal compiler error (C0000005).
compilation aborted for S:\\Users\\Stuart\\TEST\\Fortran\\SurfaceFitting\\SurfaceFitting\\Fit.for (code 1)
The problem is not caused by the include or use directives, as can be shown by renaming surface_fitting(..) to something else. I am using IMSL routines elsewhere and they are not causing the same problem (although I have not got as far as testing to see if they work rather than just compile).
This therefore seems like one for the bug list.
Thanks,
Stuart.
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
The work around that solves the compiler error issue (although does not allow the IMSL routine to work) is a bit of renaming and extra conditional compilation:
subroutine FitSurface()
nclude 'link_f90_static.h'
!DEC$ if (__Intel_Compiler .eq. 1200)
! Can't use IMSL stuff
!DEC$ else
use surface_fitting_int, x_surface_fitting => d_surface_fitting
!DEC$ endif
use mp_types
real (8), automatic, pointer :: sData(:,:)
real (8), automatic, pointer :: Coeffs(:,:)
type (d_spline_knots), automatic :: knotX,knotY
!DEC$ if (__Intel_Compiler .eq. 1200)
! Can't use IMSL stuff
!DEC$ else
Coeffs = x_surface_fitting(data=sData,knotsx=knotX,knotsy=knotY)
!DEC$ endif
return
end subroutine
Just sticking "use surface_fitting_int" into a !DEC$ IF is not sufficient. The combination of this and the renaming, however, works.
While I want to get the IMSL routines up and running again, at least this gives me a way forwards without breaking the code on the working CVF6.6b and IVF11.1 compilers I am currently relying on.
Stuart.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

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