XIAN-FEM-2026June/三维matlab代码/matlab 3D二阶基+散射边界条件/getBF.m

92 lines
2.5 KiB
Matlab

function out=getBF(type,n,u,v,w)
%type 1-E 2-curlE
%n number of BF 2*NbrEdge+2*NbrFace 2*6+2*4
%(u,v,w) reference coordinate
if type==1 %1-(1,0,0) 2-(0,1,0) 3-(0,0,1)
if n==1
out=[v-3*u*v,-u+3*u*u,0];
elseif n==2
out=[v-3*v*v,-u+3*u*v,0];
elseif n==3
out=[w-3*u*w,0,-u+3*u*u];
elseif n==4
out=[w-3*w*w,0,-u+3*u*w];
elseif n==5
out=[1-3*u-v+3*u*v-w+3*u*w,u-3*u*u,u-3*u*u];
elseif n==6
out=[-2+3*u+5*v-3*u*v-3*v*v+5*w-3*u*w-6*v*w-3*w*w,-2*u+3*u*u+3*u*v+3*u*w,-2*u+3*u*u+3*u*v+3*u*w];
elseif n==7
out=[0,w-3*v*w,-v+3*v*v];
elseif n==8
out=[0,w-3*w*w,-v+3*v*w];
elseif n==9
out=[v-3*v*v,1-u-3*v+3*u*v-w+3*v*w,v-3*v*v];
elseif n==10
out=[-2*v+3*u*v+3*v*v+3*v*w,-2+5*u-3*u*u+3*v-3*u*v+5*w-6*u*w-3*v*w-3*w*w,-2*v+3*u*v+3*v*v+3*v*w];
elseif n==11
out=[w-3*w*w,w-3*w*w,1-u-v-3*w+3*u*w+3*v*w];
elseif n==12
out=[-2*w+3*u*w+3*v*w+3*w*w,-2*w+3*u*w+3*v*w+3*w*w,-2+5*u-3*u*u+5*v-6*u*v-3*v*v+3*w-3*u*w-3*v*w];
elseif n==13
out=[-3*v*w,3*u*w,0];
elseif n==14
out=[-3*v*w,0,3*u*v];
elseif n==15
out=[-3*v+3*u*v+3*v*v+3*v*w,3*u-3*u*u-3*u*v-3*u*w,0];
elseif n==16
out=[-3*v+3*v*v+3*v*w,-3*u*v,-3*u*v];
elseif n==17
out=[-3*w+3*u*w+3*v*w+3*w*w,0,3*u-3*u*u-3*u*v-3*u*w];
elseif n==18
out=[-3*w+3*v*w+3*w*w,-3*u*w,-3*u*w];
elseif n==19
out=[0,-3*w+3*u*w+3*v*w+3*w*w,3*v-3*u*v-3*v*v-3*v*w];
elseif n==20
out=[-3*v*w,-3*w+3*u*w+3*w*w,-3*v*w];
end
elseif type==2
if n==1
out=[0,0,-2+9*u];
elseif n==2
out=[0,0,-2+9*v];
elseif n==3
out=[0,2-9*u,0];
elseif n==4
out=[0,2-9*w,0];
elseif n==5
out=[0,-2+9*u,2-9*u];
elseif n==6
out=[0,7-9*u-9*v-9*w,-7+9*u+9*v+9*w];
elseif n==7
out=[-2+9*v,0,0];
elseif n==8
out=[-2+9*w,0,0];
elseif n==9
out=[2-9*v,0,-2+9*v];
elseif n==10
out=[-7+9*u+9*v+9*w,0,7-9*u-9*v-9*w];
elseif n==11
out=[-2+9*w,2-9*w,0];
elseif n==12
out=[7-9*u-9*v-9*w,-7+9*u+9*v+9*w,0];
elseif n==13
out=[-3*u,-3*v,6*w];
elseif n==14
out=[3*u,-6*v,3*w];
elseif n==15
out=[3*u,3*v,6-9*u-9*v-6*w];
elseif n==16
out=[-3*u,6*v,3-9*v-3*w];
elseif n==17
out=[-3*u,-6+9*u+6*v+9*w,-3*w];
elseif n==18
out=[3*u,-3+3*v+9*w,-6*w];
elseif n==19
out=[6-6*u-9*v-9*w,3*v,3*w];
elseif n==20
out=[3-3*u-9*w,-3*v,6*w];
end
end
end