Skip to content

Roadmap: architecture, ergonomics & physics-generality enhancements #90

Description

@garrekstemo

Overview

Tracking epic for enhancements that extend TransferMatrix.jl along two axes: (A) architecture & ergonomics and (B) physics generality & robustness. The physics items draw on the Mackay & Lakhtakia (2020) transfer-matrix treatment (The Transfer-Matrix Method in Electromagnetics and Optics, Springer, DOI 10.1007/978-3-031-02022-3), which covers homogeneous bianisotropic slabs, continuously varying (sculptured / chiral) media via a piecewise-uniform approximation, and corrugated interfaces — most of which the package does not yet implement.

Each linked issue is scoped to a single implementable step (one PR). Some have a dependency on a sibling — see the dependency graph below. Issues that are pure scoping/decision placeholders are marked.

History: the original #86 (matrix-exponential propagator + bianisotropy) and #87 (graded/chiral media) bundled multiple separable deliverables and were each split into four single-step issues. #86#86, #91, #92, #93. #87#87, #94, #95, #96.

A. Architecture & ergonomics

B. Physics generality & robustness

Constitutive-tensor generalizations (in the existing Berreman backend; independent, parallelizable):

Matrix-exponential propagator & bianisotropy:

Graded / chiral media (piecewise-uniform approximation):

Robustness & exploratory:

Dependency graph

#92  →  #93                         (exp-propagator → magnetoelectric coupling)
#87  →  #94  →  #96                 (GradedLayer → chiral preset → validation)
#87  →  #95                         (GradedLayer → refine_slices)
#84  ─────────→  #96                (circular basis also gates the chiral validation)

Everything else is independent. #86, #91, #92, #87, #88 can all proceed in parallel.

Suggested sequencing

  1. Add optional Unitful unit support via a dispatch seam #81 + Move RefractiveIndex.jl to a package extension (optional dependency) #82 — establish the ext/ infrastructure; Add optional Unitful unit support via a dispatch seam #81 is the highest value/lowest risk win.
  2. Add circular-polarization basis output to transfer() #84, Make Layer broadcast as a scalar (Base.broadcastable) #85 — quick, contained ergonomic wins. (Add circular-polarization basis output to transfer() #84 also unblocks Validate chiral circular-Bragg stopband against literature #96 later.)
  3. Add user-facing API for a full (non-symmetric / gyrotropic) dielectric tensor on a Layer #86, Generalize calculate_γ and dynamical_matrix to an anisotropic (3×3) μ tensor #91 — cheap constitutive-tensor generalizations inside the current backend; independently valuable, no propagator rewrite needed.
  4. Add GradedLayer type with piecewise-uniform expansion into homogeneous Layers #87GradedLayer expansion; then Add helicoidal/chiral preset constructor (plain fine-slicing, no Oseen) #94, Add nslices auto-refinement helper (refine_slices) #95 in parallel on top of it.
  5. Spike + implement a matrix-exponential layer propagator backend #92 — research spike; informs whether the exponential backend supersedes parts of the Berreman path. Activate magnetoelectric coupling (ρ1/ρ2) for bianisotropic media #93 follows if Spike + implement a matrix-exponential layer propagator backend #92 is promising.
  6. Add a scattering-matrix backend for numerical stability in thick/absorbing stacks #88 — S-matrix stability; most valuable once Add GradedLayer type with piecewise-uniform expansion into homogeneous Layers #87/Add helicoidal/chiral preset constructor (plain fine-slicing, no Oseen) #94 produce long layer stacks.
  7. Validate chiral circular-Bragg stopband against literature #96 (after Add helicoidal/chiral preset constructor (plain fine-slicing, no Oseen) #94 and Add circular-polarization basis output to transfer() #84), Add built-in dispersion models / materials (Drude, Lorentz) #83 (pending design decision), Investigate periodically corrugated (grating) interfaces (large / exploratory) #89 (scoping only) as capacity allows.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions