XIAN-FEM-2026June/3D opticsfem-master/README.md

113 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OpticsFEM3D
三维矢量有限元光学电磁仿真程序(一阶 Nedelec 边元)。
## 支持的问题类型
| FemType | 说明 | 网格 | 状态 |
|---------|------|------|------|
| 03 | 二维问题(本征/散射) | `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 202618工作负载使用 C++ 的桌面开发
- CMake ≥ 3.8(随 VS 安装)
`cmake` 不在 PATH 中:
```powershell
$env:Path += ";C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
```
## 编译
```powershell
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
1. 修改 `test/Test_Main.cpp`,确保读取 `sbc3d.json`(当前默认),重新编译 `scat3D`
2. 部署输入文件:
```powershell
Copy-Item sbc3d.json, SBCmesh.dat -Destination scat3D\Release\
cd scat3D\Release
.\OpticsFEM.exe
```
3. 控制台应打印 `OpticsFEM_All returned 4`
4. 结果在 `OutFile/``Ex`、`Ey`、`Ez`、`normE`。
## 运行本征频率算例FemType = 5
1. 修改 `test/Test_Main.cpp` 中 JSON 文件名为 `eigen3d.json`,重新编译 `eigen3D`
2. 部署输入文件:
```powershell
Copy-Item eigen3d.json, SBCmesh.dat -Destination eigen3D\Release\
cd eigen3D\Release
.\OpticsFEM.exe
```
3. 控制台应打印 `OpticsFEM_All returned 5`
4. 当前输出 `OutFile/` 下 A/B 稀疏矩阵 COO`Ai/Aj/Av`、`Bi/Bj/Bv`0-based供与 MATLAB `eigs(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₀²ε + SBCb 来自入射边界 |
| 本征 (5) | **A·x = λ·B·x** | A = curl-curl刚度B = ε·质量 |
体积分核函数相同,散射将刚度与质量合并进 A 并加边界激励;本征拆成 A、B 求特征值。
## 详细文档
- [OpticsFEM_完整使用说明与代码介绍.md](./OpticsFEM_完整使用说明与代码介绍.md) — 模块说明、JSON 字段、FemType=4/5 专章
- [compare/README.md](./compare/README.md) — 与 COMSOL 的 normE 切面对比(散射)
## 仓库说明
- 仅上传**源码**与算例 JSON`scat3D/`、`eigen3D/`、`build/`、`build1/` 为本地 CMake 产物,不上传。
- FemType=4 的 `complexsolver.exe` 由 CMake 从 `complex/complexsolver.cpp` 编译,无需单独 PETSc 版求解器。