import matplotlib.pyplot as pyplot from Berreman4x4 import c, pi from numpy import newaxis, exp, sin print("\n*** TiO2/SiO2 Bragg mirror ***\n") ############################################################################ # Structure definition # Front and back materials n_a = 1.0 n_g = 1.5 air = Berreman4x4.IsotropicNonDispersiveMaterial(n_a) glass = Berreman4x4.IsotropicNonDispersiveMaterial(n_g) front = Berreman4x4.IsotropicHalfSpace(air) back = Berreman4x4.IsotropicHalfSpace(glass) # Materials for a SiO2/TiO2 Bragg mirror lbda0 = 1.550e-6 k0 = 2 * pi / lbda0 nr_SiO2 = 1.47 nr_TiO2 = 2.23 alpha_SiO2 = 0e2 # (m⁻¹) alpha_TiO2 = 42e2 # (m⁻¹) ni_SiO2 = alpha_SiO2 * lbda0 / (4 * pi) ni_TiO2 = alpha_TiO2 * lbda0 / (4 * pi) n_SiO2 = nr_SiO2 + 1j * ni_SiO2 n_TiO2 = nr_TiO2 + 1j * ni_TiO2 SiO2 = Berreman4x4.IsotropicNonDispersiveMaterial(n_SiO2)
if len(sys.argv) > 2: (n1, n2) = map(float, sys.argv[1:3]) else: (n1, n2) = (1.0, 1.5) # default values print("\n*** Interface n1 = {:} / n2 = {:} ***\n".format(n1, n2)) ############################################################################ # Structure definition # Materials medium1 = Berreman4x4.IsotropicNonDispersiveMaterial(n1) medium2 = Berreman4x4.IsotropicNonDispersiveMaterial(n2) # Half-spaces front = Berreman4x4.IsotropicHalfSpace(medium1) back = Berreman4x4.IsotropicHalfSpace(medium2) # Structure s = Berreman4x4.Structure(front, [], back) # Parameters for the calculation lbda = 1e-6 k0 = 2 * pi / lbda Phi_i = numpy.linspace(0, pi / 2 * 0.9999) # range for the incidence angles ############################################################################ # Analytical calculation Phi_t = numpy.arcsin((n1 * numpy.sin(Phi_i) / n2).astype(complex)) kz1 = n1 * k0 * numpy.cos(Phi_i) kz2 = n2 * k0 * numpy.cos(Phi_t)
# p. 237 (section 6.4.1). We reproduce figures 6.16 and 6.17. import numpy, Berreman4x4 from Berreman4x4 import c, pi import matplotlib.pyplot as pyplot n_i = 1.0 # incident medium is air n_o = 2.0 # ordinary index of thin layer n_e = 2.5 # extraordinary index of thin layer ############################################################################## # Setting up the structure # Front half-space (air) air = Berreman4x4.IsotropicNonDispersiveMaterial(n_i) front = Berreman4x4.IsotropicHalfSpace(air) # Anisotropic substrate uniaxialMaterialRef = Berreman4x4.UniaxialNonDispersiveMaterial(n_o, n_e) back = Berreman4x4.HalfSpace() s = Berreman4x4.Structure(front, [], back) ############################################################################## # We reproduce figure 6.16 print("\nWe reproduce results from section 6.4.1 in " + "'Spectroscopic Ellipsometry',\nby H. Fujiwara.\n") print("*** Air / anisotropic sample ***") print("We reproduce figure 6.16, p. 238...") # Orientations of the anisotropic substrate
print("\n*** Air / anisotropic film / silicon substrate ***") filmMaterialRef = Berreman4x4.UniaxialNonDispersiveMaterial(n_o, n_e) R = Berreman4x4.rotation_Euler((Phi_E, Theta_E, 0)) filmMaterial = filmMaterialRef.rotated(R) print("\nPermittivity tensor of the anisotropic film (eq 6.63, p. 241):") print(filmMaterial.getTensor()) """ matrix([[ 4.5625, -0.5625, 0.7955], [-0.5625, 4.5625, -0.7955], [ 0.7955, -0.7955, 5.125 ]]) """ air = Berreman4x4.IsotropicNonDispersiveMaterial(n_i) front = Berreman4x4.IsotropicHalfSpace(air) # Front half-space Kx = front.get_Kx_from_Phi(Phi_i) print("\nValue of Kx: {:.4f}".format(Kx)) """ Kx = 0.9397 """ film = Berreman4x4.HomogeneousLayer(filmMaterial, d) Delta = film.getDeltaMatrix(Kx) print("\nDelta matrix:") print(Delta) """ matrix([[-0.1459, 0.1459, 0. , 0.8277], [ 0. , 0. , -1. , 0. ], [ 0.439 , -3.556 , 0. , -0.1459], [ 4.439 , -0.439 , 0. , -0.1459]])