XIAN-FEM-2026June/三维matlab代码/matlab 3D一阶散射问题/laspcem scat3D/scat3D_em与sbc3d_json对照说明.md

24 KiB
Raw Blame History

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 = 1variational_order = 1,与 MATLAB 一阶 Nedelec 一致
频率 / 波长 基本一致 JSON lambda=0.8 m.em 单频 375 MHz(≈ c/0.8
介质 εr ⚠️ 部分一致 JSON 两域 [1, 1.5].em 另有 PEC 材料条目(边界用,非体域)
边界条件 不一致 JSON/MATLAB6 个面 SBCmark 15, 14.em:仅 mark 1=PEC、2=PMC、3=ABC
入射面 / 激励 不一致 MATLAB 入射面 mark 4.em 平面波挂在 mark 3 的 ABC 面
网格文件 不一致 JSON 用 SBCmesh.dat.emscat3D.em.mesh(不同网格、不同格式)
几何单位 ⚠️ 需换算 JSON/MATLAB 坐标为 m(约 ±0.5.em 声明 mm(约 ±500
求解器段 .emHOFEM directJSON 走 OpticsFEM complexsolver

一句话scat3D.emsbc3d.json 不是同一套已对齐的输入;频率、一阶 Nedelec、ε=[1,1.5] 等核心参数接近,但边界编号、入射面、网格差异很大,不能直接指望两者数值结果一致。若要对齐,需在 LASPCEM 中按 MATLAB 的 phy.out / phy.inc 重新配置边界与网格。

注意:同目录下求解后生成的 1_Result/Design.emgeometrical_order = 2variational_order = 2,与根目录 scat3D.em(一阶)不同;对比时请以你实际打开的文件为准。


2. .em 文件是什么

scat3D.emLASPCEM/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 文件头(第 14 行)

行号 内容 含义 JSON / MATLAB
13 --------------------------------------------------- 等分隔线 纯排版,无物理含义
2 -- HOFEM -- 标明本文件供 LASPCEM-HOFEM 求解器读取
4 空行 分隔

3.2 物理与离散 Physic & formulation declaration(第 518 行)

行号 内容 含义 JSON / MATLAB
57 章节标题注释 本节定义 求什么方程、用什么有限元
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(第 2029 行)

行号 内容 含义 JSON / MATLAB
2022 章节标题
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(第 3156 行)

本节 仅 HOFEM 线性求解器 使用;组装出稀疏方程组 A\mathbf{x}=\mathbf{b} 后如何求解。sbc3d.json 无对应项OpticsFEM 走 complexsolver)。

行号 内容 含义 JSON / MATLAB
3133 章节标题
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
4344 --Increment of memory... / solver_ooc_mb_memory = 800 外存模式下每次向内存加载的块大小 800 MB;当前 in-core基本不生效
4546 注释 / solver_percentage_memory = 80 求解器最多占用可用内存的 80%
4748 注释 / solver_rhs_block_size = 5 组装右端项 RHS 时的 分块大小 = 5(性能参数)
4950 注释 / solver_technique = direct 直接法(稀疏 LU 类);另一选值为 iterative MATLAB \ 亦为直接法思路
5152 注释 / solver_precision = "double" 双精度浮点;可选 "mixed"
5354 注释 / solver_BLR_compresion = false 关闭 BLR 块低秩压缩(省内存但近似;键名拼写为 compresion
5556 注释 / solver_BLR_approximations = 5.0E-03 BLR 开启时的近似容差 5×10⁻³;当前未开启,无效

3.5 频率 Frequency properties(第 5871 行)

行号 内容 含义 JSON / MATLAB
5860 章节标题
62 -- The number of frequency distributions 注释
63 Freq_distribution_num = 1 定义 1 组 频点分布(可有多组扫描,本算例只有 1 组)
64 The type of each frequency distribution(...) 说明性文字(非赋值);列出类型 14 的含义,见下行
65 Freq_distribution_type = { 4 } 第 1 组分布类型 4 = SinglePoint单频点
常见编码:1 Linear Step2 Linear Count3 Log Scale4 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(第 73158 行)

行号 内容 含义 JSON / MATLAB
7375 章节标题
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 为 Tan2(PEC) 为 Sigma
dielectric_loss_tangent_i 介电损耗角正切 tan δelectric_loss_type=Tan 时) 均为 0无损
electric_conductivity_i 电导率 σelectric_loss_type=Sigma 时) 仅材料 21e30 → 理想导体
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 量纲,热分析用) 电磁散射不用

材料 1Vacuum第 79104 行)

行号 关键赋值 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

材料 2PEC第 106131 行)

行号 关键赋值 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 σ 主导,体域不用

材料 3Material1第 133158 行)

行号 关键赋值 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(第 160162 行)

行号 内容 含义 JSON / MATLAB
160162 章节标题,无赋值行 铁磁/偏置磁场(永磁体、外加 H 等)配置位;本算例 未启用

3.8 吸收层 UPML第 164169 行)

