网站大量收购闲置独家精品文档,联系QQ:2885784924

维光子晶体能带的程序采用平面波传输法.docVIP

维光子晶体能带的程序采用平面波传输法.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
维光子晶体能带的程序采用平面波传输法

pwm法计算二维光子晶体能带的另一个程序 已经分享了一个,这是另一个,编写方法不同,精度更高。程序完整含有注释,能同时显示TE和TM波的能带结构。略作修改也可分开显示。 function [ output_args ] = Untitled2( input_args ) %UNTITLED2 Summary of this function goes here % Detailed explanation goes here %二维光子晶体带结构计算 %计算二维正方格子或三角格子, %介质圆柱(介电常数a)立于背景(介电常数b)之中 clear; clc; tic; epssys=1.0e-6; %设定一个最小量,避免系统截断误差或除0错误 %定义实际的正空间格子基矢 latticetype=0; %定义格子类型,1 计算 正方格子,0 计算 三角格子 switch latticetype case 1 a = 1; a1 = a* [1 0 0]; a2 = a* [0 1 0]; a3 = a* [0 0 1]; case 0 a = 1; a1 = a* [ sqrt(3)/2 1/2 0]; a2 = a* [-sqrt(3)/2 1/2 0]; a3 = a* [ 0 0 1]; end; %定义晶格的参数 epsa = 1; %介质柱的介电常数 epsb = 10.5; %背景的介电常数 Pf = 0.28274; %Pf = Ac/Au 填充率,可根据需要自行设定 Au = norm(cross(a1,a2)); %二维格子原胞面积 Rc = (Pf *Au/pi)^(1/2); %介质柱截面半径 Ac = pi*(Rc)^2; %介质柱横截面积 %生成倒格基失 ra11 = (2*pi/a)*cross(a2,a3)/dot(a1,cross(a2,a3)); ra22 = (2*pi/a)*cross(a3,a1)/dot(a1,cross(a2,a3)); ra1 = ra11(1:2); ra2 = ra22(1:2); %选定参与运算的倒空间格矢量,即参与运算的平面波数量。 %设定一个l,m的取值范围,变化l,m即可得出参与运算的平面波集合。 NrSquare = 10; %选定k空间的尺度,即l,m(倒格矢G=l*b1+m*b2)的取值范围, NrSquare确定后,使用平面波数目可能为(2*NrSquare+1)^2 G = zeros((2*NrSquare+1)^2,2); %初始化可能使用的倒格矢矩阵 i = 1; for l = -NrSquare:NrSquare for m = -NrSquare:NrSquare G(i,:) = l*ra1+m*ra2; i = i + 1; end; end; NG = i - 1; %实际使用的平面波数目 G = G(1:NG,:); %还有另一种选取的原则,即考虑到园对称的话,则尽可能使平面波波矢的集合均匀分布 %在一个球内,根据这样的原则,可先选取一个比较大的NrSquare,同时确定最大 %G的模,变化l,m,当G的模值不超过最大值时就选入参与运算的集合中。这样上面一段 %代码可以改写成 % NrSquare = 20; % Gmax = 0.5* NrSquare* norm(ra1); % G = zeros((2*NrSquare+1)^2,2); % i = 1; % for l = -NrSquare:NrSquare % for m = -NrSquare:NrSquare % Glm = l*ra1+m*ra2; % if (norm(Glm=Gmax)) % G(i,:) = Glm; % i = i + 1; % end % end; % end; % NG = i - 1; % G = G(1:NG,:); %生成k空间中的 f(Gi-Gj)的值,i,j 从1到NG。 f=zeros(NG,NG); for i=1:NG for j=1:NG Gij=norm(G(i,:)-G(j,:)); if (Gij epssys) f(i,j)=(1/epsa)*Pf+(1/epsb)*(1-Pf); else f(i,j)=(1/epsa-1/epsb)*Pf*2*besselj(1,Gij*Rc)/(Gij*Rc); end; end; end; %定义简约布里渊区的各高对称点 switch latticetype case 1 T=(2*pi/a)*[epssys 0]; M=(2*pi/a)*[1/2 1/2]; X=(2*pi/a)*[1/2 0]; case 0 T=(2*pi/a)*[epssys 0];

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档