Azimuthal plasmonic mode of decahedron



I would like to simulate the azimuthal plasmonic mode of a decahedron as shown in this reference article, Fig 1A I have set up a simulation file using the TFSF method with rounded decahedron structure. What I am not sure of is how to excite this azimuthal mode with the light source. The plane wave would always have a linear polarization in the plane of the pentagonal base, and the excited modes would come out to be “dipolar” in nature. In other words, the direction of polarization only yields the excitation of two opposing vertices of the pentagon, instead of all 5, which is present in the azimuthal mode. I don’t think the sum of simulated spectra with polarizations 90 degrees from one another would be the same as that of the azimuthal mode (my simulations have yielded multiple peaks instead of 1). Your help is appreciated.


Dear @jilchen

Sorry for my late responding.

In the paper, (page #4174, end of para 1) authors claim: ‘‘azimuthal mode A, under circularly polarized light incidence’’. So what you already found for linearly polarized light is correct, but we need to add the second polarization into the simulations. There are two ways to make a circularly polarized light which should give identical results:

a) add another TFSF source identical to first one except change the phase (degrees) and polarization angle (degrees) both to 90 (for polarization and phase difference to create a circularly polarized light).

b) use an script which runs two simulations with one source at each time which have different polarization and phase. Then finds the superposition of there two sources. I have one ready for you (as I took this approach):

# choose to rerun the simulations (must be 1 the first time)
rerun_simulations = 1;

# choose the weighting factor for the 0 and 90 degree incident polarizations
weight_0 = 1;
weight_90 = exp( 1i*90*pi/180); #90 degrees, circular polarization

# run the simulations if requested
if(rerun_simulations) {
    load("rounded 41nm_run5_1.5nmtop_mesh08_z0_repeat.fsp");
    set("polarization angle",0);
    save("rounded 41nm_run5_1.5nmtop_mesh08_z0_repeat_0.fsp");
    set("polarization angle",90);
    save("rounded 41nm_run5_1.5nmtop_mesh08_z0_repeat_90.fsp");

# collect the field data from each simulation
load("rounded 41nm_run5_1.5nmtop_mesh08_z0_repeat_0.fsp");
    Ex_0 = getdata("z_normal_profile_center","Ex");
    Ey_0 = getdata("z_normal_profile_center","Ey");
    Ez_0 = getdata("z_normal_profile_center","Ez");
load("rounded 41nm_run5_1.5nmtop_mesh08_z0_repeat_90.fsp");
    Ex_90 = getdata("z_normal_profile_center","Ex");
    Ey_90 = getdata("z_normal_profile_center","Ey");
    Ez_90 = getdata("z_normal_profile_center","Ez");
    x = getdata("z_normal_profile_center","x");
    y = getdata("z_normal_profile_center","y");

# create the total field based on the weighting factors
Ex = weight_0*Ex_0 + weight_90*Ex_90;
Ey = weight_0*Ey_0 + weight_90*Ey_90;
Ez = weight_0*Ez_0 + weight_90*Ez_90;

# find wavelength of interest

Ez_f=abs(pinch(pinch(Ez,4,19<img src="//" width="467" height="500">)));

# plot the field amplitudes

Here is the screenshot of the simulation in log scale. By making mesh smaller and choosing the proper wavelength, I expect you get similar results as the paper:

Please let me know if you had further question and whether or not this could solve the problem.