Re: How to generate the gap map for given index and grid structures?

"Steven G. Johnson" <[email protected]>
Newsgroups gmane.comp.science.photonic-bands
Message-ID <[email protected]>
On Mar 3, 2009, at 7:28 PM, Lingyun Wang wrote:
> I am asking the same question that someone has asked before (as in  
> this link: http://osdir.com/ml/science.photonic-bands/2004-01/msg00002.html) 
> . The link to Steven's example file in his reply post is no longer  
> working. Could someone help me find out this example file? I need  
> some tutorial on this.
> Basically I want to draw the gap map and gap recipe as shown in the  
> "Photonic crystals: molding the flow of light" textbook's gap map  
> Atlas in the appendix. In Mpb's official tutorial, I cannot find  
> similar examples.  Thanks.

To find the "gap maps", you just find the gaps as a function of some  
parameter (e.g. rod radius in the book).

To find the "gap recipes" as in the book, you have to optimize the gap  
for each index contrast as a function of some geometric parameter  
(e.g. the rod radius in the book).  To do this, I used libctl's built- 
in "maximize" function.

Below is an example file that finds the maximum TE gap between bands 1  
and 2 as a function of index contrast for a square lattice of square  
air holes in dielectric.

Steven


--------------

(set! num-bands 2)
(set! geometry-lattice (make lattice (size 1 1 no-size)))

(define Gamma (vector3 0 0 0))
(define X (vector3 0.5 0 0))
(define M (vector3 0.5 0.5 0))
(set! k-points (list Gamma X M))

(define-param res0 32)
(define-param n0 1.5)

(set! mesh-size 7) ; increase from default value of 3

; find the smallest integer >= N that has prime factors all <= 7
(define (next-factor2357 N)
   (define (factor2357? N)
     (define (divby N p)
       (if (zero? (remainder N p))
           (divby (quotient N p) p)
           N))
     (= 1 (divby (divby (divby (divby N 2) 3) 5) 7)))
   (if (factor2357? N) N (next-factor2357 (+ N 1))))

(define ((first-te-gap n) w)
   (set! default-material (make dielectric (index n)))
   (set! geometry (list (make block
                           (center 0 0 0) (size (- 1 w) (- 1 w)  
infinity)
                           (material air))))
   (set! resolution (next-factor2357 (inexact->exact (* res0 (/ n  
n0)))))
   (run-te)
   (retrieve-gap (- num-bands 1)))

(print "maxgap:, index, w, gap\n")
(define (max-gap n)
   (let ((result (maximize (first-te-gap n) 0.001 (/ 0.1 n) (/ 1.0 n))))
     (print "maxgap:, " n ", " (max-arg result) ", " (max-val result)  
"\n")))

(define-param n-min 1)
(define-param n-max 7)
(define-param n-interp 40)

(map max-gap (map / (interpolate n-interp (map / (list n-max n-min)))))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.