optical interface reflectance between absorbing materials


Hello Lumerical community,

I’m trying to perform basic simulations but I have some trouble to do so.
What I want: to study rear interface of an optical device. For example, what is the reflectance between CIGS and Molybdenum and how to improve it.

So, basically, the refelctance between CIGS and molybdenum is easily computed by Fresnel coef. or by using a transfer matrix method. The problem appears when I add some dielectric between them to improve the amount of light reflected in the CIGS (the idea is obviously to reflect large wavelength back to the CIGS layer).

Fresnel doesn’t take into account the interferences in the dielectric layer due to multi-reflection within the layer. So, it supposes to work very well with transfer matrix, but it is not. In some case, I got Reflectance higher than 1 (or 100%) which is not correct. So I compared my results with Lumerical simulation. If my incident material is transparent, I got the same results with FDTD or transfer matrix. When the incident material is absorbing, I got wrong results with transfer matrix, and with FDTD… there is a problem, and I don’t know how to solve it.

As the incident material is absorbing, it will decrease the light source irradiance while the plane wave propagates toward the interface. I’m a little bite lost here. As I have to put the source in the absorbing medium, I try to put it really next to the interface (like 20 nm from it). Then I have to put the monitor (power) just a little bite far from the source in order to record the Reflectance. But then, the input wave is already a little bite absorbed before reaching the interface and the monitor.

Can I do that with Lumerical ? If someone also knows why transfer matrix failed when the inner material is absorbing, that could also be great.

Thank you.


Hi Olivier,

Have you tried using Lumerical’s stackrt script function? It uses the transfer matrix method. This would be a first check before trying to run the FDTD simulation.

If you want you could share your simulation file and I would be happy to take a look.


Actually, last time I used the stackrt script, I didn’t get how to add complexe refractive index. Is it possible?

anyway, my wish here is to have another method to check my transfert matrix code. The problem with transfer matrix is that you can have wrong result if the incident medium is a Lossy material. So I want to do FDTD simulation with lossy material as the incident one, but this is tricky because the propagated wave will lose a little bit its energy.

So, I have to put the source and the R-monitor really near the interface, and I then don’t know if the results are good (because of this proximity).

I put the file in attachment.

Cells_2D.fsp (1.1 MB)
n2_CIGS_300_1200.txt (38.3 KB)
nk_alu_300_1200.txt (43.1 KB)
n_mgf2_300_1100.txt (38.3 KB)


Hello @olivier.poncelet,
Try this code where you can use the same complex RI as the one defined in your material library. I tried to reproduce the same layers you have in your FDTD file.

#Dispersive lossy material
#Define frequency and thickness vectors
f = linspace(c/400e-9, c/1000e-9,100); # frequency vector
d = [2e-6; 0.13e-6; 0.47e-6; 0.5e-6]; #CIGS/MgF2/Alu/Air

Material index definition

nf= length(f);
nd= length(d);
n= matrix(nd, nf);
n(1, 1:nf)= getfdtdindex(“CIGS”,f, min(f), max(f));
n(2, 1:nf)= getfdtdindex(“MgF2”,f, min(f), max(f));
n(3, 1:nf)= getfdtdindex(“Alu”,f, min(f), max(f));
n(4, 1:nf)= 1;
RT = stackrt(n,d,f);


Hi aya_zaki,

Actually it gives the same results than my own code. (see picture in attachment)

In Lumerical, when I decrease (in your script) the size of the incident material (CIGS) down to the limite (I tried 1 nm, to avoid absorption), I got exactly the same curve than my code. And, as you see, refelctance is Higher than 1.

I really want to understand that. I know it is related by the fact that, in Fresnel coefficient calculation, we assume a semi-infinite incident material. So, if it is a lossy material, no light is suppose to reach the interface. On the other hand, we can find many papers where they clearly say that Fresnel coefficients are still valide for lossy material.

I really don’t understand why the reflectance could be higher than 1. I ill try to simulate this interface as an incoherent one.


Thank you for your post. I am really curious to understand your point regarding using Frensel for absorbing material. Why do you need to excite the wave from an absorbing material? Did you try to excite it from air, for example, or another matched lossless medium?


Well, the idea is to optimise rear reflection in thin film solar cells. Obviously, a simple dioptre could be studied just with Fresnel coefficient. When we add thin film material, coherent interferences might appear (if thin enough), which is not taken into account by Fresnel, but well with transfer matrix (which is basically Fresnel interface + propagator function). Generally, it is easy to study separately optical interfaces with transfer matrix.

So, here I want to study the rear interface of a solar cell. The active media is CIGS, and I try to figure out which material or stack of material will optimise the rear reflection.

Is it clear enough?

So, the problem appears when I add dielectric between the CIGS and the metal (which is supposed to be the rear electrod). The computed Reflectance is higher than the unity in some wavelength range. This is like some energy-loss mechanisms are not taken into account, or the coherent interferences are too

This is even more strange with this one: when I compute just the CIGS/metal interface, I got the same solution using either transfer matrix or Fresnel. So it must work also with the dielectric between them.

I really don’t understand where this “bug” is coming from. Any ideas?


Ok, got it. This happen because of the Mixed poynting vector when the incident medium is absorbing. If anyone are interested by this, please read “The mixed poynting vector” in SVC bulletin 2014, from Angus Macleod.

Topic closed.

stackRT function not working