计算化学公社

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

[CASTEP/Dmol3/MS] 笛卡尔坐标与分数坐标的转化

[复制链接 Copy URL]

5

帖子

0

威望

31

eV
积分
36

Level 2 能力者

MS新手,学习CO分子吸附在Pd(110)晶面的过程,不理解关于笛卡尔坐标与分数坐标的转换,下图中的xc,yc,zc的来源与自己算的不一样,最下面是自己的转化,求大神指点例子中的xc,yc


403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

2#
发表于 Post on 2017-3-16 17:14:55 | 只看该作者 Only view this author
本帖最后由 万里云 于 2017-3-16 17:18 编辑

坐标转换和量子力学中表象变换是一回事,可以直接套用公式<a|x>=<a|b><b|x>,其中<a|x>和<b|x>都是列向量,<a|b>是基组b在基组a下的表示矩阵。拿从分数坐标到笛卡尔坐标变换举例,<a|b>就是基矢笛卡尔坐标所组成矩阵的专置。

附两个笛卡尔坐标和分数坐标互换的matlab函数:

  1. function y = cart2frac(latvec, x)
  2. %
  3. % latvec = [ a1x, a1y, a1z;
  4. %            a2x, a2y, a2z;
  5. %            a3x, a3y, a3z ]
  6. %
  7. % x = [ atom1x, atom1y, atom1z;
  8. %       atom2x, atom2y, atom2z;
  9. %       .......................
  10. %       atomNx, atomNy, atomNz ]
  11. %
  12.     [ m, n ] = size(x);
  13.     y = zeros(m, n);
  14.     convmat = inv(latvec');
  15.     for k = 1:m
  16.         y(k,:) = (convmat * x(k,:)')';
  17.     end
复制代码


  1. function y = frac2cart(latvec, x)
  2. %
  3. % latvec = [ a1x, a1y, a1z;
  4. %            a2x, a2y, a2z;
  5. %            a3x, a3y, a3z ]
  6. %
  7. % x = [ atom1x, atom1y, atom1z;
  8. %       atom2x, atom2y, atom2z;
  9. %       .......................
  10. %       atomNx, atomNy, atomNz ]
  11. %
  12.     [ m, n ] = size(x);
  13.     y = zeros(m, n);
  14.     convmat = latvec';
  15.     for k = 1:m
  16.         y(k,:) = (convmat * x(k,:)')';
  17.     end
复制代码


以及一个由晶格常数计算基矢坐标的函数:
  1. function y = latvec(latconst)
  2.     a = latconst(1);
  3.     b = latconst(2);
  4.     c = latconst(3);
  5.     alpha = latconst(4) / 180 * pi;
  6.     beta  = latconst(5) / 180 * pi;
  7.     gamma = latconst(6) / 180 * pi;
  8.     y = zeros(3, 3);
  9.     y(1,:) = [ a, 0, 0 ];
  10.     y(2,:) = [ b*cos(gamma), b*sin(gamma), 0 ];
  11.     y(3,1) = c * cos(beta);
  12.     y(3,2) = c * (cos(alpha) - cos(beta)*cos(gamma)) / sin(gamma);
  13.     y(3,3) = c * sqrt(1 + 2*cos(alpha)*cos(beta)*cos(gamma) - cos(alpha)^2 - cos(beta)^2 - cos(gamma)^2) / sin(gamma);
复制代码

评分 Rate

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

查看全部评分 View all ratings

5

帖子

0

威望

31

eV
积分
36

Level 2 能力者

3#
 楼主 Author| 发表于 Post on 2017-3-17 10:46:55 | 只看该作者 Only view this author
万里云 发表于 2017-3-16 17:14
坐标转换和量子力学中表象变换是一回事,可以直接套用公式=,其中和都是列向量,是基组b在基组a下的表示矩 ...

谢谢

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 17:00 , Processed in 0.232897 second(s), 25 queries , Gzip On.

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