Hi everyone,

I'm trying to compute transmission and reflection spectra for a 3D 
opal of SiO2 (n=1.45) sphere's infilled with Si (n=3.5), however the 
intensity of the reflectance spectrum has values from 0 to almost 3.5 
and the transmittance spectrum intensity ranges from 0.1 to 1.4 
(obviously it should be less than 1 in all cases). The geometry is 
correct since when I remove the Si (high refractive index material) I 
get the results that I would expect for a silica opal, also the 
eps.h5 file looks fine.

The cell has a size of sqrt(2) X sqrt(1.5) X ~16 units and we are 
measuring for frequencies between 0.2 and 0.6.

Since the problem is occurring with the high index materials in the 
geometry I have tried varying the following parameters over a wide 
range to test the convergence. The resulting spectra always look the same...

- pml thickness (tried 1 to 3)
- cell size and consequently the distance from source to the 
structure (ranging from 2 to 6 distance units between source and 
sample, in one case)
- position of the flux regions
- resolution (20, 40)
- time (50, 100 time units)
- field decay requirement , the "decay-by" parameter. (from 1E-2 to 1E-4)
- parallel computing versus single processor
- Running it in another computer

The transmittance looks ok in shape, but the intensities are wrong. 
The reflectance is completely incorrect and bizarre.

Does anyone have an idea about what may be causing this problem or 
what parameters I should adjust? The code is below for reference.

Thanks,
Erik Nelson




; transmittance/reflectance of a fcc structure a=1.
(set! eps-averaging? false); No epsilon averaging


;-------------------EXTERNAL PARAMETERS-----------------------------------
(define-param r_sph 0.36); Oxide spheres radius
(define-param r_max (/ 1 (sqrt 6))); Thickness of the Si layer grown inside the 
opal
(define-param nl 3) ; number of periods = (3 layers each)
(define-param pmlt 2) ; thickness of the pml
(define-param pad 3); distance between source and sample
(define-param no-phc 1) ; if true (1), have air, false (0), PhC

;--------------CELL DIMENSIONS-----------------------------------------
(define unitcell (sqrt 3)) ; size of the unitcell in Z
(define distz (/ 1 (sqrt 3))); distance between single layers

(define sx (/ 1 (sqrt 2))) ; size of cell in X direction
(define sy (sqrt 1.5)) ; size of cell in Y direction
(define sz (+ (* 2 pad) (* 2 pmlt) (round (+ 0.5 (* nl unitcell))))) ; size of
cell in Z direction

(set! geometry-lattice (make lattice (size sx sy sz)))

;------------------USEFUL VALUES----------------------------------------
(define sx_half (/ sx 2)); (1/sqrt(8))
(define sy_half (/ sy 2)); (sqrt(3)/sqrt(8))
(define sy_sixth (/ sy 6)); (1/sqrt(3x8))
(define nsx_half (/ sx -2)); -(1/sqrt(8))
(define nsy_half (/ sy -2)); -(sqrt(3)/sqrt(8))
(define nsy_sixth (/ sy -6)); -(1/sqrt(3x8))
(define cell_center (* unitcell (+ 0.5 (* -0.5 nl)))); z-coordinate of the first
unit cell
(define bottom_sample (+ (* unitcell (- nl 1)) cell_center distz (/ 1 (sqrt 8))
))  ; Z coordinate bottom of spheres
(define substrate_centerZ (+ (/ sz 4) (/ bottom_sample 2)))
(define substrate_sizeZ (- (/ sz 2) bottom_sample))

;----------------MATERIALS-----------------------------------------------
(define silica (make dielectric (epsilon (* 1.45 1.45))))
(define silicon (make dielectric (epsilon (* 3.5 3.5))))

