ring_coupler¶
- photonforge.parametric.ring_coupler(*, port_spec=None, coupling_distance=None, radius=None, bus_length=None, euler_fraction=None, coupling_length=None, port_bends=None, technology=None, name=None, tidy3d_model_kwargs=None)[source]¶
Ring/straight coupling region.
- Parameters:
port_spec (Annotated[str | PortSpec, _Metadata(type=PortSpec, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | Annotated[Sequence[Annotated[str | PortSpec, _Metadata(type=PortSpec, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)]], _Metadata(type=None, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=2, max_items=2)] | None) – Port specification describing waveguide cross-section. A tuple with 2 values can be used, one for each coupler side.
coupling_distance (Annotated[float, _Metadata(type=None, title=None, description=None, units=μm, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Distance between bus and ring waveguide centers.
radius (Annotated[float, _Metadata(type=None, title=None, description=None, units=μm, required=False, minimum=None, maximum=None, exclusive_minimum=0, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Central ring radius.
bus_length (Annotated[float, _Metadata(type=None, title=None, description=None, units=μm, required=False, minimum=0, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Length of the bus waveguide added to each side of the straight coupling section. If both
bus_length
andcoupling_length
are 0, the bus waveguide is not included. IfNone
, defaults to radius.euler_fraction (Annotated[float, _Metadata(type=None, title=None, description=None, units=None, required=False, minimum=0, maximum=1, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Fraction of the bends that is created using an Euler spiral (see
photonforge.Path.arc()
). IfNone
, defaults to 0.coupling_length (Annotated[float, _Metadata(type=None, title=None, description=None, units=μm, required=False, minimum=0, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Length of straight coupling region. If
None
, defaults to 0.port_bends (Annotated[bool, _Metadata(type=None, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Flag controllig whether to set a bend radius for the ports. Not used when
euler_factor > 0
. IfNone
, defaults toFalse
.technology (Annotated[Technology, _Metadata(type=None, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Component technology. If
None
, the default technology is used.name (Annotated[str, _Metadata(type=None, title=None, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Component name.
tidy3d_model_kwargs (Annotated[dict[str, Any], _Metadata(type=required, title=False, description=None, units=None, required=False, minimum=None, maximum=None, exclusive_minimum=None, exclusive_maximum=None, min_items=None, max_items=None)] | None) – Dictionary of keyword arguments passed to the component’s
photonforge.Tidy3DModel
.
- Returns:
Coupling component.
- Return type:
# Simple ring coupler
component1 = ring_coupler(port_spec="Strip", coupling_distance=0.6, radius=5, bus_length=6)
# Racetrack with different profiles
component2 = ring_coupler(
port_spec=("Rib", "Strip"),
coupling_distance=0.6,
radius=5,
euler_fraction=0.5,
bus_length=6,
coupling_length=2,
)