计算化学公社

 找回密码 Forget password
 注册 Register
Views: 4895|回复 Reply: 8
打印 Print 上一主题 Last thread 下一主题 Next thread

[Fortran] Fortran数学库求助

[复制链接 Copy URL]

257

帖子

4

威望

4967

eV
积分
5304

Level 6 (一方通行)

跳转到指定楼层 Go to specific reply
楼主
因为是看彭国伦的书学的Fortran,最后一章介绍了IMSL库,看着挺方便的。但我的Intel Visual Fortran并没有这个库,于是自己装了IMSL 7.0,结果发现license文件到期不能用,网上的各种方法也不好使。另一方面,IVF自带的MKL库用起来贼麻烦,比如我想求矩阵特征值,IMSL只需要一个参数,而MKL的函数要定义一大堆参数,而且编译很容易出错(一晚上编译没成功过)。想问问大家Fortran还有没有什么好的数学库吗?或者有人有能用的IMSL license文件吗?非常感谢!
贫困U 退学与疯子工程学院

5万

帖子

99

威望

5万

eV
积分
112354

管理员

公社社长

2#
发表于 Post on 2019-5-28 06:00:29 | 只看该作者 Only view this author
IMSL已经完全过时了,效率也明显不及MKL。
你用MKL方式不对所以误认为麻烦。其实超级简单,只要把“项目”-“属性”-Fortran-Libraries里的Use Intel Math kernel Library开启即可,什么额外的都不需要做。目前的MKL都有对应LAPACK95、BLAS95的界面(需要写use LAPACK95和use BLAS95),参数比原本的LAPACK、BLAS的参数啰啰嗦嗦一堆的界面少太多了,调用极其容易,比如gemm(A,B,C)就是矩阵乘。

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
zjxitcc + 3 正解

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

257

帖子

4

威望

4967

eV
积分
5304

Level 6 (一方通行)

3#
 楼主 Author| 发表于 Post on 2019-5-28 12:15:33 | 只看该作者 Only view this author
sobereva 发表于 2019-5-28 06:00
IMSL已经完全过时了,效率也明显不及MKL。
你用MKL方式不对所以误认为麻烦。其实超级简单,只要把“项目” ...

感谢社长,确实是我使用的方式不对。按照您的方法开头写上use LAPACK95没问题了。但调用具体函数时编译出现以下错误:

1>crawdad01.obj : error LNK2019: 无法解析的外部符号 _LA_SYEV,该符号在函数 _MAIN__ 中被引用
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用

想问问这个是什么原因呢?
贫困U 退学与疯子工程学院

257

帖子

4

威望

4967

eV
积分
5304

Level 6 (一方通行)

4#
 楼主 Author| 发表于 Post on 2019-5-28 14:57:47 | 只看该作者 Only view this author
sobereva 发表于 2019-5-28 06:00
IMSL已经完全过时了,效率也明显不及MKL。
你用MKL方式不对所以误认为麻烦。其实超级简单,只要把“项目” ...

很奇怪,现在就算我注释掉调用MKL的代码(use和call什么的),原本能运行的程序也会编译失败,并报错:

1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
1>Debug\Console1.exe : fatal error LNK1120: 1 个无法解析的外部命令

这个又是怎么一回事呢?
贫困U 退学与疯子工程学院

120

帖子

0

威望

2491

eV
积分
2611

Level 5 (御坂)

5#
发表于 Post on 2019-5-28 16:42:39 | 只看该作者 Only view this author
wxhwbh 发表于 2019-5-28 14:57
很奇怪,现在就算我注释掉调用MKL的代码(use和call什么的),原本能运行的程序也会编译失败,并报错:
...

从出错信息看,应该是你使用的Visual Studio工程模板不对,_WinMain@16一般是选择成C语言的Windows Application模板了。如果你只是写控制台程序的话使用Windows Console Application的模板

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
wxhwbh + 5 谢谢

查看全部评分 View all ratings

257

帖子

4

威望

4967

eV
积分
5304

Level 6 (一方通行)

