refraction#

optika.materials.matrices.refraction(wavelength, direction_left, direction_right, polarized_s, n_left, n_right, interface=None)[source]#

Compute the refractive matrix, which represents the bending of light at an interface.

Parameters:
  • wavelength (Quantity | AbstractScalar) – The wavelength of the incident light in vacuum

  • direction_left (float | AbstractScalar) – The component of the incident light’s propagation direction before the interface antiparallel to the surface normal.

  • direction_right (float | AbstractScalar) – The component of the incident light’s propagation direction after the interface antiparallel to the surface normal.

  • polarized_s (bool | AbstractScalar) – If True, the incident light is \(s\)-polarized. If False, the incident light is \(p\)-polarized.

  • n_left (float | AbstractScalar) – The complex index of refraction on the left side of the interface.

  • n_right (float | AbstractScalar) – The complex index of refraction on the right side of the interface.

  • interface (None | AbstractInterfaceProfile) – The interface profile between the left side and the right side.

Return type:

Cartesian2dMatrixArray

Examples

Compute the refractive matrix for \(s\)-polarized light normally incident on the interface between vacuum and silicon dioxide.

import astropy.units as u
import named_arrays as na
import optika

# Define the wavelength of the incident light
wavelength = 100 * u.AA

# Initialize a representation of silicon dioxide
sio2 = optika.chemicals.Chemical("SiO2")

# Compute the refractive matrix
optika.materials.matrices.refraction(
    wavelength=wavelength,
    direction_left=1,
    direction_right=1,
    polarized_s=True,
    n_left=1,
    n_right=sio2.n(wavelength),
)
Cartesian2dMatrixArray(
    x=Cartesian2dVectorArray(
        x=ScalarArray(ndarray=np.complex128(0.9923203996848661+0.007568033439537367j), axes=()),
        y=ScalarArray(ndarray=np.complex128(0.007679600315133928-0.007568033439537367j), axes=()),
    ),
    y=Cartesian2dVectorArray(
        x=ScalarArray(ndarray=np.complex128(0.007679600315133928-0.007568033439537367j), axes=()),
        y=ScalarArray(ndarray=np.complex128(0.9923203996848661+0.007568033439537367j), axes=()),
    ),
)

Notes

The refractive matrix is given by Yeh [1988] Equation 5.1-12,

(1)#\[\begin{split}W_{kij} = \frac{1}{t_{kij}} \begin{pmatrix} 1 & r_{kij} \\ r_{kij} & 1 \\ \end{pmatrix},\end{split}\]

where \(k=(s, p)\) is the polarization state, \(i=j-1\) is the index of the previous material, \(j\) is the index of the current material,

(2)#\[r_{kij} = \frac{q_{ki} - q_{kj}}{q_{ki} + q_{kj}}\]

is the Fresnel reflection coefficient between materials \(i\) and \(j\),

(3)#\[t_{kij} = \frac{2 q_{ki}}{q_{ki} + q_{kj}}\]

is the Fresnel transmission coefficient between materials \(i\) and \(j\),

\[q_{si} = n_i \cos \theta_i\]

and

\[q_{pi} = \frac{\cos \theta_i}{n_i}\]

are the \(z\) components of the wave’s momentum for \(s\) and \(p\) polarization, \(n_i\) is the index of refraction inside material \(i\), and \(\theta_i\) is the angle between the wave’s propagation direction and the vector normal to the interface inside material \(i\).