24小时热门版块排行榜    

查看: 4109  |  回复: 12
本帖产生 1 个 QC强帖 ,点击这里进行查看

ChemiAndy

木虫 (正式写手)


[交流] 【ChemiAndy个人文集】NBO5.G Standalone (GENNBO) Linux下的编译和使用 已有9人参与

(此帖已在mdbbs.org发过,所带附件可去那边下载)

我需要计算Guanidinium ion的多个resonance structure对overall structure的相对贡献(百分比)。经google,从这个教程(猛击: Introduction to GAUSSIAN 98W and GENNBOW 5.0 NBO)了解到,需要使用NBOGEN。此GENNBO似乎并没有集成在Gaussian03/09所带的NBO3.X中,故需使用NBO源代码编译所谓的standalone程序gennbo.

编译很不顺利,辗转搜索很多信息方得以通过,因此记下来供别人参考。
我的编译平台:
硬件: AMD64
OS: Ubuntu 10.04
编译器: Intel fortran compiler 11 (ifort) (安装ifort请参考这里)

如下编译过程分为4个步骤,下载,劈分源代码nbo_5g.src,重新生成源代码gennbo.f,修改bug并编译。
阴影中文字为linux命令和输出。

1. 小木虫论坛下载源代码:
http://www.mdbbs.org/viewthread.php?tid=12591&highlight=nbo
解压后,应当是名为nbo_5g.src的源文件(52192行)和一个enable.f (560行)的文件。

2. 生成gennbo.f
(1) 首先将nbo_5g.src转成linux格式,并劈成2个文件
NBO_5GA.SRC: 包括nbo_5g.src的前25134行,此部分包括主要的NBO计算
NBO_5GB.SRC: nbo_5g.src的其余部分,即后27070行,此部分包括所有的NRT计算

格式转换
$> dos2unix *
//Ubuntu10.04中没有dos2unix,可以安装"apt-get install tofrodos"然后用"fromdos *"命令转换格式

文件分割:
$> head -25125 nbo_5g.src >> NBO_5GA.SRC
$> tail -27067 nbo_5g.src >> NBO_5GB.SRC

确认你得到的NBO_5GA.SRC的文件尾和NBO_5GB.SRC的文件头与如下所列相同:
$> tail NBO_5GA.SRC
      SAVE ZERO
DATA ZERO/0.0D0/
C
SUM = ZERO
DO 10 I = 1,N
SUM = SUM + X(I)*X(I)
10 CONTINUE
VECLEN = SQRT(SUM)
RETURN
END


$> head NBO_5GB.SRC
C***********************************************************************
C NBO 5.G -- Natural Bond Orbital Analysis Programs
C (c) Copyright 1996-2008 Board of Regents of the University of Wisconsin System
C     on behalf of the Theoretical Chemistry Institute.  All Rights Reserved.
C***********************************************************************
C  NRT - NATURAL RESONANCE THEORY    Version 2.6
C***********************************************************************
C
C  NRT MODULE ROUTINES:
C


(2) 编译enable.f,生成enable, 并执行它获得gennbo.f
$> ifort enable.f -o enable
$> ./enable

Currently supported environments:

(1) 32-bit Unix   UNIX/LINUX
(2) 64-bit Unix   UNIX/LINUX
(3) DOS           PC DOS
(4) VMS           VAX VMS

Environment to enable (1-4)? 1  //没错,选择32bit,尽管我们的平台是64bit,见后记

Currently supported NBO versions:

(1) GEN      GENNBO  (standalone)
(2) G03      Gaussian 03
(3) G98      Gaussian 98
(4) G94      Gaussian 94
(5) GMS      GAMESS
(6) NWC      NWChem
(7) AM1      MOPAC or AMPAC

NBO Program version to enable (1-7)? 1

Module  gennbo.f    will be created; OK to proceed [Y]/N? Y

NBO source (NBO_5G.SRC ) contains 52194 lines of code.
A total of 43434 lines were written to  gennbo.f
including 272 utility and  2 operating system dependent lines.


这样就得到了gennbo.f文件


3. 修改gennbo.f中的2处bug

(1) 搜索 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN  在THEN前补2个右括号
(2) 搜索 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 在THEN前补1个右括号
(所补括号要跟在原括号后, THEN前必须有空格)

感谢参考2中demonangel 的讨论,不修改这2处bug很难编译通过。


