用有限元法解亥姆赫兹方程ppt课件.ppt
第一部分 用有限元法解亥姆霍兹方程 电磁波在定常态下的传播1.1 代数方程的求解1.2 强加边界条件的处理1.3 不均匀介质波导的处理1.4 对称性问题第二部分 matlab仿真实验与结果输出2.1 仿真程序3.2 输出结果,10.2.4 用有限元法解亥姆霍兹方程,在均匀各向相同的波导结构中,电磁波的传播在定常态下服从亥姆霍兹方程。,式中: 表示电场强度矢量E的分量或磁场强度矢量H的分量; 为自由空间中的波传播常数; 为介质的折射率; 为相对介电常数。,当电磁场可以描述为在z方向具有 的变化时,方程可以简化为,即,如果 代表H的分量,则 的导体边界处满足第二类边界条件 ,如果 代表的分量E,则 在导体边界处满足第一类边界条件 。,下面是亥姆霍兹方程对应的泛函:,化成求解广义特征值的代数方程。对上述泛函用有限元求解,令,则泛函到达极值时,应该有,采用简单的三角形单元分割定义域,则有,其中:,对各单元矩阵求和,最后得到线性代数方程:,或记作,式中:K,H都是是对称矩阵,且H是正定的,下面阐述一下求解中遇到的问题及处理方法。,1.代数方程的求解,对上述代数方程的求解要用到求解广义特征值的方法,求解广义特征值的方法是将正定的对称实矩阵H分解为,则上述矩阵方程可以化为,该方程与原矩阵方程具有相同的特征值,且转化成为求普通的矩阵特征值问题。,2.强加边界条件的处理,当遇到强加边界条件时,上面的代数方程中的某些分量是已知的,这时对方程的求解可以采用两种处理方法。,将矩阵 中已知分量所在的行、列的非主对角元素置0,而主对角元素置1,得到新的矩阵P,求解矩阵P的特征向量 ,将 的已知分量替换成已知的数值。, 的右端减去已知分量所在矩阵 的列元素乘以已知分量的数值,将矩阵 中已知分量所在的行、列的非主对角元素置0,而主对角元素置1,得到新的矩阵P,然后求解该方程。,3.不均匀介质波导的处理,对于存在不同介质的介质波导时,因为 ,折射率 与三角元素所处的位置有关,所以不能直接求解广义特征值方程,而应当将 并入系数矩阵 中,得到新的代数方程,此时求解得到广义特征值才为介质波导对应的特征值。,4.对称性问题,当研究的场域具有对称性时,问题将得到简化。例如,当研究的场具有左右对称结构时,此时可以用一半的三角元素去替代另一半的三角元素,但在仿真中发现这种方法在求解高阶模时出现了问题。 例如在下面研究的介质波导中,理论上第一个高阶模应当是HE21,而如果用对称条件的话,则不会出现HE21模,而是出现了HE31模,进一步研究还是发现凡是横向为偶数的模都不会出现。这是由于在做对称处理时已经认为对称轴上的电场自动满足第二类边界条件,所以在对称轴上电场永远不会取得0值(否则电场就是恒定为0)。,即使此时改边界条件为第一类边界条件也得不到正确解。如果不利用对称条件,按照一般方法得出的解中横向就会出现偶次模,且如理论所预言的第一个高阶模为HE21。所以在对称条件下,所用的三角元素可以减少,但最后的系数矩阵规模仍不能减小。 在问题求解的过程中,难点是在于对研究对象的几何形状的描述和边界条件的描述,即怎样自动把物理空间映射到离散的计算空间。在程序中表现为如何标记边界结点或边界元,一种可行的办法是在描述结点或单元的数据结构中增加一个标记是否为边界结点或边界元的标志,另外还需要在结构中增加与该结点或单元相邻的结点的信息。,对于规则的几何体,划分后的结点编号可以和结点在几何体上的物理位置直接建立起映射关系,所以可以大大化简运算量。另外,可以将边界描述为满足方程 的曲线,如果任何一点 满足方程 则该点便被标记为边界点。,左上角的坐标(x,y),边长a,b,最少的单元总数Ne网格单元描述和数据组织结构 结点n(xn,yn),n 结点编号,(xn,yn)结点坐标 三角形单元nt(it,jt,mt), nt三角形编号,(it,jt,mt)定点编号。左上角的顶点映射为1号结点,按先行后列反的顺序编号,三角形的编号顺序也与之相同。 于是结点编号和行列号的关系为 n=(nh-1) *(nh+nv),nh为一行内的节点数, nv为一列内的节点数,设三角形的编号为nt,则它对应的结点编号为m=floor(nt-1)/2*(nh-1), n=mod(nt-1/2*(nh-1)如果n=nh-1,则n=n-nh+1nt(a+1,b+1), (a+2,b+1), (a+2,b+2), !下三角,% 该程序用有限元法来处理标量亥姆霍兹方程,其实例是脊形介质光波导中的光波% 预处理function FEM(a,h,t,b,Ne)% 参数说明%a:波导半宽度,h:脊形部分波导高度,t:脊形层外波导厚度,b:匹配层的边长(考虑为正方形),Ne三角单元个数%区域的划分:在脊形部分采用细分,在脊形部分之外采用粗分%由于波导是左右对称,所以只考虑右半边部分。将区域分成6个大区域,横向两种划分尺度,纵向三种划分尺度%各区域中三角单元数分别占总数的15%,20%,15%,15%,20%,15%,,nc=1; %cladding refractive indexnw=3.38; %waveguide refractive indexns=3.17; %substrate refractive indexw=1.55; %wavelength:umkv=2*pi*a/w; %wave constant:1/umar1=0.15;ar3=0.15;ar4=0.15;ar5=0.20;d_wguide=1;Nh1=(1+a/h)+(1+a/h)2+4*(Ne*ar3/2-1)*a/h)0.5)*0.5;Nh1=round(Nh1); %3区水平方向节点数Nv2=round(h/a*Nh1); %3区垂直方向节点数Nh2=ceil(Nh1-1)*ar4/ar3+1);Nh=Nh1+Nh2-1; %对称区水平方向节点数,Nv1=ceil(Nh2-1)*ar1/ar3+1); %1、2区垂直方向节点数Nv3=ceil(Nh1-1)*ar5/ar3+1); %5、6区垂直方向节点数Nv=Nv1+Nv2+Nv3-2; %垂直方向的总节点数x1=linspace(0,a,Nh1)/a;y2=linspace(h,0,Nv2)/a;r=1.0001; %网格步不等分划分因子if Nh21 %产生各个尺度的坐标x2,y1,y3 s1=(r-1)*b/(r(Nh2-1)-1)/a; x2=zeros(1,Nh2-1); x2(1)=x1(Nh1)+s1; for i=2:Nh2-1 x2(i)=x2(i-1)+s1*r(i-1); endelse x2=(a+b)/a;end,if Nv11 s1=(1/r-1)*(b+t-h)/(1/r)(Nv1-1)-1)/a; y1=zeros(1,Nv1-1); y1(1)=(b+t-h)/a; for i=2:Nv1-1 y1(i)=y1(i-1)-s1*(1/r)(i-1); endelse y1=(b+t)/a;end,if Nv1 s1=(r-1)*(b-t)/(r(Nv3-1)-1)/a; y3=zeros(1,Nv3-1); y3(1)=y2(Nv2)-s1; for i=2:Nv3-1 y3(i)=y3(i-1)-s1*r(i-1); endelse y3=(t-b)/a;end,%节点矩阵准备 Ni=zeros(2,Nh*Nv); %Ni向量,第一行表示横坐标,第二行表示纵坐标%区域1for i=1:Nv1-1 Ni(1,(i-1)*Nh+1:(i-1)*Nh+Nh1)=x1; %横坐标赋值 Ni(2,(i-1)*Nh+1:(i-1)*Nh+Nh1)=y1(i); %纵坐标赋值end%区域2for i=1:Nv1-1 Ni(1,(i-1)*Nh+Nh1+1:i*Nh)=x2; %横坐标赋值 Ni(2,(i-1)*Nh+Nh1+1:i*Nh)=y1(i); %纵坐标赋值end,%区域3for i=Nv1:Nv1+Nv2-1Ni(1,(i-1)*Nh+1:(i-1)*Nh+Nh1)=x1; %横坐标赋值Ni(2,(i-1)*Nh+1:(i-1)*Nh+Nh1)=y2(i-Nv1+1); %纵坐标赋值end%区域4for i=Nv1:Nv1+Nv2-1 Ni(1,(i-1)*Nh+Nh1+1:i*Nh)=x2; %横坐标赋值 Ni(2,(i-1)*Nh+Nh1+1:i*Nh)=y2(i-Nv1+1); %纵坐标赋值end,%区域5for i=Nv1+Nv2:Nv Ni(1,(i-1)*Nh+1:(i-1)*Nh+Nh1)=x1; %横坐标赋值 Ni(2,(i-1)*Nh+1:(i-1)*Nh+Nh1)=y3(i-Nv1-Nv2+1); %纵坐标赋值end%区域6for i=Nv1+Nv2:Nv Ni(1,(i-1)*Nh+Nh1+1:i*Nh)=x2; %横坐标赋值 Ni(2,(i-1)*Nh+Nh1+1:i*Nh)=y3(i-Nv1-Nv2+1); %纵坐标赋值end,ti=find(y2=t/a);ti=ti(length(ti);% 三角形单元矩阵准备Nt=zeros(3,(Nh-1)*(Nv-1); %前三行表示逆时针方向排列的三个顶点的标号K=zeros(2*Nh-1)*Nv,(2*Nh-1)*Nv); %刚度矩阵H=zeros(2*Nh-1)*Nv,(2*Nh-1)*Nv); %常数项矩阵for i=1:2*(Nh-1)*(Nv-1)%由三角形编号得到顶点编号,对于对称结构只准备对称部分的三角单元,由其编号可以推出另一半的编号 m=floor(i-1)/2/(Nh-1); n=mod(i-1,2*(Nh-1);,if n=(Nh-1); %下三角形 n=n-Nh+1; Nt(1,i)=m*Nh+n+1; Nt(2,i)=(m+1)*Nh+n+1; Nt(3,i)=(m+1)*Nh+n+2; NNt1=m*(2*Nh-1)+(Nh+n); %对称点的标号m*(2*Nh-1)+(Nh-n) NNt2=(m+1)*(2*Nh-1)+(Nh+n); %对称点的标号(m+1)*(2*Nh-1)+(Nh-n) NNt3=(m+1)*(2*Nh-1)+(Nh+n+1); %对称点的标号(m+1)*(2*Nh-1)+(Nh-n-1) delt2=0; if m=Nv1-2 %区域1和区域2 neff=nc;,elseif m=Nv1+Nv2-2 %区域5和区域6 折射率 neff=ns; else if m=Nh1-1 neff=nc; else %区域3 neff=nw; end end,else %上三角 Nt(1,i)=m*Nh+n+1; Nt(2,i)=(m+1)*Nh+n+2; Nt(3,i)=m*Nh+n+2; NNt1=m*(2*Nh-1)+(Nh+n); %对称点的标号m*(2*Nh-1)+(Nh-n) NNt2=(m+1)*(2*Nh-1)+(Nh+n+1); %对称点的标号(m+1)*(2*Nh-1)+(Nh-n-1) NNt3=m*(2*Nh-1)+(Nh+n+1); %对称点的标号m*(2*Nh-1)+(Nh-n-1) delt2=2;,if m=Nv1+Nv2-2 neff=ns; else if m=ti+Nv1-2 neff=nw; %波导部分的区域2 elseif n=Nh1-1 neff=nc; else neff=nw; end end end,bi=Ni(2,Nt(2,i)-Ni(2,Nt(3,i); %bi bj=Ni(2,Nt(3,i)-Ni(2,Nt(1,i); %bj bm=Ni(2,Nt(1,i)-Ni(2,Nt(2,i); %bm ci=Ni(1,Nt(2,i)-Ni(1,Nt(3,i); %ci cj=Ni(1,Nt(3,i)-Ni(1,Nt(1,i); %cj cm=Ni(1,Nt(1,i)-Ni(1,Nt(2,i); %cm s=0.5*abs(bi*cj-bj*ci); if d_wguide=1 neff=0; end,%生成有限元系数矩阵 K(NNt1,NNt1)=K(NNt1,NNt1)+(bi*bi+ci*ci)/s-2*(kv*neff)2*s/3; %Kii K(NNt2,NNt2)=K(NNt2,NNt2)+(bj*bj+cj*cj)/s-2*(kv*neff)2*s/3; %Kjj K(NNt3,NNt3)=K(NNt3,NNt3)+(bm*bm+cm*cm)/s-2*(kv*neff)2*s/3; %Kmm K(NNt1,NNt2)=K(NNt1,NNt2)+(bj*bj+cj*cj)/s-(kv*neff)2*s/4; %Kij=Kji K(NNt2,NNt1)=K(NNt1,NNt2); K(NNt1,NNt3)=K(NNt1,NNt3)+(bi*bm+ci*cm)/s-(kv*neff)2*s/4; %Kim=Kmi K(NNt3,NNt1)=K(NNt1,NNt3); K(NNt2,NNt3)=K(NNt2,NNt3)+(bj*bm+cj*cm)/s-(kv*neff)2*s/4; %Kjm=Kmj K(NNt3,NNt2)=K(NNt2,NNt3);,H(NNt1,NNt1)=H(NNt1,NNt1)+2*s/3; %Hii H(NNt2,NNt2)=H(NNt2,NNt2)+2*s/3; %Hjj H(NNt3,NNt3)=H(NNt3,NNt3)+2*s/3; %Hmm H(NNt1,NNt2)=H(NNt1,NNt2)+s/4; %Hij=Hji H(NNt2,NNt1)=H(NNt1,NNt2); H(NNt1,NNt3)=H(NNt1,NNt3)+s/4; %Him=Hmi H(NNt3,NNt1)=H(NNt1,NNt3); H(NNt2,NNt3)=H(NNt2,NNt3)+s/4; %Hjm=Hmj H(NNt3,NNt2)=H(NNt2,NNt3); %对对称点的操作 NNt1=NNt1-n-n; NNt2=NNt2-n-n-delt2; NNt3=NNt3-n-n-2;,K(NNt1,NNt1)=K(NNt1,NNt1)+(bi*bi+ci*ci)/s-2*(kv*neff)2*s/3; %Kii K(NNt2,NNt2)=K(NNt2,NNt2)+(bj*bj+cj*cj)/s-2*(kv*neff)2*s/3; %Kjj K(NNt3,NNt3)=K(NNt3,NNt3)+(bm*bm+cm*cm)/s-2*(kv*neff)2*s/3; %Kmm K(NNt1,NNt2)=K(NNt1,NNt2)+(bj*bj+cj*cj)/s-(kv*neff)2*s/4; %Kij=Kji K(NNt2,NNt1)=K(NNt1,NNt2); K(NNt1,NNt3)=K(NNt1,NNt3)+(bi*bm+ci*cm)/s-(kv*neff)2*s/4; %Kim=Kmi K(NNt3,NNt1)=K(NNt1,NNt3); K(NNt2,NNt3)=K(NNt2,NNt3)+(bj*bm+cj*cm)/s-(kv*neff)2*s/4; %Kjm=Kmj K(NNt3,NNt2)=K(NNt2,NNt3);,H(NNt1,NNt1)=H(NNt1,NNt1)+2*s/3; %Hii H(NNt2,NNt2)=H(NNt2,NNt2)+2*s/3; %Hjj H(NNt3,NNt3)=H(NNt3,NNt3)+2*s/3; %Hmm H(NNt1,NNt2)=H(NNt1,NNt2)+s/4; %Hij=Hji H(NNt2,NNt1)=H(NNt1,NNt2); H(NNt1,NNt3)=H(NNt1,NNt3)+s/4; %Him=Hmi H(NNt3,NNt1)=H(NNt1,NNt3); H(NNt2,NNt3)=H(NNt2,NNt3)+s/4; %Hjm=Hm H(NNt3,NNt2)=H(NNt2,NNt3);end,%求解方程if d_wguide=1 EVC,EL=eig(K,-H,chol);else EVC,EL=eig(K,H,chol);end%边界处理clear Nt; indexi,indexj=find(EL(kv*ns)2); %寻找导模if length(indexj)0 j=1; s=input(noshou next eigenmode?,s); while(s=y|s=Y)&(j=length(indexj),if d_wguide=1 norm_b=(EL(indexj(j),indexj(j)/kv/kv-ns*ns)/(nw*nw-ns*ns); fprintf(normalized b=%fn,norm_b) else lamda=2*pi*a./sqrt(EL(indexj(j),indexj(j); %截止波长 fprintf(cut off wavelength wc=%fn,lamda) end v=zeros(Nv,2*Nh-1); for i=1:Nv V(i,:)=(EVC(i-1)*(2*Nh-1)+1:i*(2*Nh-),indexj(j).2; %求功率分布 end,x=-x2(length(x2):-1:1) -x1(length(x1):-1:2) x1 x2; px,py=gradient(V,x,y1 y2 y3); figure(Color,W),hold on contour(x,y1 y2 y3,V) xlim(x(1) x(length(x) ylim(y3(length(y3) y1(1) if d_wguide=1 %画波导的外形状 h=line(x(Nh-Nh1+1:Nh+Nh1-1),y2(1)*ones(1,2*Nh1-1); %顶部线 set(h,LineWidte,3,color,k) h=line(x1(length(x1)*ones(1,ti),y2(1:ti); %右部线 set(h,LineWidte,3,color,k) h=line(-x1(length(x1)*ones(1,ti),y2(1:ti); %左部线,set(h,LineWidte,3,color,k) h=line(x(Nh+Nh1-1:2*Nh-1),y2(ti)*ones(1,Nh-Nh1+1); %右中线 set(h,LineWidte,3,color,k) h=line(x(1:Nh-Nh1+1),y2(ti)*ones(1,Nh-Nh1+1); %左中线 set(h,LineWidte,3,color,k) h=line(x,y2(length(y2)*ones(1,2*Nh-1) %底部线 set(h,LineWidte,3,color,k) end xlabel(x/a) ylabel(y/b) j=j+1;,if jlength(indexj) fprintf(nall modes is showed) else s=input(show next eigenmode?,s); end endelse fprintf(no guide mode exists,maybe there is some error of your problem!) endfprintf(nend of this program)% copy 到运行空间%function FEM%FEM(1.5,1.5,0.2,2,600);,参考文献:计算电磁学的数值方法吕英华,