计算化学公社

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

[Fortran] 求助高斯展宽的.f90文件编译后使用不能的问题

[复制链接 Copy URL]

25

帖子

0

威望

97

eV
积分
122

Level 2 能力者

……大家好,编程小白请教一下大家一个问题。本来么,用DMol3算周期性结构的Optics,结果得到了线状的吸收光谱,所以只能找把线状光谱转为带状光谱的软件了……
在网上看到一个代码,然而我死活用不了,看了半天估摸着可能是输入文件的问题,不过我完全不知道该怎么处理,这里就只能向大家请教了。
.f90的代码如下,
!---------------------------
PROGRAM GaussianBroadening
!---------------------------
!
! Purpose : Perform a Gaussian broadening on a set of impulse signal data as input.
!           Sigma will be calculated from the hight of the impulses signal.
!           You must input the range and the step of the output data in the proper order.
!           No ouput file to be written, since it is designed to output to standard screen
!           so as to work with gnuplot, as usage shown below.
!           if you want to get an output file with final data, uncommnent related 2 lines.
!           you would get 'g-broadened.dat'
!
! UsageEx : plot '< gbroad.x input.dat width Xmin Xmax Xstep < ' u 1:2 ...
!           in which, width     : FWHM, full width at half maximum, e.g., 3.0
!                     Xmin, Xmax: the range of X in output, e.g., 500 3000
!                     Xstep     : the increment of X in the output, e.g., 2
!
! Note    : all unit of X are the same with input, e.g., cm-1
!
! Author  : Xijun Wang, 2012.12.26
!
                                    
implicit none
                                    
integer, parameter     :: dp = kind(1.0d0)
character(len=20)      :: arg, input
character(len=100)     :: temp
real(dp), allocatable  :: X0(:), Y0(:) ! 0 - input, no 0 - output
integer,parameter      :: inputfile = 10, outputfile = 20
real(dp) ::  X, Y, Xmin, Xmax, Ysum, Yavg, sigma,  pi ! sigma2 is sigma square
integer  :: step, i, j, nline, stat  ! nline: number of lines
logical  :: alive
                                    
CALL getarg(1, arg)
input = trim(arg)
                                    
inquire(file=input, exist=alive)
if( .not. alive) then
   write(*,*) input, "does not exist! "
   stop
end if
                                    
call getarg(2, arg)
read(arg, *) Xmin
call getarg(3, arg)
read(arg, *) Xmax
call getarg(4, arg)
read(arg, *) step
call getarg(5, arg)
read(arg, *) sigma
                                    
! open and count number of lines in input file
open(unit=inputfile, file=input, access="sequential", status="old")
                                    
nline = 0
do
     read(unit=inputfile, FMT=*, END=100) temp
     nline = nline + 1
end do
100 continue
                                    
rewind(inputfile)
                                    
! allocate memory for arrays X0, Y0
allocate(X0(1:nline), Y0(1:nline))
                                    
! read in data from input file
do i = 1, nline
     read(unit=inputfile,FMT=*,iostat=stat) X0(i), Y0(i)
end do
                                    
! Uncomment the following line if you want to output to file
! open(unit=outputfile,file="g-broadended.dat", status='replace', action='write')
                                    
pi = 2.0 * acos(0.0_dp)
                                    
X = Xmin
do while(X .le. Xmax)
     Y = 0.0
     do i = 1, nline
       if( abs(X - X0(i)) .le. 3 * sigma ) then
         Y = Y + Y0(i)/(sigma*sqrt(2*pi)) * exp(-1.0*(X - X0(i))**2.0/(2.0*sigma*sigma) )
       end if
     end do
   ! uncomment the following line if you want to output to file
   ! write(unit=outputfile,fmt="(F6.2,1X,F8.6)") X, Y
     write(*,fmt="(F9.1,1X,F15.8)") X, Y
     X = X + step
end do
                                    
! release memory
deallocate(X0, Y0)
                                    
stop
END PROGRAM GaussianBroadening

gfortran编译成可执行文件后,使用./command运行的时候显示does not exist,我想它本来的意思是输入一个文件名然后读取(是call getarg命令吧?),问题似乎是无法写入文件名就报错了。(还是说我理解有误?)
所以这里诚恳地求助啊……
这个世界……没有神。

3621

帖子

3

威望

1万

eV
积分
18427

Level 6 (一方通行)

第一原理惨品小作坊

2#
发表于 Post on 2015-11-16 19:16:34 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2015-11-16 19:24 编辑

看样子这个程序应该是./command _input Xmin Xmax step sigma这样的运行格式吧。

