Python package for calculating refractive index dispersion of various materials
Project description
ndispers
ndispers is a Python package for calculating refractive index dispersion of various crystals and glasses used in the field of nonlinear/ultrafast optics. It is based on Sellmeier equartions and thermo-optic coefficients (dn/dT) reported in literature.
You can easily compute
- Refractive index
- Group delay
- Group velocity
- Group index
- Group velocity dispersion
- Third-order dispersion
- Walk-off angles
- dn/dT
- d^2n/dT^2
as a function of
- Wavelength of light
- Polar (theta) or azimuthal (phi) angles of wavevector with respect to dielectric principal axes of anisotropic crystals
- Temperature of crystal
- Polarization of light (ordinary- or extraordinary-ray)
The crystals have nonlinear-optics methods:
- Phase-mismacth, dk
- Phase-matching angles
- Phase-mathcing factor, sinc^2(dk*L/2)
- Effective nonlinear coefficient, deff
In the latest version v0.2.7, these methods are only for sum-frequency mixing, and deff method only for BetaBBO.
Installation
In terminal,
pip install ndispers
Simple example
Firstly, make an object of β-BBO crystal.
>>> import ndispers as nd
>>> bbo = nd.media.crystals.BetaBBO_Eimerl1987()
To look into the material information,
>>> bbo.help
β-BBO (β-Ba B_2 O_4) crystal
- Point group : 3m (C_{3v})
- Crystal system : Trigonal
- Dielectic principal axis, z // c-axis (x, y-axes are arbitrary)
- Negative uniaxial, with optic axis parallel to z-axis
- Tranparency range : 0.19 µm to 2.6 µm
Sellmeier equation
------------------
n(wl) = sqrt(A_i + B_i/(wl**2 - C_i) - D_i * wl**2) + dn/dT * (T - 20) for i = o, e
Validity range
---------------
0.22 to 1.06 µm
Ref
---
- Eimerl, David, et al. "Optical, mechanical, and thermal properties of barium borate." Journal of applied physics 62.5 (1987): 1968-1983.
- Nikogosyan, D. N. "Beta barium borate (BBO)." Applied Physics A 52.6 (1991): 359-368.
Example
-------
>>> bbo = ndispers.media.crystals.BetaBBO_Eimerl1987()
>>> bbo.n(0.6, 0.5*pi, 25, pol='e') # args: (wl_um, theta_rad, T_degC, pol)
To compute refractive indices,
>>> bbo.n(0.532, 0, 25, pol='o')
array(1.67488405)
>>> bbo.n(0.532, 3.1416/2, 25, pol='e')
array(1.55546588)
where the four arguments are, respectively,
- wavelength (in micrometer),
- theta angle (in radian),
- temperature (in degree Celsius),
- polarization (
pol='o' or 'e'
, ordinary or extraordinary ray).
Default is pol='o'
. Note that pol='e'
corresponds to pol='o'
in index surface when theta angle is 0 radians.
Output values are generically of numpy.ndarray
type. You can input an array to each argument, getting an output array of the same shape,
>>> import numpy as np
>>> wl_ar = np.arange(0.2, 1.5, 0.2)
>>> wl_ar
array([0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4])
>>> bbo.n(wl_ar, 0, 25, pol='o')
array([1.89625189, 1.692713, 1.66892613, 1.66039556, 1.65560236, 1.65199986, 1.64874414])
See documentation for more features and examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ndispers-0.3.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e4f5f067915e250a46001589d26f0b9989256d05a6ba145f4d6922c40143e2f |
|
MD5 | fdefdceceb8b9a8736aa4f91334f103c |
|
BLAKE2b-256 | 8f10c194d26f3f279cb3d3fafc7a933b64f296ca72e33e9559e3ee5ce9351fe4 |