
做光子集成和光纤传感的人基本都会撞上一个绕不开的问题弯怎么拐才不丢光。I弯曲光纤和弯曲波导的模式分析听着不新鲜但真要回答这一弯到底损耗了多少dB/cm不少教程就开始含糊了。COMSOL里能跑出漂亮模场图的人挺多能把这个损耗数值算准、算到可以被论文和设计采信的人却少得多——差距主要卡在模式分析设置、弯曲建模方式和损耗提取这几个环节上。这篇把我自己在COMSOL里做弯曲波导损耗计算的完整过程拆开覆盖等效折射率近似和全波仿真两条路线以及网格、PML和结果验证上的几个关键经验按这个流程走你至少能少踩我踩过的八成坑。1. 弯曲损耗的物理图像先搞清楚光为什么会漏出去1.1 弯一下导模就不再是原来的导模直波导能导光靠的是芯层和包层的折射率差把模式束缚住。光一旦走进弯曲段事情就变了。为了沿圆弧路径前进模式必须不断地转向等效地说波前要保持与圆弧路径匹配这就迫使模场能量整体向弯曲外侧偏移场分布不再对称原本被全反射牢牢关在芯里的光会有相当一部分以辐射形式从外侧逃逸出去。这个逃逸可不是小数目弯曲半径小到一定程度损耗会指数级上升几十dB/cm都算常见。拿开车过弯来类比最好理解直道上你贴着内线走没问题急弯里速度太快车就会往外甩。光子没有质量但波导对它约束力是有限的约束不住的时候它同样会被甩出波导芯。约束力由折射率差决定甩出去的倾向由弯曲半径决定两者博弈的结果就是弯曲损耗。1.2 三种损耗分开看不能混为一谈实际结构里弯曲相关的损耗通常有三类计算之前先分清对象弯曲辐射损耗curvature radiation loss光在均匀弯曲段传播时模式持续向外辐射造成的固有损耗。这是弯曲本身带来的地板也是最值得精确算的东西。过渡损耗transition loss直波导突然进入弯曲段或者弯曲结束突然接回直波导几何和相位的突变会激励辐射模和包层模造成额外损耗。模式失配损耗mode mismatch loss直波导里的基模和弯曲波导里的基模场分布不一样——弯曲段模斑更扁、质心向外偏。两段直接对接即便没有过渡损耗两个模式也对不齐耦合效率下降。这三类损耗里第一类本质上是均匀弯曲段的本征属性理论上有解析近似第二和第三类高度依赖具体几何结构解析很难基本靠全波仿真。文章后面两条技术路线正好分别覆盖本征弯曲损耗和完整结构总体损耗。1.3 Marcatili公式数量级直觉从哪来做仿真之前我强烈建议先用解析公式做一次数量级预估。弯曲损耗最经典的经验/半解析公式是Marcatili公式形式很简单α C₁ · exp(-C₂ · R)其中C₁和C₂由波导芯包折射率、截面尺寸和波长决定R是弯曲半径。它的核心含义是损耗随半径呈指数衰减。R小一点损耗立刻飙上去R大了之后损耗会压到极低。很多教材里还会提临界弯曲半径的概念——当R小于某个临界值时损耗急剧恶化这个临界值附近正是工程设计需要规避的区域也是仿真结果最敏感的区间。这个公式的实用价值有两个第一用COMSOL算出结果后和它对比量级差个一两倍可以理解差一个数量级以上就要检查模型了第二用COMSOL做参数扫描时把log(α)对R画出来理论上应该接近一条直线如果你看到曲线明显弯折甚至抖动基本可以断定是网格或边界条件出了问题而不是真实的物理。2. 建模前的路线选择等效折射率快算与全波精细仿真的边界2.1 路线A等效折射率法把弯折算进截面的折射率分布对于均匀弯曲段存在一个非常经典的数学技巧——保角变换conformal transformation。它把弯曲波导映射成一根等效的直波导代价是折射率分布不再均匀变成n_eq(x) n(x) · (1 x / R)这里x是沿弯曲半径方向的局部坐标指向弯曲外侧为正R是弯曲半径。这个公式的物理含义很直观弯曲外侧等效折射率变大内侧变小于是原本对称的波导变成了一个折射率倾斜的直波导。模式在这种倾斜分布里会被推向高折射率一侧也就是外侧——这和真实弯曲中模场向外偏移是完全一致的。这个方法的适用条件只有一个硬指标弱弯曲也就是R远大于波导截面特征尺寸宽度或直径。对常规光纤来说弯曲半径普遍在毫米甚至厘米级芯径只有几微米到几十微米满足几百倍甚至上千倍等效折射率法非常可靠对集成光波导来说硅光波导弯曲半径可能只有几微米波导宽度零点几微米比值也通常在10倍以上弱弯曲近似仍然可用只是误差会比光纤场景大一些但作为快速扫参工具完全够格。2.2 路线B全波端到端仿真把真实弯曲路径原样建出来如果需要算的不是均匀弯曲段的本征损耗而是直-弯-直整体的插入损耗、S弯、跑道型微环的真实透射响应等效折射率法就不够了。这时候需要把弯曲结构按真实几何建出来让光从输入端进去、从输出端出来用电磁场全波求解算出功率损耗。在COMSOL里的实现思路是几何上画出一段圆弧形的波导芯外面包上足够大的背景区域最外层加PML完美匹配层把辐射光吸掉防止反射输入端用边界模式分析求出目标模用端口边界条件把基模打进去输出端再用功率积分算出余量。总损耗 -10·log₁₀(P_out / P_in)。如果还扣掉端口反射S11就能得到相对纯粹的传输损耗。路线B的优势是能处理任意三维复杂路径能同时抓到过渡损耗和模式失配损耗代价是计算量明显变大而且PML、网格、端口处理每个环节都有坑。2.3 二选一还是组合拳实际项目中我一般组合使用设计阶段用路线A快速扫描弯曲半径、波导宽度等参数确定安全区间最终性能验证阶段用路线B对一到两个关键结构做全波确认。这样既不会被全波仿真的大计算量拖死又不会只靠近似结果拍板。下表是两条路线的一个直观对比对比维度路线A等效折射率边界模式分析路线B全波弯曲段PML计算量很小秒级到分钟级较大分钟到小时级适用场景均匀弯曲段、参数扫描、趋势判断直弯混合、微环、任意三维路径能算的损耗本征弯曲辐射损耗总传输损耗含过渡/失配损耗维度通常2D截面2D平面近似或3D全矢量主要误差来源弱弯曲近似、模式色散PML反射、网格离散、端口设置3. 路线A实操等效折射率边界模式分析3.1 一个经典的硅光弯曲波导截面先用最常见的例子把流程跑通SOI矩形波导芯层折射率n_core 3.45包层SiO₂折射率n_clad 1.44芯层宽度w 500nm高度h 220nm工作波长λ 1.55μm弯曲半径R 5μm。这类波导在硅光微环和弯道里到处都是。几何上在COMSOL里画一个500nm × 220nm的矩形作为芯层外面再画一个比较大的矩形作为包层区。这里有个关键点坐标原点最好放在弯曲中心在地面上的投影位置这样x坐标就直接代表到弯曲中心的横向偏移量写等效折射率表达式会非常舒服。如果原点不方便改也可以用变量x_shift x - x0的方式手动平移。3.2 在COMSOL里把等效折射率写进材料不要用材料库自带的光学玻璃直接自定义材料把折射率改为表达式。在电磁波、频域接口下芯层和包层的折射率分别定义为芯层n_core_eq 3.45 · (1 x/R)包层n_clad_eq 1.44 · (1 x/R)注意变量名里尽量不要用中文R可以用参数R_bend代替。参数化扫描时直接把R_bend设为扫描变量这样一次跑完不同弯曲半径的损耗曲线。表达式里x的正方向必须指向弯曲外侧如果符号反了模场会往内侧偏损耗计算结果会完全失真——这个坑我踩过一次后面专门说。3.3 边界模式分析的设置重点在复有效折射率模型建好后添加边界模式分析研究步骤选波导截面的边界在这类二维截面模型里就是芯层矩形的横截边线。需要设置的几项模式数设8个左右保证基模和低阶模式都能出来也方便观察高阶模式损耗。搜索基准在有效折射率n_eff 3.0附近搜索硅光基模有效折射率通常在2.5~3.2之间也可以先用一个临时模型算实数解确定初值。特征值类型这是最关键的一步。必须让求解器返回复值有效折射率虚部才有意义。在特征值求解器设置里把搜索范围设为一个以目标折射率为中心的复数邻域虚部范围可以设成-0.01到0.01或者选择求解器支持的复数特征值模式。如果只搜索实数特征值得到的n_eff虚部恒为0损耗怎么算都是0。求解完成后查看结果时把有效折射率列出来典型的弯曲基模n_eff大致是2.85左右这个量级但具体数值取决于波导尺寸。实部对应参考传播速度虚部是负值它反映的就是模式的衰减。有些版本里为了阅读方便会把虚部符号处理掉读取时一定要确认符号约定别把衰减当增益。3.4 从虚部换算损耗到底是多少dB/cm得到复有效折射率n_eff n_r i·n_i之后换算损耗的公式推导其实很干净。传播常数β k₀·n_eff (2π/λ)·(n_r i·n_i)功率衰减系数α_p 2·Im(β)画成dB单位就是α_dB/m 10 · log₁₀(e) · 2 · Im(β) 20 · log₁₀(e) · (2π/λ) · n_i把常数摞一起取近似20·log₁₀(e) ≈ 8.686于是α_dB/m ≈ 8.686 · (2π/λ) · n_i实操时λ用米做单位得到的损耗是dB/m习惯上波导损耗通常写成dB/cm直接除以100就行。举个例子λ 1.55e-6m如果n_i 1e-4那么α ≈ 8.686 × (2π / 1.55e-6) × 1e-4 ≈ 3519 dB/m ≈ 35.2 dB/cm这个量级是对的半径几微米的硅光强弯曲损耗从几dB/cm到上百dB/cm都正常。换成常规光纤弯曲半径厘米级、n_i通常在1e-6甚至更小损耗就降到零点几dB/km这个级别同样是这套公式。3.5 顺手验证模场偏移弯曲导致的模场偏移在等效折射率截面模型里会直接体现在模场图上。可以用一个积分算子算电场模的质心位置x_centroid ∫x·|E|²dA / ∫|E|²dA把x_centroid和波导中心位置做差就是偏移量。弱弯曲下偏移量大致正比于w²/R和教科书上的趋势对得上就可以放心继续算。如果偏移量是负的往弯曲内侧偏不用犹豫等效折射率x方向的符号肯定写反了。4. 路线B实操全波弯曲段建模PML决定损耗准不准4.1 几何构建2D环形域先用起来路线B最开始我会建议先在2D平面模型里跑通省时间。几何很简单以原点为圆心画环形芯层区域内径R_bend - w/2外径R_bend w/2。为了模拟真实器件在环形两端再各接一段直波导延伸到端口位置这样端口处的模式是直波导模式输入更干净也方便后续扣除过渡损耗。直段长度建议至少50μm以上让模式在进入弯曲之前充分稳定。如果直接研究完整环形谐振腔就把圆环闭合然后用两个直波导加一个点耦合区域做输入输出这种模型能看透射谱和谐振Q值不过那是另一个话题这里点到为止。3D模型则用扫掠操作先画一个圆弧形的中心线参数化曲线把芯层截面沿曲线扫掠成体再在外面包一层包层区域。核心原则都一样端口尽量放在平直段PML包在最外层。4.2 端口、激发与功率计算输入端和输出端都放在直段截面上。用端口边界条件配合边界模式分析预先算出的模式场作为输入指定输入功率1W。输出端同样用端口或普通边界加功率积分。频域求解完成后用继承了端口的变量直接算传输系数S21或者手动做面积分P_out ∫(沿传播方向的坡印廷矢量法向分量)dA损耗 -10 · log₁₀(P_out / P_in)必须说明一点这个损耗是直-弯-直整体的插入损耗里面包含弯曲辐射损耗、过渡损耗和模式失配损耗。如果想从总损耗中把弯曲辐射损耗单独剥出来办法是跑三次不同直段长度的模型做差或者直接和路线A的结果对比做定性判断。大多数工程场景下用户真正关心的是整体损耗所以直接用这条路径就好。4.3 PML怎么加才算真正吸收了PML是路线B里最影响数值准确性的设置没有之一。弯曲损耗的物理过程就是光从波导辐射出去如果不把辐射场吸干净它碰到计算域边界反射回来又会干扰原来的模式场算出来的损耗要么偏大要么偏小甚至出现损耗随频率非物理振荡。几条经验直接列出来PML形状弯曲结构建议用圆柱型PML与圆弧路径更匹配矩形PML也可以但圆柱型收敛更稳定。PML厚度至少0.5个工作波长我一般取1个波长到2个波长。太薄了边界反射大太厚了网格数量暴涨收益却很小。PML和波导芯的间距这个间距是最容易被忽略的。辐射场离开波导芯之后还会有一定的分布宽度如果PML贴得太近等效于人为压缩了辐射场空间会把局部场挤压出伪影。建议间距至少是波导芯宽的3到5倍或者让PML内边界距离弯曲外壁有几个波长的余量。PML类型参数在COMSOL里选中PML域指定比例为1:1的缩放并选择合适的坐标方向。有个验证PML是否合格的土办法把PML厚度加倍或者把PML与波导间距加倍再看损耗值。如果两次结果的差异在2%以内说明PML对结果没有实质影响可以放心用如果差异明显说明PML区域在演戏必须重调。4.4 网格芯区加密PML区域用扫掠网格直接决定弯曲损耗算出来的是不是假数字。弯曲结构中光的辐射区域其实是连续变化的网格过粗会人为引入数值泄漏也就是不需要PML也会算出来损耗更糟糕的是这种数值损耗随半径变化不可控。我的做法是芯层区域最大网格边长控制在λ/(15·n_core)以内。硅光场景下λ/(15×3.45)≈30nm网格量虽大但这是必要的。先跑通后可以适当放宽到λ/(10·n_core)。芯包边界加边界层网格至少3到5层保证折射率突变处的场变化被分辨。PML区域径向指向PML外边界的方向网格数要多一些切向可以放松COMSOL的PML域配网格时通常会自动做这种各向异性映射只需要保证物理域网格不过粗即可。外层区域PML内侧、波导外侧的包层区可以比芯区粗很多因为这个区域主要是辐射场的弱尾网格尺寸取λ/(5·n_clad)通常够。4.5 从场图确认确实在漏光结果出来之后别只盯数字看场图。一个正确设置的弯曲波导场分布应该长这样弯曲段的外部区域能看到连续、衰减、但没有明显斑块的辐射场沿径向向外呈波纹状衰减就像水波往外扩散模场在弯曲段明显向外侧偏移直段和弯曲段连接处会有轻微的模式畸变。如果外部区域看起来有明亮的驻波条纹或者PML内侧有一条亮线说明有反射没有被吸收PML还是有问题。5. 损耗结果提取与验证别把数字轻易当真5.1 特征值复有效折射率的符号和收敛路线A的核心产物是复有效折射率但读这个值的时候要仔细。不同文献、不同软件对时谐因子e^{iωt}还是e^{-iωt}的约定不同n_eff虚部的正负号会有差异。COMSOL里通常用e^{jωt}约定模式场的空间相位项是e^{-jβz}所以衰减对应β的虚部为负对应n_eff虚部为负。你不需要背结论但一定要先确认自己模型里的符号约定再套换算公式否则正负号一错损耗就成了增益做设计的人会一眼看出不对劲。另一个常见问题是特征值求解器收敛到不想看的模式。弯曲波导的高阶模式或者包层模式可能离搜索目标更近导致基模解被挤掉。解决方法是先用一个极粗网格快速跑一遍把基模的n_eff实部记下来再把搜索中心精确放到这个值附近虚部范围收窄到10⁻³量级。这样基本能稳定锁定目标模。5.2 三条独立验证手段交叉确认一个损耗数字能不能进报告我的标准是至少通过以下三个检查中的两个与Marcatili公式对比把R代入公式比较量级。弯曲半径为几十微米以上时COMSOL结果和Marcatili公式的差距通常在2倍以内半径极小几微米时差异可以达到数倍因为强弯曲下公式近似本身误差就大但趋势一致。极限检查把R设到极大值比如1e6·R弯曲损耗应该趋近于0。如果R很大时损耗还显著不为零模型里肯定存在数值损耗或边界泄漏先修这个问题再算小R。网格收敛性在固定物理设置下把网格尺寸减半损耗值变化应随网格加密逐渐减小并趋于平台。如果网格加密一倍损耗变化超过10%说明网格还没收敛。5.3 损耗的可忽略完全取决于应用场景0.01dB/cm的损耗对几十厘米的直波导传输来说微不足道但对微环谐振腔来说完全不是这么回事。微环一圈只有几十微米周长0.01dB/cm折算到一圈也有10⁻⁶dB量级看似不大可谐振Q值对腔内总损耗极其敏感损耗哪怕只有千分之一的差异Q值可能就掉了几个量级。所以在报告结论时一定要把损耗数值放回具体应用场景里解释只说数值是多少不说明在这个场景下意味着什么等于没算。6. 踩坑记录等效折射率符号、PML反射和2D/3D偏差6.1 等效折射率符号写反模式往外偏偏往内我第一次做弯曲损耗时把等效折射率表达式里的x方向设反了结果模场质心往弯曲内侧偏损耗值比预期大了近一个量级。折腾了一整天最后用文中的质心积分检查才发现问题。这个坑太容易踩了后来我的固定检查动作就是求解后先看模场偏移方向再做其他任何分析。方向对了再谈损耗数字。6.2 特征值虚部永远为0不是物理问题而是求解器设置另一个高频问题是边界模式分析跑得飞快结果里n_eff虚部全是零。很多人以为这是弯曲损耗小到算不出来其实是特征值求解器在默认配置下只搜实数特征值。把求解器设置为允许复值搜索或者把搜索中心加一个小的虚部偏移虚部立刻就出来了。这一步我建议一开始就设好不要等结果不对了再查。6.3 PML反射导致损耗数字抖得像心电图的排查链路有次算微环弯曲损耗结果在某个波长附近剧烈振荡怎么加密网格都没用。排查过程如下先做极限检查把R设大发现损耗不归零说明有非物理泄漏然后关掉PML换成散射边界结果更糟确认是边界处理问题最后把PML厚度从0.3λ加到1.2λ振荡消失。结论很简单初始PML厚度太薄根本吸不动辐射场。从那之后PML厚度成了我设置模型时的第一优先级参数而不是最后补充的参数。6.4 2D平面模型与3D全矢量结果的偏差要有预期矩形波导的弯曲损耗对偏振非常敏感TE和TM的损耗可以差几倍。2D平面模型一次只能算一个情况并且忽略了截面内场的纵向分量得到的损耗和3D全矢量结果通常差10%到30%模场分布则更接近。所以2D模型适合扫描参数、看趋势最终数值以3D为准。如果你只发设计报告、不做流片验证2D数字也可以用但建议在报告里注明基于2D近似。6.5 一个让批量扫描省心的参数化技巧把R_bend设成参数用COMSOL的参数化扫描一次性跑一组半径然后把损耗结果对R画成对数坐标。因为弯曲损耗随R呈指数关系log(α)对R做图接近直线这种图一眼就能看出哪些点是真实的物理趋势、哪些点是网格或边界异常。我每次做这种图都会顺手把R100μm的极限点加进去当作模型自带的自检校准点。曲线平顺、极限归零这组曲面损耗数据才算能拿得出手。