# scat3D.em 与 sbc3d.json 对照说明
| 项目 | 路径 |
|------|------|
| LASPCEM/HOFEM 配置 | `laspcem scat3D/scat3D/scat3D.em` |
| OpticsFEM JSON | `3D opticsfem-master/scat3D/Release/sbc3d.json` |
| MATLAB 主程序 | `matlab 3D一阶散射问题/main.m` |
| MATLAB 网格 | `matlab 3D一阶散射问题/SBCmesh.dat` |
| LASPCEM 网格 | `laspcem scat3D/scat3D/scat3D.em.mesh` |
| 求解后副本(注意阶次不同) | `laspcem scat3D/scat3D/scat3D/1_Result/Design.em` |
**文档日期**:2026-06-16
---
## 1. 结论(先看这里)
| 维度 | 是否一致 | 说明 |
|------|----------|------|
| 单元阶次(`scat3D.em`) | ✅ 一致 | `geometrical_order = 1`,`variational_order = 1`,与 MATLAB 一阶 Nedelec 一致 |
| 频率 / 波长 | ✅ 基本一致 | JSON `lambda=0.8 m` ↔ `.em` 单频 `375 MHz`(≈ c/0.8) |
| 介质 εr | ⚠️ 部分一致 | JSON 两域 `[1, 1.5]`;`.em` 另有 PEC 材料条目(边界用,非体域) |
| 边界条件 | ❌ 不一致 | JSON/MATLAB:6 个面 SBC(mark 1–5, 14);`.em`:仅 mark 1=PEC、2=PMC、3=ABC |
| 入射面 / 激励 | ❌ 不一致 | MATLAB 入射面 mark **4**;`.em` 平面波挂在 mark **3** 的 ABC 面 |
| 网格文件 | ❌ 不一致 | JSON 用 `SBCmesh.dat`;`.em` 用 `scat3D.em.mesh`(不同网格、不同格式) |
| 几何单位 | ⚠️ 需换算 | JSON/MATLAB 坐标为 **m**(约 ±0.5);`.em` 声明 **mm**(约 ±500) |
| 求解器段 | — | 仅 `.em` 有(HOFEM direct);JSON 走 OpticsFEM `complexsolver` |
**一句话**:`scat3D.em` 与 `sbc3d.json` **不是同一套已对齐的输入**;频率、一阶 Nedelec、ε=[1,1.5] 等核心参数接近,但**边界编号、入射面、网格**差异很大,**不能直接指望两者数值结果一致**。若要对齐,需在 LASPCEM 中按 MATLAB 的 `phy.out` / `phy.inc` 重新配置边界与网格。
> **注意**:同目录下求解后生成的 `1_Result/Design.em` 里 `geometrical_order = 2`、`variational_order = 2`,与根目录 `scat3D.em`(一阶)不同;对比时请以**你实际打开的文件**为准。
---
## 2. `.em` 文件是什么
`scat3D.em` 是 **LASPCEM/HOFEM** 的求解配置文件(键值 + `--` 注释),角色上类似 OpticsFEM 的 JSON:
- 物理方程与单元阶次
- 频率
- 材料
- 边界条件
- 激励(平面波等)
- 求解器参数
网格在单独文件 `scat3D.em.mesh` 中,由 `mesh_filename` 引用。
OpticsFEM 当前**不能**直接读取 `.em`,需经适配转换为 JSON + 网格(参见仓库 `OpticsFEM_LASPCEM_接口规范.md`)。
---
## 3. `scat3D.em` 逐行解析(全文件 254 行)
本节按 **源文件行号** 说明 `scat3D/scat3D.em` 中每一行(或每一组重复行)的含义,并标注与 `sbc3d.json` / MATLAB 的对应关系。
**阅读约定**
| 列 | 含义 |
|----|------|
| **行号** | `scat3D.em` 中的行号 |
| **内容** | 该行原文(注释行仅写要点) |
| **含义** | HOFEM 如何理解该行 |
| **JSON / MATLAB** | 是否有对应;`—` 表示无直接字段 |
> `--` 开头为 **注释**,求解器不读取;`键 = 值` 才是有效配置。网格拓扑、面 mark 编号在 `scat3D.em.mesh` 中,本节只解析 `.em` 文本。
---
### 3.1 文件头(第 1–4 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 1–3 | `---------------------------------------------------` 等分隔线 | 纯排版,无物理含义 | — |
| 2 | `-- HOFEM --` | 标明本文件供 **LASPCEM-HOFEM** 求解器读取 | — |
| 4 | 空行 | 分隔 | — |
---
### 3.2 物理与离散 `Physic & formulation declaration`(第 5–18 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 5–7 | 章节标题注释 | 本节定义 **求什么方程、用什么有限元** | — |
| 9 | `-- HOFEM physics` | 注释 | — |
| **10** | `physics = "wave_equation"` | 控制方程为 **时谐 Maxwell 波动方程**(频域电磁散射/辐射类问题) | JSON 无此键;由 `FemType: 4` 在 OpticsFEM 侧路由到 3D 散射 |
| 11 | `-- HOFEM basis functions` | 注释 | — |
| **12** | `basis_functions = "nedelec"` | 采用 **Nédélec 边元**(矢量有限元,切向电场沿边展开) | MATLAB 一阶边元程序与此一致;JSON 无单独字段 |
| 13 | `-- HOFEM variational unknowns` | 注释 | — |
| **14** | `variational_unknown = "electric_field"` | 主未知量为 **电场矢量 E**(非标量势、非仅 H) | 对应 JSON `"EletricType": 2`(完整 E 矢量) |
| 15 | `-- HOFEM geometrical order approximation` | 注释 | — |
| **16** | `geometrical_order = 1` | **一阶几何**:四面体由 4 个顶点确定,边为直线、面为平面 | MATLAB `SBCmesh.dat` 为一阶直四面体 ✅ |
| 17 | `-- HOFEM variational order approximation` | 注释 | — |
| **18** | `variational_order = 1` | **一阶 Nedelec**:每四面体 6 条边 → 6 个边自由度 | MATLAB 一阶散射 ✅;**勿与** `EletricType` 混淆 |
**`geometrical_order` vs `variational_order`(本算例均为 1)**
| 字段 | 控制对象 | `=1` 时 | `=2` 时 |
|------|----------|---------|---------|
| `geometrical_order` | 单元**几何映射** | 4 顶点定四面体 | 10 几何节点,可曲边/曲面 |
| `variational_order` | 单元内 **E** 的插值阶次 | 6 DOF/四面体 | 约 20 DOF/四面体(二阶 Nedelec) |
---
### 3.3 几何与网格 `Geometry & Mesh properties`(第 20–29 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 20–22 | 章节标题 | — | — |
| 24 | `-- HOFEM geometry units` | 注释 | — |
| **25** | `geometry_units = "mm"` | 网格文件 `scat3D.em.mesh` 中顶点坐标 `(x,y,z)` 的单位为 **毫米** | JSON/MATLAB 用 **米**(`SBCmesh.dat` 约 ±0.5);物理尺寸相同(±500 mm = ±0.5 m)⚠️ |
| 26 | `-- Mesh format file` | 注释 | — |
| **27** | `mesh_format = "ASCII"` | 网格为 **文本格式**(非二进制) | — |
| 28 | `-- Mesh filename` | 注释 | — |
| **29** | `mesh_filename = "scat3D.em.mesh"` | 网格文件名;须与 `.em` **同目录** | JSON `"MeshFile": "SBCmesh.dat"` ❌ 不同文件 |
**网格规模对照(两文件物理尺度同为 ~1 m 立方体,但拓扑不同)**
| 对比项 | `scat3D.em.mesh` | `SBCmesh.dat` |
|--------|------------------|---------------|
| 顶点数 | 14774 | 6595 |
| 四面体数 | 9559 | 35832 |
| 坐标量级 | 约 ±500 **mm** | 约 ±0.5 **m** |
---
### 3.4 稀疏求解器 `Sparse solver properties`(第 31–56 行)
本节 **仅 HOFEM 线性求解器** 使用;组装出稀疏方程组 \(A\mathbf{x}=\mathbf{b}\) 后如何求解。`sbc3d.json` 无对应项(OpticsFEM 走 `complexsolver`)。
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 31–33 | 章节标题 | — | — |
| 35 | `-- Number of post process` | 注释 | — |
| **36** | `num_post_processes = 2` | 后处理(场输出、远场等)并行 **进程数 = 2** | — |
| 37 | `-- Number of process` | 注释 | — |
| **38** | `num_processes = 2` | 主求解流水线 **MPI 进程数 = 2** | — |
| 39 | `-- Solver type (in-core/out-of-core)` | 注释 | — |
| **40** | `solver_type = "in-core"` | **全内存** 求解(矩阵与分解放 RAM);另一选值为 `"out-of-core"`(溢出用磁盘) | — |
| 41 | `-- Number of Solver thread` | 注释 | — |
| **42** | `solver_threads = 2` | 每个进程内求解器 **OpenMP 线程数 = 2** | — |
| 43–44 | `--Increment of memory...` / `solver_ooc_mb_memory = 800` | **外存模式**下每次向内存加载的块大小 **800 MB**;当前 in-core,基本不生效 | — |
| 45–46 | 注释 / `solver_percentage_memory = 80` | 求解器最多占用可用内存的 **80%** | — |
| 47–48 | 注释 / `solver_rhs_block_size = 5` | 组装右端项 RHS 时的 **分块大小 = 5**(性能参数) | — |
| 49–50 | 注释 / `solver_technique = direct` | **直接法**(稀疏 LU 类);另一选值为 `iterative` | MATLAB `\` 亦为直接法思路 |
| 51–52 | 注释 / `solver_precision = "double"` | **双精度**浮点;可选 `"mixed"` | — |
| 53–54 | 注释 / `solver_BLR_compresion = false` | 关闭 **BLR 块低秩压缩**(省内存但近似;键名拼写为 compresion) | — |
| 55–56 | 注释 / `solver_BLR_approximations = 5.0E-03` | BLR 开启时的近似容差 **5×10⁻³**;当前未开启,无效 | — |
---
### 3.5 频率 `Frequency properties`(第 58–71 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 58–60 | 章节标题 | — | — |
| 62 | `-- The number of frequency distributions` | 注释 | — |
| **63** | `Freq_distribution_num = 1` | 定义 **1 组** 频点分布(可有多组扫描,本算例只有 1 组) | — |
| 64 | `The type of each frequency distribution(...)` | **说明性文字**(非赋值);列出类型 1–4 的含义,见下行 | — |
| **65** | `Freq_distribution_type = { 4 }` | 第 1 组分布类型 **4 = SinglePoint(单频点)**。
常见编码:`1` Linear Step,`2` Linear Count,`3` Log Scale,`4` SinglePoint | — |
| 66 | `-- The frequency distribution information` | 注释 | — |
| **67** | `Freq_distribution_info = { 3.75E+02, 3.75E+02, 1.0 }` | 单频时三元组 `{f_start, f_end, step}`:**375 MHz, 375 MHz, 步长 1** → 只算一个频点
频率单位:**MHz** | JSON `"lambda": 0.8`(**米**)✅ 等价:
`f = c/λ ≈ 299792458/0.8 ≈ 3.75×10⁸ Hz = 375 MHz`
MATLAB `phy.lda0 = 0.8` ✅ |
| 68 | `-- Save fields for all frequency` | 注释 | — |
| **69** | `Freq_distribution_savefield = 1` | **保存**每个频点的场解(`1` 开,`0` 关) | — |
| 70 | `-- Could exist repeat adaptive frequency` | 注释 | — |
| **71** | `Freq_probably_adapt_repeat = 0` | 自适应频点扫描时是否允许 **重复频点**;`0` = 否 | — |
---
### 3.6 材料 `Material properties`(第 73–158 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 73–75 | 章节标题 | — | — |
| 77 | `-- Number of materials` | 注释 | — |
| **78** | `num_materials = 3` | 材料库共 **3 种**(Vacuum、PEC、Material1) | JSON `NbrDomain: 2`(仅 2 个体域)⚠️ PEC 为边界材料 |
#### 材料字段模板(每种材料重复一组)
以下字段对 **材料 1 / 2 / 3** 各出现一次,后缀 `_1`、`_2`、`_3`:
| 字段模式 | 含义 | 本算例是否用到 |
|----------|------|----------------|
| `material_name_i` | 材料名称(字符串标识) | ✅ |
| `definition_type_i` | `"Isotropic"` = **各向同性** | ✅ |
| `dispersive_mark_i` | `"Non-dispersive"` = **非色散**(ε、μ 不随频率变) | ✅ |
| `permittivity_i` | 相对介电常数 **εr**(实部) | ✅ |
| `electric_loss_type_i` | 电损耗模型:`"Tan"` = 用损耗角正切;`"Sigma"` = 用电导率 σ | 1、3 为 Tan;2(PEC) 为 Sigma |
| `dielectric_loss_tangent_i` | 介电损耗角正切 **tan δ**(`electric_loss_type=Tan` 时) | 均为 0(无损) |
| `electric_conductivity_i` | 电导率 **σ**(`electric_loss_type=Sigma` 时) | 仅材料 2:`1e30` → 理想导体 |
| `permeability_i` | 相对磁导率 **μr** | ✅ |
| `magnetic_loss_type_i` | 磁损耗模型(`Tan`) | ✅ |
| `magnetic_loss_tangent_i` | 磁损耗角正切 | 均为 0 |
| `mass_density_i` | 质量密度(热/力学耦合用) | 0,电磁散射不用 |
| `heat_coefficient_i` | 比热 | 0,不用 |
| `thermal_conductivity_i` | 热导率 | 0,不用 |
| `initial_temperature_i` | 初始温度 **25**(°C 量纲,热分析用) | 电磁散射不用 |
#### 材料 1:Vacuum(第 79–104 行)
| 行号 | 关键赋值 | 值 | JSON / MATLAB |
|------|----------|-----|---------------|
| 80 | `material_name_1` | Vacuum | 域 0:εr=1 |
| 86 | `permittivity_1` | 1.0 | `epsilonrR[0]=1.0` ✅ `phy.eps(1)=1` |
| 92 | `permeability_1` | 1.0 | `murR[0]=1.0` ✅ `phy.mur(1)=1` |
#### 材料 2:PEC(第 106–131 行)
| 行号 | 关键赋值 | 值 | JSON / MATLAB |
|------|----------|-----|---------------|
| 107 | `material_name_2` | PEC | JSON **无**单独 PEC 材料条目 |
| 115 | `electric_loss_type_2` | `"Sigma"` | 用 σ 描述导体 |
| 117 | `electric_conductivity_2` | `1.0E+30` | 极大 σ → **理想电导体**;供 `bound_type=PEC` 引用 |
| 113 | `permittivity_2` | 1.0 | 被 σ 主导,体域不用 |
#### 材料 3:Material1(第 133–158 行)
| 行号 | 关键赋值 | 值 | JSON / MATLAB |
|------|----------|-----|---------------|
| 134 | `material_name_3` | Material1 | 域 1:散射体介质 |
| 140 | `permittivity_3` | **1.5** | `epsilonrR[1]=1.5` ✅ `phy.eps(2)=1.5` |
| 146 | `permeability_3` | 1.0 | `murR[1]=1.0` ✅ `phy.mur(2)=1` |
> 体域 εr、μr 与 MATLAB/JSON **一致**;`.em` 多出的 PEC 条目服务于边界 mark 1,不是第三个体域。
---
### 3.7 磁偏置 `Magnetic bias sources`(第 160–162 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 160–162 | 章节标题,**无赋值行** | 铁磁/偏置磁场(永磁体、外加 H 等)配置位;本算例 **未启用** | — |
---
### 3.8 吸收层 UPML(第 164–169 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 164–166 | 章节标题 | — | — |
| 168 | `--UPML active` | 注释 | — |
| **169** | `UPML_active = 0` | **不启用** 各向异性完美匹配层(UPML);`1` 为启用 | MATLAB/JSON 用 **SBC 面** 截断,不用 PML |
---
### 3.9 积分方程加速 IIEE(第 170–183 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 170–172 | 章节标题 | — | — |
| 174 | `-- IIEE activation flag` | 注释 | — |
| **175** | `iiee_truncation_method = false` | 关闭 **IIEE**(积分方程边界面截断/加速,大电尺寸问题用) | — |
| 176–177 | 注释 / `iiee_truncation_aceleration = "none"` | 迭代加速方式:**无**(键名拼写 aceleration) | — |
| 178–179 | 注释 / `iiee_truncation_iterations = 10` | IIEE 开启时最大迭代 **10** 次;当前无效 | — |
| 180–181 | 注释 / `iiee_truncation_error = 1e-4` | IIEE 迭代收敛阈值 **10⁻⁴**;当前无效 | — |
| 182–183 | 注释 / `external_domain_material = 1` | 外部无限域材料编号 → **材料 1(Vacuum)** | 与自由空间背景一致 ✅ |
---
### 3.10 周期边界 `Periodic Boundary conditions`(第 185–187 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 185–187 | 章节标题,**无赋值行** | Floquet/周期结构用;本算例 **未配置** | — |
---
### 3.11 边界条件 `Boundary conditions`(第 189–214 行)
网格三角面上带有 **mark 编号**(在 `.mesh` 中);此处定义「mark → 边界类型」映射。
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 189–191 | 章节标题 | — | — |
| 193 | `-- Total number of boundary conditions` | 注释 | — |
| **194** | `num_boundary_conditions = 4` | 下面列出 **4 条** mark→类型 规则 | JSON 对 **6 个外表面** 配 SBC(见 `sbc.Index`)❌ |
| 196–199 | `bound_mark_1 = 0` / `bound_type_1 = "NULL"` | 网格 mark **0** → **无边界条件**(内部面或未使用面) | — |
| 201–204 | `bound_mark_2 = 1` / `bound_type_2 = "PEC"` | mark **1** → **理想电导体**(切向 E = 0) | MATLAB 外表面 **无 PEC** ❌ |
| 206–209 | `bound_mark_3 = 2` / `bound_type_3 = "PMC"` | mark **2** → **理想磁导体**(切向 H = 0) | MATLAB 外表面 **无 PMC** ❌ |
| 211–214 | `bound_mark_4 = 3` / `bound_type_4 = "ABC"` | mark **3** → **吸收边界 ABC**(一阶吸收或等价 SBC) | JSON 6 面均为 SBC(`BoundaryFlag=2`);此处 **仅 1 个面** mark 3 ❌ |
**与 MATLAB / JSON 对照**
| 面 mark | MATLAB `phy.out` / `phy.inc` | JSON `sbc.Index` + `SBCType` | `scat3D.em` |
|---------|------------------------------|------------------------------|-------------|
| 1 | 出射 SBC | Index✅, Type=0 出射 | 未单独列出(无 ABC 规则) |
| 2 | 出射 SBC | 同上 | 未列出 |
| 3 | 出射 SBC | 同上 | **ABC**(唯一吸收面) |
| 4 | **入射** SBC | Type=**1** 入射 | 未列出;激励却挂在 mark 3 ❌ |
| 5 | 出射 SBC | Type=0 | 未列出 |
| 14 | 出射 SBC | Type=0 | 未列出 |
| 1 | — | — | 被标为 **PEC**(与 MATLAB 不符) |
| 2 | — | — | 被标为 **PMC**(与 MATLAB 不符) |
> `bound_mark_i` 是 **网格面上的整数标记**,与材料编号、激励编号不是同一套「序号表」,但数字可能巧合相同(如都有 mark 3)。
---
### 3.12 电磁激励 `Electromagnetic excitations`(第 216–252 行)
#### 3.12.1 激励数量总览(第 220–233 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 216–218 | 章节标题 | — | — |
| 220 | `-- Transfinite element method` | 注释 | — |
| **221** | `is_TFEM_method = false` | 不用 **TFEM**(超限插值单元)激励路径 | — |
| 222–223 | 注释 / `composite_excitation = false` | 不用 **组合激励**(多种源叠加为一条配置) | — |
| 224–225 | 注释 / `num_interior_excitations = { 0,0,0,0,0,0 }` | **体内激励** 6 类数量全 0:
Ovol, Lvol, VS, CS, Osur, Ofil | — |
| 226–227 | 注释 / `num_exterior_excitations = { 1,0,0,0,0,0,0 }` | **体外激励** 7 类:`{Pwaves_single, Pwaves_Multi, HDwave_E, HDwave_H, Lwave, Cwave, GBwave}`
→ **1 个单平面波**,其余为 0 | JSON/MATLAB 平面波入射 ✅(面 mark 不同) |
| 228–229 | 注释 / `num_waveport_excitations = { 0,0,0,0,0 }` | **波端口** 5 类(矩形、同轴、广义、集总、Floquet)全 0 | — |
| 230–231 | 注释 / `num_equivalent_excitations = { 0,0 }` | **等效源**(近场、远场)全 0 | — |
| 232–233 | 注释 / `num_terminal_ports = { 0,0 }` | **终端端口** 全 0 | — |
#### 3.12.2 第 1 个平面波 `exterior_*_1`(第 235–252 行)
| 行号 | 内容 | 含义 | JSON / MATLAB |
|------|------|------|---------------|
| 235 | `-- Excitation Serial Marker` | 注释 | — |
| **236** | `exterior_serial_marker_1 = 1` | 该平面波在 HOFEM 内部的 **激励序号 = 1**(与 mark 无关) | — |
| 237 | `-- Exterior boundary condition marker` | 注释 | — |
| **238** | `exterior_cond_marker_1 = 3` | 平面波施加在边界 mark **3**(须与 `bound_type=ABC` 的面一致) | MATLAB 入射面 **`phy.inc = 4`** ❌ |
| 239 | `-- Exterior material marker` | 注释 | — |
| **240** | `exterior_material_1 = 1` | 入射侧外部介质 → **材料 1(Vacuum)** | 背景 εr=1 ✅ |
| 241 | `-- Exterior planewave type` | 注释 | — |
| **242** | `exterior_type_1 = "Single"` | **单一** 入射方向平面波(非多角度扫描 `Multiple`) | — |
| 243 | `-- Incidence angle THETA,PHI of planewave` | 注释:球坐标入射角 **θ, φ**(单位:度) | — |
| **244** | `exterior_angles_1 = { 0.0, 0.0 }` | **θ = 0°, φ = 0°** → 沿 +z 轴入射(HOFEM 默认球坐标系) | JSON `kx,ky,kz` 全 0;需结合 HOFEM 角度定义核对极化 |
| 245 | `-- Polarization angle of planewave` | 注释 | — |
| **246** | `exterior_polar_angle_1 = 0.0` | 极化角 **0°** | — |
| 247 | `-- Polarization` | 注释 | — |
| **248** | `exterior_polarType_1 = 0` | 极化类型枚举 **0**(HOFEM 内部:TE/TM 或线极化分类) | — |
| 249 | `-- Magnitude of planewave` | 注释 | — |
| **250** | `exterior_magnitude_1 = 1.0` | 平面波 **幅度 = 1**(归一化) | `phy.Einc` 模长为 1;JSON `E0x="1"` ✅ |
| 251 | `-- Phase of planewave` | 注释 | — |
| **252** | `exterior_phase_1 = 0.0` | 初相 **0°** | — |
**极化与 MATLAB `phy.Einc = [1;0;0]` 的对应关系**
| 项目 | MATLAB / JSON | `scat3D.em` |
|------|---------------|-------------|
| 幅度 | 1 | `exterior_magnitude_1 = 1` ✅ |
| 电场方向 | x 向 `[1,0,0]` | 由 `angles` + `polar_angle` + `polarType` 共同决定;θ=φ=0 时通常对应 **+z 入射、线极化**,是否与 **x 向 E** 完全一致需在 LASPCEM 文档中核对 ⚠️ |
| 入射面 | mark **4** | mark **3** ❌ |
---
### 3.13 全文件行号索引(速查)
| 行范围 | 章节 | 是否影响本算例物理 |
|--------|------|-------------------|
| 1–4 | 文件头 | 否 |
| 5–18 | 物理与离散 | **是** ✅ 与 MATLAB 一阶一致 |
| 20–29 | 几何与网格 | **是** ⚠️ 单位 mm、网格文件不同 |
| 31–56 | 求解器 | 否(仅性能) |
| 58–71 | 频率 | **是** ✅ 375 MHz ↔ λ=0.8 m |
| 73–158 | 材料 | **是** ✅ 体域 εr;多 PEC 条目 |
| 160–162 | 磁偏置 | 否(空) |
| 164–169 | UPML | 否(关闭) |
| 170–183 | IIEE | 否(关闭) |
| 185–187 | 周期边界 | 否(空) |
| 189–214 | 边界条件 | **是** ❌ 与 MATLAB SBC 不符 |
| 216–252 | 激励 | **是** ❌ 入射面 mark 不符 |
---
## 4. 与 `sbc3d.json` 字段对照总表
| 项目 | `sbc3d.json` / MATLAB | `scat3D.em` | 一致? |
|------|----------------------|-------------|--------|
| 波长 | `lambda = 0.8 m` | `375 MHz` | ✅ 等价 |
| 材料 ε | `[1, 1.5]` | Vacuum=1, Material1=1.5 | ✅ |
| 材料 μ | `[1, 1]` | 均为 1 | ✅ |
| 单元阶次 | 一阶 Nedelec | `variational_order = 1` | ✅ |
| 几何阶次 | 直四面体 | `geometrical_order = 1` | ✅ |
| 矢量未知量 | 完整 E | `electric_field` + `EletricType:2` | ✅ |
| 几何单位 | m | mm(数值 ×1000) | ⚠️ 需换算 |
| 网格 | `SBCmesh.dat` | `scat3D.em.mesh` | ❌ |
| 边界 | 6 面 SBC,mark 1–5,14 | mark 1 PEC, 2 PMC, 3 ABC | ❌ |
| 入射面 | mark 4 | mark 3 | ❌ |
| 问题类型 | `FemType: 4` | HOFEM 自有路由 | — |
| 输出目录 | `OutFile` | HOFEM 后处理 | — |
---
## 5. 同目录下两个 `.em` 的区别
| 文件 | `variational_order` | `geometrical_order` | 说明 |
|------|---------------------|---------------------|------|
| `scat3D/scat3D.em` | 1 | 1 | 工程编辑用,与一阶散射一致 |
| `scat3D/1_Result/Design.em` | **2** | **2** | HOFEM 求解后/自适应副本,**二阶** |
若在 IDE 里打开的是 `1_Result/Design.em`,会看到二阶设置,与 `scat3D.em` 及 MATLAB 一阶算例**不对应**。对比 JSON 时请以 **`scat3D.em`(一阶)** 为准,或先把 `Design.em` 改回一阶并配一阶网格。
---
## 6. 若要让 `.em` 与 `sbc3d.json` / MATLAB 对齐
建议按下列顺序在 LASPCEM 中修改 `scat3D.em`:
1. **网格**:导入或与 `SBCmesh.dat` 同源的一阶网格;单位统一为 m 或 mm(全文一致)。
2. **边界**:为 mark `1,2,3,4,5,14` 配置 ABC(或 HOFEM 等价 SBC),不要用当前仅 mark 3 的单一 ABC。
3. **入射**:平面波激励挂在 mark **4**(`phy.inc`),出射面 `1,2,3,5,14` 用出射 SBC。
4. **阶次**:保持 `geometrical_order = 1`,`variational_order = 1`。
5. **频率**:保持 `375 MHz` 或等价 `lambda = 0.8 m`。
6. **材料**:两体域 ε=1 与 ε=1.5;PEC 仅在有金属面时使用。
也可参考仓库中已写好的转换脚本思路:`FEM3D001-scat/tools/convert_sbc_to_laspcem.py`(从 `SBCmesh.dat` 生成一阶 `Design.em` + `Design.em.mesh`)。
---
## 7. 参考:MATLAB 核心物理参数
```matlab
phy.eps = [1 1.5];
phy.mur = [1 1];
phy.lda0 = 0.8; % 波长 [m]
phy.out = [1 2 3 5 14]; % 出射 SBC 面 mark
phy.inc = [4]; % 入射面 mark
phy.Einc = [1;0;0];
```
---
## 8. 参考:`sbc3d.json` 全文
```json
{
"FemType": 4,
"EletricType": 2,
"lambda": 0.8,
"NbrBoundary": 14,
"BoundaryFlag": [0,2,2,2,2,2,0,0,0,0,0,0,0,2],
"sbc": {
"Index": [1, 2, 3, 4, 5, 14],
"SBCType": [0, 0, 0, 1, 0, 0],
"E0x": ["1", "1", "1", "1", "1", "1"],
"E0y": ["0", "0", "0", "0", "0", "0"],
"E0z": ["0", "0", "0", "0", "0", "0"],
"kx": [0, 0, 0, 0, 0, 0],
"ky": [0, 0, 0, 0, 0, 0],
"kz": [0, 0, 0, 0, 0, 0]
},
"NbrDomain": 2,
"domainType": [2, 2],
"domainIndex": [0, 1],
"matType": [0, 0],
"epsilonrR": [1.0, 1.5],
"epsilonrI": [0.0, 0.0],
"murR": [1.0, 1.0],
"murI": [0.0, 0.0],
"MeshFile": "SBCmesh.dat",
"OutFile": "./OutFile"
}
```
---
*本文档由对话整理生成,基于仓库内实际文件内容。若你修改了 `scat3D.em` 或 `sbc3d.json`,请重新核对边界与网格节。*