Calculates the reflection and transmission of a plane wave through a multi-layer stack using the analytic transfer matrix method. This function returns the fraction of transmitted and reflected power (Ts, Tp, Rs, Rp), and the complex reflection and transmission coefficients (ts, tp, rs, rp), for both S and P polarizations. All results are returned in a single dataset as a function of frequency and incidence angle (optional).
To calculate the fields within the stack, please see stackfield.
Note: Thickness of first and last layer
It is necessary to specify the thickness of each layer, including the first and last layers. Often, a thickness of zero can be used for these layers, meaning the results will be calculated just beyond the first and last interface. If a larger value is used, the results will be calculated further from the interface. For non-lossy materials, this will not affect the reflected and transmitted power, but it will change phase of the complex coefficients.
Note: Sign convention for rp, the complex reflection coefficient of p-polarized light.
stackrt uses the convention that rp is positive when the incident (H1) and reflected (H1') magnetic field vectors are anti-parallel, such at dot(H1,H1') = -1.
Reference: Section 3.1.2 of Optical Waves in Layered Media, Pochi Yeh.
Supported Product: FDTD, MODE, DEVICE, INTERCONNECT
RT = stackrt(n,d,f);
Arguments for a stack with Nlayers:
n: Refractive index of each layer. Size is either Nlayers, or Nlayers x length(f) if dispersive materials are involved.
d: Thickness of each layer. Size is Nlayers.
f: Frequency vector.
RT = stackrt(n,d,f,theta);
theta: Angle vector, in degrees. Optional.
Use stackrt and stackfield to calculate the reflection, transmission and field distribution from a 5 layer stack.
f = linspace(c/400e-9, c/1000e-9,100); # frequency vector
theta = 0:1:45; # angle vector
d = [0; 200e-9; 300e-9; 400e-9; 0]; # 5 layers (including air on top, bottom
n1 = [1; 1.5; 2.5; 1.5; 1]; # refractive index of each layer (non-dispersive)
# get RT using non-dispersive index data, and theta=0
RT1 = stackrt(n1,d,f);
field1 = stackfield(n1,d,f);
# alternate refractive index vector, for dispersive materials
nf = length(f);
nd = length(d);
n2 = matrix(nd,nf);
n2(1,1:nf) = 1; # air
n2(2,1:nf) = getfdtdindex("SiO2 (Glass) - Palik",f,min(f),max(f));
n2(3,1:nf) = getfdtdindex("Si (Silicon) - Palik",f,min(f),max(f));
n2(4,1:nf) = getfdtdindex("SiO2 (Glass) - Palik",f,min(f),max(f));
n2(5,1:nf) = 1; # air
# get RT using dispersive data (n2), and theta from 0 to 45 deg
RT2 = stackrt(n2,d,f,theta);
field2 = stackfield(n2,d,f,theta);
# open data visualizer
# make simple plots
plot(RT1.lambda*1e6,RT1.Rp,RT1.Rs,RT1.Tp,RT1.Ts,"wavelength (um)","Power","non-disperisive, theta=0");
image(RT2.lambda*1e6,RT2.theta,RT2.Rp,"wavelength (um)","theta (deg)","Rp, dispersive example");