XIAN-FEM-2026June/3D opticsfem-master/compare/README.md

64 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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++ 散射求解
```powershell
cd "3D opticsfem-master\scat3D\Release"
.\OpticsFEM.exe
```
确认生成 `OutFile/normE`(需已部署 `sbc3d.json``SBCmesh.dat`,见根目录 README
### 2. 导出 COMSOL 切面
**方式 AMATLAB LiveLink**
```matlab
cd('3D opticsfem-master/compare')
run_export_comsol % 打开此脚本,点 F5 运行(不要无参调用 export_comsol_slice
```
前提:本机有 **COMSOL LiveLink**MATLAB 里能执行 `mphload`),且有 **SBC.mph** 文件(项目里目前只有 `.lock`,需从 COMSOL 另存 `.mph`)。
**方式 BCOMSOL 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)。