硅光AWG阵列波导光栅设计与测试 - 第4节
4. 仿真环境搭建
第4章 仿真环境搭建
4、仿真环境搭建
Lumerical INTERCONNECT / Ansys Lumerical 环境配置、Python API 接口设置。
说实话,搭建仿真环境这件事,看着简单,但坑不少。我见过太多人花了一周装软件,最后因为 Python 接口没配好,又重来一遍。这一章,我把个人习惯的流程拆开来讲,你跟着走,基本不会翻车。
4.1 安装与许可证配置
先装 Ansys Lumerical 套件(2023 R2 以上版本比较稳)。我个人习惯把安装路径放在纯英文目录下,比如 C:\Lumerical。为什么?因为 Python API 在中文路径下偶尔会抽风,我踩过这个坑。
许可证方面,Ansys 现在用 LM-X 或 FlexNet。你拿到 license 文件后,放到 [安装目录]/licenses 下,然后设置环境变量:
# Windows 环境变量示例
LUMERICAL_LICENSE_FILE=C:\Lumerical\licenses\license.dat
ANSYSLMD_LICENSE_FILE=1055@your_license_server
设置完记得重启终端。我一般会在命令行敲 lmstat -a 确认 license 状态,虽然这步不是必须的,但能让你心里有底。
4.2 INTERCONNECT 环境验证
打开 INTERCONNECT,新建一个空白项目。随便拖一个「Optical Network Analyzer」和「CW Laser」,连起来跑一下。如果仿真能跑通,说明核心引擎没问题。
- 启动 INTERCONNECT 无报错
- 能加载元件库(Component Library)
- 运行一次简单仿真,结果窗口有波形
- 关闭软件再打开,设置不丢失
嗯,这里要注意:如果你用的是公司网络版 license,第一次启动可能有点慢,耐心等 10 秒就好。
4.3 Python API 绑定与测试
这才是重头戏。Lumerical 提供了 lumapi 模块,通过 Python 可以直接操控 INTERCONNECT 和 FDTD。我个人觉得,用 Python 做参数扫描比在 GUI 里点来点去高效十倍。
第一步:找到 API 路径
默认安装后,Python API 在 [安装目录]/api/python 文件夹里。你需要把这个路径加到 Python 的 sys.path 里,或者直接设置 PYTHONPATH 环境变量:
# 设置 PYTHONPATH (Windows PowerShell)
$env:PYTHONPATH = "C:\Lumerical\api\python;$env:PYTHONPATH"
# 或者直接在 Python 脚本里添加
import sys
sys.path.append(r"C:\Lumerical\api\python")
第二步:测试导入
import lumapi
# 启动 INTERCONNECT (后台模式)
ic = lumapi.INTERCONNECT()
# 打印版本信息
print(ic.version())
# 创建一个简单的电路
ic.newproject()
ic.addelement("OPTICAL", "CW Laser", "laser1")
ic.addelement("OPTICAL", "Optical Network Analyzer", "ona1")
ic.connect("laser1", 1, "ona1", 1)
ic.run()
# 获取结果
result = ic.getresult("ona1", "input")
print(result.keys())
# 关闭连接
ic.close()
如果这段代码跑通了,恭喜你,环境已经就绪。我曾经在某个服务器上因为 Python 版本不对(3.11 vs 3.9)卡了两天,后来发现 Lumerical 2023 R2 只支持 Python 3.7~3.10。所以,建议用 Python 3.9,最稳。
numpy matplotlib,就再也没出过问题。如果你用虚拟环境,记得每次激活环境后都要加 PYTHONPATH。
4.4 环境变量与路径持久化
我不希望每次打开终端都设一遍环境变量。所以,建议把 PYTHONPATH 和 LUMERICAL_LICENSE_FILE 写到系统环境变量里(Windows 的「高级系统设置」→「环境变量」;Linux 的 ~/.bashrc)。
| 变量名 | 示例值 | 说明 |
|---|---|---|
| PYTHONPATH | C:\Lumerical\api\python | 让 Python 找到 lumapi |
| LUMERICAL_LICENSE_FILE | C:\Lumerical\licenses\license.dat | 本地 license 文件路径 |
| ANSYSLMD_LICENSE_FILE | 1055@192.168.1.100 | 网络 license 服务器 |
设置完以后,重启终端,运行 python -c "import lumapi; print('ok')",如果输出 ok,那就一劳永逸了。
4.5 多版本共存与调试技巧
有时候你需要同时用 FDTD 和 INTERCONNECT。Lumerical 的 Python API 是统一的,你只需要用不同的类:
import lumapi
# 启动 FDTD
fdtd = lumapi.FDTD()
# 启动 INTERCONNECT
ic = lumapi.INTERCONNECT()
# 启动 MODE
mode = lumapi.MODE()
你想想看,这样你就可以在同一个 Python 脚本里,先跑 FDTD 得到波导截面模场,再导入 INTERCONNECT 做系统仿真。是不是很爽?
DLL load failed 错误,八成是 VC++ 运行库缺失。去微软官网装「Visual C++ Redistributable 2015-2022」就能解决。我至少帮三个同事处理过这个问题。
4.6 验证你的环境:一个完整的闭环测试
最后,我建议你跑一个最小闭环:用 Python 创建一个 AWG 仿真项目,设置参数,运行,并提取光谱。哪怕只是简单的直波导测试,也能暴露 90% 的环境问题。
import lumapi
import numpy as np
ic = lumapi.INTERCONNECT()
ic.newproject()
# 添加一个激光器和一个光功率计
ic.addelement("OPTICAL", "CW Laser", "laser")
ic.addelement("OPTICAL", "Optical Power Meter", "opm")
ic.connect("laser", 1, "opm", 1)
# 设置激光波长
ic.setglobalmonitor("laser", "wavelength", 1.55e-6)
# 运行
ic.run()
# 读取功率
power = ic.getresult("opm", "input")
print(f"测得的功率: {np.mean(power['P'])*1e3:.2f} mW")
ic.close()
如果输出功率在合理范围(比如 0.8~1.2 mW),说明你的 INTERCONNECT + Python API 全线打通。接下来就可以放心做 AWG 的系统级仿真了。
- 安装时务必勾选 Python API 组件,路径不要含中文
- 环境变量持久化,避免每次重复设置
- Python 版本推荐 3.9,配合 lumapi 最稳定
- 用一段最小脚本验证全链路,不要等到用的时候才发现问题