6#
 楼主 Author| 发表于 Post on 2019-5-28 18:37:07 | 只看该作者 Only view this author
gsbear 发表于 2019-5-28 16:42
从出错信息看,应该是你使用的Visual Studio工程模板不对,_WinMain@16一般是选择成C语言的Windows Appli ...

谢谢您。我重新弄了个项目和源代码文件,把源代码粘贴过去才行得通。我其实用的是Windows Console Application,而且之前编译过是可行的,但调用MKL后就各种报错。我猜是按网上的方法折腾了一番可能哪弄出问题来了。
不过现在调用具体函数还是会出问题,报错:

1>Source1.obj : error LNK2019: 无法解析的外部符号 _LA_SYEV,该符号在函数 _MAIN__ 中被引用
1>Debug\Console4.exe : fatal error LNK1120: 1 个无法解析的外部命令

不知道是哪里出了问题。
贫困U 退学与疯子工程学院

120

帖子

0

威望

2491

eV
积分
2611

Level 5 (御坂)

7#
发表于 Post on 2019-5-31 11:47:21 | 只看该作者 Only view this author
wxhwbh 发表于 2019-5-28 18:37
谢谢您。我重新弄了个项目和源代码文件,把源代码粘贴过去才行得通。我其实用的是Windows Console Applic ...

这个是链接错误,应该是没有找到LA_SYEV函数,估计是链接过程中没有把MKL的库链接上,估计得自己修改工程配置把相关库的lib文件链接上,或者就是一开始模板没选对。

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
wxhwbh + 5 谢谢

查看全部评分 View all ratings

257

帖子

4

威望

4967

eV
积分
5304

Level 6 (一方通行)

8#
 楼主 Author| 发表于 Post on 2019-5-31 14:53:37 | 只看该作者 Only view this author
gsbear 发表于 2019-5-31 11:47
这个是链接错误,应该是没有找到LA_SYEV函数,估计是链接过程中没有把MKL的库链接上,估计得自己修改工程 ...

谢谢您。我发现可能我调用的函数有问题。我查阅了MKL的手册,比如对于计算特征值的HSEQR函数,手册上有这么几种可选:

Syntax
call shseqr(job, compz, n, ilo, ihi, h, ldh, wr, wi, z, ldz, work, lwork, info)
call dhseqr(job, compz, n, ilo, ihi, h, ldh, wr, wi, z, ldz, work, lwork, info)
call chseqr(job, compz, n, ilo, ihi, h, ldh, w, z, ldz, work, lwork, info)
call zhseqr(job, compz, n, ilo, ihi, h, ldh, w, z, ldz, work, lwork, info)
call hseqr(h, wr, wi [,ilo] [,ihi] [,z] [,job] [,compz] [,info])
call hseqr(h, w [,ilo] [,ihi] [,z] [,job] [,compz] [,info])

对于最后一种hseqr,使用的参数最少,而且我只需要特征值而不需要特征向量,因此应该是最好的选择。但调用这个函数会报错:

error #6285: There is no matching specific subroutine for this generic subroutine call.   [HSEQR]

而调用前面的参数多点的函数,比如dhseqr什么的,编译就没问题。您知道这个是什么原因吗?非常感谢。
贫困U 退学与疯子工程学院

120

帖子

0

威望

2491

eV
积分
2611

Level 5 (御坂)

9#
发表于 Post on 2019-6-1 12:02:07 | 只看该作者 Only view this author
wxhwbh 发表于 2019-5-31 14:53
谢谢您。我发现可能我调用的函数有问题。我查阅了MKL的手册,比如对于计算特征值的HSEQR函数,手册上有这 ...

hseqr函数的必选参数有两个h,w如果你提供的参数没有这两个信息自然会编译出错,而其他的可选参数是否有规定哪些必须一起出现,你可能要详细看一下MKL库的手册。

评分 Rate

参与人数
Participants 2
eV +8 收起 理由
Reason
水果皮儿 + 3 谢谢
wxhwbh + 5 谢谢

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 21:40 , Processed in 0.200534 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list