Home Forums Nazca Photonic crystal line-defect waveguide – Remove holes

Viewing 3 posts - 1 through 3 (of 3 total)
• Author
Posts
• #6289
Dagi
Participant

Hello,
I am trying to implement photonic crystal structures using Nazca.
Particularly, I would like to manuplate the holes after I created them.

The code below creates the triangular lattice of holes, find the ones I want to delete. But, I don’t know how to delete them. I belive, I don’t have the correct reference to the instanced hole object. I would highly appreciate your help.

Of course, I could have not “put” the holes that I don’t want. But it is pretty much handy to have the possibility to access the holes either to move or delete them as per the requirement of the user.

Below is the code for creating triangular lattice of holes

``````import nazca as nd
import numpy as np

# Define PhC parameters
PhC_ax = 0.425
PhC_ay = 0.5*PhC_ax*np.sqrt(3)
hole_polygon = 20
nx = 20
ny = 10

### Define hole shape and geometry

with nd.Cell('hole') as hole:
nd.Polygon(points=hole_shape,layer='ebeam').put(0)

# ================================
# make triangular lattice of holes
# ================================
hole_reference = []
for ix in np.arange(-np.floor(nx/2),np.floor(nx/2)):
for iy in np.arange(-np.floor(ny/2),np.floor(ny/2)+1):
x = (ix+np.mod(iy,2)*0.5)*PhC_ax
y = iy*PhC_ay
if (ix !=-np.floor(nx/2) or np.mod(iy,2)!=0):
hole_reference.append(hole.put(x,y))

# =============================
# =============================

# find the middle row for making the waveguide
wg_row = 0
to_remove=[]
for g in hole_reference:
if g.cnode.y == wg_row*PhC_ay:
to_remove.append(g)

# Remove selected holes
# I would like to delete these particular holes
del to_remove

# Convert the PhC to a building block with input and output pins
# ...to be implemented

# Export gds file
nd.export_gds(filename='PhC.gds')``````
#6292
Ronald
Keymaster

Dear Dagi,

If you makes cells of the holes, as in cell ‘hole’, the work would need to be done on the cell instances in your pxtal. This is possible via the cell_iter(), but here there may be a simpler solution by placing hole polygon objects directly in the pxtal cell. This is not something I have used before a lot, but you can scan and update directly on the polygon attribute in the cell object and filter it based on e.g. x-position of a hole, as demonstrated in the example below.
I also added pins to make it a circuit type waveguide.

``````import nazca as nd
import numpy as np

# Define PhC parameters
PhC_ax = 0.425
PhC_ay = 0.5 * PhC_ax * np.sqrt(3)
hole_polygon = 20
nx = 20
ny = 10

# Define hole shape and geometry
hole1 = nd.Polygon(points=hole_shape, layer="ebeam")

# ================================
# make triangular lattice of holes
# ================================
with nd.Cell('pxtal', instantiate=False) as pxtal:
hole_reference = []
for ix in np.arange(-np.floor(nx / 2), np.floor(nx / 2)):
for iy in np.arange(-np.floor(ny / 2), np.floor(ny / 2) + 1):
x = (ix + np.mod(iy, 2) * 0.5) * PhC_ax
y = iy * PhC_ay
if ix != -np.floor(nx / 2) or np.mod(iy, 2) != 0:
hole1.put(x, y)
nd.Pin('a0').put(0, 2, 90)
nd.Pin('b0').put(0, -2, -90)
nd.put_stub()

# =============================
# =============================
pgons_new = []
for pgon in pxtal.polygons:
node, Poly = pgon
x, y, a = node.xya()
if abs(x) > 0.2:
pgons_new.append((node, Poly))
pxtal.polygons = pgons_new

pxtal.put(0, 0, 90)

# Export gds file
nd.export_gds(filename="PhC.gds")``````

Ronald

#6306
Dagi
Participant

Dear Ronald,

This is exactly what I wanted!
Thanks a lot
Dagi

Viewing 3 posts - 1 through 3 (of 3 total)
• You must be logged in to reply to this topic.