Hello all,

I am attempting to use Meep to model the transmissivity of a thin metal (Au in fact) film in a thin bandwidth. As such I have defined a simple 1D simulation with a Gaussian pulse source with a small bandwidth, and defined the metal through the frequency independent conductivity term (using eps = -10 + 1j from Appl. Opt. 37(22) 1998 pp. 5271-5283). However, I seem to be running into instability problems with the fields quickly blowing up even for massive resolutions (> 1000). I have read in numerous posts on this lists of similar behaviour and wondered if anyone had a working solution for real metals in a narrow bandwidth (or broad bandwidth for that matter)?

As an associated issue I noticed something odd (to me at least) after an h5dump of the epsilon data. The following is a snippet from the area around the metal:

(4982): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2.22222,
(5000): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5012): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5024): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5036): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5048): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5060): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5072): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5084): -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, (5096): -10, -10, -10, -10, 2.22222, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

I was wondering why, even with eps-averaging? set to off (and meep built with simple averaging to off: line 236 of anisotropic_averaging.cpp set to 0) I am still getting some sort of averaging. Also it seems to be averaging up to abs(eps) rather than the negative value?

If anyone can shed any light on any of this I would be grateful. My ctl file is pasted below for reference. Thanks very much.

Ian

(set! eps-averaging? false)
(define-param sz 100) ; size of cell in z direction
(define-param fcen 1.49) ; centre frequency
(define-param w 10)     ; pulse width (1/e points?)
(define-param df (/ 1 w)) ; frequency width
(define-param dpml 1.0) ; pml layer thickness
(define-param res 100)
(define dx (/ 1 res))
;(define-param hmetmult 1) ; cell multiplier
(define-param hmetal 0.01) ; width of metal, d2 in doc
(define-param hglass 4.0)       ; width of glass, d1 in doc
(define-param er1 -10.0) ; real part of metal refractive index
(define-param er2 1.0) ; imaginary part of metal refractive index
(define-param metal? true)
(define-param glass? false)

;define custom stop function
        
(define (stop-when-energy-decayed dT box decay-level)
  (if (null? fields) (init-fields))
  (let ((T0 (meep-time)))
    (lambda ()
      (begin
                (if (<= (meep-time) (+ T0 dT))
                        false ; don't stop yet
                        (let ((cur-energy 0))
                          (set! T0 (meep-time))
                          (set! cur-energy (field-energy-in-box box))
                          (print "field energy at t=" (meep-time)": " cur-energy 
"\n")
                          (<= cur-energy decay-level)))))))

(define (print-field-energy)
(print "field-energy: " (field-energy-in-box (volume (center 0 0 0) (size 0 0 sz))) "\n"))

(set-param! dimensions 1)
(set! geometry-lattice (make lattice (size no-size no-size sz)))
(set! pml-layers (list (make pml (thickness dpml))))
(set-param! resolution res)

(set! geometry
        (if metal?
                (if glass?
                        (list
                                (make block
                                        (center 0 0 (- (/ hglass 2)))
                                        (size infinity infinity hglass)
                                        (material (make medium (index 1.5))))
                                (make block
                                        (center 0 0 (/ hmetal 2))
                                        (size infinity infinity hmetal)
(material (make medium (epsilon er1) (D-conductivity (/ (* 2 pi fcen er2) er1))))))
                        (list
                                (make block
                                        (center 0 0 (/ hmetal 2))
                                        (size infinity infinity hmetal)
(material (make medium (epsilon er1) (D-conductivity (/ (* 2 pi fcen er2) er1)))))))
                (list
                        (make block
                                (center 0 0 0)
                                (size infinity infinity infinity)
                                (material air)))))
                                        
(set! sources
        (list
                (make source
                        (src (make gaussian-src (frequency fcen) (width w)))
                        (component Ex)
                        (center 0 0 (+ (- (/ sz 2)) dpml 1)))))
                        
(define dt (/ 1 (* 2 res)))

 ; number of frequencies at which to compute flux
(define-param nfreq 100)
(define trans ; transmitted flux
     (add-flux fcen df nfreq
        (make flux-region
                (center 0 0 (- (/ sz 2) dpml 2)) (size 0 0 0))))
(define refl ; reflected flux
      (add-flux fcen df nfreq
                 (make flux-region
                   (center 0 0 (+ (- (/ sz 2)) dpml 3)) (size 0 0 0))))

(if metal? (load-minus-flux "refl-flux" refl))

;(run-until 400
(run-sources+
(stop-when-fields-decayed 50 Ex (vector3 0 0 (- (/ sz 2) dpml 2)) 1e-4)
        (at-every 5 print-field-energy)
        (at-beginning output-epsilon))
        
(if (not metal?) (save-flux "refl-flux" refl))

(display-fluxes trans refl)

---------------------------
Research PhD Student
Photonics Group
Dept. of Electrical & Electrical Engineering
University of Bristol
Rm 2.11, Queen's Building
University Walk
Bristol
BS8 1TR

email: ian.b...@bristol.ac.uk




_______________________________________________
meep-discuss mailing list
meep-discuss@ab-initio.mit.edu
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

Reply via email to