# normE 切面对比(COMSOL vs OpticsFEM) 在 **z = 0.5 m** 平面上对比 COMSOL 与 C++ OpticsFEM 的 |E| 热图。 ## 目录 | 文件 | 说明 | |------|------| | `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++ 求解 ```powershell cd "3D opticsfem-master\build\Release" .\OpticsFEM.exe ``` 确认生成 `OutFile/normE`。 ### 2. 导出 COMSOL 切面 **方式 A:MATLAB LiveLink** ```matlab cd('3D opticsfem-master/compare') run_export_comsol % 打开此脚本,点 F5 运行(不要无参调用 export_comsol_slice) ``` 前提:本机有 **COMSOL LiveLink**(MATLAB 里能执行 `mphload`),且有 **SBC.mph** 文件(项目里目前只有 `.lock`,需从 COMSOL 另存 `.mph`)。 **方式 B:COMSOL GUI 手动导出** 1. Results → Cut Plane → z = 0.5 m 2. 表达式:`sqrt(realdot(ewfd.Ex,ewfd.Ex)+realdot(ewfd.Ey,ewfd.Ey)+realdot(ewfd.Ez,ewfd.Ez))` 3. Export → Data,保存为 `compare/data/comsol_z050.txt` 4. 格式:每行 `x y z normE`(单位 m, m, m, V/m) ### 3. 运行对比 ```matlab 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)。