48 lines
1.8 KiB
Matlab
48 lines
1.8 KiB
Matlab
cd('C:/Users/Administrator/Desktop/西电-合作/三维matlab代码/matlab 3D二阶基+散射边界条件+单周期边界');
|
|
[phy, cfg] = case_config();
|
|
load(cfg.meshMatFile);
|
|
mesh.incIndex=findTri(phy.inc,mesh);
|
|
mesh.outIndex=findTri(phy.out,mesh);
|
|
[mesh.PBCIndex,mesh.origIndex]=findPBCIndex(phy.src,phy.dst,cfg.pbcAngle,mesh);
|
|
mesh.PBCphi=cfg.pbcPhi;
|
|
solver.Ai=[];solver.Aj=[];solver.Av=[];
|
|
solver.dof=mesh.NbrEdge*2+mesh.NbrFace*2;
|
|
solver.b=zeros(solver.dof,1);
|
|
solver=assembly_equ(phy,mesh,solver);
|
|
solver=assembly_out(phy,mesh,solver);
|
|
solver=assembly_inc(phy,mesh,solver);
|
|
solver.A=sparse(solver.Ai,solver.Aj,solver.Av);
|
|
solver=assembly_rbc(mesh,solver);
|
|
solver.A=solver.P'*solver.A*solver.P;
|
|
solver.b=solver.P'*solver.b;
|
|
r=symamd(solver.A);
|
|
solver.A=solver.A(r,r);
|
|
solver.b=solver.b(r);
|
|
solver.x=solver.A\solver.b;
|
|
q=zeros(length(r),1);
|
|
for i=1:length(r), q(r(i))=i; end
|
|
solver.x=solver.x(q);
|
|
solver.x=solver.P*solver.x;
|
|
triIndex=findTri([2,5],mesh);
|
|
[x,y,z,normE]=get_ele(triIndex,mesh,solver);
|
|
fid=fopen('matlab_norme_stats.txt','w');
|
|
fprintf(fid,'dof=%d\n',solver.dof);
|
|
fprintf(fid,'reduced=%d\n',size(solver.P,2));
|
|
fprintf(fid,'max_normE_face25=%.6g\n',max(normE(:)));
|
|
fprintf(fid,'mean_normE_face25=%.6g\n',mean(normE(:)));
|
|
fprintf(fid,'|x|_max=%.6g\n',max(abs(solver.x)));
|
|
fprintf(fid,'|b|_max=%.6g\n',max(abs(solver.b)));
|
|
% also vertex field if get_ele_vertices exists
|
|
try
|
|
[xv,yv,zv,nEv]=get_ele_vertices(mesh,solver);
|
|
fprintf(fid,'max_normE_vertices=%.6g\n',max(nEv(:)));
|
|
fprintf(fid,'mean_normE_vertices=%.6g\n',mean(nEv(:)));
|
|
dlmwrite('matlab_normE_vertices.txt', nEv(:), 'precision', 16);
|
|
catch ME
|
|
fprintf(fid,'vertex_err=%s\n', ME.message);
|
|
end
|
|
fclose(fid);
|
|
dlmwrite('matlab_x_real.txt', real(solver.x), 'precision', 16);
|
|
dlmwrite('matlab_x_imag.txt', imag(solver.x), 'precision', 16);
|
|
disp('done');
|