请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 1345|回复: 12

[算法与编程] 基于fch中的Hessian矩阵计算振动频率的简单程序Hess2freq

[复制链接]

1万

帖子

25

威望

1万

eV
积分
32348

管理员

公社社长

发表于 2016-5-27 07:30:38 | 显示全部楼层 |阅读模式
基于fch中的Hessian矩阵计算振动频率的简单程序Hess2freq

文/Sobereva @北京科音  2016-May-27

写了个教学目的的程序Hess2freq,可以读取fch中的Hessian矩阵来计算谐振频率和正则坐标。给了非常易读的源代码,而且文档里把用到的公式和原理都详细介绍了,对想了解振动分析原理和细节的人应该会很有益。

下载地址: http://sobereva.com/soft/Hess2freq.rar


输出例子:
Hess2freq: Load Hessian from .fch file and then compute harmonic frequencies
Programmed by Sobereva (Sobereva@sina.com)
Release date: 2016-May-27

The number of atoms:     4
The number of vibrational modes:     6
Atomic masses:
   12.000000    1.007825    1.007825   15.994915

************ Force constant matrix (i.e mass-weighted Hessian) ************
             1             2             3             4             5      
     1  0.918452D-01  0.427913D-01  0.170607D-05  0.235189D-01 -0.105091D-02
     2  0.427913D-01  0.504781D-02 -0.520948D-05 -0.159298D-01 -0.181706D-01
     3  0.170607D-05 -0.520948D-05  0.534475D-02 -0.499779D-05 -0.157484D-05
     4  0.235189D-01 -0.159298D-01 -0.499779D-05  0.332464D-02 -0.708577D-02
     5 -0.105091D-02 -0.181706D-01 -0.157484D-05 -0.708577D-02  0.510611D-01
     6 -0.192394D-04  0.167567D-04  0.216766D-02  0.189037D-04 -0.886049D-06
     7 -0.852345D-01 -0.332194D-01  0.279538D-04 -0.285394D-01 -0.259396D-02
     8 -0.478064D-01  0.343795D-01  0.187013D-04  0.414582D-01 -0.178675D-01
     9  0.506723D-04  0.711252D-05 -0.114972D-01 -0.112089D-05  0.343570D-05
    10 -0.640613D-01 -0.247270D-01 -0.724008D-05 -0.140419D-01  0.334003D-02
    11 -0.248003D-01 -0.844094D-02  0.213252D-06  0.516973D-02  0.740654D-02
    12 -0.936792D-05 -0.147931D-05 -0.228756D-02 -0.134884D-06  0.724064D-06
             6             7             8             9            10      
     1 -0.192394D-04 -0.852345D-01 -0.478064D-01  0.506723D-04 -0.640613D-01
     2  0.167567D-04 -0.332194D-01  0.343795D-01  0.711252D-05 -0.247270D-01
     3  0.216766D-02  0.279538D-04  0.187013D-04 -0.114972D-01 -0.724008D-05
     4  0.189037D-04 -0.285394D-01  0.414582D-01 -0.112089D-05 -0.140419D-01
     5 -0.886049D-06 -0.259396D-02 -0.178675D-01  0.343570D-05  0.334003D-02
     6  0.865363D-03  0.273490D-04 -0.423721D-04 -0.466045D-02  0.505424D-05
     7  0.273490D-04  0.336434D+00  0.848079D-01 -0.147836D-03 -0.345946D-02
     8 -0.423721D-04  0.848079D-01 -0.715275D-01 -0.133212D-04  0.971329D-02
     9 -0.466045D-02 -0.147836D-03 -0.133212D-04  0.247107D-01 -0.649994D-05
    10  0.505424D-05 -0.345946D-02  0.971329D-02 -0.649994D-05  0.598807D-01
    11 -0.365557D-05  0.813642D-02 -0.733868D-02 -0.367918D-05  0.181410D-01
    12 -0.924923D-03  0.603159D-05 -0.221842D-05  0.492551D-02  0.663398D-05
            11            12      
     1 -0.248003D-01 -0.936792D-05
     2 -0.844094D-02 -0.147931D-05
     3  0.213252D-06 -0.228756D-02
     4  0.516973D-02 -0.134884D-06
     5  0.740654D-02  0.724064D-06
     6 -0.365557D-05 -0.924923D-03
     7  0.813642D-02  0.603159D-05
     8 -0.733868D-02 -0.221842D-05
     9 -0.367918D-05  0.492551D-02
    10  0.181410D-01  0.663398D-05
    11  0.729420D-02  0.165643D-05
    12  0.165643D-05  0.977187D-03