4. 编译gennbo.f
$> ifort gennbo.f -o gennbo
应该没有任何warning或error,随后得到可执行的gennbo;
使用gfortran编译时得到一大堆warning,没有通过,遂放弃。


5. 关于所需的内存大小,可以直接从gennbo的log文件的前几行读出来,
Storage needed:       85140 in NPA,       68112 in NBO (  20000000 available)
上面为10原子使用6-311++G(d,p)基组,仅使用85K+68K=~150K的内存,说明NBO计算不太消耗内存,源代码所设定的20M对于大型体系也应该是足够的。否则可以通过查找gennbo.f中的"MEMORY = 20000000" 然后修改为你所需的。注意20后面6个0表示20M。

关于如何通过GENNBO计算各共振结构的贡献,请看下一篇博文。

参考:
1. "成功编译NBO 5.G on GAMESS (January 12, 2009 R3.)" http://muchong.com/html/201001/1808338.html
2. http://58.213.153.47/viewthread. ... p;extra=&page=2


************************
后记:我原先按照参考1(GAMESS编译)切割nbo_5g.src,编译成功后,测试表明得到的程序不能正常计算,因为一般一个NBO分析应该是1-2分钟的事情,但是它既不退出,也不报错,查看log file,只有聊聊数行,因此,只能强行退出。

后来,仔细看了看NBO_5GA.SRC, 和NBO_5GB.SRC,发现它切割的地方很奇怪,于是从5GA的末端找到NRT部分开始的地方,全部复制到5GB的前面,重新编译。还是不行,运算陷入死循环。

后来还按照NBO5 FAQ 使用古老的g77编译,但是编译无法通过,提示COMMON BLOCK的大小不匹配。就在已经绝望之后,发生了一件古怪的事情,我再次用ifort编译,得到的程序运算一切正常。所有的计算在几十秒内成功完成。。。哥,这到底是为什么?

后来用UltraCompare仔细比较,原来是我无意中在enable那一步使用了32bit,而只有选择32bit编译才能通过,正确地选择 64bit却全部失败... 神奇的NBO5...或者, 只是我的平台的问题。那么,前一步切割NBO文件的位置到底有没有影响呢?从enable.f的源码去读,应该没有影响。所以,如果你的编译出了问题,不要放弃,just keep trying...


附件:
(1) 我得到的gennbo.f。这样你无须去切割和修改bug,直接使用“ifort gennbo.f -o gennbo"搞它。前提是你必须是64位linux。否则按照我上面的顺序折腾。
(2) 我得到的gennbo程序,如果你使用和我相同的平台(AMD64-4cores/Ubuntu10.04),或许可以执行,我没有尝试。



NBO5.G Standalone (GENNBO) Linux下的编译和使用(二)

下面说明使用NBO计算某一分子(Guanidinium as an example)个共振式对总体结构的相对贡献百分比。
Guanidinium离子(C+(NH2)3) 理论上有4种最可能的共振式,下面的计算表明只有3种共振式对总体结构有贡献。

过程很简单,用gauss03/09生成.47文件,然后.47作为输入文件用gennbo跑一下即可。

gennbo的运行很简单:
$> gennbo < input.47 > output.log  //PS: replace "input / output" with your file name

关键是input.47文件的生成。它是由gaussian 98/03/09 计算生成的。


1. .47文件的生成
生成这个文件的输入文件job.gjf如下:

%mem=1024MB
# rb3lyp/6-311++g(d,p) pop=NBOread

TEST: Guanidinium Ion

1 1
C
N                  1              B1
N                  1              B2    2              A1
N                  1              B3    3              A2    2              D1
H                  2              B4    1              A3    3              D2
H                  2              B5    1              A4    3              D3
H                  3              B6    1              A5    4              D4
H                  3              B7    1              A6    4              D5
H                  4              B8    1              A7    3              D6
H                  4              B9    1              A8    3              D7

   B1             1.33487700
   B2             1.33487641
   B3             1.33487641
   B4             1.00881433
   B5             1.00881433
   B6             1.00881391
   B7             1.00881451
   B8             1.00881391
   B9             1.00881451
   A1           119.99998985
   A2           120.00002031
   A3           121.37052848
   A4           121.37052848
   A5           121.37057951
   A6           121.37057291
   A7           121.37057951
   A8           121.37057291
   D1           180.00000000
   D2            13.00659769
   D3          -166.99340231
   D4          -166.99338955
   D5            13.00660166
   D6          -166.99338955
   D7            13.00660166

