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
- 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.
- 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.
- 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.
- 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).
- Export the preset from
src/TransferMatrix.jl and add a docstring with a runnable example constructing a chiral film and calling transfer.
- 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.
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
GradedLayerpiecewise-uniform expansion issue. That issue introduces aGradedLayer(profile, thickness; nslices)whose profile may return the 6-tuple formz -> (nx, ny, nz, φ, θ, ψ), expanded intonsliceshomogeneousLayers at slice midpoints. Each slice maps to the existing rotated-anisotropic constructorLayer(nx, ny, nz, t; euler=(φ,θ,ψ))(src/layer.jl:93-97), whose Euler angles drive the dielectric-tensor rotation inlayer_matrices(src/matrix_constructors.jl:107-113, callingeuler_rotation_matrix/rotate_dielectric_tensoratsrc/matrix_constructors.jl:39-73). The ZYZ convention is documented atsrc/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
src/layer.jl, e.g.helicoidal(nx, ny, nz, pitch, thickness; nslices, handedness=:right, tilt=0.0)(name to be finalized), returning aGradedLayer.z:φ(z) = ±2π z / pitch(sign fromhandedness), withθ = tilt(column tilt for a chiral sculptured thin film;θ = π/2puts 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.pitchis thez-distance for a full 2π rotation; the number of structural periods isthickness / pitch). State the ZYZ Euler convention explicitly and cross-linksrc/matrix_constructors.jl:19-50.src/TransferMatrix.jland add a docstring with a runnable example constructing a chiral film and callingtransfer.test/(extend the graded-layer test file): the preset constructs, expands tonslicesslices, runs throughtransferreturning 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
helicoidal(...)preset constructs aGradedLayerwhose expansion has continuously twisting Eulerφacross slices.transfer/sweep_angleand returns finite R/T including cross-polarization terms.Caveats / risks
nslicesconvergence-control issue.References
src/matrix_constructors.jl:19-73(euler_rotation_matrix,rotate_dielectric_tensor) andsrc/layer.jl:93-97(rotated-anisotropicLayerconstructor).GradedLayerpiecewise-uniform expansion split issue.