实际上Dmol3自己本身可以做Gaussian或Lorenzian展宽,不必额外处理。另外,DMol3的TDDFT应该还不能用于计算超过gamma点的周期体系吧(虽然本身TDDFT也找不到合适的泛函算固体激发),结果估计靠不住。

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
sobereva + 2

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

25

帖子

0

威望

97

eV
积分
122

Level 2 能力者

3#
 楼主 Author| 发表于 Post on 2015-11-16 19:25:30 | 只看该作者 Only view this author
卡开发发 发表于 2015-11-16 19:16
看样子这个程序应该是./command _input这样的运行格式吧。

实际上Dmol3自己本身可以做Gaussian或Lorenzi ...

您是说Analysis这个吗?这里选了Gaussian展宽,不知道是我操作有问题还是什么,得到的图只有线状光谱……还是说我差了什么选项?


这个世界……没有神。

3621

帖子

3

威望

1万

eV
积分
18427

Level 6 (一方通行)

第一原理惨品小作坊

4#
发表于 Post on 2015-11-16 19:33:48 | 只看该作者 Only view this author
Voland 发表于 2015-11-16 19:25
您是说Analysis这个吗?这里选了Gaussian展宽,不知道是我操作有问题还是什么,得到的图只有线状光谱…… ...

找着原因了,DMol3对周期体系计算TDDFT之后没有振子强度,就算使用其他程序也没法进行展宽。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

25

帖子

0

威望

97

eV
积分
122

Level 2 能力者

5#
 楼主 Author| 发表于 Post on 2015-11-16 19:44:26 | 只看该作者 Only view this author
卡开发发 发表于 2015-11-16 19:16
看样子这个程序应该是./command _input Xmin Xmax step sigma[/backc ...

另外我完全同意你关于固体激发用DMol3的可靠性的评论,不过这实验是溶液条件下几种体系中的有机分子结构其实并无差异,因此把这种机理锁定在固态的原因上。然而这只能算Gamma点……我考虑用超晶胞也许能勉强一点,不过其实效果也很有限(主要是内存吃不消)。所以这真是无奈之举。
这个世界……没有神。

25

帖子

0

威望

97

eV
积分
122

Level 2 能力者

6#
 楼主 Author| 发表于 Post on 2015-11-16 20:18:37 | 只看该作者 Only view this author
卡开发发 发表于 2015-11-16 19:33
找着原因了,DMol3对周期体系计算TDDFT之后没有振子强度,就算使用其他程序也没法进行展宽。

我不太懂光谱,您的意思是,周期性结构的TDDFT所得的结果,其他程序也无法由线状光谱算出其带状光谱吗?
这个世界……没有神。

3621

帖子

3

威望

1万

eV
积分
18427

Level 6 (一方通行)

第一原理惨品小作坊

7#
发表于 Post on 2015-11-16 20:22:32 | 只看该作者 Only view this author
Voland 发表于 2015-11-16 20:18
我不太懂光谱,您的意思是,周期性结构的TDDFT所得的结果,其他程序也无法由线状光谱算出其带状光谱吗?

不是,不知道DMol3怎么考虑周期结构的问题的,也没有资料说明,只是DMol3的结果没办法。如果你使用castep和vasp当然还是可以做的。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

25

帖子

0

威望

97

eV
积分
122

Level 2 能力者

8#
 楼主 Author| 发表于 Post on 2015-11-16 20:35:13 | 只看该作者 Only view this author
卡开发发 发表于 2015-11-16 20:22
不是,不知道DMol3怎么考虑周期结构的问题的,也没有资料说明,只是DMol3的结果没办法。如果你使用castep ...

原来如此,多谢您的指点
这个世界……没有神。

5万

帖子

99

威望

5万

eV
积分
112354

管理员

公社社长

9#
发表于 Post on 2015-11-16 23:51:34 | 只看该作者 Only view this author
只要有了激发能和振子强度,用Multiwfn做展宽是最方便的,而且可调选项很多,能满足专业需求。
按照手册3.13.2节的说明把数据写成这种格式的.txt文件
numdata inptype
energy strength [FWHM]  For transition 1
energy strength [FWHM]  For transition 2
energy strength [FWHM]  For transition 3
...
energy strength [FWHM]
然后载入Multiwfn,进主功能11,选UV/Vis,然后一按0就得到图像了。详见
使用Multiwfn绘制红外、拉曼、UV-Vis、ECD和VCD光谱图
http://sobereva.com/224

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
卡开发发 + 5 功能甚强

查看全部评分 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!

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 22:06 , Processed in 0.180316 second(s), 25 queries , Gzip On.

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