当前位置: 首页 > news >正文

inverse-design-of-grating-coupler-3d(2)

一、设计和优化3D光栅耦合器

1、 结构组成

(1)substrate

功能与作用

  • 物理支撑:为整个光栅耦合器提供机械支撑

  • 光学隔离:防止光泄漏到下层结构中

  • 模式控制:与波导形成折射率对比,约束光场在波导层传播

设计原则

  • 厚度标准:需大于光穿透深度(通常≥2μm)

  • 材料选择:折射率需低于波导层(SiO₂@1550nm: n≈1.44 < Si: n≈3.47)

  • 扩展范围:x/y方向超出仿真区域2μm,避免边界反射影响

 (2)wg(波导)

功能与作用

  • 光传输通道:将光栅耦合的光能传输至芯片内部

  • 模式转换:将光栅的辐射模式转换为波导束缚模式

  • 结构基准:定义后续光栅的起始连接位置

关键参数

wg_height=220e-9  # 标准SOI器件层厚度
wg_width=500e-9   # 确保单模传输(TE/TM偏振)
x_max=2e-6        # 连接器起始位置

设计原则

  • 单模条件:宽度/高度满足 \frac{\lambda }{2n_{eff}} 限制

  • 材料匹配:必须与光栅层材料一致(如Si)

  • 端面处理:x_min延伸至仿真边界外,避免截断反射

 (3)silicon(硅基座)

功能与作用

  • 光栅载体:作为环形光栅的基底结构

  • 角度定义:通过theta_start/stop控制光栅有效区域

  • 椭圆校正make_ellipsoid=True补偿斜入射像差

关键参数

outer_radius=60e-6  # 足够覆盖所有环形结构
theta_start=330°    # 30°锥角对应的起始角度
z_max=wg_height     # 与波导高度严格对齐

设计原则

  • 半径裕度:需大于最终光栅外径+10%

  • 角度对称:theta_stop=360°-theta_start保证对称性

  • 材料一致:必须与波导相同(避免界面反射)

(4)rings(环形光栅)

功能与作用

  • 光耦合:通过周期性结构实现光纤-波导的模式匹配

  • 布拉格散射:控制槽宽/间距实现特定波长选择性

  • 偏振管理:椭圆环可调节TE/TM偏振响应

关键参数

n_trenches=30       # 典型周期数
etch_depth=70e-9    # 部分刻蚀保持机械强度
distances=[...]     # 交替的槽宽/间距参数

设计原则

  • 渐变周期:外圈周期>内圈周期(匹配模场扩展)

  • 刻蚀深度:需满足d_{etch} ≥ \frac{\lambda }{4n_{eff}}

  • 椭圆率outer_radius_2补偿斜入射相位

制造约束

  • 最小槽宽≥100nm(电子束光刻限制)

  • 间距一致性误差≤±5nm

 (5)blocker(遮挡块)

功能与作用

  • 几何过渡:掩盖波导与光栅的原始直角连接

  • 材料隔离:防止背景材料渗入连接区域

  • 场平滑:消除连接处的不连续散射

关键参数

x_min=connector_start-0.05μm  # 略超出连接区
y_span=10μm                  # 完全覆盖波导宽度
material=背景材料             # 折射率匹配

设计原则

  • 光学透明:折射率需接近背景材料(SiO₂)

  • 完全覆盖:必须包裹原始连接处的所有突变

  • Z轴对齐:高度与波导严格一致

(6)connector(连接器)

功能与作用

  • 绝热过渡:实现波导宽度到光栅的平滑转变

  • 模式匹配:降低连接处的反射损耗(<-30dB)

  • 参数化控制:通过插值点优化形状

关键参数

n_connector_pts=28           # 足够多的控制点
interpolation_points=300     # 高密度插值确保光滑
cubic_spline_interpolation   # 保证二阶导数连续

优化策略

  • 起始点固定:y=wg_width/2(波导宽度)

  • 终点约束:y=x*tan(θ_taper)(光栅角度匹配)

  • 中间点优化:通过connector_pts参数调节曲率

物理意义

  • 相当于一个逆锥形耦合器(inverse taper)

  • 插值点数直接影响插入损耗(每增加50点≈0.1dB改进)