Diagonalization passed

************ Normal coordinates (columns) ************
             1             2             3             4             5      
     1    0.0666        0.0130        0.0000        0.0513        0.4179   
     2   -0.1089        0.1194       -0.0000       -0.0833        0.1751   
     3   -0.0000        0.0001        0.1312       -0.0000        0.0001   
     4   -0.3936       -0.9639        0.0004       -0.1564        0.1945   
     5    0.0303       -0.0534        0.0001        0.9406       -0.2801   
     6    0.0004        0.0001        0.1834        0.0000       -0.0000   
     7   -0.1713        0.0346       -0.0005        0.0914        0.7221   
     8    0.8931       -0.2116       -0.0001       -0.2670        0.0714   
     9   -0.0001       -0.0004       -0.9730        0.0000       -0.0002   
    10   -0.0144        0.0488       -0.0000       -0.0344       -0.3713   
    11    0.0235       -0.0729        0.0000        0.0200       -0.1182   
    12    0.0000       -0.0000       -0.0487       -0.0000       -0.0000   
             6      
     1   -0.1015   
     2   -0.0311   
     3    0.0000   
     4   -0.0689   
     5   -0.0080   
     6    0.0001   
     7    0.9710   
     8    0.2015   
     9   -0.0005   
    10    0.0193   
    11    0.0111   
    12    0.0000   

The frequencies (cm-1) corresponding to overall translation and rotation:
    -0.00997     0.01937    -0.05532   -12.87321   -15.76915   -19.42877
Harmonic vibrational frequencies:
Mode    1:   -0.56590E+14 Hz    -1887.64948 cm-1
Mode    2:    0.23453E+14 Hz      782.31259 cm-1
Mode    3:    0.27533E+14 Hz      918.38630 cm-1
Mode    4:    0.38543E+14 Hz     1285.65606 cm-1
Mode    5:    0.58055E+14 Hz     1936.50274 cm-1
Mode    6:    0.96313E+14 Hz     3212.64652 cm-1

评分

参与人数 9eV +44 收起 理由
arsc + 4 好物!
KiritsuguPapa + 5 赞!
卡开发发 + 5 好物!
chrischen1128 + 5 谢谢
jliang + 5 谢谢
brothers + 5 好物!
captain + 5 好物!
zhanfei + 5 好物!
ruanyang + 5 好物!

查看全部评分

北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)
计算化学公社论坛:http://bbs.keinsci.com(高水平、高人气、综合性计算化学交流论坛)
思想家公社QQ群1号:18616395,2号:466017436。用于讨论理论、计算化学,两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。研究方向和理论、计算化学无关者勿加,以免浪费宝贵的空位

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

2309

帖子

9

威望

3698

eV
积分
6187

Level 6 (一方通行)

首席卖萌官

发表于 2016-5-27 08:49:07 | 显示全部楼层
沙发
为雪国耻身先去,重整河山待后生。

1554

帖子

2

威望

2702

eV
积分
4296

Level 6 (一方通行)

给dalao们倒茶

发表于 2016-5-27 10:16:58 | 显示全部楼层
大赞sob老师。问一个问题,Lapack库在windows上是如何配置到VS2010中的?看了许多教程,都未成功,因为自己一直编写小程序从来没用什么数学库,借此机会问问老师这个该如何配置?我在网站上下载了windows版本的lapack库,打开文件夹里面好多的东西,不知道哪些应该放在VS中,求老师指点。(PS:没有看到*.lib文件,只找到了include文件夹,所以不知该如何是好)

下载的lapack的windows版本

下载的lapack的windows版本
淡泊以明志,宁静以致远。

39

帖子

0

威望

957

eV
积分
996

Level 4 (黑子)

