Dispersion curves are useful to understand transport. I set up a MEEP simulation of two surfaces of Ag separated by a 100e-9m gap. You can see 3 modes: surface plasmons, gap propagation, and bulk plasmons. ~0.7 is omega_p the plasma frequency.

(set! geometry-lattice (make lattice (size 20 no-size no-size)))
(set! pml-layers (list (make pml (thickness 1))))
(set-param! resolution 30)
(define myAg (make dielectric (epsilon 1)
(polarizations
(make polarizability
(omega 1e-20) (gamma 0.0038715) (sigma 4.4625e+39))
; (make polarizability
; (omega 0.065815) (gamma 0.31343) (sigma 7.9247))
; (make polarizability
; (omega 0.36142) (gamma 0.036456) (sigma 0.50133))
; (make polarizability
; (omega 0.66017) (gamma 0.0052426) (sigma 0.013329))
; (make polarizability
; (omega 0.73259) (gamma 0.07388) (sigma 0.82655))
; (make polarizability
; (omega 1.6365) (gamma 0.19511) (sigma 1.1133))
)))
(set! geometry (list
(make block (center -3 0 0 0.0) (size 5 infinity infinity)
(material myAg ))
(make block (center 3 0 0 0.0) (size 5 infinity infinity)
(material myAg ))
))
(set! sources (list
(make source
(src (make gaussian-src (frequency 2.5) (fwidth 5)))
(component Ex)
(center 0 0 0))
(make source
(src (make gaussian-src (frequency 2.5) (fwidth 5)))
(component Ex)
(center -.5 0 0))
(make source
(src (make gaussian-src (frequency 2.5) (fwidth 5)))
(component Ex)
(center .5 0 0))
))
(define-param kmin 0.0)
(define-param kmax 4.0)
(define-param k-interp 50)
(define kpts (interpolate k-interp (list (vector3 0 kmin 0) (vector3 0 kmax 0))))
(define all-freqs (run-k-points 200 kpts)) ; a list of lists of frequencies
And here's a python snippet that gives a list of k-vectors their frequencies by giving it the MEEP output as a file object
def getfreqs(meepoutfileobj):
fd=[]
for aline in meepoutfileobj:
if 'freqs:' in aline:
ld=aline.split(',')
kpt=ld[2:5];freqs=ld[5:]
pts=[( [float(an) for an in kpt] ,float(afreq)) for afreq in freqs]
fd.extend(pts)
if fd==[]:return None
return fd