24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1709  |  回复: 3
【奖励】 本帖被评价2次,作者寒雨人生增加金币 1.6

[资源] 【原创首发】gfortran4.6+acml5.0.0 GAMESS2012(gmsnbo etc.) ubuntu 12.04 64bit

gfortran4.6+acml5.0.0 GAMESS2012(gmsnbo tinker vb2000 neo) ubuntu 12.04 64bit

以前发过帖子讲述GAMESS2012在ubuntu11.XX 32bit上的编译(链接)。
当时用的是Intel Fortran(Professional)+ mkl,编译的各部分代码都一样。
gfortran安装——在联网状态下用sudo apt-get install gfortran命令即可。
acml数学库可以去AMD的官网下载——注意下载适合的版本,一般5.0.0以上的acml(最新版本是5.2.0)需要4.6以上的gfortran配合,此外请注意要下载acml-5-x-x-gfortran-64bit-int64.tgz;然后解压,进入解压后的文件夹,运行安装脚本,按提示安装。默认的安装路径是/opt/acml5.x.x。
其实这里编译的过程都差不多,有三点需要注意:
1.gmsnbo.src源码修改:
因为是与vb2000一起编译,所以就要多修改几个(共3个)相互冲突的函数名,具体修改如下(来自官网的Bug报告)——
In the nbo_59.src source code, use a text editor to
globally replace "GETDM" by "NGETDM" throughout the
code. (This avoids conflict with SR GETDM as introduced
in the 25-Mar-2010 GAMESS version.) If both NBO
and VB2000 are being compiled with GAMESS, you should
also replace "REDUC1" by "NREDUC1" and "ANGLES" by
"NANGLES" in the definitions and calls to SR REDUC1
and SR ANGLES.

2.以前网络上(国内的网页,针对那个泄露出来的09年?月的版本的,---下载链接---)流传的一个帖子报告的gmsnbo.src的两个Bug,其修改貌似是有问题的——
以前的修改方式是这样的:
8427 行
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh'))) THEN
15421 行
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh')) THEN
发现这种修改存在问题的过程是这样的——
按上述修改完成之后,使用gfortran编译。其他所有模块都能正常编译成功,而gmsnbo无法正常编译,给出的错误提示的大意如下:
8427行
.NE.运算错误,原因是INTEGER(8)/CHARACTER。(NCTR是整型变量!)
15421行
.NE.运算错误,原因是INTEGER(8)/CHARACTER。(IATNO函数返回的也是整型变量!)

查阅NBO5的用户手册,可知:NCTR应该是原子中心的编号;IATNO函数返回的是原子序数;NAMEAT函数返回的是Hollerith(一种符号标记方法)原子符号。
从逻辑上讲,程序员不会轻易将两个不同类型的变量进行比较运算。而以前流行的这种修改方式显然是犯了这种逻辑错误的。笔者猜想,之所以用Intel Fortran进行编译而没有出现报错,可能是因为Intel Fotran能自动将不同类型的变量转化成同一种类型之后再进行比较,同时它也应该还能自行将布尔型变量视作0和1进行处理。

搞清楚以上关系之后,笔者进行了如下修改:
8427 行
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR)).NE.'gh') THEN
15421 行
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR)).NE.'gh') THEN
按理说这样才是符合逻辑的。

笔者接着使用./comp gmsnbo >& gmsnbo.src &命令进行gmsnbo的编译。结果仍人在这两个地方出现同样的报错信息。
但是这次的提示是——NAMEAT处为INTEGER(8),不能与CHARACTER*2型的'gh'进行比较。
这次笔者觉得很困惑,照例说,NAMEAT应该是返回CHARACTER型结果的。于是找到了FUNCTION NAMEAT看看。
结果发现,其实NAMEAT函数中的NAME、IGHOST、BLANK变量预置的数据中根也本没有包含'gh'。
所以,笔者在gmsnbo.src中搜索了'gh'这个关键字,并发现了一个名为CHARAT的函数,返回的是字符串,其中有个变量IGHOST预置了字符串'gh'。
笔者再次查阅手册,发现函数CHARAT(IZ)返回的是对应于原子序数IZ的原子符号(比如CHARAT(2)返回的是字符串He)。

基于以上发现,笔者大胆地做了如下修改:
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.CHARAT(IATNO(NCTR)).NE.'gh') THEN
15421 行
IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改为
IF(MORB.EQ.0.AND.CHARAT(IATNO(NCTR)).NE.'gh') THEN
并各在这两行代码所在的子例程(SUBROUTINE)的变量申明部分加上如下内容(其实应该不用加的,因为声明函数时已经带上属性了,但是不加这两行貌似回报错):
CHARACTER*2,EXTERNAL :: CHARAT

注意:关于GAMESS源码的一些修改可以参考以前的改法,但是可能就是行数对不上了。这些在我以前的帖子中有提到(见此文开头链接)。

