pyoptics.litho.rcwa¶
Rigorous coupled wave analysis (RCWA, Fourier modal method) of 1D lamellar gratings, for rigorous (thick) mask diffraction.
Geometry: the grating is periodic along x (period P) and invariant along y. A plane wave comes from the incidence medium (z < 0, refractive index n_in, the mask blank), passes the layers in the given order (each one lamellar: a background permittivity with rectangular segments of other permittivities) and leaves into the exit medium (n_out, air below the mask). Any direction of incidence is allowed (conical diffraction for k_y != 0).
Method: in each layer the tangential fields are expanded into the orders m = -M..M with the transverse wave numbers (normalized to k_0) K_x,m = k_x/k_0 + m*lambda/P and K_y = k_y/k_0. With z’ = k_0*z, h = Z_0*H and the convention exp(i(k.r - omega*t)), Maxwell’s equations become
d/dz' [E_x, E_y] = i*P [h_x, h_y], d/dz' [h_x, h_y] = i*Q [E_x, E_y],
P = [[K_x e^-1 K_y, I - K_x e^-1 K_x],
[K_y e^-1 K_y - I, -K_y e^-1 K_x ]],
Q = [[-K_x K_y, K_x^2 - [eps] ],
[[1/eps]^-1 - K_y^2, K_y K_x ]],
with the Toeplitz matrices [eps] and [1/eps] of the Fourier coefficients of the permittivity and its inverse and e = [eps]. The factorization follows Li’s rules (Laurent’s rule for E_y and E_z, which are continuous across the vertical interfaces, the inverse rule for E_x, whose D_x is), which makes TM and metallic gratings converge quickly. The modes of a layer vary as exp(+-i*gamma*z’) with gamma**2 the eigenvalues of P Q (Im(gamma) >= 0), eigenvectors W (E) and V = Q W/gamma (h). The layers are stacked with the enhanced transmittance matrix method (Moharam et al., JOSA A 12, 1077 (1995)), which is stable for thick and absorbing layers.
calibrate_boundary_layer() fits the boundary layer model of the thin and film masks (mask.BoundaryLayer) to the rigorous orders.
RigorousMask is a mask stack for LithoSimulation and hopkins.TCC that uses rcwa() for 1D layouts (lines along x or y): the absorber layers take the shape of the layout (features and field), and every source point gets its own diffracted orders, so the mask diffraction depends on the angle of incidence and the polarization as it should (Abbe). The Hopkins TCC uses the orders at normal incidence.
Results are Jones matrices of each transmitted and reflected order: they map
the tangential field (E_x, E_y) of the incident wave at the top of the
layers to the tangential field of the order at the bottom of the layers
(transmission) or at the top (reflection). Diffraction efficiencies are
Re(K_z,m)*|E_m|**2/(Re(K_z,inc)*|E_inc|**2) with the full fields (E_z from
transversality).
References¶
M. G. Moharam and T. K. Gaylord, “Rigorous coupled-wave analysis of planar-grating diffraction”, J. Opt. Soc. Am. 71, 811-818 (1981).
M. G. Moharam, D. A. Pommet, E. B. Grann and T. K. Gaylord, “Stable implementation of the rigorous coupled-wave analysis for surface-relief gratings: enhanced transmittance matrix approach”, J. Opt. Soc. Am. A 12, 1077-1086 (1995).
P. Lalanne and G. M. Morris, “Highly improved convergence of the coupled-wave method for TM polarization”, J. Opt. Soc. Am. A 13, 779-784 (1996).
L. Li, “Use of Fourier series in the analysis of discontinuous periodic structures”, J. Opt. Soc. Am. A 13, 1870-1876 (1996).
Classes
Result of calibrate_boundary_layer(): the boundary_layer, the stack with the boundary layer, the scanned widths, the relative rms residual of the order amplitudes for each width (TE and TM together) and the residual of the base stack without a boundary layer (residual_base). |
|
A lamellar layer. |
|
Result of rcwa(): orders m, K_x (shape (B, N)), K_y (B,), K_z in the incidence and exit media (B, N), and the Jones matrices of the reflected and transmitted orders, r and t of shape (B, N, 2, 2) (out component, in component; tangential E_x, E_y). |
|
Mask stack computed rigorously (RCWA) for 1D layouts. |
Functions
Fit a boundary layer model to rigorous mask diffraction. |
|
True for mask stacks that give the Jones matrices of the orders themselves (order_jones()). |
|
Diffraction of plane waves by a stack of lamellar layers. |
- class pyoptics.litho.rcwa.Layer(thickness, background, segments=())[source]¶
Bases:
objectA lamellar layer.
- Parameters:
- thicknessnumber
- backgroundcomplex
Refractive index n + i*k of the layer outside the segments.
- segmentssequence of (center, width, index), optional
Segments of other refractive indices (must not overlap, width < P).
- pyoptics.litho.rcwa.rcwa(period, layers, wavelength, k_x=0.0, k_y=0.0, n_in=1.0, n_out=1.0, n_orders=10, factorization='li')[source]¶
Diffraction of plane waves by a stack of lamellar layers.
- Parameters:
- periodnumber
- layerssequence of Layer
From the incidence side to the exit side.
- wavelengthnumber
- k_x, k_ynumbers or 1D arrays
Transverse wave vector components of the incident waves, in units of k_0 (n_in*sin(theta)*cos(phi), …); arrays are computed together.
- n_in, n_outnumbers
Refractive indices of the incidence and exit media.
- n_ordersint, optional
Orders -n_orders..n_orders are kept.
- factorization“li” or “laurent”, optional
Li’s rules (default) or Laurent’s rule for all components (slower convergence for TM, for comparison).
- Returns:
- RCWAResult
- class pyoptics.litho.rcwa.RCWAResult(m, Kx, Ky, Kz_in, Kz_out, r, t, n_in, n_out)[source]¶
Bases:
objectResult of rcwa(): orders m, K_x (shape (B, N)), K_y (B,), K_z in the incidence and exit media (B, N), and the Jones matrices of the reflected and transmitted orders, r and t of shape (B, N, 2, 2) (out component, in component; tangential E_x, E_y). B is the number of directions of incidence.
- class pyoptics.litho.rcwa.RigorousMask(layers, substrate_n=1.563, exit_n=1.0, n_orders=None, factorization='li', normalize=True, name=None)[source]¶
Bases:
objectMask stack computed rigorously (RCWA) for 1D layouts.
The absorber is a stack of layers on the mask blank, as for FilmMask, but patterned: in every layer the absorber regions of the layout (the features for tone=”clear”, the field for tone=”dark”) have the absorber material and the clear regions the clear material of that layer (the exit medium by default).
- Parameters:
- layerssequence of (n_absorber, thickness) or (n_absorber, n_clear, thickness)
Complex refractive indices and thicknesses (mask scale) from the blank outwards.
- substrate_nnumber, optional
Mask blank (fused silica at 193 nm: about 1.563).
- exit_nnumber, optional
Medium between mask and projection lens.
- n_ordersint, optional
Orders -n_orders..n_orders of the RCWA (default: about twice those that propagate in the blank, at least 10).
- factorization“li” or “laurent”, optional
- normalizebool, optional
Normalize to the clear area (the unpatterned stack of the clear materials) at the same angle of incidence, as FilmMask does, so that the open frame transmits 1.
- namestr, optional
- jones(s_x, s_y, NA, wavelength, magnification)[source]¶
Jones matrices of laterally infinite films.
For the open frame and as a film approximation: the clear area is the identity (normalized mask), the absorber that of the film stack; the patterned mask is
order_jones().- Parameters:
- s_x, s_ynumbers or arrays
Source point coordinates (sigma).
- NAnumber
Numerical aperture (image side).
- wavelengthnumber
Vacuum wavelength.
- magnificationnumber
Reduction ratio of the projector.
- Returns:
- J_clear, J_absorberarrays
Shape np.shape(s_x) + (2, 2); the absorber is NaN if the layers are not plain films.
- Raises:
- NotImplementedError
For normalize=False.
- order_jones(layout, m, n, s_x, s_y, NA, wavelength, magnification)[source]¶
Jones matrices of the diffraction orders of a 1D layout.
The results of the last calls are cached.
- Parameters:
- layoutMaskLayout
1D layout (lines along x or y).
- m, nint or arrays
Order indices in x and y.
- s_x, s_ynumbers or arrays
Source point coordinates (sigma).
- NAnumber
Numerical aperture (image side).
- wavelengthnumber
Vacuum wavelength.
- magnificationnumber
Reduction ratio of the projector.
- Returns:
- Jarray
Shape (len(s_x), 2, 2, len(n), len(m)).
- Raises:
- ValueError
For 2D layouts.
- pyoptics.litho.rcwa.is_rigorous(stack)[source]¶
True for mask stacks that give the Jones matrices of the orders themselves (order_jones()).
- class pyoptics.litho.rcwa.Calibration(boundary_layer, stack, widths, residual, residual_base)[source]¶
Bases:
objectResult of calibrate_boundary_layer(): the boundary_layer, the stack with the boundary layer, the scanned widths, the relative rms residual of the order amplitudes for each width (TE and TM together) and the residual of the base stack without a boundary layer (residual_base).
- pyoptics.litho.rcwa.calibrate_boundary_layer(rigorous, layouts, NA, wavelength, magnification=4.0, base=None, widths=None)[source]¶
Fit a boundary layer model to rigorous mask diffraction.
The boundary layer model (mask.BoundaryLayer) adds strips of width w with the transmissions t_TE (E along the edge) and t_TM (E across) at the edges of the absorber of a thin or film mask. For a given width the order amplitudes are linear in t_TE and t_TM, so these follow by linear least squares from the rigorous orders at normal incidence; the width is scanned.
- Parameters:
- rigorousRigorousMask
- layoutssequence of MaskLayout
1D layouts with lines along y (pitch_x), e.g. several pitches and CDs; all orders that can reach the pupil (
|m|*lambda/p <= 2*NA) are fitted.- NA, wavelength, magnificationnumbers
Of the projector.
- baseThinMask or FilmMask, optional
The stack that gets the boundary layer (default: the FilmMask of the layers of the rigorous mask).
- widthsarray, optional
Widths to scan (wafer scale; default 0.5 to 15 nm).
- Returns:
- Calibration