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.