计算化学公社

标题: 求助:xyz转cif过程中坐标转换的问题 [打印本页]

作者
Author:
Dopamine    时间: 2023-3-28 15:21
标题: 求助:xyz转cif过程中坐标转换的问题
各位老师,在使用CP2K优化结构后,产生的xyz文件,本人想用Fortran写一个由xyz文件转cif的小程序,通过如图所示的vectora/b/c我可以计算得到a/b/c三边的长度以及alpha/beta/gamma。但是在坐标转换的过程中犯了难,xyz中的坐标该如何转换成cif文件中的分数坐标形式,希望有老师指点一二,谢谢各位老师。

作者
Author:
lyj714    时间: 2023-3-28 16:32
你写Fortran,直接参考Multiwfn源码中各种文件格式转换的代码不就行啦。
作者
Author:
北大-陶豫    时间: 2023-3-28 20:10
本帖最后由 北大-陶豫 于 2023-3-28 20:22 编辑

乘以晶胞参数矩阵的逆就行了。
设晶胞基矢为 abc,原子的笛卡尔坐标r与分数坐标x的关系为
r = x1a + x2b + x3c
写成矩阵的形式:
r = [a b c] x
其中rx是列向量,A=[a b c]是晶胞基矢(列向量)拼成的晶胞参数矩阵。所以如果已知r要求x的话,乘以晶胞参数矩阵 A 的逆就行了。
如果对性能要求较高的话,可以直接求解方程组 r = A x,但一般来说3维问题的话恐怕不需要这么做。

作者
Author:
sobereva    时间: 2023-3-28 23:58
根本用不着你自己额外搞程序去转。别舍近求远
按下文说的,在xyz文件里手动加入晶胞矢量,比如Tv_1: 7.426 0.0 0.0 Tv_2: 3.6 6 6.40 0.0 Tv_3: 0.0 0.0 10.0,Multiwfn载入时直接也就有了盒子信息,用主功能100的子功能2直接就能导出cif,没法更方便
使用Multiwfn非常便利地创建CP2K程序的输入文件
http://sobereva.com/587http://bbs.keinsci.com/thread-21668-1-1.html

最最最最最最简单的方法莫过于让Multiwfn直接载入优化任务产生的restart文件,用主功能100的子功能2导出cif,整个操作几秒钟的事

如果你就是想了解坐标转换的内部算法,Multiwfn源代码包里PBC.f90里搜subroutine Cart2fract和subroutine fract2Cart


作者
Author:
Dopamine    时间: 2023-3-29 13:46
lyj714 发表于 2023-3-28 16:32
你写Fortran,直接参考Multiwfn源码中各种文件格式转换的代码不就行啦。

有道理,谢谢!
作者
Author:
Dopamine    时间: 2023-3-29 13:46
北大-陶豫 发表于 2023-3-28 20:10
乘以晶胞参数矩阵的逆就行了。
设晶胞基矢为 a,b,c,原子的笛卡尔坐标r与分数坐标x的关系为
r = x1a +  ...

我就是想了解这个,谢谢老师啦!
作者
Author:
Dopamine    时间: 2023-3-29 13:47
sobereva 发表于 2023-3-28 23:58
根本用不着你自己额外搞程序去转。别舍近求远
按下文说的,在xyz文件里手动加入晶胞矢量,比如Tv_1: 7.426 ...

谢谢社长!
作者
Author:
chen0201    时间: 2024-3-8 17:24
Dopamine 发表于 2023-3-29 13:46
我就是想了解这个,谢谢老师啦!

请问您成功了吗?可以分享下脚本吗?
作者
Author:
Dopamine    时间: 2024-3-13 10:08
chen0201 发表于 2024-3-8 17:24
请问您成功了吗?可以分享下脚本吗?

我该怎么发给你
作者
Author:
Dopamine    时间: 2024-3-13 10:12
chen0201 发表于 2024-3-8 17:24
请问您成功了吗?可以分享下脚本吗?

我当时比较复杂,后来也没改,你可以参考一下,测试的例子也一并附上

作者
Author:
chen0201    时间: 2024-3-18 15:21
Dopamine 发表于 2024-3-13 10:12
我当时比较复杂,后来也没改,你可以参考一下,测试的例子也一并附上

非常感谢您的分享!




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