;--------------GEOMETRY-------------------------------------------------
(set! geometry
   (if (= no-phc 1)
          (list 
            (make sphere (center 0 0 0) (radius r_sph) (material air))
                (make block (center 0 0 substrate_centerZ) (material silicon) 
                  (size sx sy substrate_sizeZ)) ; substrate
         )
     (append
 
;OPAL OF Si SPHERES
        (geometric-objects-duplicates (vector3 0 0 unitcell) 0 (- nl 1)
          (list
;Layer A - thin Si
                (make sphere (center nsx_half nsy_sixth (- cell_center distz)) 
              (radius r_max)
                 (material silicon))
                (make sphere (center sx_half nsy_sixth (- cell_center distz)) 
               (radius r_max)
                 (material silicon))
                (make sphere (center 0 (+ nsy_sixth nsy_half) (- cell_center    
        
                  distz)) (radius r_max)
                 (material silicon))
                (make sphere (center 0 (* 2 sy_sixth) (- cell_center distz)) 
                 (radius r_max)
                 (material silicon))
;Layer B - thin Si
                (make sphere (center nsx_half sy_half cell_center) 
                 (radius r_max)
                 (material silicon))
                (make sphere (center nsx_half nsy_half cell_center) 
                 (radius r_max)
                 (material silicon))
                (make sphere (center sx_half sy_half cell_center) (radius r_max)
                 (material silica))
                (make sphere (center sx_half nsy_half cell_center) 
                 (radius r_max)
                 (material silicon))
                (make sphere (center 0 0 cell_center) (radius r_max)
                 (material silicon))
;Layer C - thin Si
                (make sphere (center nsx_half sy_sixth (+ cell_center distz)) 
                   (radius r_max)
                 (material silicon))
                (make sphere (center sx_half sy_sixth (+ cell_center distz)) 
                   (radius r_max)
                 (material silicon))
                (make sphere (center 0 (+ sy_sixth sy_half) (+ cell_center 
                   distz)) (radius r_max)
                 (material silicon))
                (make sphere (center 0 (* 2 nsy_sixth) (+ cell_center distz)) 
                  (radius r_max)
                 (material silicon))
        ))

;OPAL OF OXIDE SPHERES
        (geometric-objects-duplicates (vector3 0 0 unitcell) 0 (- nl 1)
          (list
;Layer A - oxide
                (make sphere (center nsx_half nsy_sixth (- cell_center distz)) 
                 (radius r_sph)
                 (material silica))
                (make sphere (center sx_half nsy_sixth (- cell_center distz)) 
                 (radius r_sph)
                 (material silica))
                (make sphere (center 0 (+ nsy_sixth nsy_half) (- cell_center
                  distz)) (radius r_sph)
                 (material silica))
                (make sphere (center 0 (* 2 sy_sixth) (- cell_center distz)) 
                (radius r_sph)
                 (material silica))
;Layer B - oxide
                (make sphere (center nsx_half sy_half cell_center) 
                (radius r_sph)
                 (material silica))
                (make sphere (center nsx_half nsy_half cell_center)
                (radius r_sph)(material silica))
                (make sphere (center sx_half sy_half cell_center) (radius r_sph)
                 (material silica))
                (make sphere (center sx_half nsy_half cell_center) 
                (radius r_sph)(material silica))
                (make sphere (center 0 0 cell_center) (radius r_sph)
                 (material silica))
;Layer C - oxide
                (make sphere (center nsx_half sy_sixth (+ cell_center distz)) 
                (radius r_sph)
                 (material silica))
                (make sphere (center sx_half sy_sixth (+ cell_center distz)) 
                (radius r_sph)
                 (material silica))
                (make sphere (center 0 (+ sy_sixth sy_half) (+ cell_center 
                distz)) (radius r_sph)
                 (material silica))
                (make sphere (center 0 (* 2 nsy_sixth) (+ cell_center distz))
                (radius r_sph)
                 (material silica))
           ))

;SUBSTRATE
        (list (make block (center 0 0 substrate_centerZ) (material silicon) 
        (size sx sy substrate_sizeZ))) ; substrate
)))      

;--------------SOURCES-------------------------------------------------
 

(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 (+ fcen 0.1)) (fwidth df)))
                 (component Ex)
                 (center 0 0 (+ pmlt (* -0.5 sz)))
                 (size sx sy 0))

               (make source 
                 (src (make gaussian-src (frequency (- fcen 0.1)) (fwidth df)))
                 (component Ex)
                 (center 0 0 (+ pmlt (* -0.5 sz)))
                 (size sx sy 0))
))

;-----------RESOLUTION, PERIODICAL BOUNDARIES, PML-----------------

(set-param! k-point (vector3 0))
(set! pml-layers (list (make pml (direction Z) (thickness pmlt))))
(set-param! resolution 20)

;--------------FLUX----------------------------------------------------
(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 0 0 (- (/ sz 2) 0.5 pmlt)) (size sx sy 0))))
(define refl ; reflected flux
      (add-flux fcen df nfreq
                (make flux-region 
                  (center 0 0 (+ 0.5 pmlt (* -0.5 sz))) (size sx sy 0))))


;-------------RUN-----------------------------------------------

; 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 50 Ex
                           (vector3 0 0 (- (/ sz 2) 0.5 pmlt))
                           1e-3)
 (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

Reply via email to