Plasmonic Materials in MEEP > 1.2

Posted on Sat 13 June 2015 in Plasmonics

Here is how I was implementing plasmonic materials in meep 1.1. Unlike Meep 1.1, Meep >= 1. 2 changed the way materials are defined.

Here I will describe how to change the material definition code from meep1.1 to meep 1.2 . Please note that one can still use the material definition written from Meep <1.2 for Meep >=1.2 but not vice versa.

Installation of Meep 1.2 on ubuntu

You can follow instructions given in my previous post to compile Meep 1.2 from the source code, but the procedure is outdated and one can use the recently pre-compiled meep packages (which is much easier)

1) Updated computer to at least "The Utopic Unicorn" (Ubuntu 14.10). Meep 1.2 is compiled for this versions and above. U can see instructions here how to update ubuntu distribution.

2) Install meep 1.2 (for serial version) by sudo apt-get install meep h5utils

3) check it by meep --version and quit the program by (exit)

Modifying the material definition type

For meep 1.1, I used the following code to define silver material with lorentian model from Rakic et al with 100 nm length unit:

(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))  
)))

This was generated by my octave/matlab code (see the material_polarization_generator.m) in the project file.  One can use the this file to generate code for other plasmonic materials.

For Meep 1.2, I did the following changes to the above code

changed the word polarizations to E-susceptibilities

changed the work polarizability to lorentzian-susceptibility

changed the word omega to frequency

So the meep1.2 code looks like this:

(define myAg (make dielectric (epsilon 1)  
(E-susceptibilities  
(make lorentzian-susceptibility  
(frequency 1e-20) (gamma 0.0038715) (sigma 4.4625e+39))  
(make lorentzian-susceptibility  
(frequency 0.065815) (gamma 0.31343) (sigma 7.9247))  
(make lorentzian-susceptibility  
(frequency 0.36142) (gamma 0.036456) (sigma 0.50133))  
(make lorentzian-susceptibility  
(frequency 0.66017) (gamma 0.0052426) (sigma 0.013329))  
(make lorentzian-susceptibility  
(frequency 0.73259) (gamma 0.07388) (sigma 0.82655))  
(make lorentzian-susceptibility  
(frequency 1.6365) (gamma 0.19511) (sigma 1.1133))  
)))

This seems to work fine for me. I used this new code to calculate the reflection from a thin silver film (like the way i did in my previous post) and it matches with the analytical calculation.