回 帖 发 新 帖 刷新版面

主题:[讨论]调用IMSL时出现internal error,用不带“_int”的库时出现

环境 Win7 x86 SP1,Intel Fortran XE2011,IMSL 7.0 x86
运行如下测试代码时没有问题
program main
    INCLUDE 'link_fnl_shared.h'
    !USE IMSL_INT
    USE EIG_INT
    USE RAND_INT
    implicit none
    real B(32,32)
    real :: a(3,3)=(/ 1,0,0,&
                      0,2,0,&
                      0,0,3 /)
    real eigenvalue(3),eigenvector(3,3)
    integer i
    B=rand(B)
    eigenvalue=eig(A, v=eigenvector)
    do i=1,2
        write(*,"('eigenvalue=',f5.2)")eigenvalue(i)
        write(*,"('eigenvector=[',3(f5.2' ')']')")eigenvector(:,i)
    enddo
    
end program main
!------------------------------------------------------
为了测试.i.运算符但是运行如下代码的时候出现问题(代码来自cgl_lgs大大的一个帖子)
program exammm
include 'link_fnl_shared.h'
use imsl_libraries

implicit none
   real:: v=2.3
   integer i,j
   real h00(6,6)
   real h0(6,6),h(6,6)
   h00=0.0
  do i=1,6
    if(mod(i,2)==0) then      
        h00(i,i-1)=v
    else       
        h00(i,i+1)=v        
    end if
  end do

  h0=.i.h00  
  h=h0.x.h00
  write(*,'(6f5.2)') h !检验结果是否为单位矩阵

end program
!----------------------------------
提示如下
1>------ 已启动生成: 项目: fnltest, 配置: Debug Win32 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.1.3.300 [IA-32]...
1>Source2.f90
1>D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Source2.f90(115): internal error: Please visit 'http://www.intel.com/software/products/support' for assistance.
1>   h00=0.0
1>^
1>[ Aborting due to internal error. ]
1>compilation aborted for D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Source2.f90 (code 1)
1>
1>Build log written to  "file://D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Debug\BuildLog.htm"
1>fnltest - 1 error(s), 0 warning(s)
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

运行IMSL的范例.xt.
      program xt
      use linear_operators 
      implicit none 
      integer, parameter :: n=32 
      real(kind(1d0)) :: one=1d0, zero=0d0 
      real(kind(1d0)) A(n,n), P(n,n), Q(n,n), & 
             S_D(n), U_D(n,n), V_D(n,n) 
! Generate a random matrix. 
      A = rand(A) 
! Compute the singular value decomposition. 
      S_D = SVD(A, U=U_D, V=V_D) 
! Compute the (left) orthogonal factor. 
      P = U_D .xt. V_D 
! Compute the (right) self-adjoint factor. 
      Q = V_D .x. diag(S_D) .xt. V_D 
! Check the results. 
      if (norm( EYE(n) - (P .xt. P)) & 
               <= sqrt(epsilon(one))) then 
         if (norm(A - (P .x. Q))/norm(A) & 
               <= sqrt(epsilon(one))) then 
            write (*,*) 'Example 2 for LIN_SOL_SVD (operators) is correct.' 
         end if 
      end if 
      end  
同样会出错
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.1.3.300 [IA-32]...
1>Source2.f90
1>D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Source2.f90(114): internal error: Please visit 'http://www.intel.com/software/products/support' for assistance.
1>      A = rand(A)
1>^
1>[ Aborting due to internal error. ]
1>compilation aborted for D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Source2.f90 (code 1)
1>
1>Build log written to  "file://D:\Users\liulinsl\Documents\Visual Studio 2010\Projects\fnltest\fnltest\Debug\BuildLog.htm"
1>fnltest - 1 error(s), 0 warning(s)
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
改成use rand_int之后
其他地方,例如.xt.处还是会出现internal error

请大大们指教

回复列表 (共4个回复)

沙发

是这样的,imsl7.0中用use linear_operators这句话是会出错的,当时intel论坛上也有人问,后来intel给出了个X64 imsl的补丁,但是32位的没有。
要使用包含在linear_operators这个库中的函数时,要用use+原函数
例如:上面那个例子把use linear_operators改成use operation_xt即可
另外,imsl7.0引用函数和以前版本不一样的

板凳

补充一点:
linear_operators这个文件是这样子的(一看就知道原因了):
module linear_operators


    use cond_int
    use det_int
    use diag_int
    use diagonals_int
        use fft_int
        use ifft_int    
        use eye_int
    use lin_eig_self_int
    use lin_sol_self_int
    use norm_int
    use operation_i
    use operation_ix
    use operation_t
    use operation_h
    use operation_tx
    use operation_hx
    use operation_x
    use operation_xi
    use operation_xt
    use operation_xh
    use orth_int
    use rand_int
    use rank_int
    use svd_int
    use unit_int
    use eig_int
    use chol_int
    use isnan_int

end module

3 楼


谢谢您!

4 楼


非常感谢,困惑了好久的问题终于解决了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册