Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Floquet orders: predict, classify, and check

Chapter 4 analytical notebook. Read the chapter, worked examples, and lab. The lab includes a browser explorer that runs directly on the published site.

This notebook computes allowed diffraction channels, analytical Fresnel power checks, and prescribed finite-array factors. It contains no patterned-device Maxwell solver and predicts no metasurface diffraction efficiency. All exterior indices are positive real numbers for homogeneous, isotropic, lossless media. Default lengths are in micrometers; angles are in degrees.

Restart the kernel and run all cells. Parameters are collected below. No external data, GPU, or network connection is needed during execution. For notebook sliders, install the book’s requirements-labs.txt and set ENABLE_WIDGETS=True; the reference saved outputs use False.

1. Parameters and environment

Python 3.12.1; NumPy 2.4.6; Matplotlib 3.11.1
Convention: exp(-i omega t), exp(i k.r), incidence from z<0; lengths in micrometers.
Evidence: analytical channels, Fresnel interfaces, and prescribed scalar array factors.

2. Define the channel calculation

The dimensionless tangential coordinate is

qm=nisin⁡θi+mλ0/Λ.q_m=n_i\sin\theta_i+m\lambda_0/\Lambda.

Compare ∣qm/no∣|q_m/n_o| with one. The positive outgoing-distance root is κ/k0=no2−qm2\kappa/k_0=\sqrt{n_o^2-q_m^2}, with a positive imaginary part for closed channels. Reflected waves use the opposite laboratory kzk_z sign because their outward direction points toward negative zz.

The open-order bounds come from solving −no<qm<no-n_o<q_m<n_o for the integer mm. We use a conservative enclosing interval plus closed neighbors. This avoids silently dropping orders when the period or index grows. The explicit enumeration guard raises an error for an unreasonable array size rather than exhausting memory.

Near cutoff, the state is a tolerance-based classification. Its reported ±90∘\pm90^\circ is the limiting grazing angle, not a finite-normal-power beam. Evanescent orders receive no real angle.

Transmission region open orders: [-1, 0, 1]
Loading...
Reflection region open orders: [-1, 0, 1]
All table angles are channel directions; no amplitude or efficiency has been assigned.

3. Check independent analytical cases

The checks below cover known order sets and angles, exact cutoff and both sides of it, the decaying outgoing branch, Bloch-phase equivalence, input validation, and agreement with a much wider brute-force integer window. The latter checks enumeration, not the correctness of the physical formula by itself.

The microwave case uses λ0=30\lambda_0=30 mm and Λ=25\Lambda=25 mm, corresponding to the rounded classroom convention c=3.00×108c=3.00\times10^8 m/s at 10 GHz. Converting both lengths to micrometers leaves their ratio unchanged.

Analytical channel, phase, branch, enumeration, and invalid-input checks passed.
{
  "air_open": [
    -1,
    0,
    1
  ],
  "glass_open": [
    -2,
    -1,
    0,
    1,
    2
  ],
  "primitive_open": [
    0
  ],
  "microwave_open": [
    -1,
    0
  ],
  "first_air_angle_deg": 31.10892251052852,
  "microwave_negative_angle_deg": -59.09051239302117,
  "microwave_phase_deg": 102.60604299770061,
  "cutoff_glass_deg": 25.94447977237001,
  "cutoff_sequence": [
    "closed",
    "grazing",
    "open"
  ],
  "closed_m2_amplitude_decay_length_um": 0.9475631587813499
}

4. Map channels across incidence and wavelength

The left plot compares output light cones at one reference condition. The right plot counts open transmitted orders across the editable sweep. Grazing channels are not counted as ordinary open channels. The integer range is chosen from the entire sweep’s bounds, not only its initial wavelength or angle.

The constant indices here are teaching assumptions. For a dispersive material, evaluate its actual index at every wavelength. A channel-count color map is not an efficiency spectrum.

<Figure size 1200x480 with 3 Axes>

5. Check power with a flat interface

For a nonmagnetic TE flat interface, let ζi=nicos⁡θi\zeta_i=n_i\cos\theta_i and ζt=nt2−(nisin⁡θi)2\zeta_t=\sqrt{n_t^2-(n_i\sin\theta_i)^2} on the outgoing branch. Then

r=ζi−ζtζi+ζt,t=2ζiζi+ζt,R=∣r∣2,T=Re⁡ζtζi∣t∣2.r=\frac{\zeta_i-\zeta_t}{\zeta_i+\zeta_t},\quad t=\frac{2\zeta_i}{\zeta_i+\zeta_t},\quad R=|r|^2,\quad T=\frac{\operatorname{Re}\zeta_t}{\zeta_i}|t|^2.

The normalization factor is essential. In total internal reflection, ζt\zeta_t is imaginary, so the outgoing evanescent field has zero normal transmitted power and R=1R=1. This analytical benchmark is independent of a future patterned-grating simulation. An artificial periodic box cannot make a flat interface excite non-specular orders.

Loading...
Maximum Fresnel power residual over 483 analytical checks: 4.441e-16

6. Finite arrays have finite angular widths

Use the directly evaluated scalar factor

AN(θ)=N−1∑j=0N−1exp⁡[ijΛ(kx,i−nok0sin⁡θ)].\mathcal A_N(\theta)=N^{-1}\sum_{j=0}^{N-1}\exp[ij\Lambda(k_{x,i}-n_o k_0\sin\theta)].

All source weights are prescribed and equal after accounting for incident phase. There is no element pattern, coupling calculation, or electromagnetic boundary solution. The vertical markers below are open Floquet directions from the same physical parameters. A normalized squared scalar sum is not a power-normalized diffraction efficiency.

<Figure size 1100x480 with 1 Axes>
Array-factor values equal one at every open Floquet direction, within floating-point tolerance.

7. Extend the channel test to a rectangular lattice

For periods Λx,Λy\Lambda_x,\Lambda_y and incident azimuth φi\varphi_i,

qx,m=nisin⁡θicos⁡φi+mλ0/Λx,q_{x,m}=n_i\sin\theta_i\cos\varphi_i+m\lambda_0/\Lambda_x,
qy,n=nisin⁡θisin⁡φi+nλ0/Λy.q_{y,n}=n_i\sin\theta_i\sin\varphi_i+n\lambda_0/\Lambda_y.

Classify qx,m2+qy,n2\sqrt{q_{x,m}^2+q_{y,n}^2} against non_o, not ∣qx∣|q_x| alone. A circular light cone replaces the one-dimensional interval. This small example enumerates all potentially open pairs inside conservative bounds. It does not simulate a two-dimensional grating.

Open rectangular-lattice orders in index 1.5: [(-1, 0), (0, -1), (0, 0), (0, 1)]
Loading...

8. Optional Jupyter sliders

The saved reference output below is a short status message. Set ENABLE_WIDGETS=True in the first cell, restart, and run the notebook in Jupyter to enable controls. The sliders reuse the same floquet_orders function. The public lab’s standalone HTML explorer provides immediate browser interaction without a Python kernel.

Reference execution complete. Set ENABLE_WIDGETS=True in Jupyter for sliders, or use the browser explorer in the lab.

9. Interpret the evidence

Report the open sets and signed angles for the optical and microwave cases; explain the cutoff tests, Fresnel normalization, and finite-array model limits. Include one proposed full-wave comparison using the lab’s interface or ridge-grating outline.

For extensions, vary the period or output index, implement a material-dispersion curve, or compare the scalar factors with a documented element pattern. Keep analytical, prescribed-model, full-wave, and measured results clearly identified. A successful channel calculation does not establish that a designed metasurface excites the desired channel efficiently.