The Fresnel reflection for an arbitrary number of layers in the case of TM polarization is
\[\begin{align} \tilde{r}_{j,l,m \ldots n} = \frac{\tilde{r}_{j,l} + \tilde{r}_{l,m \ldots n} \exp\left(2 \mathrm{i} k_{z,l} d_l\right)} {1+\tilde{r}_{j,l} \tilde{r}_{l,m \ldots n} \exp\left(2 \mathrm{i} k_{z,l} d_l\right)} \end{align}\]
where \(d_l\) is the thickness of the \(l\)th metal layer and
\[\begin{align}\tilde{r}_{i,j}&= \left.\left(\frac{k_{z,i}}{\epsilon_i}-\frac{k_{z,j}}{\epsilon_j}\right) \middle/ \left(\frac{k_{z,i}}{\epsilon_i}+\frac{k_{z,j}}{\epsilon_j}\right)\right.\\ &=\frac{\epsilon_j k_{z,i}-\epsilon_i k_{z,j}} {\epsilon_j k_{z,i}+\epsilon_i k_{z,j}}\end{align}\] is the two layer Fresnel relation.
This equation can be iterated to produce the correct reflectivity for any number of layers, as the following Python snippet shows:
# n layer Fresnel
def r(kx,epsilon,d):
# two layer Fresnel
rtwo = lambda kx,epsilon: \
(epsilon[1]*kz(kx,epsilon[0])-epsilon[0]*kz(kx,epsilon[1]))/ \
(epsilon[1]*kz(kx,epsilon[0])+epsilon[0]*kz(kx,epsilon[1]))
if len(epsilon) == 2:
return rtwo(kx,epsilon)
else:
return\
(rtwo(kx,epsilon)+r(kx,delete(epsilon,0),delete(d,0))*exp(2.0j*kz(kx,epsilon[1])*d[1]))/\
(1+rtwo(kx,epsilon)*r(kx,delete(epsilon,0),delete(d,0))*exp(2.0j*kz(kx,epsilon[1])*d[1]))
or in octave
% returns the complex n layer Fresnel reflectivity for TM polarization
function out = nlayerfresnel(k0,kx,epsilon,d)
kz = @(kx,epsilon) sqrt(k0.^2.*epsilon-kx.^2);
% two layer Fresnel
r12 = @(kx,epsilon) \
(epsilon(2).*kz(kx,epsilon(1))-epsilon(1).*kz(kx,epsilon(2)))./ \
(epsilon(2).*kz(kx,epsilon(1))+epsilon(1).*kz(kx,epsilon(2)));
% if the length is two, return the two layer Fresnel, otherwise
% recursively go through the layers
if length(epsilon) == 2
out = r12(kx,epsilon);
else
out = (r12(kx,epsilon)+nlayerfresnel(k0,kx,epsilon(2:end),d(2:end)).*exp(2.0i.*kz(kx,epsilon(2)).*d(2)))./\
(1+r12(kx,epsilon).*nlayerfresnel(k0,kx,epsilon(2:end),d(2:end)).*exp(2.0i.*kz(kx,epsilon(2)).*d(2)));
endif
endfunction
Note here that epsilon
and d
are ordered arrays holding the ordered list of complex permittivities of the system you’re trying to model.