Support OpticsFEM_3D_EigenFreq assembly with A/B matrix export, add eigen3d.json, and document scat3D/eigen3D build layout alongside FemType=4 scattering. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|---|---|---|
| .. | ||
| Eigen | ||
| Interface | ||
| common | ||
| compare | ||
| complex | ||
| function | ||
| kernel | ||
| material | ||
| mesh | ||
| nlohmann | ||
| parser | ||
| phy | ||
| post | ||
| solver | ||
| test | ||
| tools | ||
| .gitignore | ||
| CMakeLists.txt | ||
| CMakeSettings.json | ||
| OpticsFEM_完整使用说明与代码介绍.md | ||
| README.md | ||
| SBCmesh.dat | ||
| eigen3d.json | ||
| sbc3d.json | ||
README.md
OpticsFEM3D
三维矢量有限元光学电磁仿真程序(一阶 Nedelec 边元)。
支持的问题类型
| FemType | 说明 | 网格 | 状态 |
|---|---|---|---|
| 0–3 | 二维问题(本征/散射) | Mesh_2D |
遗留接口,与 2D 版相同 |
| 4 | 三维一阶散射(SBC) | Mesh_3D |
完整:组装 → 求解 → 后处理 |
| 5 | 三维一阶本征频率 | Mesh_3D |
组装 + A/B 矩阵导出(Run/Post 待接) |
三维主算例共用网格 SBCmesh.dat,散射与本征分别使用 sbc3d.json、eigen3d.json。
推荐构建目录
为避免散射与本征互相覆盖 exe 和 OutFile,建议使用两个独立 CMake 构建目录:
| 目录 | 用途 | 配置文件 |
|---|---|---|
scat3D/ |
FemType=4 散射 | sbc3d.json |
eigen3D/ |
FemType=5 本征频率 | eigen3d.json |
旧目录 build/、build1/ 为早期本地构建,可保留或删除,不必上传 Git。
环境
- Windows 10/11 x64
- Visual Studio 2026(18),工作负载:使用 C++ 的桌面开发
- CMake ≥ 3.8(随 VS 安装)
若 cmake 不在 PATH 中:
$env:Path += ";C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
编译
cd "3D opticsfem-master"
# 散射(FemType=4)
cmake -B scat3D -G "Visual Studio 18 2026" -A x64
cmake --build scat3D --config Release
# 本征频率(FemType=5)
cmake -B eigen3D -G "Visual Studio 18 2026" -A x64
cmake --build eigen3D --config Release
产物(每个构建目录各一份):
scat3D/Release/OpticsFEM.exe或eigen3D/Release/OpticsFEM.exe*/Release/complex/complexsolver.exe(FemType=4 散射求解必需,CMake 自动编译)
运行散射算例(FemType = 4)
- 修改
test/Test_Main.cpp,确保读取sbc3d.json(当前默认),重新编译scat3D。 - 部署输入文件:
Copy-Item sbc3d.json, SBCmesh.dat -Destination scat3D\Release\
cd scat3D\Release
.\OpticsFEM.exe
- 控制台应打印
OpticsFEM_All returned 4。 - 结果在
OutFile/:Ex、Ey、Ez、normE。
运行本征频率算例(FemType = 5)
- 修改
test/Test_Main.cpp中 JSON 文件名为eigen3d.json,重新编译eigen3D。 - 部署输入文件:
Copy-Item eigen3d.json, SBCmesh.dat -Destination eigen3D\Release\
cd eigen3D\Release
.\OpticsFEM.exe
- 控制台应打印
OpticsFEM_All returned 5。 - 当前输出
OutFile/下 A/B 稀疏矩阵 COO:Ai/Aj/Av、Bi/Bj/Bv(0-based),供与 MATLABeigs(A,B)对比验证。
说明:FemType=5 的
Run()(特征值求解)与Post()(场重构)尚未接入主流程;矩阵组装与边界处理已完成。
输入文件
| 文件 | FemType | 说明 |
|---|---|---|
sbc3d.json |
4 | 散射配置,含 sbc 边界块与 lambda |
eigen3d.json |
5 | 本征频率配置,含 NbrMode、searchValue 等 |
SBCmesh.dat |
4 / 5 | 三维四面体网格(顶点、四面体、边、三角边界等) |
物理形式简述
| 问题 | 方程形式 | 矩阵 |
|---|---|---|
| 散射 (4) | A·x = b(给定 λ/k₀) | A = curl-curl − k₀²ε + SBC;b 来自入射边界 |
| 本征 (5) | A·x = λ·B·x | A = curl-curl(刚度);B = ε·质量 |
体积分核函数相同,散射将刚度与质量合并进 A 并加边界激励;本征拆成 A、B 求特征值。
详细文档
- OpticsFEM_完整使用说明与代码介绍.md — 模块说明、JSON 字段、FemType=4/5 专章
- compare/README.md — 与 COMSOL 的 normE 切面对比(散射)
仓库说明
- 仅上传源码与算例 JSON;
scat3D/、eigen3D/、build/、build1/为本地 CMake 产物,不上传。 - FemType=4 的
complexsolver.exe由 CMake 从complex/complexsolver.cpp编译,无需单独 PETSc 版求解器。