3.tinker源码的修改:
以前tinker源码是不需要修改的。但是使用gfortran之后,如果不做修改,就会无法编译Libtad模块。这个错误出现在fortran的内置获取系统时间的函数idate的调用上,在tinker源码Libtad.f中,直接使用的是idate(year,month,day)。这样,gfortran就会提示你,idate函数的参数太多。
笔者查阅了gfortran的编程手册之后,发现gfortran中idate函数其实是把参数换成了一个含有3个成员的一维数组。知道这点就很容易修改了,具体修改方式如下:
另外申明一个变量:integer date(3)
然后将idate(year,month,day)换成idate(date)
再写几个赋值语句就可以了:year=date(1)
month=date(2)
day=date(3)

至此,所有新的修改都已经说明完毕。可以按以前的办法,编译,link,运行tests里边的算例了。
PS:没有测试过gmsnbo。笔者不是计算专业出身,现在也不做理论计算,纯属业余瞎捣鼓。其实发现gmsnbo的源码很多是要改的。但是不知道从哪里下手好。需要阅读手册,需要认真读源码,但是笔者时间不够,那些源码又写得有些杂乱,所以笔者也就不了了之了。以上是笔者花了4个晚上捣鼓的一点东西。也许根本就没用,但是大家可以试一试,看看会有什么结果。

[ 来自科研家族 木虫量化 ]

[ Last edited by 寒雨人生 on 2012-10-12 at 09:43 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abbott

金虫 (著名写手)


★★★★★ 五星级,优秀推荐

想学习 确无处入手.

期望某天也可以拥有大侠的水平.
2楼2012-10-12 07:58:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yun_hai_yan

金虫 (小有名气)


★★★★★ 五星级,优秀推荐

为什么下载acml-5-x-x-gfortran-64bit-int64.tgz ,我的amd cpu 也是下载这个吗?
3楼2013-05-23 10:18:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
引用回帖:
3楼: Originally posted by yun_hai_yan at 2013-05-23 10:18:54
为什么下载acml-5-x-x-gfortran-64bit-int64.tgz ,我的amd cpu 也是下载这个吗?

跟CPU关系不大,主要是系统。
你要是用的Linux-64bit,那么就用这个吧。
4楼2013-05-23 18:02:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 寒雨人生 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 调剂 +7 不逢春 2026-04-05 8/400 2026-04-05 23:34 by 来看流星雨10
[考研] 08专硕275调剂 +5 AaAa7420 2026-04-05 5/250 2026-04-05 18:01 by jkddd
[考研] 359求调剂22408 +3 123456789qw 2026-03-31 3/150 2026-04-05 10:09 by zhq0425
[考研] 081700化学工程与技术 一志愿中海洋 323 求调剂学校 +16 披星河 2026-04-03 16/800 2026-04-05 09:00 by dick_runner
[考研] 311分 22408 求调剂 +3 bing_bot 2026-04-03 3/150 2026-04-05 00:43 by chongya
[考研] 344材料与化工调剂 +9 调剂上岸玘 2026-04-03 9/450 2026-04-04 23:10 by happyddm
[考研] 本科211 分数293请求调剂 +4 莲菜就是藕吧 2026-04-01 4/200 2026-04-04 22:32 by hemengdong
[考研] 321求调剂 +6 认真求上学 2026-04-03 6/300 2026-04-04 19:51 by dongzh2009
[考研] 321求调剂 +13 认真求上学 2026-04-02 13/650 2026-04-04 18:23 by macy2011
[考研] 求生物学专业调剂-332分 +5 云朵遛弯指南 2026-04-04 5/250 2026-04-04 10:05 by rzh123456
[考研] 322求调剂 +4 FZAC123 2026-04-03 4/200 2026-04-03 20:55 by zhq0425
[考研] 330求调剂 +3 白神呜呼呼 2026-04-02 3/150 2026-04-03 10:15 by 蓝云思雨
[考研] 085600 295分求调剂 +19 W55j 2026-03-30 23/1150 2026-04-03 09:53 by 千千运气
[考研] 材料考研调剂 +10 Gs大王 2026-04-02 10/500 2026-04-03 09:47 by 遗忘消失的灆
[考研] 272求调剂,接受跨专业调剂! +4 闲鱼卢 2026-03-31 4/200 2026-04-02 11:18 by guyan1000
[考研] 一志愿安徽大学计算机科学与技术学硕,331分求调剂 +5 蒋昌鹏qtj 2026-04-01 5/250 2026-04-02 08:10 by fxue1114
[考研] 304求调剂 +12 素年祭语 2026-03-31 15/750 2026-04-01 22:41 by peike
[考研] 一志愿西安交大材料学硕(英一数二)347,求调剂到高分子/材料相关专业 +7 zju51 2026-03-31 9/450 2026-04-01 19:35 by CFQZAFU
[硕博家园] 博一被送出联培感觉不适应怎么办 +3 全村的狗 2026-03-31 3/150 2026-04-01 10:44 by 328838485
[考研] 一志愿西电085401数一英一299求调剂 六级521 +4 爱吃大鸭梨 2026-03-31 4/200 2026-03-31 11:51 by 搏击518
信息提示
请填处理意见