60 lines
1.9 KiB
Matlab
60 lines
1.9 KiB
Matlab
%RUN_EXPORT_COMSOL 一键从 COMSOL mph 导出 z=0.5 切面到 data/comsol_z050.txt
|
||
%
|
||
% 用法:在 MATLAB 里打开本文件,点“运行”(F5),不要只输入 export_comsol_slice。
|
||
%
|
||
% 需要:
|
||
% 1) 本机已安装 COMSOL + LiveLink for MATLAB(有 mphload 命令)
|
||
% 2) 有 SBC.mph 模型文件(算例已求解)
|
||
|
||
clear; clc;
|
||
|
||
thisDir = fileparts(mfilename('fullpath'));
|
||
projDir = fileparts(thisDir);
|
||
outFile = fullfile(thisDir, 'data', 'comsol_z050.txt');
|
||
zCut = 0.5;
|
||
gridN = 121;
|
||
|
||
%% 1. 检查 LiveLink
|
||
if exist('mphload', 'file') ~= 2
|
||
error(['未找到 COMSOL LiveLink(mphload 命令不存在)。\n\n' ...
|
||
'方法二需要 LiveLink。若没有,请用 COMSOL 界面手动导出:\n' ...
|
||
' Results → Cut Plane (z=0.5) → Export → 保存为\n' ...
|
||
' %s\n\n' ...
|
||
'详见 compare/README.md'], outFile);
|
||
end
|
||
|
||
%% 2. 查找 SBC.mph
|
||
candidates = {
|
||
fullfile(projDir, '..', '三维matlab代码', 'matlab 3D一阶散射问题', 'SBC.mph')
|
||
fullfile(projDir, 'SBC.mph')
|
||
fullfile(thisDir, 'SBC.mph')
|
||
'SBC.mph'
|
||
};
|
||
|
||
mphPath = '';
|
||
for k = 1:numel(candidates)
|
||
if isfile(candidates{k})
|
||
mphPath = candidates{k};
|
||
break;
|
||
end
|
||
end
|
||
|
||
if isempty(mphPath)
|
||
fprintf('自动搜索未找到 SBC.mph,请手动选择...\n');
|
||
[fname, fpath] = uigetfile('*.mph', '选择 COMSOL 模型文件 SBC.mph');
|
||
if isequal(fname, 0)
|
||
error(['未选择 mph 文件。\n' ...
|
||
'项目目录里目前只有 SBC.mph.lock,没有模型本体。\n' ...
|
||
'请从 COMSOL 另存 SBC.mph,或改用 GUI 手动导出 comsol_z050.txt。']);
|
||
end
|
||
mphPath = fullfile(fpath, fname);
|
||
end
|
||
|
||
fprintf('COMSOL 模型: %s\n', mphPath);
|
||
fprintf('输出文件: %s\n', outFile);
|
||
|
||
%% 3. 导出
|
||
export_comsol_slice(mphPath, outFile, zCut, gridN, gridN);
|
||
|
||
fprintf('\n导出成功!接下来运行:\n compare_normE_zslice\n');
|