$NBO ARCHIVE FILE=MYJOB $END  //PS: 此行前后均需一空行


运行gaussian
$> g09 job.gjf job.log
即可得到 MYJOB.47文件  // PS: replace MYJOB with any name you like

2. 修改MYJOB.47文件
将如下内容替换MYJOB.47中的第二行 "$NBO $END"
$NBO NRT $END
$NRTSTR
STR1
LONE 2 1 3 1 4 1 END
BOND S 1 2 S 1 3 S 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
STR2
LONE 3 1 4 1 END
BOND D 1 2 S 1 3 S 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
STR3
LONE 2 1 4 1 END
BOND S 1 2 D 1 3 S 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
STR4
LONE 2 1 3 1 END
BOND S 1 2 S 1 3 D 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
$END


注:单个可能的共振结构由LONE和BOND说明
(1) LONE指明孤对电子(Lone Pair)在几号原子上和有多少对LP
LONE 2 1 3 1 4 1 END
说明在原子序号为2,3,4的原子上分别各有一对孤对电子
(2) BOND指明键级
S 1 2 说明在原子1,2之间有单键single
D 1 3 说明在原子1,3之间有双键double
(T n m 说明在原子n,m之间有三键triple)

上例指明了guanidinium离子的4个可能的共振结构

3. 然后运行gennbo
$> gennbo < MYJOB.47 > MYJOB.log

即可得到结果
STR1: 0%
STR2: 31.65%
STR3: 31.65%
STR4: 31.65%

为什么总和不是100%呢?还有5%哪去了?看来要仔细阅读manual,看看这个百分比贡献是如何计算出来的,也欢迎指教。


参考:
1. NBO5官方网站: http://www.chem.wisc.edu/~nbo5
2. Grigoriy A. Sereda, "Introduction to GAUSSIAN 98W and GENNBOW 5.0"
3. NBO5 Manual,  http://www.mdbbs.org/thread-17437-1-2.html

by ChemiAndy from一花一世界@百度空间

[ Last edited by yjcmwgk on 2010-9-25 at 15:14 ]

上传gennbo.f
可用fortran编译器编译 $ ifort gennbo.f[ Last edited by ChemiAndy on 2011-9-15 at 06:38 ]

MYJOB.47的文件输入有错:gdn应该只有两个共振结构。三根单键的非极性结构,和两单一双的极性结构。极性结构虽然有三个isomer, 但NBO只需要输入1个,否则得到错误的结果。
上面例子中的结果就是错的,它得到
三根单键的非极性结构 0%
两单一双的极性结构  94.94%
正确的结果应该为
三根单键的非极性结构 7.45%
两单一双的极性结构  58.82%

正确的MYJOB.47部分为(去掉最后两个重复的两单一双的极性结构的定义即可)
CODE:
$NBO NRT $END
$NRTSTR
STR1
LONE 2 1 3 1 4 1 END
BOND S 1 2 S 1 3 S 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
STR2
LONE 3 1 4 1 END
BOND D 1 2 S 1 3 S 1 4 S 2 5 S 2 6 S 3 7 S 3 8 S 4 9 S 4 10 END
END
$END

另外一个例子BF3,共振结构定义:
CODE:
$NRTSTR
  STR
    LONE 2 3 3 3 4 3 END
    BOND S 1 2 S 1 3 S 1 4 END
  END
  STR
    LONE 2 2 3 3 4 3 END
    BOND D 1 2 S 1 3 S 1 4 END
  END
$END

参考结果:
三根单键的非极性结构:78%
两单一双的极性结构: 4%

[ Last edited by ChemiAndy on 2015-3-16 at 07:38 ]
回复此楼

» 收录本帖的淘帖专辑推荐

模型 - 模拟 - 统计 - 热力学 MS资料 气态分子化学动力学 VASP

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sjzxbe

木虫 (小有名气)

收藏一下


小木虫(金币+0.5):给个红包,谢谢回帖交流
写得很详细,学习了,在论坛中曾有windows版的GenNBO5.0w,用着也很方便。
收藏了,也是经过磨练出来的。回头试一试。谢谢分享。

[ Last edited by sjzxbe on 2010-8-13 at 07:31 ]
2楼2010-08-13 06:57:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

erylingjet

