Skip to content

Releases: cjcscheper/cjctmm

Release list

v0.2.0

Choose a tag to compare

@cjcscheper cjcscheper released this 20 Oct 14:51

Changed

  • Breaking: the sign convention of r_p. solve_tmm(..., polarization="p").r
    and fresnel_r(..., "p") now return r_p = (n1 cos2 - n2 cos1)/(n1 cos2 + n2 cos1),
    so r_p = r_s at normal incidence (air to glass: -0.2 instead of +0.2) and
    r_p -> +1 at grazing incidence. This is the opposite sign of Hecht / Born &
    Wolf; multiply by -1 to get the old values. t, R, T and A are unchanged.
    THEORY.md describes both conventions and why neither looks symmetric at both
    normal and grazing incidence.

Fixed

  • THEORY.md formulas render correctly on GitHub: they use GitHub's protected
    math syntax, so Markdown no longer eats underscores and backslashes.

v0.1.0

Choose a tag to compare

@cjcscheper cjcscheper released this 20 Oct 14:36

First release.

Added

  • solve_tmm(omega, layer_thickness, layer_n, ...): transfer-matrix method for
    planar multilayer stacks, s and p polarization at oblique incidence, absorbing
    layers and evanescent waves, returning a frozen Result (omega, r, t, R, T, A).
  • num_substrate_passes for time-gated measurements, with a UserWarning when
    front-layer echoes beyond the implied gate exceed substrate_pass_tolerance.
  • conjugate_model for the exp(+i omega t) time convention.
  • Single-interface functions: fresnel_r, fresnel_t, fresnel_R, fresnel_T,
    critical_angle, brewster_angle, admittance, snell_cos_theta,
    snell_theta, and propagation_phase.
  • Physical constants SPEED_OF_LIGHT, VACUUM_PERMEABILITY,
    VACUUM_PERMITTIVITY, VACUUM_IMPEDANCE.
  • THEORY.md (derivation, conventions, substrate-pass validity), examples
    (antireflection coating, Fabry–Pérot slab, angle dependence), tests and a
    GitHub Actions workflow.
  • examples extra installing cjcplot pinned to v0.2.0; the examples plot
    with cjcplot. pip install cjctmm itself stays numpy-only.