Ripples in two port Ring Resonator transmittance




I’m performing some simulations on silicon ring resonators. I started using the Ring Resonator tutorial with a radius of 3.1microns and four ports and checked its response. Later I wrote an script to draw the layout with or without the second waveguide. Now I’m stopped on a radius of 10 microns where I get more or less good results when I use two waveguides (add-drop), but when I don’t use the second waveguide some ripples appear in the transmittace, between the resonances. I tried to make the simulations longer (30000fs), reduce the dt stability factor (up to 0.5), use standard PML increasing the layers, use custom and stabilized PML, use override mesh in the gap and before the PMLs, but I can’t avoid the ripples. I don’t know what more to test… Do you know what could I test more?
thank you in advance for your help



I would recommend checking whether your simulation reached the auto shutoff threshold after 30000 fs. You can check this by opening the log file which is saved to the same working directory as your simulation file with a .log file extension. You can open this file using any text editor, and if the auto shutoff threshold was reached the log file will contain the line:
“Early termination of simulation, the autoshutoff criteria are satisfied.”

If the simulation reaches the maximum simulation time without reaching the auto shutoff threshold, this could lead to ripples in the spectrum, so you can try further increasing the simulation time.

If the auto shutoff level is reached, you may try editing the varFDTD simulation region and reducing the “auto shutoff min” value and re-running the simulation to see if the ripples are reduced. The following page discusses the effect of simulation time on frequency domain monitor results:

Let me know if you still see the problem after trying this.

There is also a relevant topic here:


Hi Nlui,

thank you for your reply. I considered your suggestions and first I checked them using the Ring Resonator example (3.1micrometers radius), and I checked its simulation log, where I found that the autoshutoff criteria were satisfied.

Later I run my 10 micrometer simulation with a simulation time of 300000fs and the simulation has finished because the autoshutoff criteria has been satisfied, however the transmittance still is not good:

This is the end of the log file:

22% complete. Max time remaining: 9 hrs, 33 mins, 41 secs. Auto Shutoff: 2.66234e-005
23% complete. Max time remaining: 9 hrs, 26 mins, 15 secs. Auto Shutoff: 2.03237e-005
24% complete. Max time remaining: 9 hrs, 19 mins, 10 secs. Auto Shutoff: 1.40348e-005
Early termination of simulation, the autoshutoff criteria are satisfied.
Completed 1103251 iterations, or 7.37931e-011s of Simulation Time
Process 0 starting to collect data
collecting monitor data
collecting source data
Injecting in positive direction
Finished collecting data
Simulation completed successfully at: Fri Feb 19 00:50:24 2016
Overall wall time measurements in seconds:
time to mesh and initialize: 5
time to run FDTD simulation: 10863
time to finalize data and save to files: 2
FDTD solver speed: 12.6485 Mnodes/s
total FDTD solver speed on 4 processes: 50.5942 Mnodes/s

I have used a mesh of 2 in order to reduce the simulation time and also have used stabilized PML with 42 layers (standard was crashing). Do you think the result is not good because of the mesh? I’m using a mesh override region in the gap:

msh_n = 5;
set(“x span”,20wg_width);
set(“y span”,5
set(“z span”,3*thick_Si);
set(“set equivalent index”,1);
set(“equivalent x index”,msh_n);
set(“equivalent y index”,msh_n);
set(“equivalent z index”,msh_n);

I also have noticed when recording a movie that the wave propagates through the straight waveguide and, part of the wave reflects from the output port. Should I use more layers in the PML? is this the reason why the transmittance is not fine? (it reflects as well in the 3.1micrometer example).

Or, should I still reduce the min autoshutoff, let’s say to 1e-7?
Thank you for your help



Since you mentioned that you could see some reflection back from the output port, I tried running a simulation with the setup that you described but with an increased number of PML layers to reduce reflections from the PML. I found that with 128 PML layers, the ripples were greatly reduced, although you may want to do some testing with even more layers until the results converge. Please try it out and let me know if it works!


I tried with more layers, and definitely ripples have decreased, although I still have not found the configuration that makes the simulation to converge. Did you use standard PML with 128layers? or stabilized?.
Would you know how to set the PML properties using commands? I’d like to include them on a script, What would be the commands to set the PML type to custom with a given number of layers, sigma, …? I tried following commands, which are all incorrect:

set(“same settings on all boundaries”,1);
set (“profile”,“stabilized”);

Thank you



I was using the “stabilized” PML profile with 128 PML layers in my test.

Regarding setting up the PML settings from the script, you can use the following commands to print out a list of the available properties that can be set in the varFDTD solver:

From the output you will see that the names of the “profile” and “layers” settings in the script are actually “pml profile” and “pml layers”, so you should be able to use the following code:
set(“same settings on all boundaries”,1);
set(“pml profile”,2);
set(“pml layers”,36);

For the “pml profile” property, since the property is selected from a drop down menu, the value of the property is the number of the selection in the drop down menu. Since the “stabilized” option is the second property listed in the drop down menu, setting the “pml profile” setting to 2 will choose the “stabilized” option.

For the “pml layers”, since the minimum allowable number of PML layers is 32, I changed the code to set 36 layers. If you try to set the value to a something lower than 32, the value will automatically be changed to 32.

There’s a good scripting tutorial that I would recommend here that’s relevant: