4.6. Refractive Indices¶
4.6.1. Defining the Model¶
Constant
The simplest case, a constant (wavelength-independent)
RefractionIndex, is defined as:
n = ot.RefractionIndex("Constant", n=1.54)
Center Index and Abbe Number
For most materials only a single refractive index \(n_c\) and an Abbe number \(V\) are provided, but not a full \(n(\lambda)\)-curve. Such a material is modelled by:
n = ot.RefractionIndex("Abbe", n=1.5, V=32)
Note that materials with the same \(n_c\), \(V\) can still differ slightly, as many dispersion curves produce these two values. Details on how the model is estimated are located 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 typical 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 expressed in powers of µm, which is also true for the wavelength input values.
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}}\]
|
An example of a Schott model material is initialized in the following manner:
n = ot.RefractionIndex("Schott", coeff=[2.13e-06, 1.65e-08, -6.98e-11, 1.02e-06, 6.56e-10, 0.208])
User Data
The "Data" type allows a model definition from a wavelength in nanometers (380.0 - 780.0) and index list.
Intermediary values 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 with the func-parameter:
n = ot.RefractionIndex("Function", func=lambda wl: 1.6 - 1e-4*wl)
The first parameter must be the wavelength in nanometers,
while additional parameters are provided by 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. Calculating the Index Values¶
Index values are calculated by calling the object with a wavelength vector. The return value is 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¶
Every RefractionIndex object provides a
abbe_number-method:
>>> n = ot.presets.refraction_index.LAF2
>>> n.abbe_number()
44.850483919254984
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
A list of predefined lines can be found in Section 4.8.5. You can also specify a user defined list of three wavelengths:
>>> n.abbe_number([450, 580, 680])
30.59379412865849
To check if a medium is dispersive, call:
>>> print(n.is_dispersive())
True
4.6.4. Loading material catalogues (.agf)¶
optrace supports importing .agf catalogue files that contain different material definitions.
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, a way to load the Schott catalogue and accessing the material N-LAF21 is shown below.
n_schott = ot.load_agf("schott.agf")
n_laf21 = n_schott["N-LAF21"]
Different .agf files are located in
this repository
or this one.
Information on the file format are available here and and here.
4.6.5. Plotting¶
4.6.6. Presets¶
optrace provides many material presets, which can be accessed using ot.presets.refractive_index.<name>,
where <name> is the material name.
The materials are also grouped into lists
ot.presets.refractive_index.glasses, ot.presets.refractive_index.plastics, ot.presets.refractive_index.misc.
The following plots visualize the index curves and Abbe plots group-wise.
Fig. 4.21 Refraction index curves for the glass presets.¶ |
Fig. 4.22 Abbe diagram for the glass presets.¶ |
Fig. 4.23 Refraction index curves for the plastic presets.¶ |
Fig. 4.24 Abbe diagram for the plastic presets.¶ |
Fig. 4.25 Refraction index curves for miscellaneous presets.¶ |
Fig. 4.26 Abbe diagram for the miscellaneous presets. Air and Vacuum are modelled non-dispersive and missing in this plot.¶ |
References