# Make a circle array

Hi,

I'd like to know if there is a way to make circle arrays?
For example, I make a cell and draw a small square 10nm x 10nm, and I want to make a circle array in radius 1 mm with this square, if it is possible?

Thank you very much in advance.

## Comments

• Hi,

That's kind of a challenge because you would create 100000x100000 (10^10) squares. So flat shape generation rules out. GDS does not support anything except matrix arrays, so you cannot just draw it.

I tried the Fill utility which errors out with bad alloc (memory overflow). So finally there is only analytic generation of these arrays through an algorithm.

Matthias

• Hello I encountered the similar problem, would you please let me know how you did it finally?

• I did not solve, just suggest a solution path.

• Things I find in the Forum's

``````# Honey PCell
#
# This sample PCell implements a library called "HoneyPCellLibrary" with a single PCell that
# provides a honeycomb array

module HoneyPCellLibrary

include RBA

# Remove any definition of our classes (this helps when
# reexecuting this code after a change has been applied)
HoneyPCellLibrary.constants.member?(:HoneyPCellLibrary) && remove_const(:HoneyPCellLibrary)
HoneyPCellLibrary.constants.member?(:HoneyPCell) && remove_const(:HoneyPCell)

# The PCell declaration for ??????
class HoneyPCell < PCellDeclarationHelper

include RBA

def initialize

# Important: initialize the super class
super

# declare the parameters
# l : Layer
# sq : size of square to be arrayed
# nr : Number of rows
# nc: Number of Columns
# p: Pitch

param(:l, TypeLayer, "Layer", :default => LayerInfo::new(1, 0))
param(:sq, TypeDouble, "Square size", :default => 5, :unit => "µm")
param(:nc, TypeInt, "Number of Columns", :default => 5)
param(:nr, TypeInt, "Number of Rows", :default => 5)
param(:p, TypeDouble, "Pitch", :default => 20, :unit => "µm")
end

def display_text_impl
# Provide a descriptive text for the cell ???
"HoneyPCell(L=#{l.to_s},N=#{'%d' % nr.to_i})"
end

def produce_impl
# Define shape step
x = 0.0
y = 0.0
# s: vertical stepping pitch
s = Math::sqrt((p*p)-((p/2)*(p/2)))

# row loop
nr.times do |j|

# Column loop
nc.times do |i|

# shapes to be looped

# selects all "white" fields in a chess board
if (i + j) % 2 == 0
cell.shapes(l_layer).insert(RBA::DBox::new(x, y,x+sq,y+sq ))
#Finally, if you want to produce circles instead of boxes use:
cell.shapes(l_layer).insert(RBA::DPolygon::ellipse(RBA::DBox::new(x, y,x+sq,y+sq), 100))
end

x = x+p/2

# end column loop
end

x=0
y = y+s

# end row loop
end

end

end

# The library where we will put the PCell into
class HoneyPCellLibrary < Library

def initialize

# Set the description
self.description = "Honey PCell Library"

# Create the PCell declarations
layout.register_pcell("HoneyPCell", HoneyPCell::new)
# That would be the place to put in more PCells ...

# Register us with the name "MyLib".
# If a library with that name already existed, it will be replaced then.
register("HoneyPCellLibrary")

end

end

# Instantiate and register the library
HoneyPCellLibrary::new

end

``````
Sign In or Register to comment.