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

Calibration

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).

Layer

A lamellar layer.

RCWAResult

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).

RigorousMask

Mask stack computed rigorously (RCWA) for 1D layouts.

Functions

calibrate_boundary_layer

Fit a boundary layer model to rigorous mask diffraction.

is_rigorous

True for mask stacks that give the Jones matrices of the orders themselves (order_jones()).

rcwa

Diffraction of plane waves by a stack of lamellar layers.

class pyoptics.litho.rcwa.Layer(thickness, background, segments=())[source]

Bases: object

A 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).

coefficients(period, m, inverse=False)[source]

Fourier coefficients of the permittivity (or its inverse).

Parameters:
periodnumber

Period of the grating.

mint or array

Order indices.

inversebool, optional

Coefficients of 1/eps instead of eps.

Returns:
ccomplex array
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: object

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). B is the number of directions of incidence.

efficiencies(jones)[source]

Diffraction efficiencies (R, T) of all orders, shape (B, N) each, for the incident tangential field jones = (E_x, E_y) (lossless incidence and exit media).

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: object

Mask 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
film_mask()[source]

The FilmMask of the same layers (laterally infinite films).

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: object

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).

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