发表于 2016-5-27 10:18:14 | 显示全部楼层
Sob老师的物理功底真深!相比之下让学物理的人都感到惭愧!

1万

帖子

25

威望

1万

eV
积分
32348

管理员

公社社长

 楼主| 发表于 2016-5-27 16:12:31 | 显示全部楼层
978142355 发表于 2016-5-27 10:16
大赞sob老师。问一个问题,Lapack库在windows上是如何配置到VS2010中的?看了许多教程,都未成功,因为自己 ...


blas库在CVF/ivf下的使用:
新建一个工程,类型选静态库。把blas库所有.f都添加进source file里,然后build,就得到了.lib文件。

lapack在CVF/ivf下的使用
把lapack压缩包内的SRC内的.f都加入工程,把INSTALL里的辅助子程序slamch.f和dlamch.f加入子程序。把BLAS库文件加入工程。build即可。

blas在linux下编译:
解压后,把make.inc里面编译器改成自己的。然后make即可。

lapack在linux下编译:
解压后,把make.inc.example改名为make.inc,把FORTRAN、LOADER都改为ifort,把OPTS改成-O3,把BLASLIB改成blas.a的路径。然后make即可。
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)
计算化学公社论坛:http://bbs.keinsci.com(高水平、高人气、综合性计算化学交流论坛)
思想家公社QQ群1号:18616395,2号:466017436。用于讨论理论、计算化学,两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。研究方向和理论、计算化学无关者勿加,以免浪费宝贵的空位

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

1554

帖子

2

威望

2702

eV
积分
4296

Level 6 (一方通行)

给dalao们倒茶

发表于 2016-5-27 20:11:39 | 显示全部楼层
sobereva 发表于 2016-5-27 16:12
blas库在CVF/ivf下的使用:
新建一个工程,类型选静态库。把blas库所有.f都添加进source file里,然后 ...

大赞sob老师,谢谢,十分感谢,总能在这里找到十分正确又细致的答案,向sob学习,向sob看齐。
淡泊以明志,宁静以致远。

204

帖子

0

威望

1082

eV
积分
1286

Level 4 (黑子)

发表于 2017-9-11 19:39:28 | 显示全部楼层
sob老师,您好!
目前在学习Fortran编程,正在跟着您写的Hess2freq程序练习。
练习过程中发现您的程序中 loclabel子程序部分自己不怎么理得清关系,您可以简单说一下是怎么在某个文件中找到我要的label的呢?
谢谢sob老师。

1万

帖子

25

威望

1万

eV
积分
32348

管理员

公社社长

 楼主| 发表于 2017-9-11 20:29:58 | 显示全部楼层
让你变成回忆 发表于 2017-9-11 19:39
sob老师,您好!
目前在学习Fortran编程,正在跟着您写的Hess2freq程序练习。
练习过程中发现您的程序中  ...


loclabel就是定位到含有某一串字符的那一行的子程序
从文本文件中读取信息的时候,得先定位到合适的位置,才能开始读取,loclabel就是用来干这个的。每一部分数据输出之前肯定会有一些提示字符能用来定位。
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)
计算化学公社论坛:http://bbs.keinsci.com(高水平、高人气、综合性计算化学交流论坛)
思想家公社QQ群1号:18616395,2号:466017436。用于讨论理论、计算化学,两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。研究方向和理论、计算化学无关者勿加,以免浪费宝贵的空位

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

204

帖子

0

威望

1082

eV
积分
1286

Level 4 (黑子)

发表于 2017-9-11 20:51:13 | 显示全部楼层
sobereva 发表于 2017-9-11 20:29
loclabel就是定位到含有某一串字符的那一行的子程序
从文本文件中读取信息的时候,得先定位到合适的位 ...

subroutine loclabel(fileid,label,ifound,irewind)
integer fileid,ierror
integer,optional :: ifound,irewind
character*200 c200
CHARACTER(LEN=*) label
if ((.not.present(irewind)).or.(present(irewind).and.irewind==1)) rewind(fileid)
do while(.true.)
         read(fileid,"(a)",iostat=ierror) c200
        if (index(c200,label)/=0) then
                backspace(fileid)
                if (present(ifound)) ifound=1 !Found result
                return
        end if
        if (ierror/=0) exit
