计算化学公社
标题:
分享一个把xyz坐标转换为gzmt用于ORCA输入坐标和做柔性扫描的方法
[打印本页]
作者Author:
yaoshi1206
时间:
2024-10-6 20:12
标题:
分享一个把xyz坐标转换为gzmt用于ORCA输入坐标和做柔性扫描的方法
用ORCA做柔性扫描时,输入坐标采用笛卡尔坐标时(xyz)时报错停止。
Famalab的一个教程(
https://www.molphys.org/orca_tut ... ternal%20cordinates
)中提到用ORCA做扫描应该用内坐标或者gzmt,检索了中文网页,把xyz转化为内坐标的页面不多。
徐哈哈的博文“【小工具】利用Python脚本将分子笛卡尔坐标转化为内坐标” 输出结果实际为gzmt,在其基础修改后得到将xyz转为gzmt的脚本如下:
from ase.io import read as aseread
def std_angle(x):
return x if x < 180 else x - 360
def genzmt(xyz_file):
atom = aseread(xyz_file)
string = ''
symbols = list(atom.symbols)
for idx in range(len(atom)):
if idx == 0:
string = '%3s\n'%symbols[idx]
elif idx == 1:
string += '%3s %3d %20.8f\n'%(symbols[idx],1,atom.get_distance(0,idx))
elif idx == 2:
string += '%3s %3d %20.8f %3d %20.8f\n'%(symbols[idx],2,atom.get_distance(1,idx),1,
std_angle(atom.get_angle(0,1,idx)))
else:
string += '%3s %3d %20.8f %3d %20.8f %3d %20.8f\n'%(symbols[idx],idx,atom.get_distance(idx,idx-1),idx-1,
std_angle(atom.get_angle(idx,idx-1,idx-2)),
idx-2,std_angle(atom.get_dihedral(idx-3,idx-2,idx-1,idx)))
return string
S1 = genzmt ('./test.xyz')
fileA = open("gzmt.txt","w")
fileA.write(S1)
fileA.close()
print (S1)
复制代码
转化好的gzmt写入gzmz.txt,命令行终端也有打印。
将gzmt复制到ORCA输入文件inp中,即可用于柔性扫描,一个乙烯双键的柔性扫描例子输入文件如下,测试发现虽然分子坐标用gzmt,但是ORCA在做扫描时还是认为第一个原子的index是0,这个GaussView有些区别,需要注意,在GaussView中第一个原子index是1,Gaussian中柔性扫描 D 2 1 4 6,在ORCA中应写成 D 1 0 3 5。
(, 下载次数 Times of downloads: 13)
上传 Uploaded
点击下载Click to download
! r2SCAN-3c opt noautostart nopop
%maxcore 1000
%pal nprocs 4 end
%geom SCAN
D 1 0 3 5 = 0.0,180.0,36
end
end
* gzmt 0 1
C
H 1 1.08666628
H 2 1.85079251 1 31.61322776
C 3 2.11025063 2 63.98457221 1 0.00000000
H 4 1.08666627 3 95.59780044 2 -180.00000000
H 5 1.85079251 4 31.61322823 3 -180.00000000
*
复制代码
作者Author:
sobereva
时间:
2024-10-7 02:25
帖子标题里ORCA没拼对
ORCA做柔性扫描并不需要坐标必须写成内坐标的形式,这点和Gaussian是一样的
参考北京科音高级量子化学培训班(
http://www.keinsci.com/workshop/KAQC_content.html
)里ORCA做柔性扫描的例子:
(, 下载次数 Times of downloads: 14)
上传 Uploaded
点击下载Click to download
ORCA 6.0.0可以顺利完成。很多网上的ORCA教程都是4.0的,好多东西对于发展迅速的ORCA已经不适用了,我建议不要看了。
xyz转成内坐标用Multiwfn实现太容易了,Multiwfn载入xyz等含有结构信息的文件后,依次输入
gi //产生Gaussian输入文件
zmat //用内坐标形式(如果输入zmat2,则每个内坐标都不用变量表示)
Piraeus.gjf //产生的输入文件名
得到的gjf文件里直接就是内坐标:
%chk=t.chk
#P B3LYP/6-31G*
Generated by Multiwfn
0 1
C
C 1 B1
C 1 B2 2 A1
C 2 B3 1 A2 3 D1
C 4 B4 2 A3 1 D2
C 2 B5 1 A4 3 D3
C 6 B6 2 A5 1 D4
...略
C 44 B59 41 A58 42 D57
B1 1.45305594
B2 1.39050359
B3 1.39050358
B4 1.45305594
B5 1.45305594
B6 1.39050359
B7 1.39050359
...略
作者Author:
wzkchem5
时间:
2024-10-7 09:22
只有刚性扫描需要用内坐标,柔性扫描不需要。你的链接虽然是用的内坐标,但是并没有说笛卡尔坐标不能用。
如果你的计算用笛卡尔坐标会报错,建议检查输出文件的报错信息,搞不好是无关的原因导致的报错(SCF不收敛,结构优化不收敛,有的键角接近180度,等等)
作者Author:
yaoshi1206
时间:
2024-10-7 10:46
sobereva 发表于 2024-10-7 02:25
帖子标题里ORCA没拼对
ORCA做柔性扫描并不需要坐标必须写成内坐标的形式,这点和Gaussian是一样的
谢谢社长答疑,学习了,用multiwfn转化确实更简单,之前用的时候没有发现这个zmat2这个功能。 用xyz坐标做柔性扫描报错的可能是坐标本身的问题。
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3