luceda ipkiss教程 51:画宽度随长度变化的波导

本文介绍了一种使用Python和SiFab库在i3.PCell中创建宽度随长度变化的波导结构的方法,通过`width_change_with_length`函数计算边界位置,利用i3.Boundary功能绘制出具有自适应宽度的光学波导。
摘要由CSDN通过智能技术生成

通过i3.Boundary也可以来定义宽度随长度变化的波导,
如:
在这里插入图片描述
全部代码如下:

from si_fab import all as pdk
from ipkiss3 import all as i3
import numpy as np


def width_change_with_length(L, a, m, w0):
    x = np.linspace(0, L, 101)
    y1 = (a * (L - x) ** m + w0) / 2
    y2 = -y1[::-1]
    x_list = np.concatenate((x, x[::-1]))
    y_list = np.concatenate((y1, y2))
    return list(zip(x_list, y_list))


class waveguide(i3.PCell):
    L = i3.PositiveNumberProperty(default=1)
    a = i3.PositiveNumberProperty(default=0.1)
    m = i3.IntProperty(default=4)
    w0 = i3.PositiveNumberProperty(default=0.2)

    class Layout(i3.LayoutView):
        def _generate_elements(self, elems):
            position = width_change_with_length(L=self.L, a=self.a, m=self.m, w0=self.w0)
            elems += i3.Boundary(
                layer=i3.TECH.PPLAYER.SI,
                shape=position)
            return elems

        def _generate_ports(self, ports):
            ports += i3.OpticalPort(name="in",
                                    position=(0, 0),
                                    angle=180.0,
                                    layer=i3.TECH.PPLAYER.SI)
            ports += i3.OpticalPort(name="out",
                                    position=(self.L, 0),
                                    angle=0.0,
                                    layer=i3.TECH.PPLAYER.SI)

            return ports

    class Netlist(i3.NetlistFromLayout):
        pass


if __name__ == '__main__':
    waveguide().Layout().visualize(annotate=True)

通过:

def width_change_with_length(L, a, m, w0):
    x = np.linspace(0, L, 101)
    y1 = (a * (L - x) ** m + w0) / 2
    y2 = -y1[::-1]
    x_list = np.concatenate((x, x[::-1]))
    y_list = np.concatenate((y1, y2))
    return list(zip(x_list, y_list))

可以得到波导边界的坐标点,再通过i3.Boundary可以画出波导

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值