end do
if (present(ifound)) ifound=0
end subroutine
这是sob老师您写的代码,我有几个不明白的地方,恳请您提示下:
1、这里面 ifound、irewind意义是什么,为什么不能直接通过index找到某个特定字符就行。
2、另外我发现,由于具体的字符出现的位置不同,您在主程序中写的也不同。比如 需要原子数的时候,您的程序中并没有read一个空行,我看fchk文件这是由于原子数就出现在查找字符串(原子数)的同一行,但导入质量矩阵等其他的时候,有一个read的空行,是由于这在fchk文件中换行了的原因吗?

因为最近一直在跟着sob老师您写的程序练习编程(如Hess2freq,optDFTW等),这部分内容不是很了解,所以冒昧请教您。 感谢~

1万

帖子

25

威望

1万

eV
积分
32348

管理员

公社社长

 楼主| 发表于 2017-9-11 21:00:15 | 显示全部楼层
让你变成回忆 发表于 2017-9-11 20:51
subroutine loclabel(fileid,label,ifound,irewind)
integer fileid,ierror
integer,optional :: ifoun ...

ifound判断有没有找到相应字符串,irewind用来决定是否做rewind。loclabel不是为了hess2freq专门写的,而是我写的各种程序中都会用到的一个子程序,比较通用。

loclabel将读取位置定位到含有某个字符串的行,如果要读的数据就在那一行,就不需要先read一下跳到下一行。
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)
计算化学公社论坛:http://bbs.keinsci.com(高水平、高人气、综合性计算化学交流论坛)
思想家公社QQ群1号:18616395,2号:466017436。用于讨论理论、计算化学,两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。研究方向和理论、计算化学无关者勿加,以免浪费宝贵的空位

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

204

帖子

0

威望

1082

eV
积分
1286

Level 4 (黑子)

发表于 2017-9-11 21:02:32 | 显示全部楼层
sobereva 发表于 2017-9-11 21:00
ifound判断有没有找到相应字符串,irewind用来决定是否做rewind。loclabel不是为了hess2freq专门写的,而 ...

对,我就是看您的很多程序中都有这样一样loclabel的子程序,所以想了解清楚点一下具体的过程。

大致懂了。

感谢sob老师的回答。谢谢~

204

帖子

0

威望

1082

eV
积分
1286

Level 4 (黑子)

发表于 2018-4-20 20:53:11 | 显示全部楼层
让你变成回忆 发表于 2017-9-11 21:02
对,我就是看您的很多程序中都有这样一样loclabel的子程序,所以想了解清楚点一下具体的过程。

大致懂 ...

sob老师您好,再次请教您编程问题:
在您的程序中用到了showmatgau这个子程序。为什么不单独列成子程序来使用呢?而是在主程序中加入contains 后面接该子程序。
我尝试把这个子程序单独作为模板来使用,因为我觉得这样输出矩阵超级方便。但是我把这部分内容单独写为一个子程序,然后再去调用,就会出现问题,而向您那样放入主程序中,并在之前加入contains,就没有任何问题。
翻阅了一些书籍,没有找到相关的内容。恳求您再次解答。谢谢sob老师。

1万

帖子

25

威望

1万

eV
积分
32348

管理员

公社社长

 楼主| 发表于 2018-4-21 07:57:58 | 显示全部楼层
让你变成回忆 发表于 2018-4-20 20:53
sob老师您好,再次请教您编程问题:
在您的程序中用到了showmatgau这个子程序。为什么不单独列成子程序 ...


只是为了当前这个小程序方便才这样写。

showmatgau本是Multiwfn程序里的子程序,是独立的。
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)
计算化学公社论坛:http://bbs.keinsci.com(高水平、高人气、综合性计算化学交流论坛)
思想家公社QQ群1号:18616395,2号:466017436。用于讨论理论、计算化学,两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。研究方向和理论、计算化学无关者勿加,以免浪费宝贵的空位

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

手机版|北京科音自然科学研究中心|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2018-7-19 17:34 , Processed in 0.364317 second(s), 28 queries .

快速回复 返回顶部 返回列表