#ifndef MEDIA_H #define MEDIA_H /* * METRIC --- Mode expansion modeling in integrated optics / photonics * http://metric.computational-photonics.eu/ */ /* * media.h * Optical properties for a few common media in integrated photonics, * emphasis on wavelength dependence, material dispersion * * References * [1]: C.M. Herzinger, B. Johs, W.A. McGahan, J.A. Woollam, and W. Paulson, "Ellipsometric determination of optical constants for silicon and thermally grown silicon dioxide via a multi-sample, multi-wavelength, multi-angle investigation", Journal of Applied Physics 83, 3323–3336 (1998) * [2]: G.J. Edwards and M. Lawrence, "A temperature-dependent dispersion equation for congruently grown lithium niobate", Optical and Quantum Electronics 16, 373–375 (1984) * [3]: L. Ebers, A. Ferreri, M. Hammer, M. Albert, C. Meier, J. Förstner and P.R. Sharapova, "Flexible source of correlated photons based on LNOI rib waveguides", Journal of Physics: Photonics 4 (2), 025001 (2022) * * frequency domain, time dependence ~ \omega t assumed with * positive angular frequency omega * <-> an attenuating medium is characterized by a refractive index * with positive real part and negative (!) imaginary part; * signs of data for k / eps2 are adjusted accordingly */ /* media identifiers */ enum MediumID { AIR, // ... or vacuum, isotropic, constant refractive index 1.0 SiO2, // thermal silicon dioxide, Ref. [HJM98] Si, // crystalline silicon, Ref. [HJM98] LiNbO3, // bulk lithium niobate, Ref. [EdL84] TFLN // thin-film lithium niobate, Ref. [EFH22] }; /* birefringent media, axis/direction identifiers */ enum AxisID { ORD, // ordinary EXT // extraordinary }; /* values / eqns. for room temperature, where applicable */ #define MEDIA_TEMPERATURE 20 // deg Celsius /* container for the medium properties */ class Medium { public: // medium identifier MediumID type; // material dispersion, wavelength interval covered Interval wlrange; // initialize, default: air Medium(); Medium(const MediumID id); // property methods; not all are applicable to all media // refractive index at wavelength lambda, double n(const double lambda) const; // ... including the attenuation constant Complex nC(const double lambda) const; // scalar dielectric optical permittivity double eps(const double lambda) const; // ... including attenuation Complex epsC(const double lambda) const; // birefringent (lossless) media, ordinary and extraordinary refractive index double n(const AxisID oe, const double lambda) const; // birefringent (lossless) media, ordinary and extraordinary permittivity elements double eps(const AxisID oe, const double lambda) const; }; #endif // MEDIA_H