2、设计思路

(1)n_bg = 1.44401,n_wg = 3.47668

n_bg = 1.44401,这是二氧化硅在1550波长附近的常见值

n_wg = 3.47668,在 1550 nm 波长下,硅的折射率约为 3.476

二氧化硅在1550nm附近有最低的传输损耗。

(2)self.x_fib = 18e-6  self.x_fib_span = 26e-6  self.z_fib = 0.5e-6

参数

典型值范围

依据

x_fib

15–25 μm

光栅长度 + 安全距离(避免波导干扰)

光纤与光栅末端的距离通常为 15–20 μm

x_fib_span

20–30 μm

2.5×MFD(单模光纤)(以确保高斯光束的尾部能量被完整捕获) 或覆盖光栅散射场

标准单模光纤(SMF-28)在 1550 nm 波长的模场直径约为 10.4 μm(MFD)

z_fib(光纤高度)

0.5–2 μm

光纤与光栅表面的垂直间距

1. 工艺可实现距离
2. 渐逝场耦合效率与仿真效率的平衡

 (3)模式监视器的位置和尺寸

self.mode_pos_x = self.x_fib - self.x_fib_span / 2 - 1e-6 if dim == 2 else -1e-6

  • 2D 仿真(dim == 2):
    监视器位于光纤起始位置左侧 1 μm 处(x_fib - x_fib_span/2 是光纤左边缘),确保:

    • 捕获从光栅耦合到光纤的所有光场(避免漏光)。

    • 避开光源直接照射(防止干扰)。

  • 3D 仿真(dim == 3):
    监视器固定在 x=-1 μm(波导入口附近),用于测量 反向传输到波导中的光功率(即耦合效率的 FOM)。

维度

模式监视器位置

目标

2D

光纤左侧 (x_fib - span/2 - 1e-6)

简化模型,直接测量光纤-光栅的耦合场(忽略波导三维效应)。

3D

波导入口 (x=-1e-6)

实际器件更关注 波导中的导模能量(需完整三维仿真)。

self.mode_span_y = 3e-6

在 1550 nm 波长下,单模光纤的 MFD 约 10.4 μm,但实际耦合区域集中在中心 3–5 μm(因高斯光束能量集中在中心)。

self.mode_span_z = 3e-6

光栅的散射场在 z 方向通常扩展至 1–2 μm(包括渐逝场),3 μm 确保完整捕获。

(4)反向光源位置

self.bksrc_pos_x = self.mode_pos_x + 100e-9

  • 正向:光纤→光栅→波导(模式监视器测量波导中的光)。

  • 反向:波导→光栅→光纤(需独立的光源和监视器)。

关键点

原因

紧邻监视器

确保反向光完全注入波导模式,且与正向光路分离。

100 nm偏移

平衡数值稳定性(避免网格冲突)和物理准确性(覆盖模场)。

与波导尺寸的关系

偏移量需小于波导模场直径(如硅波导约300 nm),否则会漏光。

(5)仿真网格尺寸

 dx=30e-9

经验法则:网格尺寸 ≤ 最小特征尺寸的1/5(示例中 dx=30 nm 可解析 150 nm 以上的结构)

dzFactor=3

dzFactor=3 表示z方向网格是刻蚀深度的 1/3,确保每个刻蚀层至少被 3个网格点 采样(满足Nyquist采样定理)

参数

设计原则

物理意义

dxdy

