你已经派生过 em3d-mt
镜像自地址
https://gitee.com/sduem/em3d-mt.git
已同步 2025-09-19 09:53:48 +08:00
85
bin/RMT3d/GetInterpMatrix.m
普通文件
85
bin/RMT3d/GetInterpMatrix.m
普通文件
@@ -0,0 +1,85 @@
|
||||
function Q = GetInterpMatrix(rec,mesh,indelem2)
|
||||
%% Field interpolation function
|
||||
|
||||
% rec = [0 0 0.20];
|
||||
% rec = randn(1000,3);
|
||||
|
||||
t = tic;
|
||||
mu0 = 4*pi*1e-7 ; % V·s/ (A·m)
|
||||
nrec = size(rec,1);
|
||||
if nargin==2
|
||||
TR = triangulation(mesh.elem2node,mesh.node2coord);
|
||||
ID = pointLocation(TR,rec);
|
||||
elseif nargin==3
|
||||
ID = indelem2;
|
||||
end
|
||||
|
||||
a = mesh.abcd(ID,[1 2 3 4]);
|
||||
b = mesh.abcd(ID,[5 6 7 8]);
|
||||
c = mesh.abcd(ID,[9 10 11 12]);
|
||||
d = mesh.abcd(ID,[13 14 15 16]);
|
||||
ve = mesh.vol(ID,1);
|
||||
Sign = mesh.sign(ID,:);
|
||||
elem2edge = mesh.elem2edge(ID,:);
|
||||
elemEdgeLength = mesh.elemEdgeLength(ID,:);
|
||||
local_i = [1 2;1 3;1 4;2 3;4 2;3 4];
|
||||
|
||||
[Nie, CurlNie] = getEit1(rec(:,1),rec(:,2),rec(:,3),a,b,c,d,ve,local_i,Sign,elemEdgeLength);
|
||||
|
||||
|
||||
Q.Ex=sparse(nrec,mesh.nedge);
|
||||
Q.Ey=sparse(nrec,mesh.nedge);
|
||||
Q.Ez=sparse(nrec,mesh.nedge);
|
||||
Q.Hx=sparse(nrec,mesh.nedge);
|
||||
Q.Hy=sparse(nrec,mesh.nedge);
|
||||
Q.Hz=sparse(nrec,mesh.nedge);
|
||||
|
||||
ii=repmat((1:nrec)',1,6);
|
||||
|
||||
Q.Ex=sparse(ii,elem2edge,squeeze(Nie(:,1,:)),nrec,mesh.nedge);
|
||||
Q.Ey=sparse(ii,elem2edge,squeeze(Nie(:,2,:)),nrec,mesh.nedge);
|
||||
Q.Ez=sparse(ii,elem2edge,squeeze(Nie(:,3,:)),nrec,mesh.nedge);
|
||||
Q.Hx=sparse(ii,elem2edge,squeeze(CurlNie(:,1,:)),nrec,mesh.nedge);
|
||||
Q.Hy=sparse(ii,elem2edge,squeeze(CurlNie(:,2,:)),nrec,mesh.nedge);
|
||||
Q.Hz=sparse(ii,elem2edge,squeeze(CurlNie(:,3,:)),nrec,mesh.nedge);
|
||||
|
||||
Q.Hx = -Q.Hx;
|
||||
Q.Hy = -Q.Hy;
|
||||
Q.Hz = -Q.Hz;
|
||||
|
||||
Q.Hx=Q.Hx/mu0;
|
||||
Q.Hy=Q.Hy/mu0;
|
||||
Q.Hz=Q.Hz/mu0;
|
||||
|
||||
GetInterpMatrixTime = toc(t)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function [Nie, CurlNie]=getEit1(xc,yc,zc,a,b,c,d,ve,local_i,TE_Sign,TE_length)
|
||||
Ne = size(xc,1);
|
||||
Nie = zeros(Ne,3,6);
|
||||
CurlNie = zeros(Ne,3,6);
|
||||
|
||||
for kt1 = 1:6
|
||||
i1 = local_i(kt1,1);
|
||||
i2 = local_i(kt1,2);
|
||||
Sign_i = TE_Sign(:,kt1);
|
||||
ai1 = a(:,i1);
|
||||
ai2 = a(:,i2);
|
||||
bi1 = b(:,i1);
|
||||
bi2 = b(:,i2);
|
||||
ci1 = c(:,i1);
|
||||
ci2 = c(:,i2);
|
||||
di1 = d(:,i1);
|
||||
di2 = d(:,i2);
|
||||
l = TE_length(:,kt1);
|
||||
Li1 = (ai1 + bi1.*xc + ci1.*yc + di1.*zc)./(6*ve);
|
||||
Li2 = (ai2 + bi2.*xc + ci2.*yc + di2.*zc)./(6*ve);
|
||||
GradLi1 = [bi1,ci1,di1]./repmat(6*ve,1,3);
|
||||
GradLi2 = [bi2,ci2,di2]./repmat(6*ve,1,3);
|
||||
Nie(:,:,kt1) = repmat(Sign_i,1,3).*(repmat(Li1,1,3).*GradLi2 - repmat(Li2,1,3).*GradLi1).*repmat(l,1,3);
|
||||
CurlNie(:,:,kt1) = repmat(Sign_i,1,3).*[ci1.*di2-di1.*ci2, di1.*bi2-bi1.*di2, bi1.*ci2-ci1.*bi2].*[2*l./((6*ve).^2),2*l./((6*ve).^2),2*l./((6*ve).^2)];
|
||||
end
|
||||
|
||||
end
|
在新工单中引用
屏蔽一个用户