我最早被弯曲波导折磨,是在做硅光子集成器件的时候。直波导算得好好的,一换到弯曲结构,有效折射率就开始飘,损耗也怎么都算不对,仿真结果看起来有鼻子有眼,但跟实际测试对不上。后来沉下心把Comsol里弯曲波导模式分析这套流程重新捋了一遍,才发现很多细节没吃透。这篇东西就是把我在这个过程中的思路、步骤、踩过的坑一次讲清楚,重点围绕有效折射率和损耗的精细计算,适合正在做集成光波导、微环谐振器、弯曲耦合器,或者刚接触Comsol波导模块的朋友参考。
1. 弯曲波导模式分析的整体思路拆解
1.1 为什么弯曲波导比直波导麻烦这么多
直波导的模式分析,本质是求解一个沿传播方向平移不变的截面本征问题。你把波导截面画好,设置好有效折射率搜索范围,Comsol就能给出模式场分布和有效折射率。但弯曲波导不一样,它多了一个几何曲率,光在弯曲路径上传播时,原本的正交模式会发生畸变,相位波前不再是均匀平面波,严格意义上甚至不存在完美的本征模,只有泄漏模。
这种物理上的复杂性直接反映在仿真设置里。直波导可以用二维截面加一个传播常数kz来简化,弯曲波导则要么在三维里直接建弯折实体,要么用二维模式分析加一个等效折射率近似。Comsol官方推荐的做法,往深了挖,其实是在二维轴对称或三维全波里做,但很多案例都是近似的。我个人的建议是:如果你只关心模式的有效折射率和弯曲损耗,优先级最高的方案是用“电磁波,频域”接口里三维全波模型,弯曲段取一个圆弧扇区,配合完美匹配层(PML)来吸收泄漏出去的辐射场。这样算出来的损耗才可信。
很多人一上来就把整个微环谐振器建成三维完整结构,然后开始扫频。这在COMSOL里不是不能跑,但计算量非常大,而且你很难分辨损耗里哪些是弯曲辐射损耗、哪些是模式失配损耗。更聪明的做法是先做单段弯曲波导的模式分析,把单位长度的弯曲损耗算准,再拿去评估整个环或者整个弯曲链路的性能。
1.2 有效折射率与损耗:一个实部一个虚部,别搞混
有效折射率是一个复数,写成 (n_{eff} = n_{real} + i n_{imag})。实部决定光的相速度,也就是光学上的等效折射率,直接影响谐振波长、相位匹配条件。虚部则对应损耗,虚部为正表示光在传播中衰减,虚部与损耗系数 (\alpha) 的关系是:
[ \alpha = \frac{4\pi}{\lambda} \mathrm{Im}(n_{eff}) ]
单位一般是1/m,如果习惯用dB/cm,再做一次单位换算:
[ \alpha_{dB/cm} = \frac{20}{\ln(10)} \times \frac{2\pi}{\lambda} \mathrm{Im}(n_{eff}) \times 100 ]
这里 (\lambda) 是真空波长。算出来单位就是dB/cm。注意,有些参考书里用的是 (\alpha = 2k_0 \mathrm{Im}(n_{eff})),这里 (k_0 = 2\pi/\lambda),跟我前面写的是同一个东西,别被不同的写法绕晕。
所以,所谓“损耗精细计算”,核心就是要把复有效折射率的虚部算准。虚部数值通常比实部小好几个数量级,比如实部2.6左右,虚部可能是1e-5甚至1e-7,这对网格精度、边界条件、求解器容差都提出很高的要求。
1.3 仿真方案选型:3D全波要精度,2D等效要速度
具体选什么方案,取决于你的量化目标。我给自己定的选择标准是这样的:
- 只看模式场分布和粗略的有效折射率实部,用二维截面模式分析就够了,算得快,方便调试模型。
- 要做弯曲损耗定量分析,必须上三维全波,弯曲段两端用端口激励,外侧加PML吸收辐射。
- 如果弯曲半径特别大(比如大于50微米)导致损耗极低,三维全波会因为网格量爆炸而变得很不划算,这时候可以退回到保角变换近似的等效直波导模型,但误差得自己心里有数。
我试过三次用二维截面直接模拟弯曲波导,把弯曲通过有效折射率近似映射成直波导的折射率分布,理论上可行,但实际操作里对模式边界的设定非常敏感,稍不注意就会算出不正常的虚部。所以我后来做损耗都老老实实走三维全波,只在需要快速扫描参数范围时用二维近似做预判。
2. 几何建模与模式分析设置
2.1 几何参数:圆心角不要让末端影响到模式
三维弯曲波导几何有一个容易被忽略的细节:弯曲段两端的直通切线长度。为了能够激励出稳定的模式并让PML正常工作,弯曲波导的前后两端最好各加一段直波导缓冲段。缓冲段的作用是让模式从端口激励处传播进入弯曲段时,经历一个较自然的过渡,而不是直接把一个直波导模式强行塞进弯曲结构里。
我常用的几何是:输入直波导长度10 μm,弯曲段圆心角90°,输出直波导长度10 μm。之所以用90°而不是一个完整的半圆或整圆,是因为90°扇区足够展现弯曲模式特性,而且占用的计算域小很多。整圆仿真适合验证周期性,不适合做模式本征提取。
弯曲内半径 (R_{in}),外半径 (R_{out}),波导宽度w = R_out - R_in。硅波导典型宽度500 nm,弯曲半径常见2 μm到20 μm之间。如果你仿真的是SOI平台,建议把弯曲半径设为这个量级,太小了损耗会急剧上升,太接近直波导特性就没有研究价值了。
建立几何时,建议把弯曲段的圆心放在原点,弯曲波导沿x-y平面展开,光沿弯曲路径传播,z方向是波导厚度方向(仅当波导在z向有截面高度时),或者用二维简化。我更习惯用三维模型做完整验证。
2.2 材料定义与边界条件:Material库别乱用,折射率要自己核对
Comsol材料库里的硅和二氧化硅折射率未必是你工艺对应的值。如果是标准SOI,硅在1550 nm附近的折射率大约3.476,二氧化硅1.444,这个数据很多论文和软件都默认。但不同供应商的片子,实际值会有细微差异。别小看这个差异,有效折射率实部差到0.01,谐振器FSR的计算就差不少。
所以我的习惯是:不在Comsol里选默认material,而是手动定义空材料,自己填折射率实部和虚部。硅在通信波段损耗极低,虚部可以设为0或者1e-7级别,氧化硅也类似。这样后面即使算出虚部,也知道完全是几何和泄漏造成的,而不是材料吸收。
边界条件上,模式分析里如果用了PML,需要把PML的外边界设为散射边界条件或者默认连续边界都行,PML区域本身会吸收向外传播的辐射场。这里的一个关键操作是:PML必须紧贴计算域外边界,且PML厚度至少是最大波长的1/4,通常取1~2 μm就够。我遇到过PML太薄导致反射波重新进入波导区,虚部出现周期性跳动的情况。
2.3 端口与激励:模式端口怎么选才不出错
三维全波里,最稳妥的激励方式是“端口”边界条件。在输入端选一个横截面,指定为端口1,在输出端选另一个横截面,指定为端口2。每个端口模态阶数选1,代表基模激励。
但这里有个Comsol的坑:端口模态求解默认是自动搜索该截面的模式,它算出来的模式可能跟波导几何对应不上,尤其当截面有对称性时,容易把两个简并模都找出来。我们需要在端口设置的“模式搜索”里手动指定一个接近期望模式有效折射率的初始值,让求解器锁定到那一个模式上。我一般会先用二维截面模式分析算出一个参考 (n_{eff}),再填进端口设置里。
如果端口前加了缓冲直波导,弯曲段末端的模式会跟直波导模式有一定差异,但只要差异不大,损耗计算结果依然是可信的。因为整个结构的损耗主要发生在弯曲段,直波导只是提供模式过渡。
3. 有效折射率与损耗的精细计算方法
3.1 从仿真结果中准确提取 (n_{eff}) 的实部和虚部
求解完成之后,结果里会给出“有效折射率”这个变量。这里的有效折射率是复数,实部直接看就行。虚部则要注意符号和数量级。
我经常看到有人直接拿“effective mode index”的实部当论文数据,却忽略了它带有“全局模式编号”的含义。在三维全波里,Comsol给出的是该端口模式下的传播常数 (\beta) 换算出的复有效折射率。如果端口模式设置的是“port 1”,那么在结果里找到“beta_1”和“neff_1”,其中neff_1就是该模式的复有效折射率。
实际提取时,我更信任从电场分布沿着传播方向做数值后处理得到的结果,而不是直接读内建变量。具体方法是:在弯曲波导的中心线上取一条采样线,导出电场振幅或相位,然后拟合幅度衰减曲线。因为弯曲波导的模式是泄漏模,场沿着路径衰减,幅度曲线是一条指数衰减,拟合出衰减系数,再除以 (2) 得到振幅衰减系数,进一步换算成 (\alpha),再反推虚部。这种方法更“物理”,可以避开端口模式定义里的某些数值假象。
不过直接读内建neff虚部作为初值仍然有价值,至少能帮你判断损耗量级是否合理。比如一个 (R=5 \mu m) 的硅波导,TE基模的虚部可能在1e-4上下,换算成损耗是几十dB/cm,这是合理量级。
3.2 损耗分量拆解:弯曲辐射、模式失配和数值假损耗
弯曲波导里的损耗有三个来源,仿真时要注意区分:
第一是纯弯曲辐射损耗,这是几何曲率带来的,光在弯曲路径上速度不匹配,外侧会有能量以辐射模的形式逃逸。这个损耗随半径增大呈指数下降,公式上可以参考 ( \alpha \propto \exp(-c \cdot R) ) 之类的趋势,但精确值只能靠仿真。
第二是模式失配损耗,即弯曲段基模与两侧直波导基模不完全匹配,光在接口处部分被反射或激发到其他模式。如果你在结果里看到0.99以下的透射率,不一定全是弯曲损耗,要检查接口处是否有多模激发。
第三是最麻烦的数值假损耗,这个不是真实物理损耗,而是仿真数值造成的。网格太粗、PML吸收效果差、迭代求解容差不够,都会造成虚部偏大。我判断假损耗的方法是:做一个半径非常大的弯曲波导,比如R = 100 μm,理论上损耗应该接近0,但仿真出来的虚部若能到1e-7以下,说明数值质量很好;如果虚部停在1e-5级别,那说明网格或PML还在造假,所有小损耗的数据都不可信。
3.3 网格细化策略:损耗虚部对网格极其敏感
弯曲波导仿真里,网格是决定成败第一因素。截面方向至少需要保证波导宽度内有8个网格点以上,500 nm宽度的波导,最大网格尺寸设为50 nm比较稳。传播方向网格不用那么细,可以放松到200 nm。
PML区域的网格却要特殊处理。在PML里,网格要各向异性拉伸,Comsol默认的PML可以自动应用拉伸坐标,但需要我们手动构建PML域并指定为PML类型。网格尺寸方面,PML内网格不能太粗,通常跟相邻波导外侧网格相近,或者略粗一个两倍,避免因为拉伸坐标而导致插值错误。
网格细化验证是必须做的一步。我会固定物理条件,只把网格从“较粗”改成“较细”,对比有效折射率虚部的变化。如果虚部变化超过10%,说明网格还没收敛,要再加密。只有连续两次加密后虚部变化小于几个百分点,我才认为这个数据可信。这一步很费时间,但也是精细计算损耗绕不过去的路。
3.4 参数化扫频:提取不同半径下的损耗曲线
弯曲波导损耗研究的核心不是算一个值,而是得到损耗随半径变化的曲线。Comsol的参数化扫描可以直接把弯曲半径设为参数,然后一键扫描多个半径。但要注意:每次参数改变,几何都需要重新构建,网格也需要重新划分,而且不同半径下同一个网格序列可能不是最优的,因为弯曲更尖锐的地方需要更细的网格。
我的处理方法是:半径作为全局参数,几何和网格尺寸都写成半径的函数。比如最大网格单元尺寸写成 ( \lambda / (20 \cdot n_{eff}) ),靠近内半径处的网格可以略微加密,表达式写成 ( \min(\lambda/30, 0.1 \cdot R) ) 之类的。这样可以保证每个半径点上的网格密度相对一致。
扫描完成后,把每个点的 ( \mathrm{Im}(n_{eff}) ) 通过前面那个公式换算成dB/cm,再用半对数坐标画图,就能很直观地看到弯曲损耗随半径指数下降的规律。那条曲线可以直接用于器件设计。
4. 常见问题与排查技巧实录
4.1 问题一:模式分析结果里突然多出莫名其妙的模式
端口模式自动求解时,会输出了很多高阶模式,甚至有些显然不是波导导模的伪模。这种伪模一般是因为搜索范围太宽,或者截面网格不够细。解决办法是缩小有效折射率搜索区间,比如我预期 (n_{eff}) 在3.4附近,就把搜索范围设定为3.0到3.5,不要从1到4。另一个技巧是手动指定需要的模式数,比如只需要1个模式,就只让它输出1个,避免被高阶模式干扰。
4.2 问题二:损耗结果随仿真域大小共振式波动
如果你的PML外边界离波导太近,或者PML厚度不够,泄漏辐射到达PML边界后会反射回来,与导模重新干涉,造成有效折射率虚部随着波长或半径出现周期性振荡。判断方法很简单:把PML厚度增加一倍再看虚部,如果变化很大,就是PML没做好。
我遇到最典型的情况是90°弯曲波导的外辐射主要在弯曲平面内向外传播,PML必须重点包裹弯曲外半径那一侧。所以我通常把PML做成一个包围整个弯曲扇区的壳层,而不是只在最外层加一个矩形框。PML形状要贴合波导的弯曲路径,不然吸收效果很差。
4.3 问题三:损耗虚部是负的,或者比直波导还小
负虚部显然物理上不可能(除非有增益),一般是符号约定问题。Comsol的时谐因子用的是 (e^{-i\omega t}) 还是 (e^{+i\omega t}),不同版本可能不同,导致虚部符号不同。如果你发现虚部是负的,说明可能模式传播方向设置反了,或者端口方向定义反了,试着把端口方向反转再看。
还有一种情况是虚部小到接近机器精度,比如1e-9这种,那说明该模式基本无损耗,但要注意这也许是数值上“欠阻尼”的表现,不能直接当成物理损耗。
4.4 问题四:算出来的弯曲损耗跟文献差一个数量级
这时候别急着怀疑软件,先检查两个地方。第一,材料折射率是否跟文献一致;第二,波导截面尺寸是否完全一致。哪怕厚度差20 nm,弯曲损耗可能差2倍以上。尤其是SOI脊波导的刻蚀深度,不同文献之间差异很大。对比前一定要统一所有物理参数。
另外,文献里说的弯曲损耗有的写成每90°损耗dB,有的是每厘米损耗dB,单位不统一最容易造成“差一个数量级”的假象。换算时注意:弯曲长度为 (L = R \cdot \theta)(弧长),单位长度的损耗换算成整段损耗要乘以弧长。
4.5 快查速记表
| 检查项 | 参考值/做法 |
|---|---|
| 波导截面网格 | 宽度方向至少8个点,最大尺寸50nm |
| PML厚度 | 至少1μm,建议2μm |
| 有效折射率搜索范围 | 根据近似值±0.2,别全范围扫 |
| 虚部收敛判据 | 两次细化网格虚部变化<5% |
| 弯曲损耗单位换算 | dB/cm = 20/ln(10) * (2π/λ) * Im(neff) * 100 |
| 端口模式初始值 | 用二维截面算出的neff填入 |
我个人在实际操作中最深刻的体会是:用Comsol算弯曲波导损耗,90%的时间都花在判断“这个数字可不可信”上,而不是点击运行。你得不断地人为设置一些“已知答案”的测试模型来校准模型。比如先用直波导验证虚部为0,再用大半径弯曲验证损耗接近0,最后才敢信小半径的损耗结果。这套校准逻辑,比任何参数面板里的高级设置都管用。后面你如果想把微环谐振器的Q值算出来,这套弯曲波导损耗数据直接就能用,不然整环仿真误差会让你怀疑人生。