行号 内容 含义 JSON / MATLAB
164166 章节标题
168 --UPML active 注释
169 UPML_active = 0 不启用 各向异性完美匹配层UPML1 为启用 MATLAB/JSON 用 SBC 面 截断,不用 PML

3.9 积分方程加速 IIEE第 170183 行)

行号 内容 含义 JSON / MATLAB
170172 章节标题
174 -- IIEE activation flag 注释
175 iiee_truncation_method = false 关闭 IIEE(积分方程边界面截断/加速,大电尺寸问题用)
176177 注释 / iiee_truncation_aceleration = "none" 迭代加速方式:(键名拼写 aceleration
178179 注释 / iiee_truncation_iterations = 10 IIEE 开启时最大迭代 10 次;当前无效
180181 注释 / iiee_truncation_error = 1e-4 IIEE 迭代收敛阈值 10⁻⁴;当前无效
182183 注释 / external_domain_material = 1 外部无限域材料编号 → 材料 1Vacuum 与自由空间背景一致

3.10 周期边界 Periodic Boundary conditions(第 185187 行)

行号 内容 含义 JSON / MATLAB
185187 章节标题,无赋值行 Floquet/周期结构用;本算例 未配置

3.11 边界条件 Boundary conditions(第 189214 行)

网格三角面上带有 mark 编号(在 .mesh此处定义「mark → 边界类型」映射。

行号 内容 含义 JSON / MATLAB
189191 章节标题
193 -- Total number of boundary conditions 注释
194 num_boundary_conditions = 4 下面列出 4 条 mark→类型 规则 JSON 对 6 个外表面 配 SBCsbc.Index
196199 bound_mark_1 = 0 / bound_type_1 = "NULL" 网格 mark 0无边界条件(内部面或未使用面)
201204 bound_mark_2 = 1 / bound_type_2 = "PEC" mark 1理想电导体(切向 E = 0 MATLAB 外表面 无 PEC
206209 bound_mark_3 = 2 / bound_type_3 = "PMC" mark 2理想磁导体(切向 H = 0 MATLAB 外表面 无 PMC
211214 bound_mark_4 = 3 / bound_type_4 = "ABC" mark 3吸收边界 ABC(一阶吸收或等价 SBC JSON 6 面均为 SBCBoundaryFlag=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(第 216252 行)

3.12.1 激励数量总览(第 220233 行)

行号 内容 含义 JSON / MATLAB
216218 章节标题
220 -- Transfinite element method 注释
221 is_TFEM_method = false 不用 TFEM(超限插值单元)激励路径
222223 注释 / composite_excitation = false 不用 组合激励(多种源叠加为一条配置)
224225 注释 / num_interior_excitations = { 0,0,0,0,0,0 } 体内激励 6 类数量全 0
Ovol, Lvol, VS, CS, Osur, Ofil
226227 注释 / 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 不同)
228229 注释 / num_waveport_excitations = { 0,0,0,0,0 } 波端口 5 类矩形、同轴、广义、集总、Floquet全 0
230231 注释 / num_equivalent_excitations = { 0,0 } 等效源(近场、远场)全 0
232233 注释 / num_terminal_ports = { 0,0 } 终端端口 全 0

3.12.2 第 1 个平面波 exterior_*_1(第 235252 行)

行号 内容 含义 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 入射侧外部介质 → 材料 1Vacuum 背景 ε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 极化角
247 -- Polarization 注释
248 exterior_polarType_1 = 0 极化类型枚举 0HOFEM 内部TE/TM 或线极化分类)
249 -- Magnitude of planewave 注释
250 exterior_magnitude_1 = 1.0 平面波 幅度 = 1(归一化) phy.Einc 模长为 1JSON E0x="1"
251 -- Phase of planewave 注释
252 exterior_phase_1 = 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 全文件行号索引(速查)

行范围 章节 是否影响本算例物理
14 文件头
518 物理与离散 与 MATLAB 一阶一致
2029 几何与网格 ⚠️ 单位 mm、网格文件不同
3156 求解器 否(仅性能)
5871 频率 375 MHz ↔ λ=0.8 m
73158 材料 体域 εr多 PEC 条目
160162 磁偏置 否(空)
164169 UPML 否(关闭)
170183 IIEE 否(关闭)
185187 周期边界 否(空)
189214 边界条件 与 MATLAB SBC 不符
216252 激励 入射面 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 面 SBCmark 15,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. 若要让 .emsbc3d.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 4phy.inc),出射面 1,2,3,5,14 用出射 SBC。
  4. 阶次:保持 geometrical_order = 1variational_order = 1
  5. 频率:保持 375 MHz 或等价 lambda = 0.8 m
  6. 材料:两体域 ε=1 与 ε=1.5PEC 仅在有金属面时使用。

也可参考仓库中已写好的转换脚本思路:FEM3D001-scat/tools/convert_sbc_to_laspcem.py(从 SBCmesh.dat 生成一阶 Design.em + Design.em.mesh)。


7. 参考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 全文

{
  "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.emsbc3d.json,请重新核对边界与网格节。