My home page
Back to my software experience page
Back to my portfolio

Photonic Crystals

The following files were developed to generate relatively simple periodic patterns for metallo-dielectric infrared photonic crystal filter fabrication. Photonic crystals are formed by periodic variation in optical properties. As part of my Ph.D. research, I investigated the infrared properties of periodic structures of metal in a dielectric (non-conducting) matrix.

Initially, I attempted to use the MAGIC CAD application. However, it was not easy to generate, for example, large numbers of circles arranged in honeycombs, or giant meshes. Also, the conversion to Calma GDS-II stream format was extremely slow, and did not take advantage of the periodicity to create compact files.

GDS-II is a binary format, and has a non-IEEE format for floating point numbers. It was particularly fun to use Lisp's excellent support for bit-twiddling to support this.

The major thrust of the development created a CLOS model for geometries representable in the MAGIC CAD program, or in terms of the MAGIC primitive rectangles. I started to develop a CLOS model of the Calma geometric model, but decided to simply emit Calma equivalents for my MAGIC-compatible models, with a CLOS representation of the Calma file format. Most probably because the only tool I had to look at the results was MAGIC, and the Calma documentation I had was limited, so I could only verify those parts that MAGIC would understand.

Component files

Example Files


As far as code goes, this is probably somewhat immature. It lacks package discipline. Also, as some of the comments indicate, I was just learning how CLOS worked. I clearly did not understand when to use PRINT-UNREADABLE-OBJECT.

I'm very sure some version of this code was used in real photomask development. I can't piece together without digging up my lab notebook, whether I allowed MAGIC to translate the magic-cad version over a couple days runtime, or whether I went direct to GDS-II format with the Calma versions, although it appears I did testing to make sure I could replicate the result of the MAGIC translation. Note also my tendency to put useful tests inside #| |# comment brackets, instead of making a test suite.