# Fem4 端口激励算例（MeshData2x）

基准模型：**COMSOL Fem4.mph** → `MeshData2x.mat`（12444 节点，69093 四面体，z 方向长度 4 μm）。

## 运行 MATLAB（推荐入口）

```matlab
cd('三维matlab代码/2023-2-端口激励问题(四面体网格)')
MainFem2x          % 求解 + 出图 + 写 OutFile_fem4/
```

首次或更新网格后，补全 `Physic`/`Material`：

```matlab
load('MeshData2x.mat','Mesh');
[Physic,Material,~,~] = configPhysicMaterialFem4();
save('MeshData2x.mat','Mesh','Physic','Material','-v7.3');
```

有 COMSOL LiveLink 时可用 `MakeData2x.m` 从 `Fem4.mph` 重新导出网格。

## 输出

| 路径 | 内容 |
|------|------|
| `OutFile_fem4/normE` | 顶点 \|E\|（C++ 同格式） |
| `OutFile_fem4/S_params.txt` | S11、S21、powerCoef、neff |
| Figure 1–5 | 端口模场 + 全场/端口面场 |

## 与旧脚本关系

| 脚本 | 网格 | 说明 |
|------|------|------|
| `MainFem2.m` | `MeshData2.mat` | Fem2，L=1 μm，**未改动** |
| `MainFemx.m` | `MeshDatax.mat` | 大模型 Fem5，**未改动** |
| **`MainFem2x.m`** | **`MeshData2x.mat`** | **Fem4 基准，本算例** |

## 导出 A/b 矩阵（与 C++ OutFile 对比）

在 MATLAB 中（PEC 消元后、symrcm 之前，与 C++ 约化系统一致）：

```matlab
cd('三维matlab代码/2023-2-端口激励问题(四面体网格)')
exportAbMatrixFem4    % -> OutFile_fem4_ab/Ai.txt, Aj.txt, Av.txt, Bv_*.txt
```

无 MATLAB 时可用 Python 复现（已与 MATLAB S 参数一致）：

```powershell
cd "3D opticsfem-master\tools"
python compare_port_full.py
```

对比 C++ 与 MATLAB/Python 导出：

```powershell
python compare_ab_matrix.py "..\..\三维matlab代码\2023-2-端口激励问题(四面体网格)\OutFile_fem4_ab" "..\port\Release\OutFile"
```

python 3D opticsfem-master/tools/build_port_mesh_from_mat.py
# → port/Release/Portmesh.dat
```

3D 端口矩阵组装（`Assemble_Port`）尚在实施计划阶段 5.2；当前以 **MATLAB `MainFem2x` 为金标准**。

## 参考结果（MeshData2x 一次运行）

- `neff ≈ 2.623`
- `|S11| ≈ 0.024`
- `|S21| ≈ 0.42`

与 COMSOL 对比：将 COMSOL 导出 `normE` 放到 `OutFile_comsol/normE`，运行：

```powershell
python 3D opticsfem-master/port/Release/compare_normE_comsol.py
```
