XIAN-FEM-2026June/三维matlab代码/matlab 3D一阶基+散射边界条件+单周期边界/export_fields.m

42 lines
1.1 KiB
Matlab

function export_fields(Ex, Ey, Ez, normE, outDir)
%EXPORT_FIELDS Write Ex/Ey/Ez/normE in OpticsFEM 3D scatter post format.
if nargin < 5 || isempty(outDir)
outDir = fullfile(fileparts(mfilename('fullpath')), 'OutFile');
end
if ~exist(outDir, 'dir')
mkdir(outDir);
end
Ex = Ex(:);
Ey = Ey(:);
Ez = Ez(:);
normE = normE(:);
fidEx = fopen(fullfile(outDir, 'Ex'), 'w');
fidEy = fopen(fullfile(outDir, 'Ey'), 'w');
fidEz = fopen(fullfile(outDir, 'Ez'), 'w');
fidNe = fopen(fullfile(outDir, 'normE'), 'w');
cleanup = onCleanup(@() closeOpenFiles({fidEx, fidEy, fidEz, fidNe}));
fprintf(fidEx, '//\n');
fprintf(fidEy, '//\n');
fprintf(fidEz, '//\n');
fprintf(fidNe, '//\n');
fprintf(fidEx, '%.12g %.12g\n', [real(Ex), imag(Ex)].');
fprintf(fidEy, '%.12g %.12g\n', [real(Ey), imag(Ey)].');
fprintf(fidEz, '%.12g %.12g\n', [real(Ez), imag(Ez)].');
fprintf(fidNe, '%.12g\n', normE);
fprintf('Exported fields to %s (NbrVertex=%d)\n', outDir, numel(normE));
fprintf(' max(normE)=%.12g\n', max(normE));
end
function closeOpenFiles(fids)
for k = 1:numel(fids)
if fids{k} > 0
fclose(fids{k});
end
end
end