4.6. Refractive Indices

4.6.1. Defining the Index

Constant

In the simplest case a constant (wavelength-independent) refractive index is defined as:

n = ot.RefractionIndex("Constant", n=1.54)

By Abbe Number

In many cases materials are characterized by the index at a center wavelength and the Abbe number only. However, materials with these same quantities can still differ slightly.

n = ot.RefractionIndex("Abbe", n=1.5, V=32)

Details on how the model is estimated are found in Section 5.9.1.

You can also specify the wavelength combination, for which n and V are specified:

n = ot.RefractionIndex("Abbe", n=1.5, V=32, lines=ot.presets.spectral_lines.FeC)

Common Index Models

The subsequent equations describe common refractive index models used in simulation software. They are taken from [1] and [2]. A comprehensive list of different index models is found in [3].

Generally, all coefficients must be given in powers of µm, while the same is true for the wavelength input.

Name

Equation

Cauchy

(4.5)\[n = c_0 + \frac{c_1}{\lambda^2} + \frac{c_2}{\lambda^4} + \frac{c_3}{\lambda^6}\]

Conrady

(4.6)\[n = c_0+ \frac{c_1} {\lambda} + \frac{c_2} {\lambda^{3.5}}\]

Extended

(4.7)\[n^2 = c_0+c_1 \lambda^2+ \frac{c_2} {\lambda^{2}}+ \frac{c_3} {\lambda^{4}}+ \frac{c_4} {\lambda^{6}}+ \frac{c_5} {\lambda^{8}}+ \frac{c_6} {\lambda^{10}}+\frac{c_7} {\lambda^{12}}\]

Extended2

(4.8)\[n^2 = c_0+c_1 \lambda^2+ \frac{c_2} {\lambda^{2}}+ \frac{c_3} {\lambda^{4}}+\frac{c_4} {\lambda^{6}}+\frac{c_5} {\lambda^{8}}+c_6 \lambda^4+c_7 \lambda^6\]

Handbook of Optics 1

(4.9)\[n^2 = c_0+\frac{c_1}{\lambda^2-c_2}-c_3 \lambda^2\]

Handbook of Optics 2

(4.10)\[n^2 = c_0+\frac{c_1 \lambda^2}{\lambda^2-c_2}-c_3 \lambda^2\]

Herzberger

(4.11)\[\begin{split}\begin{align} n =&~ c_0+c_1 L+c_2 L^2+c_3 \lambda^2+c_4 \lambda^4+c_5 \lambda^6 \\ &\text{ with } L= \frac{1} {\lambda^2-0.028 \mathrm{\,µm}^2} \end{align}\end{split}\]

Sellmeier1

(4.12)\[n^2 = 1+\frac{c_0 \lambda^2}{\lambda^2-c_1}+\frac{c_2 \lambda^2} {\lambda^2-c_3}+\frac{c_4 \lambda^2}{\lambda^2-c_5}\]

Sellmeier2

(4.13)\[n^2 = 1+c_0+\frac{c_1 \lambda^2}{\lambda^2-c_2^2}+\frac{c_3}{\lambda^2-c_4^2}\]

Sellmeier3

(4.14)\[n^2 = 1+\frac{c_0 \lambda^2}{\lambda^2-c_1}+\frac{c_2 \lambda^2}{\lambda^2-c_3}+ \frac{c_4 \lambda^2}{\lambda^2-c_5}+\frac{c_6 \lambda^2}{\lambda^2-c_7}\]

Sellmeier4

(4.15)\[n^2 = c_0+\frac{c_1 \lambda^2}{\lambda^2-c_2}+\frac{c_3 \lambda^2}{\lambda^2-c_4}\]

Sellmeier5

(4.16)\[n^2 = 1+\frac{c_0 \lambda^2}{\lambda^2-c_1}+\frac{c_2 \lambda^2}{\lambda^2-c_3}+ \frac{c_4 \lambda^2}{\lambda^2-c_5}+\frac{c_6 \lambda^2}{\lambda^2-c_7}+\frac{c_8 \lambda^2}{\lambda^2-c_9}\]

