Skip to content

Commit

Permalink
Merge pull request gdsfactory#1043 from simbilod/pn_xs_offset
Browse files Browse the repository at this point in the history
Pn xs offset

Former-commit-id: c4b979c [formerly 77f4196]
Former-commit-id: ad2be17cf48adf25de4c601eaa8d0c692c4ef1d0
  • Loading branch information
joamatab committed Dec 28, 2022
2 parents 4c0d294 + eabdff2 commit 30d8233
Showing 1 changed file with 38 additions and 19 deletions.
57 changes: 38 additions & 19 deletions gdsfactory/cross_section.py
Expand Up @@ -577,6 +577,7 @@ def pn(
gap_low_doping: float = 0.0,
gap_medium_doping: Optional[float] = 0.5,
gap_high_doping: Optional[float] = 1.0,
offset_low_doping: Optional[float] = 0.0,
width_doping: float = 8.0,
width_slab: float = 7.0,
layer_p: LayerSpec = "P",
Expand Down Expand Up @@ -605,6 +606,7 @@ def pn(
gap_medium_doping: from waveguide center to medium doping.
None removes medium doping.
gap_high_doping: from center to high doping. None removes it.
offset_low_doping: in um, between waveguide center and junction gap center towards n-side.
width_doping: in um.
width_slab: in um.
layer_p: p doping layer.
Expand All @@ -626,20 +628,27 @@ def pn(
.. code::
layer
|<------width------>|
____________________
| | | |
___________________| | | |__________________________|
P | | N |
width_p | | width_n |
<----------------------->| |<------------------------------>|
|<->|
gap_low_doping
| | N+ |
| | width_np |
| |<------------------------>|
|<------->|
gap_medium_doping
|<-------width------->|
offset_low_doping
<->
| |
waveguide junction
center center
| |
_______________________
| | | |
___________________| | | |__________________________|
P | | N |
width_p | | width_n |
<------------------------->| |<---------------------------->|
|<------->|
gap_low_doping
| | N+ |
| | width_np |
| |<---------------------->|
|<----------->|
gap_medium_doping
.. plot::
:include-source:
Expand All @@ -653,11 +662,19 @@ def pn(
"""
slab = Section(width=width_slab, offset=0, layer=layer_slab)
sections = [slab]
offset_low_doping = width_doping / 2 + gap_low_doping
width_low_doping = width_doping - gap_low_doping
base_offset_low_doping = width_doping / 2 + gap_low_doping / 4
width_low_doping = width_doping - gap_low_doping / 2

n = Section(width=width_low_doping, offset=+offset_low_doping, layer=layer_n)
p = Section(width=width_low_doping, offset=-offset_low_doping, layer=layer_p)
n = Section(
width=width_low_doping + offset_low_doping,
offset=+base_offset_low_doping - offset_low_doping / 2,
layer=layer_n,
)
p = Section(
width=width_low_doping - offset_low_doping,
offset=-base_offset_low_doping - offset_low_doping / 2,
layer=layer_p,
)
sections.append(n)
sections.append(p)

Expand Down Expand Up @@ -1392,7 +1409,9 @@ def test_copy():
if __name__ == "__main__":
import gdsfactory as gf

xs = gf.cross_section.pn(width=0.5, gap_low_doping=0, width_doping=2.0)
xs = gf.cross_section.pn(
width=0.5, gap_low_doping=0.05, width_doping=2.0, offset_low_doping=0.0
)
p = gf.path.straight()
c = p.extrude(xs)
c.show()

0 comments on commit 30d8233

Please sign in to comment.