首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用netlib代码(QUADPACK)。什么是xerror?

尝试使用netlib代码(QUADPACK)。什么是xerror?
EN

Stack Overflow用户
提问于 2015-02-15 08:26:30
回答 1查看 719关注 0票数 1

我正在努力弄清楚如何使用四包

在一个文件夹中,我将"qag.f加依赖项“的内容和代码blow定位为qag_test.f:

(也许这段代码本身并不重要。这实际上只是来自象限包文件的一个片段)

代码语言:javascript
复制
      REAL A,ABSERR,B,EPSABS,EPSREL,F,RESULT,WORK
      INTEGER IER,IWORK,KEY,LAST,LENW,LIMIT,NEVAL
      DIMENSION IWORK(100),WORK(400)
      EXTERNAL F
      A = 0.0E0
      B = 1.0E0
      EPSABS = 0.0E0
      EPSREL = 1.0E-3
      KEY = 6
      LIMIT = 100
      LENW = LIMIT*4
      CALL QAG(F,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,
     *  IER,LIMIT,LENW,LAST,IWORK,WORK)
C  INCLUDE WRITE STATEMENTS
      STOP
      END
C
      REAL FUNCTION F(X)
      REAL X
      F = 2.0E0/(2.0E0+SIN(31.41592653589793E0*X))
      RETURN
      END

使用gfortran *.f (安装为MinGW 64位),我得到:

代码语言:javascript
复制
C:\Users\username\AppData\Local\Temp\ccIQwFEt.o:qag.f:(.text+0x1e0): undefined re
ference to `xerror_'
C:\Users\username\AppData\Local\Temp\cc6XR3D0.o:qage.f:(.text+0x83): undefined re
ference to `r1mach_'
(and a lot more of the same r1mach_ error)

它似乎是r1mach是BLAS的一部分 (我不知道为什么它不是打包在这里中,而是作为“辅助”获得的),但是什么是xerror?

如何在我的环境Win7 64位(希望没有Cygwin)中正确编译这个片段?

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-15 09:56:44

xerror是一个错误报告例程。从它的调用方式来看,它似乎使用了Hollerith常量(将"foo"写为3hfoo的那些常量)。

代码语言:javascript
复制
      if(ier.ne.0) call xerror(26habnormal return from  qag ,
     *  26,ier,lvl)

然后,xerror调用xerrwv,传递参数(再加上一些参数)。

这肯定是在Fortran 77普及之前写的。

最好的选择是使用仍然支持Hollerith常量的编译器,将所有依赖项(xeerwv还有几个依赖项,我不知道为什么没有从netlib获得它们)并通过自己选择的编译器运行它。大多数编译器,包括gfortran,都支持Hollerith;只需忽略警告:-)

您可能需要修改一个例程,即xerprt。使用gfortran,您可以将这个写成

代码语言:javascript
复制
subroutine xerprt(c,n)
  character(len=1), dimension(n) :: c
  write (*,'(500A)') c
end subroutine xerprt

并将这个文件放入一个单独的文件中,这样编译器就不会捕获级别违规(我知道,我知道.)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28524278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档