Hi,
I've been running the script that is attached to calculate
reflectance and transmittance of a 1D Bragg stack. Something funny
happens... When I run it for 16 layers (see variable nlayer),
everything looks fine. I compared the results to other methods and it
matches perfectly. But when I run for 32 layers, I get a reflectance
spectra with a peak above 1 (in a region where the source is pretty
intense). The transmittance looks a bit better, but seems to be offset.
I observed that happening in a 2D calculation that I run time ago,
but I something was wrong with my ctl file. Now it happens again and
I can't figure out why...
Any idea?
Thanks a lot,
Floren
Florencio Garcia-Santamaria, PhD
Postdoctoral Research Associate
Department of Materials Science and Engineering.
University of Illinois at Urbana-Champaign.
Phone #: 217-333-6779
Personal web-page -> users.mrl.uiuc.edu/floren (define-param no-phc 1) ; if true (1), have air, otherwise (0), PhC
(define-param la 0.8) ; size box 1
(define-param lb 0.2) ; size box 2
(define-param nlayer 16) ; number of periods
(define sx (+ 6 nlayer)) ; size of cell in X direction
(define first_block (* 0.5 (- 1 nlayer))); Center of the first period
(define last_block (* 0.5 (- nlayer 1))); Center of the last period
(define center_la (+ (* 0.5 (- la 1)) first_block)); center of the first block a
(define center_lb (+ (+ 0.5 (* 0.5 (- la 1))) first_block)); center of the
first block b
(define end_cry (+ 0.5 last_block)); Coordinate in x where the cylinders finish
(define center_subst (+ (/ sx 4) (/ end_cry 2))); Center in x of the box that
defines the substrate
(define sizex_subst (- (/ sx 2) end_cry)); Size in x of the substrate
(define na (make dielectric (epsilon (* 1.5 1.5))))
(define nb (make dielectric (epsilon (* 1.64 1.64))))
(define substrate (make dielectric (epsilon (* 3.5 3.5))))
(set! geometry-lattice (make lattice (size sx no-size no-size)))
(if (= no-phc 1)
(set! geometry
(list (make block (center center_subst 0 0) (size 1 infinity infinity)
(material air)))
)
(set! geometry
(append
(geometric-objects-duplicates (vector3 1) 0 (- nlayer 1)
(list
(make block (center center_la 0 0) (size la infinity infinity)
(material na)); Block 1
(make block (center center_lb 0 0) (size lb infinity infinity)
(material nb)); Block 2
))
(list (make block (center center_subst 0 0) (size sizex_subst 1
infinity) (material substrate))); substrate
)))
(define-param fcen 0.4) ; pulse center frequency
(define-param df 0.4) ; pulse width (in frequency)
(set! sources (list
(make source
(src (make gaussian-src (frequency (+ 0.1 fcen)) (fwidth df)))
(component Hz)
(center (+ 1 (* -0.5 sx)))
(size 0))
(make source
(src (make gaussian-src (frequency (- fcen 0.1)) (fwidth df)))
(component Hz)
(center (+ 1 (* -0.5 sx)))
(size 0))
))
(set! pml-layers (list (make pml (direction X) (thickness 1))))
(set-param! k-point (vector3 0))
(set-param! resolution 20)
(define-param nfreq 600) ; number of frequencies at which to compute flux
(define trans ; transmitted flux
(add-flux fcen df nfreq
(make flux-region
(center (+ -1.5 (/ sx 2))) (size 0))))
(define refl ; reflected flux
(add-flux fcen df nfreq
(make flux-region
(center (+ 1.5 (* -0.5 sx))) (size 0))))
; for normal run, load negated fields to subtract incident from refl. fields
(if (= no-phc 0) (load-minus-flux "refl-flux" refl))
(run-sources+
(stop-when-fields-decayed 20 Hz
(vector3 (+ (/ sx 2) -1.5))
1e-3)
; (at-end output-efield-z)
(at-beginning output-epsilon))
; for normalization run, save flux fields for refl. plane
(if (= no-phc 1) (save-flux "refl-flux" refl))
(display-fluxes trans refl)
_______________________________________________
meep-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss