66 lines
2.5 KiB
Matlab
66 lines
2.5 KiB
Matlab
function [Ex,Ey,Ez,normE]=GetExEyEz2(type,Nodes,Elements,EdgesOfElements,xx)
|
|
%有求解的x计算电场Ex,Ey,Ez及normE
|
|
NbrElements=length(Elements);
|
|
|
|
if type==1
|
|
NbrReference=4;
|
|
NbrBF=6;
|
|
u=[1 0 0 0]';
|
|
v=[0 1 0 0]';
|
|
w=[0 0 1 0]';
|
|
elseif type==2
|
|
NbrReference=6;
|
|
NbrBF=9;
|
|
u=[0 1 0 0 1 0]';
|
|
v=[0 0 1 0 0 1]';
|
|
w=[-1 -1 -1 1 1 1]';
|
|
end
|
|
|
|
Ex=complex(zeros(NbrElements,NbrReference));
|
|
Ey=complex(zeros(NbrElements,NbrReference));
|
|
Ez=complex(zeros(NbrElements,NbrReference));
|
|
normE=zeros(NbrElements,NbrReference);
|
|
|
|
for n=1:NbrElements
|
|
%网格坐标
|
|
if type==1
|
|
x=zeros(4,1);y=zeros(4,1);z=zeros(4,1);
|
|
x(1)=Nodes(Elements(n,1),1);y(1)=Nodes(Elements(n,1),2);z(1)=Nodes(Elements(n,1),3);
|
|
x(2)=Nodes(Elements(n,2),1);y(2)=Nodes(Elements(n,2),2);z(2)=Nodes(Elements(n,2),3);
|
|
x(3)=Nodes(Elements(n,3),1);y(3)=Nodes(Elements(n,3),2);z(3)=Nodes(Elements(n,3),3);
|
|
x(4)=Nodes(Elements(n,4),1);y(4)=Nodes(Elements(n,4),2);z(4)=Nodes(Elements(n,4),3);
|
|
%边长度
|
|
l=ones(6,1);
|
|
l(1)=sqrt((x(1)-x(2))*(x(1)-x(2))+(y(1)-y(2))*(y(1)-y(2))+(z(1)-z(2))*(z(1)-z(2)));
|
|
l(2)=sqrt((x(1)-x(3))*(x(1)-x(3))+(y(1)-y(3))*(y(1)-y(3))+(z(1)-z(3))*(z(1)-z(3)));
|
|
l(3)=sqrt((x(1)-x(4))*(x(1)-x(4))+(y(1)-y(4))*(y(1)-y(4))+(z(1)-z(4))*(z(1)-z(4)));
|
|
l(4)=sqrt((x(2)-x(3))*(x(2)-x(3))+(y(2)-y(3))*(y(2)-y(3))+(z(2)-z(3))*(z(2)-z(3)));
|
|
l(5)=sqrt((x(2)-x(4))*(x(2)-x(4))+(y(2)-y(4))*(y(2)-y(4))+(z(2)-z(4))*(z(2)-z(4)));
|
|
l(6)=sqrt((x(3)-x(4))*(x(3)-x(4))+(y(3)-y(4))*(y(3)-y(4))+(z(3)-z(4))*(z(3)-z(4)));
|
|
%雅可比矩阵
|
|
Jac=zeros(3,3);
|
|
Jac(1,1)=x(1)-x(4);Jac(1,2)=y(1)-y(4);Jac(1,3)=z(1)-z(4);
|
|
Jac(2,1)=x(2)-x(4);Jac(2,2)=y(2)-y(4);Jac(2,3)=z(2)-z(4);
|
|
Jac(3,1)=x(3)-x(4);Jac(3,2)=y(3)-y(4);Jac(3,3)=z(3)-z(4);
|
|
InvJac=inv(Jac);
|
|
end
|
|
%基函数计算
|
|
Ne=zeros(3,NbrBF,NbrReference);%3个分量 * n个基函数 * m个顶点数
|
|
for i=1:NbrBF %基函数
|
|
for k=1:NbrReference %顶点
|
|
temp=BF_Edge(type,i,u(k),v(k),w(k));
|
|
Ne(:,i,k)=InvJac*temp*l(i);
|
|
end
|
|
end
|
|
|
|
%计算顶点值
|
|
for k=1: NbrReference %顶点
|
|
for i=1:NbrBF %基函数
|
|
MappingIndex=EdgesOfElements((n-1)*NbrBF+i);
|
|
Ex(n,k)=Ex(n,k)+Ne(1,i,k)*xx(MappingIndex);
|
|
Ey(n,k)=Ey(n,k)+Ne(2,i,k)*xx(MappingIndex);
|
|
Ez(n,k)=Ez(n,k)+Ne(3,i,k)*xx(MappingIndex);
|
|
end
|
|
normE(n,k)=sqrt(abs(Ex(n,k)*Ex(n,k))+abs(Ey(n,k)*Ey(n,k))+abs(Ez(n,k)*Ez(n,k)));
|
|
end
|
|
end |