46 lines
1.4 KiB
Matlab
46 lines
1.4 KiB
Matlab
function export_comsol_slice(mphFile, outFile, z0, nx, ny)
|
||
%EXPORT_COMSOL_SLICE Export |E| on z=z0 plane from COMSOL mph (LiveLink required).
|
||
%
|
||
% 不要无参调用本函数。请直接运行: run_export_comsol.m
|
||
%
|
||
% 或手动带齐 3 个参数:
|
||
% export_comsol_slice('D:\path\SBC.mph', 'data\comsol_z050.txt', 0.5);
|
||
|
||
if nargin < 3
|
||
error(['输入参数不足。\n' ...
|
||
'请运行 run_export_comsol.m(推荐),或:\n' ...
|
||
' export_comsol_slice(''完整路径\\SBC.mph'', ''data\\comsol_z050.txt'', 0.5);']);
|
||
end
|
||
if nargin < 4, nx = 121; end
|
||
if nargin < 5, ny = 121; end
|
||
|
||
assert(isfile(mphFile), 'COMSOL model not found: %s', mphFile);
|
||
assert(exist('mphload', 'file') == 2, ...
|
||
'COMSOL LiveLink for MATLAB not found (mphload missing).');
|
||
|
||
model = mphload(mphFile);
|
||
|
||
x = linspace(-0.5, 0.5, nx);
|
||
y = linspace(-0.5, 0.5, ny);
|
||
[X, Y] = meshgrid(x, y);
|
||
Z = z0 * ones(size(X));
|
||
coords = [X(:)'; Y(:)'; Z(:)'];
|
||
|
||
expr = 'sqrt(realdot(ewfd.Ex,ewfd.Ex)+realdot(ewfd.Ey,ewfd.Ey)+realdot(ewfd.Ez,ewfd.Ez))';
|
||
val = mphinterp(model, expr, 'coord', coords, 'unit', 'V/m');
|
||
val = reshape(val, size(X));
|
||
|
||
outDir = fileparts(outFile);
|
||
if ~isempty(outDir) && ~isfolder(outDir)
|
||
mkdir(outDir);
|
||
end
|
||
|
||
fid = fopen(outFile, 'w');
|
||
fprintf(fid, '%% x(m) y(m) z(m) normE(V/m)\n');
|
||
for i = 1:numel(X)
|
||
fprintf(fid, '%.6e\t%.6e\t%.6e\t%.6e\n', X(i), Y(i), Z(i), val(i));
|
||
end
|
||
fclose(fid);
|
||
fprintf('Exported COMSOL slice to %s\n', outFile);
|
||
end
|