Schott

(4.17)\[n^2 = c_0+c_1 \lambda^2+\frac{c_2}{ \lambda^{2}}+\frac{c_3} {\lambda^{4}}+\frac{c_4} {\lambda^{6}}+\frac{c_5} {\lambda^{8}}\]

In the case of the Schott model, the initialization looks as follows:

n = ot.RefractionIndex("Schott", coeff=[2.13e-06, 1.65e-08, -6.98e-11, 1.02e-06, 6.56e-10, 0.208])

User Data

With type "Data" a wavelength and index vector should be provided. Values in-between are interpolated linearly.

wls = np.linspace(380, 780, 10)
vals = np.array([1.6, 1.58, 1.55, 1.54, 1.535, 1.532, 1.531, 1.53, 1.529, 1.528])
n = ot.RefractionIndex("Data", wls=wls, vals=vals)

User Function

optrace supports custom user functions for the refractive index. The function takes one parameter, which is a wavelength numpy array with wavelengths in nanometers.

n = ot.RefractionIndex("Function", func=lambda wl: 1.6 - 1e-4*wl)

When providing a function with multiple parameters, you can use the func_args parameter.

n = ot.RefractionIndex("Function", func=lambda wl, n0: n0 - 1e-4*wl, func_args=dict(n0=1.6))

4.6.2. Getting the Index Values

The refractive index values are calculated when calling the refractive index object with a wavelength vector. The call returns a vector of the same shape as the input.

>>> n = ot.RefractionIndex("Abbe", n=1.543, V=62.1)
>>> wl = np.linspace(380, 780, 5)
>>> n(wl)
array([1.56237795, 1.54967655, 1.54334454, 1.5397121 , 1.53742915])

4.6.3. Abbe Number

With a refractive index object at hand the Abbe number can be calculated with

>>> n = ot.presets.refraction_index.LAF2
>>> n.abbe_number()
44.850483919254984

Alternatively the function can be called with a different spectral line combination from ot.presets.spectral_lines:

>>> n.abbe_number(ot.presets.spectral_lines.F_eC_)
44.57150709341499

Or specify a user defined list of three wavelengths:

>>> n.abbe_number([450, 580, 680])
30.59379412865849

You can also check if a medium is dispersive by calling

>>> print(n.is_dispersive())
True

A list of predefined lines can be found in Section 4.7.5.

4.6.4. Loading material catalogues (.agf)

optrace can also load .agf catalogue files containing different materials. The function ot.load_agf requires a file path and returns a dictionary of media, with the key being the name and the value being the refractive index object.

For instance, loading the Schott catalogue and accessing the material N-LAF21 can be done as follows:

n_schott = ot.load_agf("schott.agf")
n_laf21 = n_schott["N-LAF21"]

Different .agf files are found in this repository or this one.

Information on the file format can be found here and and here.

4.6.5. Plotting

See Plotting Refractive Indices.

4.6.6. Presets

optrace comes with multiple material presets, which can be accessed using ot.presets.refractive_index.<name>, where <name> is the material name. The materials are also grouped into multiple lists ot.presets.refractive_index.glasses, ot.presets.refractive_index.plastics, ot.presets.refractive_index.misc.

These groups are plotted below in an index and an Abbe plot.

../_images/glass_presets_n.svg

Fig. 4.21 Refraction index curves for different glass presets.

../_images/glass_presets_V.svg

Fig. 4.22 Abbe diagram for different glass presets.

../_images/plastics_presets_n.svg

Fig. 4.23 Refraction index curves for different plastic presets.

../_images/plastics_presets_V.svg

Fig. 4.24 Abbe diagram for different plastic presets.

../_images/misc_presets_n.svg

Fig. 4.25 Refraction index curves for miscellaneous presets.

../_images/misc_presets_V.svg

Fig. 4.26 Abbe diagram for miscellaneous presets. Air and Vacuum are missing here, because they are modelled without dispersion.


References