/* * METRIC-Application: * Material dispersion of a few common media in integrated optics * Data: See references in media.h */ #include #include #include #include"metric.h" // target wavelengths #define Wavel1 1.55 #define Wavel2 0.775 // wavelength scans, number of samples #define NumWL 2000 /* ------------------------------------------------------------------------ */ int main() { Medium si(Si); Medium sio2(SiO2); Medium linbo3(LiNbO3); Medium tfln(TFLN); fprintf(stderr, "lambda = %g mum\n", Wavel1); fprintf(stderr, "Si [HJM98]: n = %g + i%g\n", si.nC(Wavel1).re, si.nC(Wavel1).im); fprintf(stderr, "SiO2 [HJM98]: n = %g\n", sio2.n(Wavel1)); fprintf(stderr, "LiNbO3 [EdL83]: n_e = %g, n_o = %g\n", linbo3.n(EXT, Wavel1), linbo3.n(ORD, Wavel1)); fprintf(stderr, "TFLN [EFH22]: n_e = %g, n_o = %g\n", tfln.n(EXT, Wavel1), tfln.n(ORD, Wavel1)); fprintf(stderr, "\n"); fprintf(stderr, "lambda = %g mum\n", Wavel2); fprintf(stderr, "Si [HJM98]: n = %g + i%g\n", si.nC(Wavel2).re, si.nC(Wavel2).im); fprintf(stderr, "SiO2 [HJM98]: n = %g\n", sio2.n(Wavel2)); fprintf(stderr, "LiNbO3 [EdL83]: n_e = %g, n_o = %g\n", linbo3.n(EXT, Wavel2), linbo3.n(ORD, Wavel2)); fprintf(stderr, "TFLN [EFH22]: n_e = %g, n_o = %g\n", tfln.n(EXT, Wavel2), tfln.n(ORD, Wavel2)); fprintf(stderr, "\n"); Dvector wl(NumWL); Dvector n(NumWL); Dvector no(NumWL); Dvector ne(NumWL); Cvector nC(NumWL); Cvector epsC(NumWL); Medium m; // Si m = si; for(int li=0; li<=NumWL-1; ++li) { double l = m.wlrange.x0+((double) li)*(m.wlrange.x1-m.wlrange.x0)/((double) (NumWL-1)); wl(li) = l; nC(li) = m.nC(l); epsC(li) = m.epsC(l); } toxyf("si_wl_n_re", wl, nC.re()); toxyf("si_wl_n_im", wl, nC.im()); toxyf("si_wl_eps_re", wl, epsC.re()); toxyf("si_wl_eps_im", wl, epsC.im()); // for direct comparison with curves in [HJM98] Dvector eV(NumWL); for(int i=0; i<=wl.nel-1; ++i) eV(i) = val_energy(wl(i)); toxyf("si_eV_eps_re", eV, epsC.re()); toxyf("si_eV_eps_-im", eV, mult(epsC.im(), -1.0)); // SiO2 m = sio2; for(int li=0; li<=NumWL-1; ++li) { double l = m.wlrange.x0+((double) li)*(m.wlrange.x1-m.wlrange.x0)/((double) (NumWL-1)); wl(li) = l; n(li) = m.n(l); } toxyf("sio2_wl_n", wl, n); // LiNbO3 m = linbo3; for(int li=0; li<=NumWL-1; ++li) { double l = m.wlrange.x0+((double) li)*(m.wlrange.x1-m.wlrange.x0)/((double) (NumWL-1)); wl(li) = l; no(li) = m.n(ORD, l); ne(li) = m.n(EXT, l); } toxyf("linbo3_wl_no", wl, no); toxyf("linbo3_wl_ne", wl, ne); // TFLN m = tfln; for(int li=0; li<=NumWL-1; ++li) { double l = m.wlrange.x0+((double) li)*(m.wlrange.x1-m.wlrange.x0)/((double) (NumWL-1)); wl(li) = l; no(li) = m.n(ORD, l); ne(li) = m.n(EXT, l); } toxyf("tfln_wl_no", wl, no); toxyf("tfln_wl_ne", wl, ne); fprintf(stderr, "\nOk.\n"); return 0; }