4.0 KiB
4.0 KiB
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 版求解器。