Source code for gdsfactory.components.grating_coupler_elliptical_lumerical

from __future__ import annotations

from typing import Any

from gdsfactory.cell import cell
from gdsfactory.component import Component
from gdsfactory.components.grating_coupler_elliptical_arbitrary import (
    grating_coupler_elliptical_arbitrary,
)
from gdsfactory.config import PATH
from gdsfactory.typings import Floats, LayerSpec

parameters = (
    -2.4298362615732447,
    0.1,
    0.48007023217536954,
    0.1,
    0.607397685752365,
    0.1,
    0.4498844003086115,
    0.1,
    0.4274116312627637,
    0.1,
    0.4757904248387285,
    0.1,
    0.5026649898504233,
    0.10002922416240886,
    0.5100366774007897,
    0.1,
    0.494399635363353,
    0.1079599958465788,
    0.47400592737426483,
    0.14972685326277918,
    0.43272750134545823,
    0.1839530796530385,
    0.3872023336708212,
    0.2360175325711591,
    0.36032212454768675,
    0.24261846353500535,
    0.35770350120764394,
    0.2606637836858316,
    0.3526104381544335,
    0.24668202254540886,
    0.3717488388788273,
    0.22920754299702897,
    0.37769616507688464,
    0.2246528336925301,
    0.3765437598650894,
    0.22041773376471022,
    0.38047596041838994,
    0.21923601658169187,
    0.3798873698864591,
    0.21700438236445285,
    0.38291698672245644,
    0.21827768053295463,
    0.3641322152037017,
    0.23729077006065105,
    0.3676834419346081,
    0.24865079519725933,
    0.34415050295044936,
    0.2733570818755685,
    0.3306230780901629,
    0.27350446437732157,
)


[docs] @cell def grating_coupler_elliptical_lumerical( parameters: Floats = parameters, layer: LayerSpec = "WG", layer_slab: LayerSpec | None = "SLAB150", taper_angle: float = 55, taper_length: float = 12.24 + 0.36, fiber_angle: float = 5, bias_gap: float = 0, **kwargs, ) -> Component: """Returns a grating coupler from lumerical inverse design 3D optimization. this is a wrapper of components.grating_coupler_elliptical_arbitrary https://support.lumerical.com/hc/en-us/articles/1500000306621 https://support.lumerical.com/hc/en-us/articles/360042800573 Here are the simulation settings used in lumerical n_bg=1.44401 #Refractive index of the background material (cladding) wg=3.47668 # Refractive index of the waveguide material (core) lambda0=1550e-9 bandwidth = 0e-9 polarization = 'TE' wg_width=500e-9 # Waveguide width wg_height=220e-9 # Waveguide height etch_depth=80e-9 # etch depth theta_fib_mat = 5 # Angle of the fiber mode in material theta_taper=30 efficiency=0.55 # 5.2 dB Args: parameters: xinput, gap1, width1, gap2, width2 ... layer: for waveguide. layer_slab: for slab. taper_angle: in deg. taper_length: in um. fiber_angle: used to compute ellipticity. bias_gap: gap/trenches bias (um) to compensate for etching bias. keyword Args: taper_length: taper length from input in um. taper_angle: grating flare angle in degrees. wavelength: grating transmission central wavelength (um). fiber_angle: fibre angle in degrees determines ellipticity. neff: tooth effective index. nclad: cladding effective index. polarization: te or tm. spiked: grating teeth include sharp spikes to avoid non-manhattan drc errors. cross_section: cross_section spec for waveguide port. """ parameters = ( parameters.strip().split() if isinstance(parameters, str) else parameters ) parameters = tuple(float(t) for t in parameters) # parameters[0] is the xinput teeth_list = parameters[1:] gaps = teeth_list[::2] widths = teeth_list[1::2] gaps = [gap + bias_gap for gap in gaps] return grating_coupler_elliptical_arbitrary( gaps=gaps, widths=widths, taper_angle=taper_angle, taper_length=taper_length, layer=layer, layer_slab=layer_slab, fiber_angle=fiber_angle, **kwargs, )
@cell def grating_coupler_elliptical_lumerical_etch70(**kwargs: Any) -> Component: c = grating_coupler_elliptical_lumerical(**kwargs) c.info = dict( etch_depth=70e-3, link="https://support.lumerical.com/hc/en-us/articles/1500000306621", fiber_angle=5, width_min=0.1, gap_min=0.1, efficiency=0.55, ) return c def _compare() -> Component: import gdsfactory as gf c = Component() c1 = c << grating_coupler_elliptical_lumerical_etch70( layer=(2, 0), layer_slab=None, fiber_angle=5 ) c2 = c << gf.import_gds(PATH.gdsdir / "gc.gds") c2.xmin = 0 c1.xmin = 0.7 return c if __name__ == "__main__": # c = _compare() c = grating_coupler_elliptical_lumerical_etch70() c.show(show_ports=False)