铁杆木虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
3. 然后运行gennbo
$> gennbo < MYJOB.47 > MYJOB.log

即可得到结果
STR1: 0%
STR2: 31.65%
STR3: 31.65%
STR4: 31.65%
为什么总和不是100%呢?还有5%哪去了?看来要仔细阅读manual,看看这个百分比贡献是如何计算出来的,也欢迎指教。


按照您说的从头到尾,没出现任何问题,到这一步,说是: -bash :gennbo: command not found

如果直接./gennbo的话,出现如下错误:

forrtl: Illegal seek
forrtl: severe (20): REWIND error, unit 5, file /dev/pts/6
Image              PC                Routine            Line        Source            
gennbo             00000000004FE383  Unknown               Unknown  Unknown
gennbo             00000000004FC862  Unknown               Unknown  Unknown
gennbo             00000000004D6E70  Unknown               Unknown  Unknown
gennbo             00000000004A536E  Unknown               Unknown  Unknown
gennbo             00000000004A4FCF  Unknown               Unknown  Unknown
gennbo             00000000004BA2CA  Unknown               Unknown  Unknown
gennbo             000000000040DCA5  Unknown               Unknown  Unknown
gennbo             0000000000403030  Unknown               Unknown  Unknown
gennbo             0000000000402FCC  Unknown               Unknown  Unknown
gennbo             0000000000402F2A  Unknown               Unknown  Unknown
libc.so.6          00000033B151C4BB  Unknown               Unknown  Unknown
gennbo             0000000000402E6A  Unknown               Unknown  Unknown


请多指教!
3楼2010-09-25 15:07:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

calfwoo

金虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
楼上用的什么编译器,是intel的ifort吗
4楼2010-09-26 15:45:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

erinic

新虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
我试过,用WINDOS版本的高斯算的话,没有.47   文件产生, 在WENDOS下怎么才能产生.47文件呢?
5楼2011-01-16 17:07:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kathy2008

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by erinic at 2011-01-16 17:07:15:
我试过,用WINDOS版本的高斯算的话,没有.47   文件产生, 在WENDOS下怎么才能产生.47文件呢?

可否传一份NBO5.G Standalone (GENNBO) Linux,去分子模拟论坛下载不下来,积分不够。邮箱yhuaqing2008@gmail.com,谢谢。
6楼2011-03-02 14:12:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kathy2008

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by erylingjet at 2010-09-25 15:07:07:
按照您说的从头到尾,没出现任何问题,到这一步,说是: -bash :gennbo: command not found

如果直接./gennbo的话,出现如下错误:

forrtl: Illegal seek
forrtl: severe (20): REWIND error, unit 5,  ...

我也遇到了这样的问题。请指教。
7楼2011-03-09 14:27:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ifmc1234

木虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by kathy2008 at 2011-03-02 14:12:23:
可否传一份NBO5.G Standalone (GENNBO) Linux,去分子模拟论坛下载不下来,积分不够。邮箱yhuaqing2008@gmail.com,谢谢。

同样的 你现在又没?
8楼2011-04-29 21:53:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jianqin

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by ChemiAndy at 2010-08-12 07:05:19:
(此帖已在mdbbs.org发过,所带附件可去那边下载)

我需要计算Guanidinium ion的多个resonance structure对overall structure的相对贡献(百分比)。经google,从这个教程(猛击: Introduction to GAUSSIAN 98W an ...

请教lz关于.47文件的生成问题。
按照你的帖子,生成.47文件应该输入
# rb3lyp/6-311++g(d,p) pop=NBOread
我的问题是, rb3lyp/6-311++g(d,p)起什么作用?如果我输入的结构已经用 rb3lyp/6-311++g(d,p)优化好了,还需要输入 rb3lyp/6-311++g(d,p)吗?我尝试了直接用pop=NBOread,gaussian默认的基组是STO-3g,也产生了.47文件。
这样产生的.47文件与# rb3lyp/6-311++g(d,p) pop=NBOread是否是一样的?
9楼2011-07-25 11:34:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ChemiAndy

木虫 (正式写手)


.47包含的是波函数性质。使用不同的基组(STO-3G和 rb3lyp/6-311++g(d,p))计算得到的.47文件是不同的。

只能保证在Ubuntu下+ifort11.1下编译通过。

[ Last edited by ChemiAndy on 2011-10-9 at 11:00 ]
10楼2011-07-25 18:17:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ChemiAndy 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见