# Simple Glass-Silver-Air Slab

#1

I have tried solving this same example but I am not getting the resonance plot as shown on the lumerical application. I have attached my simulation file. Also resonance plot from lumerical application is attached
for reference. Please can you help me with the simulation

trial example1.fsp (250.4 KB)

trial example1.lsf (917 Bytes)

#2

I noticed that the Bloch boundary conditions from FDTD Boundary condition settings has changed:

For simulations like this, since you are changing the source angle, this box has to be checked. You can read more about this here:
https://kb.lumerical.com/en/index.html?ref_sim_obj_bloch_bc.html

#3

In Bloch boundary conditions the box has been checked Still I am not getting the optimized result.

#4

I spent some time to replicate the results of the KB page, but unfortunately it was not successful. I am working with the R&D team to find the problem and will get back to you when the problem is solved.

#5

Luckily I found a workaround for you to run the simulations while our team is working to fix the bug. In your simulation file, since you are performing a single frequency simulation with refractive index of glass (n=1.46). set a constant dielectric constant for glass and perform the sweep.

This should give you identical plots as the KB page.
https://kb.lumerical.com/en/sp_spr_2d.html

#6

Hello,

Sorry for the intrusion, but I wonder if there was any further progress on this other than the workaround in the previous post?
I would like to adapt this example which includes sweeping the wavelength and ‘manually’ changing the index each time is not ideal.
Many thanks.

#7

Yes I tried solving for getting the plasmons interference pattern using the SPR resonance angle

#8

Dear @ie5003_allison

Unfortunately this bug is not fixed yet. I will keep you updated if there was any progress.

I was thinking maybe you can export SiO2 (Glass) - Palik material index data, and then assign the single index value to glass object at wavelength of interest? This will require some scripting, but I will be happy to be of a help.

I understand that this is not the optimal approach for this problem, and sorry for any inconvenience.

#9

Hi,

Thanks for the quick reply. I think I understand. Would the relevant part of the script be something like this?

> index = [a,b,c,d,e,...]
> for(i=1:length(index)) {
>     setnamed( "glass", "index",i);
>     }


Where “a,b,c,d,e,…” are the single index values that I predetermined.
Or is there a method where I could extract the single index values from the SiO2 (Glass) - Palik material index data having assigned the wavelengths, such as (in pseudo code):

wavelength = [a,b,c,d,e,...]
for(i=1:length(wavelength)) {
j = SiO2index@i
setnamed( "glass", "index",j);
}


I can imagine that this may be a bit tricky if the exact wavelengths a,b,c,d,e,… are not in the database. I only need a few wavelengths, so the former is ok, but perhaps in the future the latter may be useful, so it is more out of curiosity than anything…

#10

Dear @ie5003_allison

The first method works fine, but for more complicated cases and if you want to use material index or FDTD index, you can use this script:

# Specify material
material="Si (Silicon) - Palik";

# Specify frequency range
fmin=400e12;
fmax=1500e12;
f=linspace(fmin,fmax,300);

# Get material data
n_exp = getindex(material,f);  #Experimental raw data, real and imaginary part
n_FDTD = getfdtdindex(material,f,fmin,fmax);  # FDTD fit data, real and imaginary part

# plot data
plot(f/1e12,real(n_exp),real(n_FDTD),"f (THz)","Re(n)");
legend("experimental data","FDTD fit");
plot(f/1e12,imag(n_exp),imag(n_FDTD),"f (THz)","Im(n)");
legend("experimental data","FDTD fit");

# Find Re(n) at the wavelength of interest

lambda      = [500,550,600,650]*1e-9;
freq 	 = c/lambda;

?index = find(f,freq);

?n_sim = real(n_FDTD(index)); # or you can use  n_sim = real(n_exp(index));  to use material data


Once the index parameter are defined, you can use your script to assign them as constant material index. Please note that find command calculates the closest value in the matrix as explained in the link below:

https://kb.lumerical.com/en/index.html?ref_scripts_find.html

I hope this answered your question and will be a good workaround at the moment.
Thanks

#11

Thank you. That will be a great help.

#12