Skip to content

Add helicoidal/chiral preset constructor (plain fine-slicing, no Oseen) #94

Description

@garrekstemo

Summary

Add a convenience constructor that builds a structurally chiral / helicoidal medium (a chiral sculptured thin film or a cholesteric-liquid-crystal-like stack) on top of the graded-layer expansion. The principal axes of a biaxial slab rotate continuously about the propagation direction with z, via an Euler twist φ(z) = 2π z / pitch. This issue uses plain fine slicing only — the Oseen transformation is explicitly deferred to a later refinement.

Context

Depends on the GradedLayer piecewise-uniform expansion issue. That issue introduces a GradedLayer(profile, thickness; nslices) whose profile may return the 6-tuple form z -> (nx, ny, nz, φ, θ, ψ), expanded into nslices homogeneous Layers at slice midpoints. Each slice maps to the existing rotated-anisotropic constructor Layer(nx, ny, nz, t; euler=(φ,θ,ψ)) (src/layer.jl:93-97), whose Euler angles drive the dielectric-tensor rotation in layer_matrices (src/matrix_constructors.jl:107-113, calling euler_rotation_matrix/rotate_dielectric_tensor at src/matrix_constructors.jl:39-73). The ZYZ convention is documented at src/matrix_constructors.jl:19-50 (φ is the first rotation about z).

A helicoidal medium is exactly this: a biaxial slab whose in-plane principal axes spin about z. With the graded-layer machinery in place, the only new thing needed is a thin preset that sets up the twisting profile and exposes physically meaningful parameters (pitch, handedness, the two/three principal indices).

Why

Structurally chiral films are the canonical demonstration of the transfer-matrix method applied to nonhomogeneous mediums and produce a characteristic circular-polarization Bragg stopband. Plain fine slicing of the continuous twist is the simplest, most general way to model them and requires no new core physics beyond the graded-layer expansion. A dedicated preset spares users from hand-writing the twist closure and fixes a clear convention for pitch and handedness.

Proposed approach

  1. Add a preset constructor in src/layer.jl, e.g. helicoidal(nx, ny, nz, pitch, thickness; nslices, handedness=:right, tilt=0.0) (name to be finalized), returning a GradedLayer.
  2. Build the profile closure so the in-plane principal axes rotate linearly with z: φ(z) = ±2π z / pitch (sign from handedness), with θ = tilt (column tilt for a chiral sculptured thin film; θ = π/2 puts the optic axis in the rotating plane for a cholesteric-like case) and ψ = 0. The profile returns (nx, ny, nz, φ(z), θ, ψ), matching the 6-tuple form the graded-layer expansion accepts.
  3. Define and document the handedness and pitch conventions unambiguously (e.g. pitch is the z-distance for a full 2π rotation; the number of structural periods is thickness / pitch). State the ZYZ Euler convention explicitly and cross-link src/matrix_constructors.jl:19-50.
  4. Do not implement the Oseen transformation. Add a docstring note that plain fine slicing is used and that the Oseen transformation is a possible future accuracy/efficiency refinement (tracked separately).
  5. Export the preset from src/TransferMatrix.jl and add a docstring with a runnable example constructing a chiral film and calling transfer.
  6. Add a smoke test in test/ (extend the graded-layer test file): the preset constructs, expands to nslices slices, runs through transfer returning finite R/T, and a zero-birefringence input (nx == ny == nz) reduces to a plain homogeneous slab (no polarization conversion). Rigorous stopband validation belongs to the separate validation issue.

Acceptance criteria

  • A helicoidal(...) preset constructs a GradedLayer whose expansion has continuously twisting Euler φ across slices.
  • It runs through transfer/sweep_angle and returns finite R/T including cross-polarization terms.
  • Pitch and handedness conventions are documented and exercised by a test (right- vs left-handed produce mirror-image cross-polarization behavior).
  • A degenerate isotropic input reduces to an ordinary homogeneous slab.
  • The preset is exported with a runnable docstring example; the docstring states Oseen is intentionally not used here.

Caveats / risks

  • Re-derive the twist/rotation setup and validate against Mackay & Lakhtakia; do not transcribe formulas from any third-party implementation. Sign and ordering conventions for the Euler twist and handedness are easy to get wrong and must be checked against the published math and a physical sanity test.
  • Plain fine slicing needs many slices per structural period for accuracy; quantitative convergence guidance is owned by the nslices convergence-control issue.
  • The medium must be an interior layer (the first/last layers are semi-infinite); inherit whatever placement validation the graded-layer issue establishes.

References

  • Mackay & Lakhtakia, The Transfer-Matrix Method in Electromagnetics and Optics (2020), DOI 10.1007/978-3-031-02022-3 — structurally chiral mediums, piecewise-uniform approximation, and the Oseen transformation (deferred here).
  • Lakhtakia, "Chiral sculptured thin films," Nature 384, 616 (1996): https://www.nature.com/articles/384616a0
  • Existing rotation machinery: src/matrix_constructors.jl:19-73 (euler_rotation_matrix, rotate_dielectric_tensor) and src/layer.jl:93-97 (rotated-anisotropic Layer constructor).
  • Depends on the GradedLayer piecewise-uniform expansion split issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency fileenhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions