扭角进阶30和0度为对称轴

分为对称轴30和0度

%%%Nie-Wei,Wang 2023-12-11 超胞构建摩尔角,消除晶格失配平
%%%角度是算出来的,不能用于计算
%%限定0-30容易丢数据
clear all

a1=[1;0]; % a1,a2是基矢
a2=[-1/2;sqrt(3)/2];



%%%%%%%%%%%以30°为轴
angle_60=a1+a2;   %60
angle_30=2*a1+a2; %30度
angle_0=a1;       %0度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%以0°为轴
angle_60=2*a1+a2;   %60
angle_30=a1; %30度
angle_0=-a2;       %0度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

num=0;      %计数
beta=120.0; %%bete是a1和a2的夹角
N=20;       %遍历
Rz=[cosd(beta) -sind(beta); sind(beta) cosd(beta)];  %%120绕z轴旋转矩阵
for m=-N:N
    for n=-N:N
        for p=-N:N
            for q=-N:N
                b1=m*a1+n*a2;
                b2=p*a1+q*a2;
                theta=acosd(dot(b1,b2)/(norm(b1)*norm(b2)));
                %%%%%%%%%%%%%%%
                b1_angle_max=cross([b1;0],[angle_30;0]);  %%% b1 0-30
                b1_angle_min=cross([b1;0],[angle_0;0]);  %%%%
                b2_angle_max=cross([b2;0],[angle_60;0]);  %%% b2 30-60
                b2_angle_min=cross([b2;0],[angle_30;0]);  %%%%
                b2b1=cross([b2;0],[b1;0]);   %%%%            b2在b1的顺时针方向
                type1=cross([b1;0],[angle_30;0]);
                type2=cross([b2;0],[angle_30;0]);
                theta1=acosd(dot(b1,angle_30)/(norm(b1)*norm(angle_30)))*(type1(3)/norm(type1));
                theta2=acosd(dot(b2,angle_30)/(norm(b2)*norm(angle_30)))*(type2(3)/norm(type2));
                %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
               if  abs(norm(b1)-norm(b2))<0.5 && b1_angle_max(3)>0 && b1_angle_min(3)<0 && b2_angle_max(3)>0 && b2_angle_min(3)<0 && b2b1(3)<0  ...
                       && abs(theta1+theta2)<0.1 %&& abs(norm(b2-b1)-2*norm(a2))<0.01 %(差为整数,为1个b2 abs(norm(b2-b1)-norm(a2))<0.01)
%%%%abs(theta1+theta2)<0.1 设置30/0度为旋转对称轴
                   
                                num=num+1;
                                a(num,:)=[m,n,p,q,theta,4*norm(b1)^2,norm(b1)^2];
                                %%%%%%  旋转矩阵   总角度  b1_30夹角  b2_30夹角   原子数
                           
               end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            
            end  
        end
    end
end
 

% 按照第九列进行排序
% 提取第九列和第十二列
% 按照第五列的值进行排序
data=a;
sortedData = sortrows(data, 5);
% 保留第五列小数点5位
data(:, 5) = round(data(:, 5), 1);

% 按照第五列的值进行排序
[~, idx] = sort(data(:, 6));
sortedData = data(idx, :);

% % 找到相同值中第六列最小的那一行
% [~, uniqueIdx, ~] = unique(sortedData(:, 6), 'stable');
% resultData = sortedData(uniqueIdx, :);
% 
% % 显示结果
% disp(resultData);

30°结果  %%%%%% 旋转矩阵  夹角  原子数  超胞的晶格常数的平方

%%%%%% 旋转矩阵 总角度 b1_30夹角 b2_30夹角 原子数

#root7 30±8.2°
root13 30±2.2°

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值