Support OpticsFEM_3D_EigenFreq assembly with A/B matrix export, add eigen3d.json, and document scat3D/eigen3D build layout alongside FemType=4 scattering. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|---|---|---|
| .. | ||
| data | ||
| README.md | ||
| SBC.mph | ||
| build_z_slice.m | ||
| compare_normE_zslice.m | ||
| export_comsol_slice.m | ||
| interp_slice_to_grid.m | ||
| load_SBCmesh_dat.m | ||
| load_comsol_slice.m | ||
| load_opticsfem_normE.m | ||
| plot_compare_heatmaps.m | ||
| run_export_comsol.m | ||
README.md
normE 切面对比(COMSOL vs OpticsFEM)
在 z = 0.5 m 平面上对比 COMSOL 与 C++ OpticsFEM 的 |E| 热图(散射算例 FemType=4)。
目录
| 文件 | 说明 |
|---|---|
compare_normE_zslice.m |
主脚本,一键出对比图 |
export_comsol_slice.m |
从 SBC.mph 导出 COMSOL 切面数据(需 LiveLink) |
load_SBCmesh_dat.m |
读 SBCmesh.dat |
load_opticsfem_normE.m |
读 OutFile/normE |
build_z_slice.m |
四面体网格 z 平面切割 |
load_comsol_slice.m |
读 COMSOL 导出 txt |
plot_compare_heatmaps.m |
三联热图:COMSOL / OpticsFEM / 差值 |
data/comsol_z050.txt |
COMSOL 导出数据(需自行生成) |
data/compare_normE_z050.png |
输出对比图 |
使用步骤
1. 运行 C++ 散射求解
cd "3D opticsfem-master\scat3D\Release"
.\OpticsFEM.exe
确认生成 OutFile/normE(需已部署 sbc3d.json 与 SBCmesh.dat,见根目录 README)。
2. 导出 COMSOL 切面
方式 A:MATLAB LiveLink
cd('3D opticsfem-master/compare')
run_export_comsol % 打开此脚本,点 F5 运行(不要无参调用 export_comsol_slice)
前提:本机有 COMSOL LiveLink(MATLAB 里能执行 mphload),且有 SBC.mph 文件(项目里目前只有 .lock,需从 COMSOL 另存 .mph)。
方式 B:COMSOL GUI 手动导出
- Results → Cut Plane → z = 0.5 m
- 表达式:
sqrt(realdot(ewfd.Ex,ewfd.Ex)+realdot(ewfd.Ey,ewfd.Ey)+realdot(ewfd.Ez,ewfd.Ez)) - Export → Data,保存为
compare/data/comsol_z050.txt - 格式:每行
x y z normE(单位 m, m, m, V/m)
3. 运行对比
cd('3D opticsfem-master/compare')
compare_normE_zslice
输出:
- 图形窗口:COMSOL | OpticsFEM | 差值
data/compare_normE_z050.png- 命令行打印 max|diff| 与相对 L2 误差
修改切面位置
编辑 compare_normE_zslice.m 中 cfg.zCut(默认 0.5)。