Two different reflectance by varying source and monitor distance


I am trying to solve absorptance of a single layer silver particles (by using periodicity). When I change the parameter (gap_si_source in code) that define distance between surface and source (by keeping the distance between source and monitor constant) I get two different solutions (1 and 2) as I present in the figure.

Distance (in nm) and corresponding result is like this

270 result ->2
260 result ->1
250 result ->2
240 result ->1
230 result ->2
225 result ->2
224 result ->2
223 result ->1
220 result ->1
219 result ->1
215 result ->1
210 result ->1
205 result ->1
203 result ->1
202 result ->2
200 result ->2
175 result ->2
173 result ->1
170 result ->1
168 result ->1
166 result ->1
165 result ->2
150 result ->2
130 result ->1
100 result ->2
90 result ->1

There is a behavior like 90 + 40*k (where k is integer)
I get two different result not an another result in between.

How can I make my solution independent of that distance? (313.9 KB) untitled

Hello @ref,

I have tried running your script with gap_si_source values of 90, 170, 200, 210, 220 and 260 nm, and for all of them I obtained result 2. Which version of FDTD Solutions are you using? And how are you calculating the absorptance?

My initial guess would be that this is an issue with how the mesh is aligning with your structures. You should try adding a mesh override region to the silica to make sure the mesh is constant between the different simulations. Also, you could try keeping the z span of the FDTD region constant while you vary gap_si_source.

1 Like

Thank you for the quick response.

Version is 2020a. To find absorption I use A=1-T-R.T is close to 0 so it is 1-R where R is find by monitor_1

I attach 2 new .fsp files. Both are created by the script I uploaded at my first post and by the same pc and same lumerica version. One of them gives the result 1 the other gives 2. You can just check T from monitor_1 without giving a run (514.4 KB)

I am still not sure what exactly is causing this issue, but I noticed that the results change quite a bit when I decrease the mesh spacing in the mesh override object over the sphere. Here is the reflection with a different mesh override spacings:

This indicates that your mesh is not fine enough to give reliable results. I would recommend you use convergence testing to make sure your mesh is fine enough, especially over the metal sphere. Let me know if your problem persists after you have performed this convergence testing.

By the way, to speed up your simulation you can apply antisymmetric BCs to the x boundaries and symmetric BCs to the y boundaries to reduce your simulation size by four (this will still represent a periodic structure in the x and y directions):


I hope this helps. Let me know if you have any questions.

In the uploaded files mesh size is 4 nm but normally I use 0.2 nm, which results a 28 hour execution time. With this fine mesh it is hard to get the length vs result table in the first post so I make the mesh coarse.

When I opened r1.fsp and r2 fsp files that looks same in lumerical editor, editplus show different codeblocks are at different places and also some minor changes at last lines. May be there is a bug arise due to custom material and/or addition order of the components like (rectangle, monitor etc). I do not know if the technical team find it is interesting to make a reverse engineering.

Thank you for the valuable information. I will use your recommendations about the BC.


I found the difference. Number of coefficients for the optical data fit is different. In one file it is set to 2, in the other it is 5 so curve fits are different.

Now the question is why it gives two different fit for same material data - model and how can I manually set those values from the script.

An another question. The BCs you provide (symmetrci and anti-symmetric) reduced execution time from 28h to 3.5h. Can I use these BCs if the source incident is not normal but 30 deg for example.

Good catch! You are right, it’s strange that the fit is changing between your simulations. Note that the number of coefficients is not set directly by the user. The maximum number of coefficients is set, then the fit uses as many coefficients as necessary to get the best fit. I noticed that the same fit is obtained for both simulations when I turn off the “improve stability” option under “Advanced settings”. Turning this off can lead to a better fit, but can lead to instability and divergence.

Try running your simulations with this option off and see if the fit stays constant between simulations. You can set the various material fit parameters via the script using commands with this format: setmaterial("material name", "material property", value);.

As for the BCs, the symmetric/anti-symmetric BCs require both the structure and the source to have the required symmetry. So if you tilt your plane wave source around the y axis, for example, you will lose the symmetry condition in the x direction.

Keep in mind that there are some added complications when you are using an angled plane wave source in broadband simulations. For example, you may want to use BFAST boundary conditions. You can take a look at this page for more information:

I hope that helps. Let me know if you have any questions.

Thank you for the information.

setmaterial(matName2,“make fit passive”, [1] );
setmaterial(matName2,“improve stability”, [1] );

From the codes, first line works (it also has a boolean data type), but second does not.

Error: line 76: The material’s improve stability property is not available.

I can change various material properties like tolerance, imaginary weight etc. but not “improve stability”

The command setmaterial(matName2, “improve numerical stability”, 1); should work. Generally the names of the variables match the names in the GUI, but occasionally they do not. You can print the names of the variables you can change via script using the command ?setmaterial(matName2);.