计算化学公社

标题: 如何将笛卡尔坐标下的矢量转换到内坐标下 [打印本页]

作者
Author:
Kalinite    时间: 2022-6-17 22:20
标题: 如何将笛卡尔坐标下的矢量转换到内坐标下
本帖最后由 Kalinite 于 2022-6-17 22:25 编辑

如题。最近有一些笛卡尔坐标系下的矢量数据,想放到内坐标下进行讨论。用梯度举个例子,我的想法是可以写成下面这样:
(, 下载次数 Times of downloads: 49)
其中xk(包括yk和zk)是k个原子的笛卡尔坐标,L是k-1个键长,theta是k-2个键角,phi是k-3个二面角。*
由于笛卡尔坐标可以用几何关系直接算内坐标,所以可以用Tensorflow很方便地求出内坐标对笛卡尔坐标的导数,然后求解线性方程组即可得到内坐标上的梯度。但是问题在于,上述方程一共有3N个,而未知数(即E对内坐标的偏导数)只有3N-6个。这里不知应当如何处理才比较有化学意义,请大佬们不吝赐教。

*这里还涉及到怎么给出一套内坐标,为了方便我是直接对序号相邻的两个原子定义一个键长,相邻三个定义键角,相邻四个定义二面角,所以分别是k-1、k-2和k-3个。

作者
Author:
sobereva    时间: 2022-6-17 23:35
利用Wilson B矩阵进行变换,细节看J. Chem. Phys., 117, 9160 (2002)
作者
Author:
Kalinite    时间: 2022-6-18 00:16
sobereva 发表于 2022-6-17 23:35
利用Wilson B矩阵进行变换,细节看J. Chem. Phys., 117, 9160 (2002)

谢谢sob老师,我确实试过用Wilson B矩阵转到了RIC下,但是他还比内坐标多了6/5个自由度,莫非可以直接删去吗。
作者
Author:
sobereva    时间: 2022-6-18 00:52
Kalinite 发表于 2022-6-18 00:16
谢谢sob老师,我确实试过用Wilson B矩阵转到了RIC下,但是他还比内坐标多了6/5个自由度,莫非可以直接删 ...

让RIC的定义等同于内坐标就完了。RIC的数目可以大于也可以等于内坐标数目。
作者
Author:
Kalinite    时间: 2022-6-18 01:12
sobereva 发表于 2022-6-18 00:52
让RIC的定义等同于内坐标就完了。RIC的数目可以大于也可以等于内坐标数目。

明白了,感谢您!
作者
Author:
libo371324    时间: 2022-8-29 16:11
请教:这样定义的内坐标能转化回去或如何可视化这个分子呢?
作者
Author:
Kalinite    时间: 2022-8-29 16:29
libo371324 发表于 2022-8-29 16:11
请教:这样定义的内坐标能转化回去或如何可视化这个分子呢?

修改一下格式使之符合Gaussian输入文件的格式,用GaussView就能看。
要转化回去也还用B矩阵即可。
作者
Author:
libo371324    时间: 2022-8-29 18:46
Kalinite 发表于 2022-8-29 16:29
修改一下格式使之符合Gaussian输入文件的格式,用GaussView就能看。
要转化回去也还用B矩阵即可。

好的,谢谢!
作者
Author:
libo371324    时间: 2022-8-31 20:21
Kalinite 发表于 2022-8-29 16:29
修改一下格式使之符合Gaussian输入文件的格式,用GaussView就能看。
要转化回去也还用B矩阵即可。

文章看了,没看懂,但我还有两个疑问
1、按照序号相邻原子这样定义内坐标(不用B矩阵变换),能保证旋转平移不变性吗
2、文章中δS=B*δX,内坐标的变化等于Wison B矩阵*笛卡尔坐标的变化,同样笛卡尔坐标的变化等于
Wison B(逆)矩阵*内坐标:δX = B(逆)*δS,如果是深度学习模型给出的内坐标,我还能用相同的Wison B矩阵将模型给出的内坐标转成笛卡尔坐标吗
作者
Author:
Kalinite    时间: 2022-8-31 22:20
本帖最后由 Kalinite 于 2022-8-31 22:31 编辑
libo371324 发表于 2022-8-31 20:21
文章看了,没看懂,但我还有两个疑问
1、按照序号相邻原子这样定义内坐标(不用B矩阵变换),能保证旋转 ...

1. 可以
2. “深度学习模型给出的内坐标”指的是什么?Wilson’s B matrix依赖于具体的结构,相当于是笛卡尔空间到内坐标空间映射的一个Jacobi matrix,则只有给定了具体坐标定义方式,才能给出一个确定的Wilson's B matrix。至于你说的有了内坐标要给出笛卡尔坐标,给几个冗余变量人工赋值即可。(比如让1号原子在(0,0,0),2号原子在(0,0,z2),3号原子在(0,y3,z3),于是整个结构在空间中的取向就被固定了,自然就能得到全部原子的笛卡尔坐标)

当然内坐标的定义方式可以有很多种,这种定义方式也没有什么特殊意义,在没有负面影响的情况下,纯粹是为了写代码方便些。如果要有化学意义的话,可能就得尽量让原子间距离尽可能多对应实际的化学键等等,这个感觉还是比较麻烦的,在我个人做的一些问题里面没有这个需求,做优化的可能会关心这些问题。


作者
Author:
libo371324    时间: 2022-9-1 08:37
Kalinite 发表于 2022-8-31 22:20
1. 可以
2. “深度学习模型给出的内坐标”指的是什么?Wilson’s B matrix依赖于具体的结构,相当于是笛 ...

好的,非常感谢!
作者
Author:
libo371324    时间: 2022-9-8 10:09
Kalinite 发表于 2022-8-31 22:20
1. 可以
2. “深度学习模型给出的内坐标”指的是什么?Wilson’s B matrix依赖于具体的结构,相当于是笛 ...

为了更有化学意义,用Multiwfn得到了以化学键对应的原子间距离,然后根据连键关系在将内坐标转化回笛卡尔坐标时,仍然遇到了疑问,比如甲烷,前三个原子的位置定义如下:C(0.0,0.0,0.0),H(0.0,0.0,z2),H(x3,0.0,z3),整个结构的取向确定,那么在求第四个氢原子的位置时需要考虑键角吗?如果考虑键角的话那就很麻烦了吧,如果不考虑,最后两个氢原子的位置很有可能重叠。
作者
Author:
Kalinite    时间: 2022-9-8 11:09
libo371324 发表于 2022-9-8 10:09
为了更有化学意义,用Multiwfn得到了以化学键对应的原子间距离,然后根据连键关系在将内坐标转化回笛卡尔 ...

需要一个二面角吧,不然没法确定位置
作者
Author:
libo371324    时间: 2022-9-8 14:05
Kalinite 发表于 2022-9-8 11:09
需要一个二面角吧,不然没法确定位置

嗯,这样就很麻烦了,要是高斯软件能像Multiwfn那样程序调动就好啦,我慢慢尝试写一下吧




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