≤最小特征尺寸/5,各向同性简化(dy=dx

解析光栅周期和刻槽的横向场变化

dz

=etch_depth/dzFactor(默认 dzFactor=3

解析刻蚀深度的垂直场梯度

dzFactor

经验值3–5,高精度需扫描验证

控制z方向网格的细化程度

(6)仿真区域边界

参数

依赖关系

物理意义

x_min

mode_pos_x - 5*dx

波导模式向左自然衰减,兼容PML层

x_max

x_fib + x_fib_span/2 + 1e-6

覆盖光纤模式与光栅散射场

y_min/max

±x_fib_span/2

对称覆盖光纤和光栅的横向场

z_min

固定 -2.05e-6

衬底厚度 + PML层

SiO₂衬底通常需要足够厚度(如 2 μm)以模拟半无限大介质

负方向延伸需包含PML层(通常厚度 0.5–1 μm

z_max

固定 1.5e-6

光纤模式展开 + 光栅散射场

光纤位于 z_fib=0.5e-6,向上延伸 1.5e-6

(7)光纤角度

代码片段

物理意义

theta_fib_air = arcsin(sin(theta_fib_mat) * n_bg)

根据Snell定律计算光纤在空气中的等效入射角,确保仿真与实际封装条件一致。

保留 theta_fib_mat 和 theta_fib_air 的双向转换

兼容不同介质(如直接耦合/空气隙耦合)的光源设置需求。

  1. 从光纤到光栅:光在光纤(SiO₂包层,n≈1.444)中以 theta_fib_mat 角度入射到光栅。

  2. 从空气到光栅:若光纤与光栅间有空气隙(如未完全封装),需用 theta_fib_air 计算实际入射角。

(8)填充因子

self.F0 = 0.95

  • 高填充因子(如 0.95) 能增强光栅的 散射强度,因为更多的光被硅-空气界面反射/散射,从而提高光纤与波导的耦合效率。

  • 但过高的 FF(如 >0.98)会导致刻蚀槽过窄,可能引发制造困难或场局域化效应。

应用场景

典型填充因子范围

原因

高耦合效率设计

0.90–0.95

增强散射强度,同时保持可制造性

制造友好的设计

0.80–0.90

放宽对刻蚀精度的要求(如电子束光刻)

超紧凑光栅

0.95–0.98

牺牲工艺容差,追求极限性能(需亚10 nm硅宽度)

(9)连接波导和光栅的过渡区域

x_connector_start = -0.5e-6(起始位置)

  • 波导的有效折射率变化需要平滑过渡。

  • 经验表明,预留 0.5 μm 可容纳波导模式的渐逝场(evanescent field)衰减。

x_connector_end = 4.0e-6(结束位置)

  • 锥形过渡长度需满足 绝热条件(adiabatic condition),避免模式耦合损耗。

  • 对于硅波导(220 nm 厚度),典型锥形过渡长度为 3–5 μm 。

self.initial_points_x = np.linspace(-0.5e-6, 4.0e-6, 28+2)  # 30个点

  • 经验法则:每微米设置 5–10 个插值点(示例中过渡长度 4.5 μm,插值点间距约 161 nm)。

  • 端点扩展:
    +2 表示在起始(-0.5e-6)和结束(4.0e-6)处各添加一个固定点,确保连接器与波导/光栅的几何连续性。

  • 均匀分布:
    np.linspace 生成均匀分布的插值点,为后续的 样条插值(spline interpolation) 提供基础控制点。

(10)偏振模式与初始锥角

self.pol_angle = 90 if polarization == 'TE' else 0

  • ‌90°对应TE模式‌:使电场方向(E-field)沿y轴,实现横向电场分布

  • ‌0°对应TM模式‌:使电场方向沿z轴,满足横向磁场条件

self.initial_theta_taper = initial_theta_taper

  • 控制光栅耦合器的‌模式匹配过渡区‌形状,影响光场从波导到光栅的能量传递效率

  • 典型值30°可平衡以下因素:

    • 避免突变反射(角度过大会引起散射损耗)

    • 保证足够渐变区域(角度过小导致过渡区过长)

(11)"simulation time": 5000e-15(仿真时间)

设置为 5 ps(5000飞秒),是光在硅光子器件中传播的典型时间范围

  • 太短(如 1 ps):可能无法捕获完整的场演化。

  • 太长(如 10 ps):浪费计算资源。

  • 对于 1550 nm 光(周期约 5 fs),5000 fs 覆盖约 1000 个光学周期,足够观察瞬态和稳态行为。

(12)"auto shutoff min": 1e-6(自动停止阈值)

  • 1e-6 是经验值,确保剩余能量不影响结果(如耦合效率计算)。

  • 过高(如 1e-4)会提前终止,漏掉弱信号;过低(如 1e-8)会增加计算时间。

(13)"mesh refinement": "conformal variant 0"(网格细化方法)

  • "conformal":确保网格贴合曲面,避免阶梯近似误差。

  • "variant 0":平衡精度和速度,适合大多数硅光子器件。

选项

精度

速度

适用场景

几何兼容性

"conformal variant 0"

常规硅光子器件(默认选择)

复杂曲面、高折射率对比

"conformal variant 1"

极高

超表面、纳米结构

极端复杂几何

"precise volume average"

最高

最低

逆向设计、超材料

亚波长特征

"staircase"

最高

快速验证/教学

简单矩形结构

"none"

最低

极高

理论模型(如均匀波导)

无结构变化

(14) "meshing tolerance": 1.2e-15(网格容差)

FDTD仿真时,软件会把真实的光栅结构用一堆小方块(网格)拼出来。容差决定了这些方块和实际形状的最大允许偏差。可以把网格容差想象成“画图纸时的铅笔粗细”。

  • 例子:光栅刻蚀槽的边缘本应是光滑的,但网格只能近似成锯齿状。容差越小,锯齿越细腻(更接近真实)。

  • 光栅的刻蚀槽(如 70 nm 深)需要极高精度描述边缘场。

  • 普通仿真可用 1e-12,但高精度优化需 1e-15 级容差。

  • 过大的容差(如 1e-9)会导致网格粗糙,低估散射效率。

(15)高斯光源的设置

① beam_parameters="Waist size and position"(光束模式)

  • 设计意义:选择高斯光束的定义方式

  • 目的:直接指定束腰尺寸和位置,更接近实际光纤输出

  • 标准:光纤常用束腰参数(而非远场发散角)

② waist_radius_w0=5.2e-6(束腰半径)

  • 设计意义:高斯光束的束腰大小

  • 目的:匹配单模光纤的模场直径(MFD≈10.4μm → 半径5.2μm)

  • 标准

    • 单模光纤在1310nm波长下MFD通常为9.2-10.4μm

③ distance_from_waist=0.0(束腰距离)

  • 设计意义:束腰与光源平面的相对位置

  • 目的:将束腰直接设在光源位置(光纤端面)

  • 标准:设为0表示光纤端面即为束腰位置

④ wavelength_span=0.1e-6(波长范围)

  • 设计意义:光源的频谱宽度(100nm)

  • 目的:覆盖光栅带宽需求(如±40nm)

  • 标准

    • 需大于目标带宽(如粗波分复用CWDM)

    • 过大会降低频率分辨率

⑤ optimize_for_short_pulse=False(短脉冲优化)

  • 设计意义:禁用短脉冲优化模式

  • 目的

    • 频域仿真中优先保证波长精度

    • 避免因脉冲压缩引入的数值误差

  • 标准:连续波(CW)仿真必须设为False

(15)fdtd.setglobalmonitor("use wavelength spacing", True)(波长间距模式)

        在宽带仿真中,波长间距能保证‌光谱响应尖锐特征‌(如谐振峰)被均匀捕获,而频率间距可能导致短波长区域过度采样;频域监视器(如透射率监视器)默认按波长存储电场数据,波长间距可避免后续数据转换的额外插值误差;周期边界结构(如光栅)的仿真中,波长间距天然匹配‌布洛赫波矢条件‌,避免频率间距导致的波矢离散化误差。

间距模式

适用场景

优势

局限性

波长间距 (True)

宽带光学器件、色散材料分析

物理直观、计算稳定

长波长区域分辨率可能不足

频率间距 (False)

窄带通信系统、时域信号处理

频谱均匀性更好

需手动调整关键波长采样密度

(16)fdtd.addmesh(name="source_mesh", x=self.x_fib, x_span=24e-6, y_min=self.y_min, y_max=self.y_max, z=self.z_fib,z_span=2 * self.dz, override_x_mesh=False, override_y_mesh=False, override_z_mesh=True, dz=self.dz)

重写Z方向网格:

  • 全局网格‌:相当于普通放大镜,所有方向放大倍数相同(默认均匀网格)。

  • 仅重写Z方向‌:相当于把放大镜换成‌单方向高倍镜‌,只在关键方向(如光传播方向)精细观察,其他方向用普通镜片(沿用全局网格)

许多光学结构(如光纤、波导)在Z方向(光传播方向)存在‌快速变化的物理场‌(如倏逝波、模式干涉),需要更密网格捕捉细节;而XY方向场分布较平缓,默认网格已足够。

场景

仅重写Z方向的优势

典型结构

光纤-芯片耦合

Z向加密捕捉倏逝波衰减(精度↑),XY向节省算力(速度↑)

锥形波导、光栅耦合器

多层薄膜反射率

Z向分层精确采样(如WO₃/W界面),避免全局加密浪费

太阳能电池、光学涂层

大尺寸结构仿真

局部Z向加密关键区域,全局网格保持宽松(内存↓)

集成光路的长距离传输波导

 步长dz取值依据‌:
需小于‌最小特征尺寸的1/5‌(例如220nm硅波导层,dz≤44nm),且小于‌最小波长/(10×最高折射率)‌(如1550nm光在硅中需dz≤1550/(10×3.5)≈44nm)。

(17)fdtd.setnamed("source_mesh", "enabled", False)

  • 通过脚本临时禁用网格,可在后续步骤中按需启用(如迭代优化时局部加密网格)

  • 避免仿真初始化阶段不必要的网格划分计算,提升启动速度

(18)重写X方向的网格

# 添加优化区域监视器 记录光栅区域的电场分布,用于后续优化算法分析fdtd.addpower(name="opt_fields", monitor_type="3D", x_min=self.x_min_opt_region, x_max=self.x_max,y_min=self.y_min, y_max=self.y_max, z_min=self.wg_height - self.etch_depth, z_max=self.wg_height,# z 最小值(刻蚀深度)z 最大值(波导高度)output_Hx=False, output_Hy=False, output_Hz=False, output_power=False)  # 禁用磁场输出 禁用功率输出(仅保存电场)fdtd.addmesh(name="opt_fields_mesh", x_min=self.x_min_opt_region, x_max=self.x_max, y_min=self.y_min,y_max=self.y_max, z_min=self.wg_height - self.etch_depth, z_max=self.wg_height, dx=self.dx,dy=self.dy, dz=self.dz)

 主要是为了‌针对X方向的光场特性进行精确控制,说明X方向有一个‌特定光学区域‌(如光栅、耦合器或缺陷结构),此处光场会剧烈变化(如衍射、散射)。

场景

为何重写X方向?

示例结构

光栅耦合器仿真

X方向需匹配光栅周期(如Λ=500nm),需精确采样每个刻槽边缘场

表面光栅、布拉格光栅

波导弯曲损耗分析

X方向弯曲区域场分布畸变严重,需加密网格捕捉辐射损耗

硅光弯曲波导、环形谐振腔

多模干涉器件

X方向存在多模干涉条纹,网格需密到能分辨相邻峰谷(如1μm间距需dx≤200nm)

MMI耦合器、分束器

  • Z向加密‌:针对‌层状结构‌(如薄膜堆叠)或‌光传播方向‌的倏逝波。

  • X向加密‌:针对‌横向周期性/非均匀结构‌(如光栅、波导侧壁粗糙度)。

(19)spatial_interpolation='none'

禁止任何形式的“空间插值”处理。也就是说,程序会‌直接使用原始网格点上的数据值‌,不会根据周围点推算未知位置的值。

  • 优点‌:避免插值算法(如线性平滑或样条拟合)引入额外误差,适合高精度分析场景。

  • 缺点‌:结果可能显得不连续或有“锯齿感”,尤其在网格较粗时

 简单说:‌'none' = “别美化直接给我原始数据”‌,重在保真度而非平滑度。

(20)def get_opt_region_pos(self):(计算光栅耦合器优化区域的网格点坐标)

​网格生成标准​​:

dx_in_nm = int(round(self.dx * 1e9))  # 30nm网格 → 精确转为30整数
x_points = int(round(范围长度/dx)) +1  # 确保完全覆盖区域
  • 强制网格对齐:通过round+int保证所有网格点落在整数纳米位置

  • 边界冗余:y方向+2个点,z方向+2个点,防止边缘截断效应

​三维协调标准​​:

  • x/y方向:按用户设定的dx/dy划分(通常30nm)

  • z方向特殊处理:根据刻蚀深度动态调整

z_points = self.dzFactor + 2  # 通常3+2=5层

因为:

  • 刻蚀深度仅70nm(浅结构)

  • 需要比xy方向更密的网格捕捉垂直方向场变化

(21)def get_permittivities(self, fdtd, wavelengths):(获取仿真中材料的最小和最大介电常数(ε))

  • ​介电常数(ε)的物理意义​​:

    • 相当于光在材料中传播的"阻力系数",决定光速变慢程度(ε=𝑛²,𝑛为折射率)

    • 例如:SiO₂的ε≈2.25(𝑛=1.5),Si的ε≈12.25(𝑛=3.5)严格遵循ε=𝑛²的电磁理论

  • ​代码作用​​:

    • 动态获取仿真中​​波导材料​​和​​背景材料​​的ε值

    • 为后续计算场分布、耦合效率等提供关键材料参数

  • ​支持色散材料​​:

    • 通过设置波长范围(wavelength start/stop),使材料折射率计算覆盖所有工作波长

    • 示例:硅在1310nm和1550nm的折射率不同(约3.476 vs 3.45)

  • ​优化计算效率​​:

    • 仅计算中心频率(f0)的折射率,避免全波段扫描的计算开销

    • 取实部(.real)忽略微小吸收(虚部),适用于低损耗光栅设计

  • ​兼容性设计​​:

    • 同时支持自定义介质(<Object defined dielectric>)和预定义材料(如"Si - Palik")

(22)光栅耦合器的光栅结构

① 2D光栅

想象一个 ​​锯齿形光栅​​,只有X方向(光传播方向)有齿和缝

  • 这里只有 ​​X方向​​ 的周期性结构,Y方向是 ​​完全均匀延伸​​ 的(像无限宽的平板)

  • ​现实问题​​:这种结构无法控制光的 ​​横向扩散(Y方向)​​,导致能量泄漏

② 3D光栅

实际光栅耦合器是 ​​环形或扇形​​ 的立体结构,像一个 ​​同心圆靶子​​:

俯视图(X-Y平面):

  • ​每个圆环​​ 同时具有:

    • ​X方向的齿缝​​:控制光向前(X)传播时的相位匹配

    • ​Y方向的齿缝​​:控制光向两侧(Y)扩散的程度

③ 为什么需要Y方向控制?​

​原因1:斜入射光的补偿​

当光斜着射入(如8°角)时:

  • ​X方向​​:光需要较宽的齿缝匹配相位(distances

  • ​Y方向​​:光程更短,需要较窄齿缝避免过度散射(distances_2

​原因2:抑制侧向泄漏​

  • 如果没有Y方向控制,光会像水波一样 ​​向两侧扩散​​(能量损失)

  • Y方向窄齿缝相当于 ​​给光波装上侧挡板​

​原因3:偏振控制​

  • TE偏振光(电场沿Y方向)对Y齿缝更敏感

  • TM偏振光对X齿缝更敏感

(23)def get_connector_points(self, connector_params, theta_taper):

需要注意的一点:

# 前两点:波导末端宽度固定为wg_width/2(上下对称)中间点:由connector_params控制过渡形状(如S型弯曲参数) 末端点:根据theta_taper计算倾斜角度对应的Y值(x * tan(theta))points_y = np.concatenate(([self.wg_width / 2.0, self.wg_width / 2.0], connector_params,points_x[-2:] * math.tan(math.radians(theta_taper))))

为什么两次写入 self.wg_width / 2.0 

① 三次样条插值 (kind='cubic') 在边界处需要 ​​固定导数值​​。重复起始Y坐标是为了隐式定义:

这强制曲线在波导端起始时是 ​​水平切线​​(零斜率),避免非物理的尖角。

 ② ​想象正在设计一个冬奥会滑雪大跳台:

  1. ​波导​​ = 助滑区(笔直的冰道,宽度固定为wg_width

  2. ​过渡区​​ = 起跳曲线(需要从水平逐渐弯曲)

  3. ​光栅​​ = 落地区(扇形展开的坡道,角度由theta_taper决定)

​为什么需要两个wg_width/2?​

​场景1:错误设计(单点固定)​

  • 只在起点放一个固定点 → 相当于仅用​​一个钉子​​固定跳台起始端

  • ​后果​​:

    • 运动员(光)刚出发时跳台可能晃动(斜率不确定)

    • 容易在起点处形成"凹陷"(光学反射)

    • 实测数据:运动员摔倒概率>30%(光损耗>15%)

​场景2:正确设计(双点固定)​

  • 在起点处钉​​两个平行固定点​​(两个wg_width/2

  • ​效果​​:

    • 确保运动员起滑时板底​​完全水平​​(零初始角度)

    • 起跳曲线自然平滑过渡(光场连续无反射)

    • 实测数据:空中姿态稳定(光损耗<0.5%)

滑雪场景

光栅耦合器

物理原理

助滑区水平

波导模式匹配

波导边缘电场导数为零

双固定点

两点确定初始斜率

强制三次样条插值起始导数为0

起跳曲线平滑

过渡区渐变

避免模式失配导致的散射

(24)def perform_taper_angle_sweep(...)

执行流程:

① filename = basefilename + '_t{:04d}'.format(int(theta_taper * 100))

符号

含义

示例输入

:

格式说明符开始

-

0

用零填充空缺位

5 → 0005

4

总位数

123 → 0123

d

十进制整数

12.3 → 错误

② initial_points_y

initial_points_y = np.linspace(start = 波导半宽度,  # y_startstop = 光栅末端宽度, # y_end = x_end * tanθnum = 插值点数      # 控制过渡平滑度
)

 (25)if __name__ == "__main__":

 with lumapi.FDTD(hide=False) as fdtd:

代码部分

意义

lumapi.FDTD()

启动Lumerical FDTD内核(相当于打开MATLAB引擎)

hide=False

显示GUI界面(调试用),生产环境建议hide=True

with ... as fdtd

将仿真器实例赋值给fdtd变量,并在代码块结束后自动调用fdtd.close()

(26)np.concatenate(([r0], distances))

  • np.concatenate(([r0], distances)) 中:

    • 外层括号是函数调用的括号

    • 内层 ([r0], distances) 是一个元组(tuple),包含两个元素:

      • 第一个元素是列表 [r0]

      • 第二个元素是数组 distances

如果写成 np.concatenate([r0], distances)

  • [r0] 会被当作第一个参数(要连接的数组序列)

  • distances 会被当作第二个参数(axis 参数,默认为0)

  • 这会导致错误,因为 distances 不是合法的 axis 参数值

 np.concatenate() 的规范语法是

numpy.concatenate((a1, a2, ...), axis=0)

第一个参数必须是一个序列(通常是元组或列表)包含所有要连接的数组。

写法

等效形式

是否合法

说明

np.concatenate(([r0], distances))

传入一个元组参数 ([r0], distances)

 正确

标准用法

np.concatenate([r0], distances)

传入两个单独参数

❌错误

会把 distances 误认为 axis 参数

二、设计和仿真3D光栅耦合器

(1)from lumjson import LumEncoder, LumDecoder

作用

LumEncoder

将 Lumerical 的特殊数据类型(如复数、矩阵、对象)转换为标准 JSON 字符串

LumDecoder

将 JSON 字符串还原为 Lumerical 可识别的原生数据类型

(2)json.load和json.loads区别

特性

json.load()

json.loads()

​输入类型​

文件对象(如 open() 返回的对象)

字符串(str 或 bytes

​适用场景​

直接读取 JSON 文件

解析内存中的 JSON 字符串

​参数名​

fp(file pointer)

s(string)

​性能​

需磁盘 I/O,稍慢

直接操作内存,更快

​是否自动关文件​

是(配合 with 语句)

不涉及文件操作

 (3)y_max = wall_positions_2[-1]*math.sin(math.radians(theta_taper))

这里为什么用sin而不是tan

光栅结构的本质:环形扇形,不是直线锥形​

光栅耦合器的结构类似 ​​扇子的骨架​​,而不是简单的斜线。

  • ​环形光栅​​:所有齿/槽沿着扇形排列,最终形成一个 ​​圆弧边界​​。

  • ​关键特征​​:每个点到中心的角度相同(锥角 θ),但横向(Y方向)偏移由 ​​圆弧的几何特性​​ 决定。

对于环形光栅上的任意一点:

  • 它的位置由 ​​半径 R​ 和 ​​角度 θ​ 决定。

  • ​Y坐标​​ 的计算公式是:

  • R​:光栅外缘半径(即代码中的 wall_positions_2[-1])。

  • θ​:光栅锥角(如 30°)。

  • Y_max​:圆弧最外侧点的Y坐标,即 R·sinθ

(4)生成GDSII格式的掩模文件

extract_contour_script = ('idx = getresult("index_xy","index");' +                   # 获取折射率数据'level=[(min(idx.index_z)+max(idx.index_z))/2];' +         # 计算中间层高度'idx.addattribute("index_z_real",real(idx.index_z));' +    # 添加实部属性'contours = getcontour(idx, "index_z_real", level);' +     # 提取等高线'polys=contours{1}.polygons;' +                            # 获取多边形数据'f = gdsopen("{}", 1e-3, 1e-9);'.format(gds_filename) +   # 创建GDS文件'gdsbegincell(f,"Grating Coupler");' +                    # 开始写入单元'for(i = 1:length(polys)){ gdsaddpoly(f, 1, polys{i}); }' + # 写入多边形'gdsendcell(f);' +                                        # 结束单元'gdsclose(f);'                                            # 关闭文件
)
代码片段功能
getresult("index_xy","index")从名为index_xy的监视器获取折射率分布数据
(min+max)/2计算光栅结构在Z方向的中间高度(刻蚀深度中点)
addattribute("index_z_real",real(...))将复数折射率转换为实数(仅保留实部)
getcontour(..., level)提取指定高度的等高线(类似地形图的等高线)
contours{1}.polygons获取等高线对应的多边形顶点坐标
gdsopen(..., 1e-3, 1e-9)创建GDS文件,单位:1e-3米(毫米),精度1e-9米(纳米)
gdsaddpoly(f, 1, polys{i})将多边形写入GDS文件的第1层

http://www.lqws.cn/news/533953.html

相关文章:

  • 鸿蒙实时音视频流处理框架开发实战——基于HarmonyOS 4.0与分布式软总线的低延时高可靠架构
  • 从提示工程(Prompt Engineering)到上下文工程(Context Engineering)
  • PyTorch 模型镜像下载与安装指南
  • R 语言简介:数据分析与统计的强大工具
  • DSP学习笔记1
  • 声网对话式AI构建商品场景语义理解能力
  • 基于SpringBoot文件管理系统中的分片上传实现
  • 使用API有效率地管理Dynadot域名,出售账户中的域名
  • OpenCV CUDA模块设备层-----逐通道最小值比较函数min()
  • SpringBoot 中 @Transactional 的使用
  • 【LLM安全】MCP(模型上下文协议)及其关键漏洞、技术细节
  • 力扣网C语言编程题:搜索插入位置
  • mac电脑安装vscode的力扣插件报错解决办法
  • element-plus 按钮 展开/隐藏
  • 百面Bert
  • Ubuntu 搭建Kubernetes 1.28版本集群
  • 代码随想录day16二叉树4
  • 参展回顾 | AI应用创新场景:数据分析助手ChatBI、璞公英教学平台亮相2025四川国际职教大会暨产教融合博览会
  • 装修选木地板还是瓷砖,都有哪些优势?
  • 第一章-人工智能概述-深度学习与AI发展(2/36)
  • MySQL备份和恢复
  • 亚矩阵云手机多开赋能Snapchat矩阵运营:技术原理与场景化破局
  • 解锁企业效率革命:Microsoft 365 Copilot 重塑办公新范式
  • 力扣第14题-最长公共前缀
  • UDP 缓冲区
  • 用Dockerfile点亮你的容器化世界:从零到精通
  • Webshell工具的流量特征分析(菜刀,蚁剑,冰蝎,哥斯拉)
  • aws(学习笔记第四十七课) codepipeline-docker-build
  • LINUX 626 DNS报错
  • WebRTC(十):RTP和SRTP