64 lines
1.9 KiB
Markdown
64 lines
1.9 KiB
Markdown
# 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 切面
|
||
|
||
**方式 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)。
|