; MPB input file to compute the band diagram (and gaps) of a ; 1d periodic structure consisting of two layers eps1 and eps2 with ; thicknesses d1 and d2. As usual, we choose the period a=1, i.e. ; "a" is our unit of distance. ; unit cell is just size 1 in x direction and no-size in y and z. (set! geometry-lattice (make lattice (size 1 no-size no-size))) ; way more resolution than we usually need, but it's so fast that why not? (set-param! resolution 1024) (define-param eps1 12) (define-param eps2 1) ; We'll make the default d1 equal to the quarter-wave thickness. You ; can change that by changing this line, or even easier, by running: ; mpb d1=0.3 bandgap1d.ctl ; or whatever. (define-param is a command to define parameters that ; can be varied from the command line like this.) (define-param d1 (/ (sqrt eps2) (+ (sqrt eps1) (sqrt eps2)))) (define d2 (- 1 d1)) ; we could define the unit cell by two objects (eps1 and eps2), but it ; is easier just to set the default material to eps2 and then add one ; object for eps1. (set! default-material (make dielectric (epsilon eps2))) (set! geometry (list (make block (center 0) (size d1 infinity infinity) (material (make dielectric (epsilon eps1)))))) ; Let's set up the k points we want to compute. Actually, to get the ; band gap we really only need k = pi/a, but we'll compute a range ; of k's in the irreducible Brillouin zone just so that we can make ; nice plots if we want. Note that k is in units of 2pi/a, so, k=pi/a ; is just given as k=0.5. (define-param k-interp 9) (set! k-points (interpolate k-interp (list (vector3 0) (vector3 0.5)))) ; the number of bands to compute (you may want more or less) (set-param! num-bands 5) (run-tm) ; TM and TE are equivalent in 1d, so we'll just do TM