计算化学公社

标题: 求助高斯展宽的.f90文件编译后使用不能的问题 [打印本页]

作者
Author:
Voland    时间: 2015-11-16 18:41
标题: 求助高斯展宽的.f90文件编译后使用不能的问题
……大家好,编程小白请教一下大家一个问题。本来么,用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命令吧?),问题似乎是无法写入文件名就报错了。(还是说我理解有误?)
所以这里诚恳地求助啊……
作者
Author:
卡开发发    时间: 2015-11-16 19:16
本帖最后由 卡开发发 于 2015-11-16 19:24 编辑

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

实际上Dmol3自己本身可以做Gaussian或Lorenzian展宽,不必额外处理。另外,DMol3的TDDFT应该还不能用于计算超过gamma点的周期体系吧(虽然本身TDDFT也找不到合适的泛函算固体激发),结果估计靠不住。
作者
Author:
Voland    时间: 2015-11-16 19:25
卡开发发 发表于 2015-11-16 19:16
看样子这个程序应该是./command _input这样的运行格式吧。

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

您是说Analysis这个吗?这里选了Gaussian展宽,不知道是我操作有问题还是什么,得到的图只有线状光谱……还是说我差了什么选项?
(, 下载次数 Times of downloads: 105)
(, 下载次数 Times of downloads: 114)

作者
Author:
卡开发发    时间: 2015-11-16 19:33
Voland 发表于 2015-11-16 19:25
您是说Analysis这个吗?这里选了Gaussian展宽,不知道是我操作有问题还是什么,得到的图只有线状光谱…… ...

找着原因了,DMol3对周期体系计算TDDFT之后没有振子强度,就算使用其他程序也没法进行展宽。
作者
Author:
Voland    时间: 2015-11-16 19:44
卡开发发 发表于 2015-11-16 19:16
看样子这个程序应该是./command _input Xmin Xmax step sigma[/backc ...

另外我完全同意你关于固体激发用DMol3的可靠性的评论,不过这实验是溶液条件下几种体系中的有机分子结构其实并无差异,因此把这种机理锁定在固态的原因上。然而这只能算Gamma点……我考虑用超晶胞也许能勉强一点,不过其实效果也很有限(主要是内存吃不消)。所以这真是无奈之举。
作者
Author:
Voland    时间: 2015-11-16 20:18
卡开发发 发表于 2015-11-16 19:33
找着原因了,DMol3对周期体系计算TDDFT之后没有振子强度,就算使用其他程序也没法进行展宽。

我不太懂光谱,您的意思是,周期性结构的TDDFT所得的结果,其他程序也无法由线状光谱算出其带状光谱吗?
作者
Author:
卡开发发    时间: 2015-11-16 20:22
Voland 发表于 2015-11-16 20:18
我不太懂光谱,您的意思是,周期性结构的TDDFT所得的结果,其他程序也无法由线状光谱算出其带状光谱吗?

不是,不知道DMol3怎么考虑周期结构的问题的,也没有资料说明,只是DMol3的结果没办法。如果你使用castep和vasp当然还是可以做的。
作者
Author:
Voland    时间: 2015-11-16 20:35
卡开发发 发表于 2015-11-16 20:22
不是,不知道DMol3怎么考虑周期结构的问题的,也没有资料说明,只是DMol3的结果没办法。如果你使用castep ...

原来如此,多谢您的指点
作者
Author:
sobereva    时间: 2015-11-16 23:51
只要有了激发能和振子强度,用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




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3